1111
1212
1313class Ichimoku (IndicatorUtils ):
14- def analyze (self , historical_data , tenkansen_period , kijunsen_period , senkou_span_b_period ,
14+ def analyze (self , historical_data , tenkansen_period , kijunsen_period , senkou_span_b_period ,
1515 signal = ['leading_span_a' , 'leading_span_b' ], hot_thresh = None , cold_thresh = None , chart = None ):
1616 """Performs an ichimoku cloud analysis on the historical data
1717
@@ -44,17 +44,21 @@ def analyze(self, historical_data, tenkansen_period, kijunsen_period , senkou_sp
4444 index = dataframe .index
4545 )
4646 # value calculations
47- low_tenkansen = dataframe ['low' ].rolling (window = tenkansen_period ).min ()
48- low_kijunsen = dataframe ['low' ].rolling (window = kijunsen_period ).min ()
49- low_senkou = dataframe ['low' ].rolling (window = senkou_span_b_period ).min ()
50- high_tenkansen = dataframe ['high' ].rolling (window = tenkansen_period ).max ()
51- high_kijunsen = dataframe ['high' ].rolling (window = kijunsen_period ).max ()
52- high_senkou = dataframe ['high' ].rolling (window = senkou_span_b_period ).max ()
53-
54- ichimoku_values ['tenkansen' ] = (low_tenkansen + high_tenkansen ) / 2
55- ichimoku_values ['kijunsen' ] = (low_kijunsen + high_kijunsen ) / 2
56- ichimoku_values ['leading_span_a' ] = ((ichimoku_values ['tenkansen' ] + ichimoku_values ['kijunsen' ]) / 2 )
57- ichimoku_values ['leading_span_b' ] = (high_senkou + low_senkou ) / 2
47+ low_tenkansen = dataframe ['low' ].rolling (window = tenkansen_period ).min ()
48+ low_kijunsen = dataframe ['low' ].rolling (window = kijunsen_period ).min ()
49+ low_senkou = dataframe ['low' ].rolling (
50+ window = senkou_span_b_period ).min ()
51+ high_tenkansen = dataframe ['high' ].rolling (
52+ window = tenkansen_period ).max ()
53+ high_kijunsen = dataframe ['high' ].rolling (window = kijunsen_period ).max ()
54+ high_senkou = dataframe ['high' ].rolling (
55+ window = senkou_span_b_period ).max ()
56+
57+ ichimoku_values ['tenkansen' ] = (low_tenkansen + high_tenkansen ) / 2
58+ ichimoku_values ['kijunsen' ] = (low_kijunsen + high_kijunsen ) / 2
59+ ichimoku_values ['leading_span_a' ] = (
60+ (ichimoku_values ['tenkansen' ] + ichimoku_values ['kijunsen' ]) / 2 )
61+ ichimoku_values ['leading_span_b' ] = (high_senkou + low_senkou ) / 2
5862
5963 # add time period for cloud offset
6064 ## if cloud discplacement changed the ichimuko plot will be off ##
@@ -64,10 +68,13 @@ def analyze(self, historical_data, tenkansen_period, kijunsen_period , senkou_sp
6468 newindex = pandas .DatetimeIndex (start = last_time + timedelta ,
6569 freq = timedelta ,
6670 periods = cloud_displacement )
67- ichimoku_values = ichimoku_values .append (pandas .DataFrame (index = newindex ))
71+ ichimoku_values = ichimoku_values .append (
72+ pandas .DataFrame (index = newindex ))
6873 # cloud offset
69- ichimoku_values ['leading_span_a' ] = ichimoku_values ['leading_span_a' ].shift (cloud_displacement )
70- ichimoku_values ['leading_span_b' ] = ichimoku_values ['leading_span_b' ].shift (cloud_displacement )
74+ ichimoku_values ['leading_span_a' ] = ichimoku_values ['leading_span_a' ].shift (
75+ cloud_displacement )
76+ ichimoku_values ['leading_span_b' ] = ichimoku_values ['leading_span_b' ].shift (
77+ cloud_displacement )
7178
7279 ichimoku_values ['is_hot' ] = False
7380 ichimoku_values ['is_cold' ] = False
@@ -80,11 +87,13 @@ def analyze(self, historical_data, tenkansen_period, kijunsen_period , senkou_sp
8087 span_hot = ichimoku_values ['leading_span_a' ][date ] > ichimoku_values ['leading_span_b' ][date ]
8188 close_hot = dataframe ['close' ][date ] > ichimoku_values ['leading_span_a' ][date ]
8289 if hot_thresh :
83- ichimoku_values .at [date , 'is_hot' ] = span_hot and close_hot
90+ ichimoku_values .at [date ,
91+ 'is_hot' ] = span_hot and close_hot
8492 span_cold = ichimoku_values ['leading_span_a' ][date ] < ichimoku_values ['leading_span_b' ][date ]
8593 close_cold = dataframe ['close' ][date ] < ichimoku_values ['leading_span_a' ][date ]
8694 if cold_thresh :
87- ichimoku_values .at [date , 'is_cold' ] = span_cold and close_cold
95+ ichimoku_values .at [date ,
96+ 'is_cold' ] = span_cold and close_cold
8897 else :
8998 pass
9099
@@ -94,4 +103,4 @@ def analyze(self, historical_data, tenkansen_period, kijunsen_period , senkou_sp
94103 if chart == None :
95104 ichimoku_values .dropna (how = 'any' , inplace = True )
96105
97- return ichimoku_values
106+ return ichimoku_values
0 commit comments