Hi, I am trying to code an Ichimoku Cloud. What I am looking for is to go long on the security if the current price is above the cloud AND if the close price of the 3 previous days were above the cloud. I coded the following but its not working properly. Im sure there is a more efficient way to code this.
equity = symbol('SPY'); n_f = 9; n_m = 26; n_s = 52;
import talib
def initialize(context):
schedule_function(Ichimoku, date_rules.every_day(), time_rules.market_open())
def Ichimoku(context, data):
bars = n_s*2
cur_price = data.current(equity,'price')
H = data.history(equity, 'high', bars, '1d')
L = data.history(equity,'low', bars, '1d')
3_back = data.history(equity,'close',3,'1d')
2_back = data.history(equity,'close',2,'1d')
1_back = data.history(equity,'close',1,'1d')
tenkan_sen = (H.rolling(n_f).max() + L.rolling(n_f).min())/2
kijun_sen = (H.rolling(n_m).max() + L.rolling(n_m).min())/2
senkou_span_a = ((tenkan_sen + kijun_sen) / 2).shift(n_m)
senkou_span_b = ((H.rolling(n_s).max() + L.rolling(n_s).min())/2).shift(n_m)
if (cur_price > senkou_span_a[-1]) and (3_back > senkou_span_a[-1]) and (2_back > senkou_span_a[-1]) and (1_back > senkou_span_a[-1]) :
order_target_percent(equity, 1.0)
elif (cur_price < senkou_span_b[-1]) and (3_back < senkou_span_b[-1]) and (2_back < senkou_span_b[-1]) and (1_back < senkou_span_b[-1]) :
order_target_percent(equity, -1.0)
else:
pass