Интеграция с Jesse (Python)
Jesse — Python фреймворк для алготрейдинга с акцентом на простоту кода и качество бэктестинга. Особенность Jesse — подробные отчёты о бэктестах включая дневные P&L, метрики по отдельным сделкам, и встроенная защита от look-ahead bias.
Установка и создание проекта
pip install jesse
jesse make-project my-trading-strategy
cd my-trading-strategy
Написание стратегии
from jesse import research
from jesse.strategies import Strategy
import jesse.indicators as ta
class MACrossStrategy(Strategy):
@property
def fast_period(self) -> int:
return self.hp.get('fast_period', 9)
@property
def slow_period(self) -> int:
return self.hp.get('slow_period', 21)
def should_long(self) -> bool:
fast_ema = ta.ema(self.candles, self.fast_period)
slow_ema = ta.ema(self.candles, self.slow_period)
rsi = ta.rsi(self.candles, 14)
return fast_ema > slow_ema and rsi < 45
def should_short(self) -> bool:
return False # Только long-стратегия
def should_cancel_entry(self) -> bool:
return False
def go_long(self):
qty = self.capital * 0.95 / self.price
self.buy = qty, self.price # market order
def go_short(self):
pass
def update_position(self):
fast_ema = ta.ema(self.candles, self.fast_period)
slow_ema = ta.ema(self.candles, self.slow_period)
if fast_ema < slow_ema:
self.liquidate()
def hyperparameters(self) -> list:
return [
{'name': 'fast_period', 'type': int, 'min': 5, 'max': 20, 'default': 9},
{'name': 'slow_period', 'type': int, 'min': 15, 'max': 50, 'default': 21},
]
Бэктестинг через код
from jesse import research
# Загрузка данных
candles = research.get_candles(
exchange='Binance',
symbol='BTC-USDT',
timeframe='1h',
start_date='2023-01-01',
finish_date='2024-01-01',
)
# Запуск бэктеста
result = research.backtest(
config={
'starting_balance': 10_000,
'fee': 0.001,
'futures_leverage_mode': 'cross',
'futures_leverage': 1,
'exchange': 'Spot Binance',
},
routes=[
{'exchange': 'Spot Binance', 'strategy': 'MACrossStrategy', 'symbol': 'BTC-USDT', 'timeframe': '1h'},
],
extra_routes=[],
candles={'Spot Binance BTC-USDT 1h': candles},
)
# Просмотр результатов
print(result['metrics'])
Особенности Jesse
Встроенная защита от look-ahead: Jesse использует индекс -2 вместо -1 для текущего бара — self.candles[-1] это закрытый последний бар, а не текущий незакрытый.
Расчёт позиции через self.capital: автоматически учитывает текущий доступный капитал.
Multiple routes: одновременный бэктест нескольких стратегий на разных символах с учётом общего портфеля.
Результаты бэктеста включают: полный список сделок с entry/exit ценами, P&L каждой сделки, equity curve по дням, Sharpe, Sortino, Calmar, max drawdown, winning streak.
Jesse хорош для трейдеров, которым нужен чистый код без лишних абстракций и качественные отчёты по бэктестам. Меньше overhead чем Freqtrade для simple strategies.







