MetaTrader exchange¤
Installation¤
MetaTrader 5¤
Python¤
pip install lettrade[exchange-metatrader]
Default config¤
Example .env
file
MT5_LOGIN=123123123
MT5_PASSWORD=qweqweqwe
MT5_SERVER=RoboForex-Demo
MT5_WINE=WINEPREFIX=$HOME/.mt5 python -m mt5linux "$HOME/.mt5/dosdevices/c:/users/$USER/AppData/Local/Programs/Python/Python310-32/python.exe"
from lettrade.exchange.metatrader import let_metatrader
lt = let_metatrader(
strategy=SmaCross,
datas=[("EURUSD", "1m")],
mt5_login=int(os.environ["MT5_LOGIN"]),
mt5_password=os.environ["MT5_PASSWORD"],
mt5_server=os.environ["MT5_SERVER"],
mt5_wine=os.getenv("MT5_WINE", None),
)
Example¤
import os
import talib.abstract as ta
from dotenv import load_dotenv
import example.logger
from lettrade import DataFeed, Strategy
from lettrade.exchange.metatrader import let_metatrader
load_dotenv()
class SmaCross(Strategy):
ema1_window = 9
ema2_window = 21
def indicators(self, df: DataFeed):
df["ema1"] = ta.EMA(df, timeperiod=self.ema1_window)
df["ema2"] = ta.EMA(df, timeperiod=self.ema2_window)
df["signal_ema_crossover"] = df.i.crossover(df.ema1, df.ema2)
df["signal_ema_crossunder"] = df.i.crossunder(df.ema1, df.ema2)
return df
def next(self, df: DataFeed):
if len(self.orders) > 0 or len(self.positions) > 0:
return
if df.l.signal_ema_crossover[-1]:
price = self.data.l.close[-1]
self.buy(size=0.1, sl=price - 0.01, tp=price + 0.01)
elif df.l.signal_ema_crossunder[-1]:
price = self.data.l.close[-1]
self.sell(size=0.1, sl=price + 0.01, tp=price - 0.01)
# def on_transaction(self, transaction):
# print("Transaction", transaction)
def stop(self, df: DataFeed):
print(df)
print(self.orders)
def plot(self, df: DataFeed):
return dict(
items=[
dict(
type="scatter",
x=df.index,
y=df["ema1"],
line=dict(color="blue", width=1),
name="ema1",
),
dict(
type="scatter",
x=df.index,
y=df["ema2"],
line=dict(color="green", width=1),
name="ema2",
),
]
)
if __name__ == "__main__":
lt = let_metatrader(
strategy=SmaCross,
datas=[("EURUSD", "1m")],
# datas=[[("EURUSD", "1m")], [("GBPUSD", "1m")]],
mt5_login=int(os.environ["MT5_LOGIN"]),
mt5_password=os.environ["MT5_PASSWORD"],
mt5_server=os.environ["MT5_SERVER"],
mt5_wine=os.getenv("MT5_WINE", None),
mt5_path=os.getenv("MT5_PATH", None),
)
lt.run()
# lt.plot()