Aiuto per la codifica - pagina 514

 
mladen:
triip

Guarda questo: https: //www.mql5.com/en/forum/general

Imposta il periodo della ma veloce a 1 e poi sarà come se il prezzo attraversasse la media mobile (la slo ma)

Eccellente! Grazie mladen

 

Indicatore tale è errori. Come risolvere?

File:
xxc.jpg  188 kb
 
popej30:
Indicatore tale è errori. Come risolvere?

Non può vedere da quella foto dove è l'errore

 

Come aggiungere un allarme su smartfone?

Il codice è :....

.... ma l'allarme mostra ogni candela ora !!!

Ho il numero 'push' MetaQuotes ID.

Test OK.

Cosa c'è di sbagliato?

File:
xxc_1.jpg  97 kb
xxv.jpg  115 kb
 
popej30:
Come aggiungere un allarme su smartfone?

Il codice è :....

.... ma l'avviso mostra ogni candela ora !!!

Ho numero 'push' MetaQuotes ID.

Test OK.

Cosa c'è che non va?

Non hai alcun criterio che determinerà quando la notifica dovrebbe essere inviata (qualcosa come "if (condition==true) SentNotification("alert");). Aggiungete il criterio "if" quando dovrebbe essere eseguito

E dovrebbe essere nella procedura di avvio e non nel deinit (poiché il deinit viene eseguito solo quando l'indicatore viene fermato per qualsiasi motivo)

 

L'allarme è sulla candela aperta - un errore!

Allarme per essere solo cambiare candela colore.

#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:
Allarme è su candela aperta - un errore!

Allarme per essere solo cambio colore candela.

#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");

}

}

Perché non usi semplicemente uno qualsiasi dei mas non lag già correttamente codificati? Il valore della tua variabile t non è mai assegnato un valore corretto - il resto dU non ha controllato perché solo questo può impedire che tutto sia calcolato correttamente

 
triip:
Eccellente! Grazie mladen

Commercio felice

 
mladen:
Perché non usi semplicemente uno qualsiasi dei mas non lag già correttamente codificati? Al tuo valore della variabile t non viene mai assegnato un valore corretto - il resto dU non ha controllato perché solo questo può impedire che tutto sia calcolato correttamente

Tu aiuti il mio "push smartfon".

 
popej30:
Tu aiuti il mio "push smartfon".

Se tutto il resto (MetQuotesID e il resto) è impostato bene, tutto ciò che serve è SendNotificaton() e dovrebbe funzionare