-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Santatic edited this page Jul 8, 2024
·
9 revisions
A lightweight trading framework compatible with Stock, Forex, Crypto... markets
Find more at Documentation
Warning
LetTrade is under heavy construction, features and functions may be changed.
Using Developing version to get latest update.
Stable version
pip install lettrade[all]
Developing version
pip install 'lettrade[all] @ git+https://git@github.com/AwesomeTrading/LetTrade.git@main'
import talib.abstract as ta
from lettrade import indicator as i
from lettrade.all import DataFeed, ForexBackTestAccount, Strategy, let_backtest
class SmaCross(Strategy):
ema1_window = 9
ema2_window = 21
def indicators(self, df: DataFeed):
df["ema1"] = ta.EMA(df, timeperiod=self.ema1_window)
df.i.ema(name="ema2", window=self.ema2_window, inplace=True, plot=True)
df["crossover"] = i.crossover(df.ema1, df.ema2)
df.i.crossunder("ema1", "ema2", inplace=True, plot=True)
def next(self, df: DataFeed):
if df.l.crossover[-1]:
self.positions_exit()
self.buy(size=0.1)
elif df.l.crossunder[-1]:
self.positions_exit()
self.sell(size=0.1)
def plot(self, df: DataFeed) -> dict:
from lettrade.plot.plotly import PlotColor, plot_line, plot_mark, plot_merge
plot_ema1 = plot_line(df["ema1"], dataframe=df, color="green")
plot_crossover = plot_mark(
df["close"],
filter=df["crossover"] >= 100,
dataframe=df,
name="crossover",
color=PlotColor.BLUE,
)
return plot_merge(plot_ema1, plot_crossover)
if __name__ == "__main__":
lt = let_backtest(
strategy=SmaCross,
datas="example/data/data/EURUSD_5m-0_1000.csv",
account=ForexBackTestAccount,
)
lt.run()
lt.plot()
# Strategy <class '__main__.SmaCross'>
Start 2024-05-13 21:15:00+00:00
End 2024-05-17 08:30:00+00:00
Duration 3 days 11:15:00
Start Balance 10000.0
Equity [$] 10003.16
Equity Peak [$] 10013.54
PL [$] 3.16
PL [%] 0.03
Buy & Hold PL [%] 0.63
Max. Drawdown [%] -0.5
Avg. Drawdown [%] -0.15
Max. Drawdown Duration 1 days 16:15:00
Avg. Drawdown Duration 0 days 12:30:00
# Positions 34
Win Rate [%] 0.38
Fee [$] -1.34
Best Trade [%] 29.36
Worst Trade [%] -18.14
SQN 0.07
Kelly Criterion 0.01392
Profit Factor 1.037781
More examples can be found in example/
python -m example.data.yfinance
python -m example.strategy.backtest_sma_cross
-
MetaTrader
: Support MetaTrader 5 Terminal trading -
CCXT
: [WIP] Support most of cryptocurrency exchange from CCXT library
Set up conda environment
conda create -y -n LetTrade python=3.12
conda activate LetTrade
pip install -r requirements-dev.txt