Joined 14.04.2022
set alarm for Set the alarm for when the four Ichimoku components are equal
14 Apr 2022, 08:13
hi
can you help me ?
i want to set alarm for ichimoku defaul indicator when : 4 Ichimoku components are equal . I want to give me alarm in the live bar ( candle ).
sourse code is below :
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class IchimokuKinkoHyo : Indicator
{
[Parameter(DefaultValue = 9)]
public int periodFast { get; set; }
[Parameter(DefaultValue = 26)]
public int periodMedium { get; set; }
[Parameter(DefaultValue = 52)]
public int periodSlow { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementChikou { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementCloud { get; set; }
[Output("TenkanSen", Color = Colors.Red)]
public IndicatorDataSeries TenkanSen { get; set; }
[Output("Kijunsen", Color = Colors.Blue)]
public IndicatorDataSeries KijunSen { get; set; }
[Output("ChikouSpan", Color = Colors.DarkViolet)]
public IndicatorDataSeries ChikouSpan { get; set; }
[Output("SenkouSpanB", Color = Colors.Red, LineStyle=LineStyle.Lines)]
public IndicatorDataSeries SenkouSpanB { get; set; }
[Output("SenkouSpanA", Color = Colors.Green,LineStyle=LineStyle.Lines)]
public IndicatorDataSeries SenkouSpanA { get; set; }
double maxfast,minfast,maxmedium,minmedium,maxslow,minslow;
public override void Calculate(int index)
{
if((index<periodFast)||(index<periodSlow)){return;}
maxfast = MarketSeries.High[index];
minfast = MarketSeries.Low[index];
maxmedium = MarketSeries.High[index];
minmedium = MarketSeries.Low[index];
maxslow = MarketSeries.High[index];
minslow = MarketSeries.Low[index];
for(int i=0;i<periodFast;i++)
{
if(maxfast< MarketSeries.High[index-i]){maxfast = MarketSeries.High[index-i];}
if(minfast> MarketSeries.Low[index-i]){minfast = MarketSeries.Low[index-i];}
}
for(int i=0;i<periodMedium;i++)
{
if(maxmedium< MarketSeries.High[index-i]){maxmedium = MarketSeries.High[index-i];}
if(minmedium> MarketSeries.Low[index-i]){minmedium = MarketSeries.Low[index-i];}
}
for(int i=0;i<periodSlow;i++)
{
if(maxslow< MarketSeries.High[index-i]){maxslow = MarketSeries.High[index-i];}
if(minslow> MarketSeries.Low[index-i]){minslow = MarketSeries.Low[index-i];}
}
TenkanSen[index] = (maxfast + minfast) /2;
KijunSen[index] = (maxmedium + minmedium) /2;
ChikouSpan[index-DisplacementChikou] = MarketSeries.Close[index];
SenkouSpanA[index+DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2;
SenkouSpanB[index+DisplacementCloud] = (maxslow + minslow) / 2;
}
}
}
Replies
safaeianmohsen
14 Apr 2022, 10:02
( Updated at: 21 Dec 2023, 09:22 )
RE: cod post option 37939
amusleh said:hi 1-Equivalence of 4 components means when Tenkansen and Kijunsen and each span a, b are exactly equal in quantity.
2- I have marked the desired point in the image.
3-I want to have sound alert .
Hi,
What do you mean by "4 Ichimoku components are equal"?
Can you put a comment on your code where you want to get alerted?
What kind of alert you need? sound? email?
And please use code post option next time:
using System; using cAlgo.API; using cAlgo.API.Indicators; namespace cAlgo.Indicators { [Indicator(IsOverlay = true, AccessRights = AccessRights.None)] public class IchimokuKinkoHyo : Indicator { [Parameter(DefaultValue = 9)] public int periodFast { get; set; } [Parameter(DefaultValue = 26)] public int periodMedium { get; set; } [Parameter(DefaultValue = 52)] public int periodSlow { get; set; } [Parameter(DefaultValue = 26)] public int DisplacementChikou { get; set; } [Parameter(DefaultValue = 26)] public int DisplacementCloud { get; set; } [Output("TenkanSen", Color = Colors.Red)] public IndicatorDataSeries TenkanSen { get; set; } [Output("Kijunsen", Color = Colors.Blue)] public IndicatorDataSeries KijunSen { get; set; } [Output("ChikouSpan", Color = Colors.DarkViolet)] public IndicatorDataSeries ChikouSpan { get; set; } [Output("SenkouSpanB", Color = Colors.Red, LineStyle = LineStyle.Lines)] public IndicatorDataSeries SenkouSpanB { get; set; } [Output("SenkouSpanA", Color = Colors.Green, LineStyle = LineStyle.Lines)] public IndicatorDataSeries SenkouSpanA { get; set; } private double maxfast, minfast, maxmedium, minmedium, maxslow, minslow; public override void Calculate(int index) { if ((index < periodFast) || (index < periodSlow)) { return; } maxfast = MarketSeries.High[index]; minfast = MarketSeries.Low[index]; maxmedium = MarketSeries.High[index]; minmedium = MarketSeries.Low[index]; maxslow = MarketSeries.High[index]; minslow = MarketSeries.Low[index]; for (int i = 0; i < periodFast; i++) { if (maxfast < MarketSeries.High[index - i]) { maxfast = MarketSeries.High[index - i]; } if (minfast > MarketSeries.Low[index - i]) { minfast = MarketSeries.Low[index - i]; } } for (int i = 0; i < periodMedium; i++) { if (maxmedium < MarketSeries.High[index - i]) { maxmedium = MarketSeries.High[index - i]; } if (minmedium > MarketSeries.Low[index - i]) { minmedium = MarketSeries.Low[index - i]; } } for (int i = 0; i < periodSlow; i++) { if (maxslow < MarketSeries.High[index - i]) { maxslow = MarketSeries.High[index - i]; } if (minslow > MarketSeries.Low[index - i]) { minslow = MarketSeries.Low[index - i]; } } TenkanSen[index] = (maxfast + minfast) / 2; KijunSen[index] = (maxmedium + minmedium) / 2; ChikouSpan[index - DisplacementChikou] = MarketSeries.Close[index]; SenkouSpanA[index + DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2; SenkouSpanB[index + DisplacementCloud] = (maxslow + minslow) / 2; } } }
@safaeianmohsen
amusleh
14 Apr 2022, 11:12
Hi,
It would be very rare for all of them to be exactly equal, you have to use some kind of threshold.
Here is the code with alert:
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.FullAccess)]
public class IchimokuKinkoHyo : Indicator
{
[Parameter(DefaultValue = 9)]
public int periodFast { get; set; }
[Parameter(DefaultValue = 26)]
public int periodMedium { get; set; }
[Parameter(DefaultValue = 52)]
public int periodSlow { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementChikou { get; set; }
[Parameter(DefaultValue = 26)]
public int DisplacementCloud { get; set; }
[Parameter("Threshold (Pips)", DefaultValue = 1, MinValue = 0, Group = "Alert")]
public double AlertThreshold { get; set; }
[Parameter("Sound File Path", Group = "Alert")]
public string AlertSoundFile { get; set; }
[Output("TenkanSen", Color = Colors.Red)]
public IndicatorDataSeries TenkanSen { get; set; }
[Output("Kijunsen", Color = Colors.Blue)]
public IndicatorDataSeries KijunSen { get; set; }
[Output("ChikouSpan", Color = Colors.DarkViolet)]
public IndicatorDataSeries ChikouSpan { get; set; }
[Output("SenkouSpanB", Color = Colors.Red, LineStyle = LineStyle.Lines)]
public IndicatorDataSeries SenkouSpanB { get; set; }
[Output("SenkouSpanA", Color = Colors.Green, LineStyle = LineStyle.Lines)]
public IndicatorDataSeries SenkouSpanA { get; set; }
private double maxfast, minfast, maxmedium, minmedium, maxslow, minslow;
protected override void Initialize()
{
AlertThreshold *= Symbol.PipSize;
}
public override void Calculate(int index)
{
if ((index < periodFast) || (index < periodSlow)) { return; }
maxfast = MarketSeries.High[index];
minfast = MarketSeries.Low[index];
maxmedium = MarketSeries.High[index];
minmedium = MarketSeries.Low[index];
maxslow = MarketSeries.High[index];
minslow = MarketSeries.Low[index];
for (int i = 0; i < periodFast; i++)
{
if (maxfast < MarketSeries.High[index - i]) { maxfast = MarketSeries.High[index - i]; }
if (minfast > MarketSeries.Low[index - i]) { minfast = MarketSeries.Low[index - i]; }
}
for (int i = 0; i < periodMedium; i++)
{
if (maxmedium < MarketSeries.High[index - i]) { maxmedium = MarketSeries.High[index - i]; }
if (minmedium > MarketSeries.Low[index - i]) { minmedium = MarketSeries.Low[index - i]; }
}
for (int i = 0; i < periodSlow; i++)
{
if (maxslow < MarketSeries.High[index - i]) { maxslow = MarketSeries.High[index - i]; }
if (minslow > MarketSeries.Low[index - i]) { minslow = MarketSeries.Low[index - i]; }
}
TenkanSen[index] = (maxfast + minfast) / 2;
KijunSen[index] = (maxmedium + minmedium) / 2;
ChikouSpan[index - DisplacementChikou] = MarketSeries.Close[index];
SenkouSpanA[index + DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2;
SenkouSpanB[index + DisplacementCloud] = (maxslow + minslow) / 2;
if (IsLastBar && Math.Abs(TenkanSen[index] - KijunSen[index]) <= AlertThreshold && Math.Abs(KijunSen[index] - SenkouSpanA[index]) <= AlertThreshold && Math.Abs(SenkouSpanA[index] - SenkouSpanB[index]) <= AlertThreshold)
{
Notifications.PlaySound(AlertSoundFile);
}
}
}
}
Changed the threshold to 0 if you want to get alerted only if they were exactly equal, otherwise set some few pips as your tolerance level.
The values of them are in double, 99.99% of the time they will not be exactly equal as some decimal place might have different value.
@amusleh


amusleh
14 Apr 2022, 09:34
Hi,
What do you mean by "4 Ichimoku components are equal"?
Can you put a comment on your code where you want to get alerted?
What kind of alert you need? sound? email?
And please use code post option next time:
@amusleh