Python для крипторынка: автоматизация торговли и анализ данных
Для кого эта статья:
- Трейдеры, заинтересованные в автоматизации торговли криптовалютами
- Программисты и разработчики, желающие углубить знания Python в контексте финтех и блокчейна
Студенты и профессионалы, стремящиеся освоить навыки работы с криптовалютами и алгоритмической торговлей
Python давно стал мастер-ключом к миру криптовалют. Когда рынок движется со скоростью миллисекунд, ручной анализ превращается в археологические раскопки — вы всегда опаздываете. Автоматизация через Python не просто удобство, а необходимое конкурентное преимущество. Трейдеры, обладающие навыками программирования, получают доступ к скоростям и возможностям, недоступным остальным участникам рынка. Эта статья — ваша дорожная карта по интеграции Python-разработки в крипто-пространство. 🐍💰
Хотите превратить теоретические знания Python в реальные навыки для работы с криптовалютами? Обучение Python-разработке от Skypro даст вам прочную основу для создания торговых ботов, анализа крипторынков и блокчейн-приложений. Курс построен на практических задачах из реальной индустрии — вы не просто изучите синтаксис, а создадите собственные рабочие проекты, включая крипто-инструменты. Инвестиция в обучение окупится с первого автоматизированного трейда!
Python для крипторынка: инструменты и возможности
Python превратился в стандарт де-факто для финтех-индустрии и криптовалютных проектов благодаря своей гибкости и мощной экосистеме библиотек. Этот язык программирования позволяет решать практически любые задачи в крипто-пространстве: от автоматизации торговли до анализа блокчейн-данных и создания собственных криптовалют. 🚀
Михаил Орлов, ведущий Python-разработчик криптопроектов
Когда я начинал работать с криптовалютами в 2017 году, приходилось использовать набор разрозненных инструментов и самостоятельно писать коннекторы к биржам. Помню, как мой первый торговый бот на Python упустил возможность заработать на резком росте Bitcoin в декабре того года из-за банальной ошибки в обработке API-вызовов. Тогда я решил создать собственную библиотеку обертку для работы с несколькими биржами одновременно.
Сегодня ситуация радикально изменилась. Появились стандартизированные библиотеки вроде CCXT, предоставляющие унифицированный интерфейс для работы с сотнями бирж. За пять лет мои Python-скрипты эволюционировали от простых арбитражных ботов до сложных систем, анализирующих настроения рынка через Natural Language Processing и предсказывающих движения цен с помощью машинного обучения. Python позволил масштабировать мои технические возможности вместе с ростом крипторынка.
Ключевые библиотеки Python для работы с криптовалютами:
| Библиотека | Применение | Особенности |
|---|---|---|
| CCXT | Унифицированный доступ к API криптобирж | Поддержка 100+ бирж, стандартизированные методы |
| Web3.py | Взаимодействие с Ethereum-блокчейном | Создание и управление смарт-контрактами, кошельками |
| python-binance | Работа с Binance API | Полный функционал биржи, включая фьючерсы и маржинальную торговлю |
| TA-Lib | Технический анализ криптовалютных пар | 150+ индикаторов для анализа рынка |
| Pandas | Обработка и анализ финансовых данных | Мощные инструменты для манипуляции временными рядами |
Преимущества использования Python для крипто-проектов:
- Низкий порог входа — синтаксис Python интуитивно понятен даже непрограммистам
- Богатая экосистема — тысячи готовых библиотек для криптовалютных задач
- Мощные инструменты анализа данных — NumPy, Pandas, SciPy для работы с большими объемами данных
- Масштабируемость — от простых скриптов до высоконагруженных систем
- Активное сообщество — легко найти решения типовых проблем и получить поддержку

Работа с API криптобирж через библиотеки Python
API (Application Programming Interface) криптобирж — это ворота в мир алгоритмической торговли и автоматизации. Python предоставляет мощные инструменты для взаимодействия практически с любой криптобиржей. Рассмотрим ключевые библиотеки и подходы к работе с API. 🔌
Библиотека CCXT (CryptoCurrency eXchange Trading Library) стала де-факто стандартом для взаимодействия с API криптобирж через Python. Она обеспечивает единый интерфейс для работы с более чем 100 биржами, избавляя разработчиков от необходимости изучать особенности каждой платформы.
Пример получения данных о балансе с использованием CCXT:
import ccxt
# Инициализация объекта биржи
exchange = ccxt.binance({
'apiKey': 'ВАШ_API_КЛЮЧ',
'secret': 'ВАШ_СЕКРЕТНЫЙ_КЛЮЧ',
})
# Получение баланса
balance = exchange.fetch_balance()
print(balance['BTC'])
Для работы с конкретными биржами существуют специализированные библиотеки, предоставляющие расширенные возможности:
| Биржа | Библиотека | Скорость обновления (запросов/с) | Поддержка WebSocket |
|---|---|---|---|
| Binance | python-binance | 1200 | Да |
| Coinbase Pro | cbpro | 10 | Да |
| Kraken | krakenex | 60 | Ограниченная |
| Bitfinex | bitfinex-api-py | 90 | Да |
| Bitmex | bitmex | 500 | Да |
Основные типы API-вызовов при работе с криптобиржами:
- Публичные API — доступ к рыночным данным без аутентификации (котировки, ордербук, история сделок)
- Приватные API — требуют ключей API для доступа к пользовательским данным и торговым операциям
- WebSocket API — потоковая передача данных для получения обновлений в реальном времени
Пример работы с WebSocket для получения обновлений цен в реальном времени:
from binance.websocket.spot.websocket_client import SpotWebsocketClient
def message_handler(message):
print(message)
ws_client = SpotWebsocketClient()
ws_client.start()
# Подписка на канал котировок BTC/USDT
ws_client.ticker(symbol="btcusdt", callback=message_handler)
# Держим соединение активным
import time
time.sleep(10)
ws_client.stop()
При работе с API криптобирж следует помнить о нескольких критических моментах:
- Лимиты запросов — большинство бирж ограничивает количество API-запросов в единицу времени
- Безопасность — никогда не публикуйте ваши API-ключи, используйте переменные окружения или файлы конфигурации с правильными разрешениями
- Обработка ошибок — рынки криптовалют волатильны, а серверы бирж могут быть перегружены в моменты высокой активности
- Тестирование — большинство бирж предлагают тестовую среду (sandbox) для безопасной отладки ваших приложений
Анализ рынка криптовалют: Python-решения для трейдеров
Python предоставляет богатый инструментарий для анализа криптовалютного рынка, от классического технического анализа до продвинутых методов машинного обучения и обработки естественного языка. Эти инструменты позволяют трейдерам принимать более обоснованные решения и автоматизировать стратегии торговли. 📊
Ключевые Python-библиотеки для анализа крипторынка:
- Pandas — манипуляции с временными рядами, ресемплинг и агрегация данных
- TA-Lib — расчет технических индикаторов (RSI, MACD, Bollinger Bands и др.)
- NumPy — выполнение сложных математических операций с высокой производительностью
- Matplotlib/Plotly — визуализация данных, построение графиков и индикаторов
- Scikit-learn/TensorFlow — построение предиктивных моделей на основе исторических данных
- NLTK/TextBlob — анализ настроений на основе новостей и социальных медиа
Пример базового технического анализа с использованием TA-Lib и Pandas:
import pandas as pd
import talib
import matplotlib.pyplot as plt
import ccxt
# Получение исторических данных
exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv('BTC/USDT', '1h', limit=500)
# Преобразование в DataFrame
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
# Расчет индикаторов
df['sma_20'] = talib.SMA(df['close'].values, timeperiod=20)
df['sma_50'] = talib.SMA(df['close'].values, timeperiod=50)
df['rsi'] = talib.RSI(df['close'].values, timeperiod=14)
# Определение сигналов
df['signal'] = 0
df.loc[df['sma_20'] > df['sma_50'], 'signal'] = 1
df.loc[df['sma_20'] < df['sma_50'], 'signal'] = -1
# Визуализация
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(df.index, df['close'], label='Close Price')
plt.plot(df.index, df['sma_20'], label='SMA 20')
plt.plot(df.index, df['sma_50'], label='SMA 50')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(df.index, df['rsi'], label='RSI')
plt.axhline(y=70, color='r', linestyle='--')
plt.axhline(y=30, color='g', linestyle='--')
plt.legend()
plt.tight_layout()
plt.show()
Александр Волков, квантовый трейдер и аналитик
В 2020 году я работал с хедж-фондом, который хотел диверсифицироваться в криптовалюты. Меня попросили разработать модель для прогнозирования движений Bitcoin на основе исторических данных. Традиционный технический анализ в условиях высокой волатильности крипторынка давал слишком много ложных сигналов.
Я создал Python-скрипт, который анализировал не только ценовые данные, но и метрики блокчейна — количество активных адресов, объемы транзакций, активность майнеров. Самым сложным было синхронизировать различные источники данных и очистить их от выбросов. С помощью библиотек Pandas для манипуляции данными и Scikit-learn для машинного обучения мы построили ансамбль моделей, который научился распознавать паттерны перед значительными движениями цены.
Решающим фактором стало добавление анализа настроений из Twitter и Reddit через NLTK. Модель начала показывать удивительную точность в предсказании краткосрочных движений. За первый квартал использования наша стратегия показала ROI в 41%, опередив стандартную стратегию удержания на 17%. Python с его экосистемой для анализа данных буквально превратился в наше конкурентное преимущество.
Для более продвинутого анализа можно использовать модели машинного обучения, которые способны выявлять скрытые закономерности в данных. Например, можно создать модель для предсказания волатильности или направления цены:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Подготовка признаков
df['return'] = df['close'].pct_change()
df['target'] = (df['return'].shift(-1) > 0).astype(int) # 1, если цена вырастет, 0 — если упадет
# Добавление лагов и технических индикаторов в качестве признаков
for i in range(1, 6):
df[f'return_lag_{i}'] = df['return'].shift(i)
df[f'volume_lag_{i}'] = df['volume'].shift(i)
df['volatility'] = df['close'].rolling(window=20).std()
df.dropna(inplace=True)
# Разделение на признаки и целевую переменную
features = ['return', 'volume', 'rsi', 'volatility'] + [f'return_lag_{i}' for i in range(1, 6)] + [f'volume_lag_{i}' for i in range(1, 6)]
X = df[features]
y = df['target']
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=False)
# Обучение модели
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Оценка точности
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f'Точность модели: {accuracy:.2f}')
# Важность признаков
feature_importance = pd.DataFrame({
'feature': features,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
print(feature_importance)
Популярные стратегии анализа криптовалютного рынка с использованием Python:
- Анализ настроений — сбор и анализ публикаций из социальных сетей и новостных ресурсов для оценки настроений рынка
- Арбитраж — выявление ценовых расхождений между разными биржами для извлечения прибыли
- Корреляционный анализ — изучение взаимосвязей между различными криптовалютами и традиционными активами
- Анализ блокчейн-метрик — изучение данных блокчейна (количество транзакций, активные адреса и т.д.) для прогнозирования ценовых движений
- Статистический арбитраж — использование статистических методов для поиска временных аномалий в ценообразовании
Автоматизация торговли криптовалютами на Python
Автоматизация торговли криптовалютами — мощный инструмент, позволяющий исключить эмоциональную составляющую и реализовать сложные торговые стратегии с высокой точностью исполнения. Python предоставляет все необходимые компоненты для создания торговых ботов любой сложности. 🤖
Ключевые компоненты торгового бота на Python:
- Модуль работы с API — взаимодействие с биржей для получения данных и размещения ордеров
- Система анализа — обработка рыночных данных и генерация сигналов на основе выбранной стратегии
- Механизм принятия решений — алгоритм, определяющий когда и как совершать сделки
- Управление рисками — определение размеров позиций и уровней стоп-лосс
- Логирование и уведомления — запись действий бота и отправка уведомлений о важных событиях
- Бэктестинг — проверка стратегии на исторических данных
Пример простого торгового бота, реализующего стратегию пересечения скользящих средних:
import ccxt
import pandas as pd
import numpy as np
import time
from datetime import datetime
import logging
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s – %(name)s – %(levelname)s – %(message)s',
filename='trading_bot.log'
)
logger = logging.getLogger('TradingBot')
# Конфигурация бота
config = {
'exchange': 'binance',
'symbol': 'BTC/USDT',
'apiKey': 'ВАШ_API_КЛЮЧ',
'secret': 'ВАШ_СЕКРЕТНЫЙ_КЛЮЧ',
'timeframe': '15m',
'fast_period': 10,
'slow_period': 30,
'amount_to_trade': 0.001, # BTC
'max_positions': 1
}
# Инициализация биржи
exchange = getattr(ccxt, config['exchange'])({
'apiKey': config['apiKey'],
'secret': config['secret'],
'enableRateLimit': True
})
def get_historical_data():
"""Получение исторических данных для анализа"""
ohlcv = exchange.fetch_ohlcv(
config['symbol'],
config['timeframe'],
limit=100 # Достаточно для расчета индикаторов
)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
# Расчет скользящих средних
df['fast_ma'] = df['close'].rolling(window=config['fast_period']).mean()
df['slow_ma'] = df['close'].rolling(window=config['slow_period']).mean()
return df
def generate_signals(df):
"""Генерация торговых сигналов"""
df['signal'] = 0
# Сигнал на покупку: быстрая MA пересекает медленную MA снизу вверх
df.loc[(df['fast_ma'] > df['slow_ma']) & (df['fast_ma'].shift(1) <= df['slow_ma'].shift(1)), 'signal'] = 1
# Сигнал на продажу: быстрая MA пересекает медленную MA сверху вниз
df.loc[(df['fast_ma'] < df['slow_ma']) & (df['fast_ma'].shift(1) >= df['slow_ma'].shift(1)), 'signal'] = -1
return df
def check_positions():
"""Проверка текущих позиций"""
balance = exchange.fetch_balance()
return float(balance['BTC']['free'])
def execute_trade(signal):
"""Исполнение торговой операции"""
current_positions = check_positions()
if signal == 1 and current_positions < config['max_positions'] * config['amount_to_trade']:
# Размещение ордера на покупку
try:
order = exchange.create_market_buy_order(
config['symbol'],
config['amount_to_trade']
)
logger.info(f"BUY ORDER: {order}")
return True
except Exception as e:
logger.error(f"Error creating buy order: {str(e)}")
return False
elif signal == -1 and current_positions > 0:
# Размещение ордера на продажу
try:
order = exchange.create_market_sell_order(
config['symbol'],
min(current_positions, config['amount_to_trade'])
)
logger.info(f"SELL ORDER: {order}")
return True
except Exception as e:
logger.error(f"Error creating sell order: {str(e)}")
return False
return False
def trading_loop():
"""Основной цикл торгового бота"""
logger.info("Starting trading bot...")
while True:
try:
# Получение и анализ данных
df = get_historical_data()
df = generate_signals(df)
# Получение последнего сигнала
latest_signal = df['signal'].iloc[-1]
# Исполнение сигнала, если он есть
if latest_signal != 0:
success = execute_trade(latest_signal)
if success:
logger.info(f"Successfully executed signal: {latest_signal}")
else:
logger.warning(f"Failed to execute signal: {latest_signal}")
# Ожидание до следующей проверки
time.sleep(60) # Проверка каждую минуту
except Exception as e:
logger.error(f"Error in trading loop: {str(e)}")
time.sleep(300) # При ошибке ждем 5 минут перед повторной попыткой
if __name__ == "__main__":
trading_loop()
Сравнение подходов к автоматической торговле криптовалютами:
| Подход | Преимущества | Недостатки | Сложность реализации |
|---|---|---|---|
| Скрипты на основе правил | Простота реализации, понятная логика | Ограниченная гибкость, требуется ручная оптимизация | Низкая |
| Торговля на основе ML-моделей | Способность выявлять сложные паттерны, адаптивность | Риск переобучения, необходимость регулярного обновления | Высокая |
| Арбитражные боты | Потенциально безрисковая прибыль, защита от тренда рынка | Высокая конкуренция, требования к скорости исполнения | Средняя |
| Маркет-мейкинг | Стабильная прибыль от спреда, ликвидность | Сложная логика, риск при высокой волатильности | Очень высокая |
| Сентимент-анализ | Учет факторов, неотраженных в цене | Сложность обработки текстовых данных, много шума | Высокая |
Ключевые рекомендации для разработки торговых ботов на Python:
- Начинайте с простых стратегий — реализуйте базовые алгоритмы, прежде чем переходить к сложным
- Тщательно тестируйте — всегда проводите бэктестинг на исторических данных и тестирование в песочнице перед запуском с реальными средствами
- Управляйте рисками — встройте в бота механизмы ограничения убытков и определения размера позиций
- Мониторинг производительности — создайте дашборд для отслеживания показателей работы бота
- Обеспечьте безопасность — храните API-ключи в безопасном месте и ограничьте их права только необходимыми операциями
- Подготовьтесь к техническим сбоям — реализуйте надежную обработку ошибок и механизмы восстановления
Создание блокчейн-приложений с использованием Python
Python — мощный инструмент для разработки блокчейн-приложений и взаимодействия со смарт-контрактами. Благодаря специализированным библиотекам, таким как Web3.py, разработчики могут создавать децентрализованные приложения (DApps), выпускать токены и анализировать данные блокчейна без необходимости глубокого знания низкоуровневых аспектов технологии. 🔗
Основные библиотеки Python для работы с блокчейном:
- Web3.py — основной инструмент для взаимодействия с Ethereum-совместимыми блокчейнами
- Brownie — фреймворк для тестирования, развертывания и взаимодействия со смарт-контрактами
- py-solc-x — обертка для компилятора Solidity
- eth-account — управление криптовалютными аккаунтами и подписание транзакций
- eth-tester — локальное тестовое окружение для Ethereum
- HDWallet — создание и управление HD-кошельками
Пример создания и взаимодействия со смарт-контрактом с помощью Web3.py:
from web3 import Web3
import json
from solcx import compile_standard, install_solc
# Установка компилятора Solidity
install_solc('0.8.0')
# Смарт-контракт на Solidity
contract_source = '''
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleToken {
string public name = "SimpleToken";
string public symbol = "STK";
uint256 public totalSupply = 1000000;
mapping(address => uint256) public balanceOf;
event Transfer(address indexed from, address indexed to, uint256 value);
constructor() {
balanceOf[msg.sender] = totalSupply;
}
function transfer(address to, uint256 value) public returns (bool success) {
require(balanceOf[msg.sender] >= value, "Insufficient balance");
balanceOf[msg.sender] -= value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return true;
}
}
'''
# Компиляция смарт-контракта
compiled_sol = compile_standard(
{
"language": "Solidity",
"sources": {"SimpleToken.sol": {"content": contract_source}},
"settings": {
"outputSelection": {
"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}
}
},
},
solc_version="0.8.0",
)
# Получение байткода и ABI контракта
contract_bytecode = compiled_sol["contracts"]["SimpleToken.sol"]["SimpleToken"]["evm"]["bytecode"]["object"]
contract_abi = compiled_sol["contracts"]["SimpleToken.sol"]["SimpleToken"]["abi"]
# Подключение к блокчейну (локальный Ganache для тестирования)
w3 = Web3(Web3.HTTPProvider("http://127.0.0.1:8545"))
# Аккаунт для развертывания
deployer_account = w3.eth.accounts[0]
w3.eth.default_account = deployer_account
# Создание контракта
SimpleToken = w3.eth.contract(abi=contract_abi, bytecode=contract_bytecode)
# Развертывание контракта
tx_hash = SimpleToken.constructor().transact()
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
# Получение адреса развернутого контракта
contract_address = tx_receipt.contractAddress
print(f"Контракт развернут по адресу: {contract_address}")
# Создание экземпляра контракта для взаимодействия
token = w3.eth.contract(address=contract_address, abi=contract_abi)
# Проверка баланса владельца
owner_balance = token.functions.balanceOf(deployer_account).call()
print(f"Баланс владельца: {owner_balance} STK")
# Перевод токенов
receiver = w3.eth.accounts[1]
transfer_amount = 1000
tx_hash = token.functions.transfer(receiver, transfer_amount).transact()
tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
# Проверка баланса после перевода
owner_balance = token.functions.balanceOf(deployer_account).call()
receiver_balance = token.functions.balanceOf(receiver).call()
print(f"Баланс владельца после перевода: {owner_balance} STK")
print(f"Баланс получателя после перевода: {receiver_balance} STK")
Типы блокчейн-приложений, которые можно создать с помощью Python:
- Кошельки — создание и управление криптовалютными кошельками для различных блокчейнов
- Токены — выпуск и управление собственными токенами стандартов ERC-20, ERC-721 (NFT) и других
- DEX — интерфейсы для децентрализованных бирж и автоматизация торговли на них
- DeFi-приложения — взаимодействие с протоколами децентрализованных финансов
- Аналитические инструменты — сбор и анализ данных блокчейна, визуализация графов транзакций
- Блокчейн-мониторы — отслеживание состояния блокчейна, транзакций и смарт-контрактов
Пример создания простого блокчейна на Python:
import hashlib
import json
import time
from typing import List, Dict, Any
class Block:
def __init__(self, index: int, transactions: List[Dict[str, Any]], timestamp: float, previous_hash: str):
self.index = index
self.transactions = transactions
self.timestamp = timestamp
self.previous_hash = previous_hash
self.nonce = 0
self.hash = self.calculate_hash()
def calculate_hash(self) -> str:
"""Вычисляет хеш блока."""
block_string = json.dumps({
"index": self.index,
"transactions": self.transactions,
"timestamp": self.timestamp,
"previous_hash": self.previous_hash,
"nonce": self.nonce
}, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def mine_block(self, difficulty: int) -> None:
"""Майнинг блока: поиск хеша, начинающегося с заданного числа нулей."""
target = "0" * difficulty
while self.hash[:difficulty] != target:
self.nonce += 1
self.hash = self.calculate_hash()
print(f"Block mined: {self.hash}")
class Blockchain:
def __init__(self, difficulty: int = 4):
self.chain: List[Block] = []
self.pending_transactions: List[Dict[str, Any]] = []
self.difficulty = difficulty
self.mining_reward = 100
# Создание генезис-блока
self.create_genesis_block()
def create_genesis_block(self) -> None:
"""Создает первый блок в цепи."""
genesis_block = Block(0, [], time.time(), "0")
genesis_block.hash = genesis_block.calculate_hash()
self.chain.append(genesis_block)
def get_latest_block(self) -> Block:
"""Возвращает последний блок в цепи."""
return self.chain[-1]
def mine_pending_transactions(self, miner_address: str) -> None:
"""Создает новый блок из ожидающих транзакций и добавляет его в цепь."""
# Добавление вознаграждения майнеру
self.pending_transactions.append({
"sender": "system",
"recipient": miner_address,
"amount": self.mining_reward
})
# Создание нового блока
block = Block(
len(self.chain),
self.pending_transactions,
time.time(),
self.get_latest_block().hash
)
# Майнинг блока
block.mine_block(self.difficulty)
# Добавление блока в цепь
self.chain.append(block)
# Очистка ожидающих транзакций
self.pending_transactions = []
def create_transaction(self, sender: str, recipient: str, amount: float) -> None:
"""Добавляет транзакцию в список ожидающих."""
self.pending_transactions.append({
"sender": sender,
"recipient": recipient,
"amount": amount
})
def get_balance(self, address: str) -> float:
"""Вычисляет баланс адреса на основе истории транзакций."""
balance = 0
for block in self.chain:
for transaction in block.transactions:
if transaction["sender"] == address:
balance -= transaction["amount"]
if transaction["recipient"] == address:
balance += transaction["amount"]
return balance
def is_chain_valid(self) -> bool:
"""Проверяет целостность всей цепи блоков."""
for i in range(1, len(self.chain)):
current_block = self.chain[i]
previous_block = self.chain[i – 1]
# Проверка хеша текущего блока
if current_block.hash != current_block.calculate_hash():
return False
# Проверка ссылки на хеш предыдущего блока
if current_block.previous_hash != previous_block.hash:
return False
return True
# Пример использования
if __name__ == "__main__":
# Создание блокчейна
my_blockchain = Blockchain(difficulty=4)
print("Майнинг первого блока...")
my_blockchain.mine_pending_transactions("miner-address-1")
# Создание нескольких транзакций
my_blockchain.create_transaction("address-1", "address-2", 50)
my_blockchain.create_transaction("address-2", "address-1", 20)
print("Майнинг второго блока...")
my_blockchain.mine_pending_transactions("miner-address-1")
# Проверка баланса майнера
print(f"Баланс майнера: {my_blockchain.get_balance('miner-address-1')}")
# Проверка целостности цепи
print(f"Блокчейн валиден: {my_blockchain.is_chain_valid()}")
# Вывод информации о цепи
for block in my_blockchain.chain:
print(f"Блок #{block.index} | Хеш: {block.hash} | Транзакций: {len(block.transactions)}")
Python открывает широкие возможности для работы с криптовалютами — от простой автоматизации торговли до разработки собственных блокчейн-проектов. Комбинация готовых библиотек и гибкость языка позволяют быстро воплощать сложные идеи в рабочие прототипы и масштабировать их до промышленных решений. Независимо от ваших целей — профессиональный трейдинг, аналитика крипторынков или создание новых блокчейн-продуктов — Python предоставляет необходимый инструментарий. Освоив представленные в этой статье техники, вы сможете обойти большинство ограничений традиционных подходов и получить конкурентное преимущество на быстро развивающемся рынке криптовалют.