telegram
¤
Module help LetTrade send notify and receive command from Telegram Bot
Example¤
Example
import os
from datetime import datetime
import talib.abstract as ta
from dotenv import load_dotenv
from lettrade import indicator as i
# import example.logger
from lettrade.all import DataFeed, Strategy, TelegramCommander, let_metatrader
load_dotenv()
class SmaCross(Strategy):
ema1_window = 9
ema2_window = 21
_now: datetime
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"] = i.crossover(df.ema1, df.ema2)
df["signal_ema_crossunder"] = i.crossunder(df.ema1, df.ema2)
return df
def start(self, df: DataFeed):
self._now = df.now
def next(self, df: DataFeed):
if self.is_live:
# Filter start of new bar
if self._now == df.now:
return
self._now = df.now
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 stop(self, df: DataFeed):
print(df.tail())
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=[("EURGBP", "5m")],
mt5_login=os.getenv("MT5_LOGIN"),
mt5_password=os.getenv("MT5_PASSWORD"),
mt5_server=os.getenv("MT5_SERVER"),
mt5_wine=os.getenv("MT5_WINE", None),
commander=TelegramCommander,
commander_kwargs=dict(
token=os.getenv("TELEGRAM_TOKEN"),
chat_id=os.getenv("TELEGRAM_CHAT_ID"),
),
)
lt.run()
TelegramAPI
¤
Singleton object communicate across multipprocessing
Source code in lettrade/commander/telegram.py
98 99 100 101 102 |
|
cleanup
¤
cleanup() -> None
Stops all running telegram threads.
Source code in lettrade/commander/telegram.py
147 148 149 150 151 |
|
send_message
¤
Send message to Telegram Bot
Parameters:
-
msg
(str
) –Message
Returns:
-
_type_
(None
) –None
Source code in lettrade/commander/telegram.py
129 130 131 132 133 134 135 136 137 138 139 |
|
start
¤
Start
Source code in lettrade/commander/telegram.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
|
TelegramCommander
¤
TelegramCommander(
token: str,
chat_id: int,
api: TelegramAPI | None = None,
*args,
**kwargs
)
Bases: Commander
Send notify and receive command from Telegram Bot
Parameters:
Source code in lettrade/commander/telegram.py
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 |
|
init
¤
init(
bot: LetTradeBot,
brain: Brain,
exchange: Exchange,
strategy: Strategy,
)
Init commander dependencies
Parameters:
-
bot
(LetTradeBot
) –LetTradeBot object
-
brain
(Brain
) –Brain of bot
-
exchange
(Exchange
) –Manage bot trading
-
strategy
(Strategy
) –Strategy of bot
Source code in lettrade/commander/commander.py
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
start
¤
start()
Start
Source code in lettrade/commander/telegram.py
556 557 558 559 560 |
|
stop
¤
stop()
Stop
Source code in lettrade/commander/telegram.py
562 563 564 565 566 |
|
authorized_only
¤
Decorator to check if the message comes from the correct chat_id
Parameters:
Source code in lettrade/commander/telegram.py
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
|