ALERT ON INDICATOR

If you need an Indicator or Signal developed or translated from other language, please post all Indicator development REQUESTS to this section here.

Moderator: admin

ALERT ON INDICATOR

Postby nelsen » Sun Dec 01, 2019 6:01 am

hello Apprentice,

First of all, thank you for your work.
I found a very interesting indicator "cycle-identifier".
I let you look at the code I’m sending you to see if you find it well or if you want or can optimize it.
only, I would like to ask you if you can add alerts:
"push"
"notification"
"email"
"alert"
(enable/disabled) (true/false)

with the choice of all the timeframes for alerts (m1/m5/m15/m30/h1/h4/daily/weekly/monthly).

First of all, I ask you this because I would later like to ask you for an automated strategy with this indicator as a basis.

here is the code of "cycle-identifier"
Code: Select all
//+------------------------------------------------------------------+
//| CycleIdentifier.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//----
#property indicator_separate_window
#property indicator_buffers 6
//----
#property indicator_color1 DarkGray
#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 DarkGreen
#property indicator_color5 Brown
//----
#property indicator_minimum -1.2
#property indicator_maximum 1.2
//----
extern int PriceActionFilter=1;
extern int Length=3;
extern int MajorCycleStrength=4;
extern bool UseCycleFilter=false;
extern int UseFilterSMAorRSI=1;
extern int FilterStrengthSMA=12;
extern int FilterStrengthRSI=21;
//----
double LineBuffer[];
double MajorCycleBuy[];
double MajorCycleSell[];
double MinorCycleBuy[];
double MinorCycleSell[];
double ZL1[];
//----
double CyclePrice=0.0, Strength =0.0, SweepA=0.0, SweepB=0.0;
int Switch=0, Switch2=0, SwitchA=0, SwitchB=0, SwitchC=0, SwitchD=0, SwitchE=0, SwitchAA=0, SwitchBB=0;
double Price1BuyA=0.0, Price2BuyA=0.0;
int Price1BuyB=1.0, Price2BuyB=1.0;
double Price1SellA=0.0, Price2SellA=0.0;
int Price1SellB=0.0, Price2SellB=0.0;
bool ActiveSwitch=True, BuySwitchA=FALSE, BuySwitchB=FALSE, SellSwitchA=FALSE, SellSwitchB=FALSE;
int BuySellFac=01;
bool Condition1, Condition2, Condition3, Condition6;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,LineBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(1,MajorCycleBuy);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(2,MajorCycleSell);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(3,MinorCycleBuy);
SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(4,MinorCycleSell);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,ZL1);
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(3,0.0);
SetIndexEmptyValue(4,0.0);
SetIndexEmptyValue(5,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit() {return(0);}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
// if(counted_bars>0) counted_bars--;
// int position=Bars-1;
int position=Bars-counted_bars;
if (position<0) position=0;
//----
int rnglength=250;
double range=0.0, srange=0.0;
for(int pos=position; pos >=0; pos--)
{
srange=0.0;
int j=0;
for(int i=0;i<rnglength;i++)
{
j++;
int posr=pos + i;
if (posr>=Bars)
break;
srange=srange + (High[posr] - Low[posr]);
}
range=srange/j * Length;
int BarNumber=Bars-pos; //??????????
if (BarNumber < 0)
BarNumber=0;
CyclePrice=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);
if (UseFilterSMAorRSI==1)
ZL1[pos]=ZeroLag(CyclePrice,FilterStrengthSMA, pos);
if (UseFilterSMAorRSI==2)
ZL1[pos]=ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);
if (ZL1[pos] > ZL1[pos+1])
SwitchC=1;
if (ZL1[pos] < ZL1[pos+1])
SwitchC=2;
if (BarNumber<=1)
{
if (Strength==0)
SweepA =range;
else
SweepA=Strength;
Price1BuyA =CyclePrice;
Price1SellA =CyclePrice;
}
/* ***************************************************************** */
if (BarNumber > 1)
{
if (Switch > -1)
{
if (CyclePrice < Price1BuyA)
{
if (UseCycleFilter && (SwitchC==2) && BuySwitchA )
{
MinorCycleBuy[pos + BarNumber - Price1BuyB]=0; //MinorBuySell
LineBuffer[pos + BarNumber - Price1BuyB ]=0; //line
}
if (!UseCycleFilter && BuySwitchA)
{
MinorCycleBuy[pos +BarNumber - Price1BuyB]=0;
LineBuffer[pos +BarNumber - Price1BuyB]=0;
}
Price1BuyA=CyclePrice;
Price1BuyB=BarNumber;
BuySwitchA=TRUE;
}
else if (CyclePrice > Price1BuyA)
{
SwitchA=BarNumber - Price1BuyB;
if (!UseCycleFilter)
{
MinorCycleBuy[pos +SwitchA]=-1;//MinorBuySell - DarkGreen
LineBuffer[pos +SwitchA]=-1;//line
}
if (UseCycleFilter && SwitchC ==1)
{
MinorCycleBuy[pos +SwitchA]=-1; //MinorBuySell
LineBuffer[pos +SwitchA]=-1; //line
SwitchD=1;
}
else
{
SwitchD=0;
}
BuySwitchA=TRUE;
double cyclePrice1=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
if (ActiveSwitch)
{
Condition1=CyclePrice - cyclePrice1>=SweepA;
}
else
{
Condition1=CyclePrice>=cyclePrice1 * (1 + SweepA/1000);
}
if (Condition1 && SwitchA>=BuySellFac)
{
Switch= - 1;
Price1SellA=CyclePrice;
Price1SellB=BarNumber;
SellSwitchA=FALSE;
BuySwitchA=FALSE;
}
}
}
if(Switch < 1)
{
if (CyclePrice > Price1SellA)
{
if (UseCycleFilter && SwitchC==1 && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB]=0; //MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB ]=0; //line
}
if (!UseCycleFilter && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB]=0;//MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB]=0;//line
}
Price1SellA=CyclePrice;
Price1SellB=BarNumber;
SellSwitchA=TRUE;
}
else if (CyclePrice < Price1SellA)
{
SwitchA=BarNumber - Price1SellB;
if (!UseCycleFilter)
{
MinorCycleSell[pos +SwitchA]=1; // MinorBuySell darkRed
LineBuffer[pos +SwitchA]=1; //"CycleLine"
}
if (UseCycleFilter && (SwitchC==2))
{
MinorCycleSell[pos +SwitchA]=1;//MinorBuySell darkRed
LineBuffer[pos +SwitchA]=1;//CycleLine
SwitchD =2;
}
else
SwitchD =0;
SellSwitchA=TRUE;
double cyclePrice2=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
if (ActiveSwitch)
Condition1=(cyclePrice2 - CyclePrice)>=SweepA;
else
Condition1=CyclePrice<=(cyclePrice2 * (1 - SweepA/1000));
if (Condition1 && SwitchA>=BuySellFac)
{
Switch=1;
Price1BuyA=CyclePrice;
Price1BuyB=BarNumber;
SellSwitchA=FALSE;
BuySwitchA=FALSE;
}
}
}
}
LineBuffer[pos]=0;
MinorCycleBuy[pos]=0;
MinorCycleSell[pos]=0;
//----
if (BarNumber==1)
{
if (Strength==0)
SweepB =range * MajorCycleStrength;
else
SweepB=Strength * MajorCycleStrength;
Price2BuyA=CyclePrice;
Price2SellA=CyclePrice;
}
if (BarNumber > 1)
{
if (Switch2 > - 1)
{
if (CyclePrice < Price2BuyA)
{
if (UseCycleFilter && SwitchC==2 && BuySwitchB )
{
MajorCycleBuy [pos +BarNumber - Price2BuyB]=0; //MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line -----
}
if (!UseCycleFilter && BuySwitchB )
{
MajorCycleBuy [pos +BarNumber - Price2BuyB]=0;//MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line-----------
}
Price2BuyA=CyclePrice;
Price2BuyB=BarNumber;
BuySwitchB=TRUE;
}
else if (CyclePrice > Price2BuyA)
{
SwitchB=BarNumber - Price2BuyB;
if (!UseCycleFilter)
{
MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line--------------
}
if (UseCycleFilter && SwitchC ==1)
{
MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line-----------------
SwitchE =1;
}
else
SwitchE =0;
BuySwitchB=TRUE;
double cyclePrice3=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6=CyclePrice - cyclePrice3>=SweepB;
else
Condition6=CyclePrice>=cyclePrice3 * (1 + SweepB/1000);
if (Condition6 && SwitchB>=BuySellFac)
{
Switch2= - 1;
Price2SellA=CyclePrice;
Price2SellB=BarNumber;
SellSwitchB=FALSE;
BuySwitchB=FALSE;
}
}
}
if (Switch2 < 1)
{
if (CyclePrice > Price2SellA )
{
if (UseCycleFilter && SwitchC ==1 && SellSwitchB )
{
MajorCycleSell [pos +BarNumber - Price2SellB]=0; //"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
}
if (!UseCycleFilter && SellSwitchB )
{
MajorCycleSell [pos +BarNumber - Price2SellB]=0;//"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
}
Price2SellA=CyclePrice;
Price2SellB=BarNumber;
SellSwitchB=TRUE;
}
else if (CyclePrice < Price2SellA)
{
SwitchB=BarNumber - Price2SellB ;
if (!UseCycleFilter)
{
MajorCycleSell[pos + SwitchB]=1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line -----
}
if (UseCycleFilter && SwitchC ==2)
{
MajorCycleSell [pos + SwitchB]=1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line -----
SwitchE =2;
}
else
SwitchE =0;
SellSwitchB=TRUE;
double cyclePrice4=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6=cyclePrice4 - CyclePrice>=SweepB;
else
Condition6=CyclePrice<=cyclePrice4 * (1.0 - SweepB/1000.0);
if (Condition6 && SwitchB>=BuySellFac)
{
Switch2=1;
Price2BuyA=CyclePrice;
Price2BuyB=BarNumber;
SellSwitchB=FALSE;
BuySwitchB=FALSE;
}
}
}
}
LineBuffer[pos]=0;
MajorCycleSell[pos]=0;
MajorCycleBuy[pos]=0;
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ZeroLag(double price, int length, int pos)
{
if (length < 3)
{
return(price);
}
double aa=MathExp(-1.414*3.14159/length);
double bb=2*aa*MathCos(1.414*180/length);
double CB=bb;
double CC=-aa*aa;
double CA=1 - CB - CC;
double CD=CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
return(CD);
}
//+------------------------------------------------------------------+


cycle indicator mt4.png
screenshot of the indicator
nelsen
 
Posts: 11
Joined: Tue Oct 08, 2019 8:37 am

Re: ALERT ON INDICATOR

Postby Apprentice » Tue Dec 03, 2019 1:47 pm

Your request is added to the development list.
Development reference 389.
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 36435
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia



Return to Indicator and Signal Requests

Who is online

Users browsing this forum: No registered users and 8 guests