15 lines
688 B
Python
15 lines
688 B
Python
from core.models import Signal
|
|
from strategies.base import Strategy
|
|
from utils.indicators import ema, atr
|
|
|
|
class EmaAtr(Strategy):
|
|
name = "ema_atr"
|
|
|
|
def on_bar(self, symbol, df):
|
|
p = self.p
|
|
f, s, t = ema(df.close, p["fast"]), ema(df.close, p["slow"]), ema(df.close, p["trend"])
|
|
a = atr(df, p["atr_period"]).iloc[-1]
|
|
up = f.iloc[-2] <= s.iloc[-2] and f.iloc[-1] > s.iloc[-1] and df.close.iloc[-1] > t.iloc[-1]
|
|
dn = f.iloc[-2] >= s.iloc[-2] and f.iloc[-1] < s.iloc[-1] and df.close.iloc[-1] < t.iloc[-1]
|
|
if up or dn:
|
|
return Signal(symbol, "buy" if up else "sell", p["sl_atr"] * a, p["tp_atr"] * a, self.name, "EMA cross")
|