Coding help - page 514

 
mladen:
triip

Check out this one : https://www.mql5.com/en/forum/general

Set the fast ma period to 1 and then it will be the same as if the price crosses the moving average (the slo ma)

Excellent! Thank you mladen

 

Indicator such is errors. How to fix ?

Files:
xxc.jpg  188 kb
 
popej30:
Indicator such is errors. How to fix ?

Can not see from that picture where is the error

 

How to add alert on smartfone ?

Code it is :....

.... but alert show each now candle !!!

I have number 'push' MetaQuotes ID.

Test OK.

What is wrong ??

Files:
xxc_1.jpg  97 kb
xxv.jpg  115 kb
 
popej30:
How to add alert on smartfone ?

Code it is :....

.... but alert show each now candle !!!

I have number 'push' MetaQuotes ID.

Test OK.

What is wrong ??

You do not have any criteria which will determine when the notification should be sent (something like "if (condition==true) SentNotification("alert");). Add the "if" criteria when should it be executed

And it should be in the start procedure not in the deinit (since the deinit is executed only when the indicator is stopped for any of the reasons)

 

Alert it is on open candle - an error !

Alert to be only change color candle.

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_width1 4

#property indicator_color2 Red

#property indicator_width2 4

#property indicator_minimum 0

#property indicator_maximum 1

//---- input parameters

extern string TimeFrame = "Current time frame";

extern int Price = 12;

extern int Length = 4;

extern int Displace = 0;

extern int Filter = 1;

extern double Deviation = 0;

extern string _ = "alerts settings";

extern bool alertsOn = true;

extern bool alertsOnCurrent = true;

extern bool alertsMessage = true;

extern bool alertsSound = false;

extern bool alertsEmail = false;

double Cycle = 4;

//---- indicator buffers

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double price[];

double trend[];

string indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SendNotification("smartfon alert");

int ft=0;

string short_name;

//---- indicator line

IndicatorBuffers(5);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexBuffer(2,MABuffer);

SetIndexBuffer(3,price);

SetIndexBuffer(4,trend);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

//---- name for DataWindow and indicator subwindow label

SetIndexLabel(0,"NLMA");

SetIndexLabel(1,"Up");

SetIndexLabel(2,"Dn");

//----

SetIndexShift(0,Displace);

SetIndexShift(1,Displace);

SetIndexShift(2,Displace);

SetIndexDrawBegin(0,Length*Cycle+Length);

SetIndexDrawBegin(1,Length*Cycle+Length);

SetIndexDrawBegin(2,Length*Cycle+Length);

//----

indicatorFileName = WindowExpertName();

returnBars = (TimeFrame=="returnBars"); if (returnBars) return(0);

calculateValue = (TimeFrame=="calculateValue"); if (calculateValue) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

short_name=timeFrameToString(timeFrame)+" XXX ("+Length+")";

IndicatorShortName(short_name);

return(0);

}

//+------------------------------------------------------------------+

//| NonLagMA_v4 |

//+------------------------------------------------------------------+

int start()

{

int i,shift, counted_bars=IndicatorCounted(),limit;

double alfa, beta, t, Sum, Weight, g;

double pi = 3.1415926535;

double Coeff = 3*pi;

int Phase = Length-1;

double Len = Length*Cycle + Phase;

if ( counted_bars > 0 ) limit=Bars-counted_bars;

if ( counted_bars < 0 ) return(0);

if ( counted_bars ==0 ) limit=Bars-Len-1;

if ( returnBars) { UpBuffer[0] = limit+1; return(0); }

if (calculateValue || timeFrame==Period())

{

if ( counted_bars < 1 )

for(i=1;i<Length*Cycle+Length;i++)

{

MABuffer=0;

UpBuffer=0;

DnBuffer=0;

}

for(shift=limit;shift>=0;shift--)

{

Weight=0; Sum=0; t=0;

for (i=0;i<=Len-1;i++)

{

g = 1.0/(Coeff*t+1);

if (t <= 0.5 ) g = 1;

beta = MathCos(pi*t);

alfa = g * beta;

//if (shift>=1) price = iMA(NULL,0,Per,Displace,Mode,Price,shift+i);

//else

price = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);

Sum += alfa*price;

Weight += alfa;

if ( t < 1 ) t += 1.0/(Phase-1);

else if ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1);

}

if (Weight > 0) MABuffer[shift] = (1.0+Deviation/100)*Sum/Weight;

if (Filter>0)

{

if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point ) MABuffer[shift]=MABuffer[shift+1];

}

trend[shift]=trend[shift+1];

if (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]= 1;

if (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;

if (trend[shift]>0)

{

UpBuffer[shift] = 1;

DnBuffer[shift] = EMPTY_VALUE;

}

if (trend[shift]<0)

{

DnBuffer[shift] = 1;

UpBuffer[shift] = EMPTY_VALUE;

}

}

manageAlerts();

return(0);

}

//

//

//

//

//

for(i = limit; i >=0; i--)

{

int y = iBarShift(NULL,timeFrame,Time);

UpBuffer = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,0,y);

DnBuffer = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,1,y);

trend = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,4,y);

}

manageAlerts();

return(0);

}

//+-------------------------------------------------------------------

//|

//+-------------------------------------------------------------------

//

//

//

//

//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

int stringToTimeFrame(string tfs)

{

tfs = stringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));

return(Period());

}

string timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

string stringUpperCase(string str)

{

string s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, length);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, length, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, length, tchar + 224);

}

return(s);

}

//

//

//

//

//

void manageAlerts()

{

if (!calculateValue && alertsOn)

{

if (alertsOnCurrent)

int whichBar = 0;

else whichBar = 1; whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));

if (trend[whichBar] != trend[whichBar+1])

{

if (trend[whichBar] == 1) doAlert(whichBar,"buy");

if (trend[whichBar] == -1) doAlert(whichBar,"sell");

}

}

}

//

//

//

//

//

void doAlert(int forBar, string doWhat)

{

static string previousAlert="nothing";

static datetime previousTime;

string message;

if (previousAlert != doWhat || previousTime != Time[forBar]) {

previousAlert = doWhat;

previousTime = Time[forBar];

//

//

//

//

//

message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," - ",timeFrameToString(timeFrame)+" NonLagMa slope ",doWhat);

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," XXX "),message);

if (alertsSound) PlaySound("alert2.wav");

}

}
 
popej30:
Alert it is on open candle - an error !

Alert to be only change color candle.

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_width1 4

#property indicator_color2 Red

#property indicator_width2 4

#property indicator_minimum 0

#property indicator_maximum 1

//---- input parameters

extern string TimeFrame = "Current time frame";

extern int Price = 12;

extern int Length = 4;

extern int Displace = 0;

extern int Filter = 1;

extern double Deviation = 0;

extern string _ = "alerts settings";

extern bool alertsOn = true;

extern bool alertsOnCurrent = true;

extern bool alertsMessage = true;

extern bool alertsSound = false;

extern bool alertsEmail = false;

double Cycle = 4;

//---- indicator buffers

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double price[];

double trend[];

string indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SendNotification("smartfon alert");

int ft=0;

string short_name;

//---- indicator line

IndicatorBuffers(5);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexBuffer(2,MABuffer);

SetIndexBuffer(3,price);

SetIndexBuffer(4,trend);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

//---- name for DataWindow and indicator subwindow label

SetIndexLabel(0,"NLMA");

SetIndexLabel(1,"Up");

SetIndexLabel(2,"Dn");

//----

SetIndexShift(0,Displace);

SetIndexShift(1,Displace);

SetIndexShift(2,Displace);

SetIndexDrawBegin(0,Length*Cycle+Length);

SetIndexDrawBegin(1,Length*Cycle+Length);

SetIndexDrawBegin(2,Length*Cycle+Length);

//----

indicatorFileName = WindowExpertName();

returnBars = (TimeFrame=="returnBars"); if (returnBars) return(0);

calculateValue = (TimeFrame=="calculateValue"); if (calculateValue) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

short_name=timeFrameToString(timeFrame)+" XXX ("+Length+")";

IndicatorShortName(short_name);

return(0);

}

//+------------------------------------------------------------------+

//| NonLagMA_v4 |

//+------------------------------------------------------------------+

int start()

{

int i,shift, counted_bars=IndicatorCounted(),limit;

double alfa, beta, t, Sum, Weight, g;

double pi = 3.1415926535;

double Coeff = 3*pi;

int Phase = Length-1;

double Len = Length*Cycle + Phase;

if ( counted_bars > 0 ) limit=Bars-counted_bars;

if ( counted_bars < 0 ) return(0);

if ( counted_bars ==0 ) limit=Bars-Len-1;

if ( returnBars) { UpBuffer[0] = limit+1; return(0); }

if (calculateValue || timeFrame==Period())

{

if ( counted_bars < 1 )

for(i=1;i<Length*Cycle+Length;i++)

{

MABuffer=0;

UpBuffer=0;

DnBuffer=0;

}

for(shift=limit;shift>=0;shift--)

{

Weight=0; Sum=0; t=0;

for (i=0;i<=Len-1;i++)

{

g = 1.0/(Coeff*t+1);

if (t <= 0.5 ) g = 1;

beta = MathCos(pi*t);

alfa = g * beta;

//if (shift>=1) price = iMA(NULL,0,Per,Displace,Mode,Price,shift+i);

//else

price = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);

Sum += alfa*price;

Weight += alfa;

if ( t < 1 ) t += 1.0/(Phase-1);

else if ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1);

}

if (Weight > 0) MABuffer[shift] = (1.0+Deviation/100)*Sum/Weight;

if (Filter>0)

{

if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point ) MABuffer[shift]=MABuffer[shift+1];

}

trend[shift]=trend[shift+1];

if (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]= 1;

if (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;

if (trend[shift]>0)

{

UpBuffer[shift] = 1;

DnBuffer[shift] = EMPTY_VALUE;

}

if (trend[shift]<0)

{

DnBuffer[shift] = 1;

UpBuffer[shift] = EMPTY_VALUE;

}

}

manageAlerts();

return(0);

}

//

//

//

//

//

for(i = limit; i >=0; i--)

{

int y = iBarShift(NULL,timeFrame,Time);

UpBuffer = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,0,y);

DnBuffer = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,1,y);

trend = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Price,Length,Displace,Filter,Deviation,4,y);

}

manageAlerts();

return(0);

}

//+-------------------------------------------------------------------

//|

//+-------------------------------------------------------------------

//

//

//

//

//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

int stringToTimeFrame(string tfs)

{

tfs = stringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period()));

return(Period());

}

string timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

string stringUpperCase(string str)

{

string s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, length);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, length, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, length, tchar + 224);

}

return(s);

}

//

//

//

//

//

void manageAlerts()

{

if (!calculateValue && alertsOn)

{

if (alertsOnCurrent)

int whichBar = 0;

else whichBar = 1; whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));

if (trend[whichBar] != trend[whichBar+1])

{

if (trend[whichBar] == 1) doAlert(whichBar,"buy");

if (trend[whichBar] == -1) doAlert(whichBar,"sell");

}

}

}

//

//

//

//

//

void doAlert(int forBar, string doWhat)

{

static string previousAlert="nothing";

static datetime previousTime;

string message;

if (previousAlert != doWhat || previousTime != Time[forBar]) {

previousAlert = doWhat;

previousTime = Time[forBar];

//

//

//

//

//

message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," - ",timeFrameToString(timeFrame)+" NonLagMa slope ",doWhat);

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," XXX "),message);

if (alertsSound) PlaySound("alert2.wav");

}

}

Why don't you simply use any of the already correctly coded non lag mas? Your t variable value is never assigned a proper value - the rest dU did not check because that alone can prevent all from being properly calculated

 
triip:
Excellent! Thank you mladen

Happy trading

 
mladen:
Why don't you simply use any of the already correctly coded non lag mas? Your t variable value is never assigned a proper value - the rest dU did not check because that alone can prevent all from being properly calculated

You help my "push smartfon".

 
popej30:
You help my "push smartfon".

If all the rest (MetQuotesID and the rest) is set up OK, all that is needed is SendNotificaton() and it should work

Reason: