Интеграция с Freqtrade (Python)
Freqtrade — open source Python фреймворк для алгоритмической торговли с встроенным бэктестингом, оптимизацией и live trading. Активно развивается, имеет большое сообщество, хорошую документацию и нативную интеграцию с CCXT (150+ бирж).
Установка и структура проекта
pip install freqtrade
freqtrade create-userdir --userdir user_data
freqtrade new-strategy --strategy MyStrategy
Структура директории:
user_data/
strategies/ # ваши стратегии
backtesting_results/
hyperopt_results/
data/ # загруженные исторические данные
config.json
Написание стратегии
from freqtrade.strategy import IStrategy, IntParameter, DecimalParameter
import talib.abstract as ta
import pandas as pd
class EMARSIStrategy(IStrategy):
# Параметры для HyperOpt
ema_fast = IntParameter(5, 20, default=9, space="buy")
ema_slow = IntParameter(15, 50, default=21, space="buy")
rsi_oversold = IntParameter(20, 40, default=30, space="buy")
rsi_overbought = IntParameter(60, 80, default=70, space="sell")
stoploss = -0.10
trailing_stop = True
trailing_stop_positive = 0.02
timeframe = '1h'
def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe['ema_fast'] = ta.EMA(dataframe, timeperiod=self.ema_fast.value)
dataframe['ema_slow'] = ta.EMA(dataframe, timeperiod=self.ema_slow.value)
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe.loc[
(dataframe['ema_fast'] > dataframe['ema_slow']) &
(dataframe['rsi'] < self.rsi_oversold.value) &
(dataframe['volume'] > 0),
'enter_long'
] = 1
return dataframe
def populate_exit_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:
dataframe.loc[
(dataframe['ema_fast'] < dataframe['ema_slow']) |
(dataframe['rsi'] > self.rsi_overbought.value),
'exit_long'
] = 1
return dataframe
Загрузка данных и бэктестинг
# Загрузка исторических данных
freqtrade download-data --exchange binance --pairs BTC/USDT ETH/USDT --timeframes 1h 4h --days 365
# Бэктест
freqtrade backtesting \
--strategy EMARSIStrategy \
--config user_data/config.json \
--timerange 20230101-20240101 \
--pairs BTC/USDT ETH/USDT
HyperOpt — оптимизация параметров
# Оптимизация с 100 итерациями
freqtrade hyperopt \
--strategy EMARSIStrategy \
--hyperopt-loss SharpeHyperOptLoss \
--epochs 300 \
--spaces buy sell \
--config user_data/config.json
Freqtrade использует Optuna под капотом для Bayesian оптимизации. SharpeHyperOptLoss оптимизирует по Sharpe ratio, можно заменить на CalmarHyperOptLoss (Calmar ratio) или написать собственную функцию потерь.
Конфигурация для live trading
{
"max_open_trades": 5,
"stake_currency": "USDT",
"stake_amount": "unlimited",
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"dry_run": false,
"cancel_open_orders_on_exit": true,
"exchange": {
"name": "binance",
"key": "YOUR_API_KEY",
"secret": "YOUR_API_SECRET",
"ccxt_config": {"enableRateLimit": true},
"pair_whitelist": ["BTC/USDT", "ETH/USDT"],
"pair_blacklist": []
},
"telegram": {
"enabled": true,
"token": "BOT_TOKEN",
"chat_id": "CHAT_ID",
"notification_settings": {
"status": "on",
"warning": "on",
"startup": "on",
"entry": "on",
"exit": "on"
}
}
}
Freqtrade автоматически отправляет уведомления в Telegram: вход в позицию, выход, ежедневный P&L summary. Встроенный web UI позволяет мониторить торговлю через браузер.
FreqAI — машинное обучение
Freqtrade включает FreqAI — модуль ML-предсказаний с автоматическим feature engineering и continuous learning:
class FreqAIStrategy(IStrategy):
def feature_engineering_expand_all(self, dataframe, period, metadata, **kwargs):
dataframe["%-rsi-period"] = ta.RSI(dataframe, timeperiod=period)
dataframe["%-ema-period"] = ta.EMA(dataframe, timeperiod=period)
return dataframe
def set_freqai_targets(self, dataframe, metadata, **kwargs):
# Предсказываем доходность через 24 часа
dataframe["&-target"] = (
dataframe["close"].shift(-24) / dataframe["close"] - 1
).fillna(0)
return dataframe
Freqtrade — один из лучших вариантов для быстрого старта в algo trading. Активное сообщество, Discord с тысячами участников, постоянные обновления.







