Skip to content

Commit 8b25076

Browse files
committed
Use indicator extension methods for automatic updates
1 parent 41d8b47 commit 8b25076

File tree

1 file changed

+9
-54
lines changed

1 file changed

+9
-54
lines changed

Indicators/IchimokuKinkoHyo.cs

Lines changed: 9 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
225184
SenkouBMaximum.Update(input.EndTime, input.High);
226-
if (SenkouBMaximum.IsReady) DelayedMaximumSenkouB.Update(input.EndTime, SenkouBMaximum.Current.Value);
227185
SenkouBMinimum.Update(input.EndTime, input.Low);
228-
if (SenkouBMinimum.IsReady) DelayedMinimumSenkouB.Update(input.EndTime, SenkouBMinimum.Current.Value);
229-
230-
SenkouB.Update(input.EndTime, input.Close);
231186
Chikou.Update(input.EndTime, input.Close);
232187

233188
return input.Close;

0 commit comments

Comments
 (0)