@@ -147,51 +147,18 @@ public IchimokuKinkoHyo(string name, int tenkanPeriod = 9, int kijunPeriod = 26,
147147 KijunMinimum = new Minimum ( name + "_KijunMin" , kijunPeriod ) ;
148148 SenkouBMaximum = new Maximum ( name + "_SenkouBMaximum" , senkouBPeriod ) ;
149149 SenkouBMinimum = new Minimum ( name + "_SenkouBMinimum" , senkouBPeriod ) ;
150- DelayedTenkanSenkouA = new Delay ( name + "DelayedTenkan" , senkouADelayPeriod ) ;
151- DelayedKijunSenkouA = new Delay ( name + "DelayedKijun" , senkouADelayPeriod ) ;
152- DelayedMaximumSenkouB = new Delay ( name + "DelayedMax" , senkouBDelayPeriod ) ;
153- DelayedMinimumSenkouB = new Delay ( name + "DelayedMin" , senkouBDelayPeriod ) ;
154- Chikou = new Delay ( name + "_Chikou" , senkouADelayPeriod ) ;
155-
156- SenkouA = new FunctionalIndicator < IndicatorDataPoint > (
157- name + "_SenkouA" ,
158- input => SenkouA . IsReady ? ( DelayedTenkanSenkouA . Current . Value + DelayedKijunSenkouA . Current . Value ) / 2 : decimal . Zero ,
159- senkouA => DelayedTenkanSenkouA . IsReady && DelayedKijunSenkouA . IsReady ,
160- ( ) =>
161- {
162- Tenkan . Reset ( ) ;
163- Kijun . Reset ( ) ;
164- } ) ;
150+ DelayedMaximumSenkouB = new Delay ( name + "DelayedMax" , senkouBDelayPeriod ) . Of ( SenkouBMaximum ) ;
151+ DelayedMinimumSenkouB = new Delay ( name + "DelayedMin" , senkouBDelayPeriod ) . Of ( SenkouBMinimum ) ;
165152
166- SenkouB = new FunctionalIndicator < IndicatorDataPoint > (
167- name + "_SenkouB" ,
168- input => SenkouB . IsReady ? ( DelayedMaximumSenkouB . Current . Value + DelayedMinimumSenkouB . Current . Value ) / 2 : decimal . Zero ,
169- senkouA => DelayedMaximumSenkouB . IsReady && DelayedMinimumSenkouB . IsReady ,
170- ( ) =>
171- {
172- Tenkan . Reset ( ) ;
173- Kijun . Reset ( ) ;
174- } ) ;
153+ Tenkan = TenkanMaximum . Plus ( TenkanMinimum ) . Over ( 2m ) ;
154+ DelayedTenkanSenkouA = new Delay ( name + "DelayedTenkan" , senkouADelayPeriod ) . Of ( Tenkan ) ;
175155
176- Tenkan = new FunctionalIndicator < IndicatorDataPoint > (
177- name + "_Tenkan" ,
178- input => Tenkan . IsReady ? ( TenkanMaximum . Current . Value + TenkanMinimum . Current . Value ) / 2 : decimal . Zero ,
179- tenkan => TenkanMaximum . IsReady && TenkanMinimum . IsReady ,
180- ( ) =>
181- {
182- TenkanMaximum . Reset ( ) ;
183- TenkanMinimum . Reset ( ) ;
184- } ) ;
156+ Kijun = KijunMaximum . Plus ( KijunMinimum ) . Over ( 2m ) ;
157+ DelayedKijunSenkouA = new Delay ( name + "DelayedKijun" , senkouADelayPeriod ) . Of ( Kijun ) ;
185158
186- Kijun = new FunctionalIndicator < IndicatorDataPoint > (
187- name + "_Kijun" ,
188- input => Kijun . IsReady ? ( KijunMaximum . Current . Value + KijunMinimum . Current . Value ) / 2 : decimal . Zero ,
189- kijun => KijunMaximum . IsReady && KijunMinimum . IsReady ,
190- ( ) =>
191- {
192- KijunMaximum . Reset ( ) ;
193- KijunMinimum . Reset ( ) ;
194- } ) ;
159+ SenkouA = DelayedTenkanSenkouA . Plus ( DelayedKijunSenkouA ) . Over ( 2m ) ;
160+ SenkouB = DelayedMaximumSenkouB . Plus ( DelayedMinimumSenkouB ) . Over ( 2m ) ;
161+ Chikou = new Delay ( name + "_Chikou" , senkouADelayPeriod ) ;
195162 }
196163
197164 /// <summary>
@@ -212,22 +179,10 @@ protected override decimal ComputeNextValue(IBaseDataBar input)
212179 {
213180 TenkanMaximum . Update ( input . EndTime , input . High ) ;
214181 TenkanMinimum . Update ( input . EndTime , input . Low ) ;
215- Tenkan . Update ( input . EndTime , input . Close ) ;
216- if ( Tenkan . IsReady ) DelayedTenkanSenkouA . Update ( input . EndTime , Tenkan . Current . Value ) ;
217-
218182 KijunMaximum . Update ( input . EndTime , input . High ) ;
219183 KijunMinimum . Update ( input . EndTime , input . Low ) ;
220- Kijun . Update ( input . EndTime , input . Close ) ;
221- if ( Kijun . IsReady ) DelayedKijunSenkouA . Update ( input . EndTime , Kijun . Current . Value ) ;
222-
223- SenkouA . Update ( input . EndTime , input . Close ) ;
224-
225- SenkouB . Update ( input . EndTime , input . Close ) ;
226184 SenkouBMaximum . Update ( input . EndTime , input . High ) ;
227- if ( SenkouBMaximum . IsReady ) DelayedMaximumSenkouB . Update ( input . EndTime , SenkouBMaximum . Current . Value ) ;
228185 SenkouBMinimum . Update ( input . EndTime , input . Low ) ;
229- if ( SenkouBMinimum . IsReady ) DelayedMinimumSenkouB . Update ( input . EndTime , SenkouBMinimum . Current . Value ) ;
230-
231186 Chikou . Update ( input . EndTime , input . Close ) ;
232187
233188 return input . Close ;
0 commit comments