Python для крипторынка: автоматизация торговли и анализ данных

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Трейдеры, заинтересованные в автоматизации торговли криптовалютами
  • Программисты и разработчики, желающие углубить знания 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:

Python
Скопировать код
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 для получения обновлений цен в реальном времени:

Python
Скопировать код
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:

Python
Скопировать код
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 с его экосистемой для анализа данных буквально превратился в наше конкурентное преимущество.

Для более продвинутого анализа можно использовать модели машинного обучения, которые способны выявлять скрытые закономерности в данных. Например, можно создать модель для предсказания волатильности или направления цены:

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 — взаимодействие с биржей для получения данных и размещения ордеров
  • Система анализа — обработка рыночных данных и генерация сигналов на основе выбранной стратегии
  • Механизм принятия решений — алгоритм, определяющий когда и как совершать сделки
  • Управление рисками — определение размеров позиций и уровней стоп-лосс
  • Логирование и уведомления — запись действий бота и отправка уведомлений о важных событиях
  • Бэктестинг — проверка стратегии на исторических данных

Пример простого торгового бота, реализующего стратегию пересечения скользящих средних:

Python
Скопировать код
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:

Python
Скопировать код
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:

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 предоставляет необходимый инструментарий. Освоив представленные в этой статье техники, вы сможете обойти большинство ограничений традиционных подходов и получить конкурентное преимущество на быстро развивающемся рынке криптовалют.

Загрузка...