Aide au codage - page 514

 
mladen:
triip

Regardez celui-là : https://www.mql5.com/en/forum/general

Définissez la période du ma rapide à 1 et alors ce sera la même chose que si le prix traverse la moyenne mobile (le slo ma).

Excellent ! Merci mladen

 

Indicateur tel est l'erreur. Comment les corriger ?

Dossiers :
xxc.jpg  188 kb
 
popej30:
Indicateur tel est l'erreur. Comment la corriger ?

Je ne vois pas sur cette photo où se trouve l'erreur.

 

Comment ajouter une alerte sur le smartfone ?

Le code est :....

.... mais l'alerte s'affiche à chaque bougie ! !!

J'ai le numéro 'push' MetaQuotes ID.

Test OK.

Quel est le problème ?

Dossiers :
xxc_1.jpg  97 kb
xxv.jpg  115 kb
 
popej30:
Comment ajouter une alerte sur un smartfone ?

Le code est :....

.... mais l'alerte montre chaque bougie maintenant ! !!

J'ai le numéro 'push' MetaQuotes ID.

Test OK.

Qu'est-ce qui ne va pas ?

Vous n'avez pas de critères qui détermineront quand la notification doit être envoyée (quelque chose comme "if (condition==true) SentNotification("alert") ;). Ajoutez le critère "if" quand il doit être exécuté.

Et il devrait être dans la procédure de démarrage et non dans la désinit (puisque la désinit est exécutée uniquement lorsque l'indicateur est arrêté pour l'une des raisons).

 

Alerte il est sur la bougie ouverte - une erreur !

Alerte pour être seulement changement de couleur de bougie.

#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:
Alerte c'est sur bougie ouverte - une erreur !

L'alerte ne doit être qu'une bougie de couleur changeante.

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

}

}

Pourquoi n'utilisez-vous pas simplement l'un des mas non lag déjà correctement codés ? La valeur de votre variable t n'est jamais affectée à une valeur correcte - le reste dU n'a pas été vérifié car cela seul peut empêcher tout d'être correctement calculé

 
triip:
Excellent ! Merci mladen

Commerce heureux

 
mladen:
Pourquoi n'utilisez-vous pas simplement l'un des mas non lag déjà correctement codés ? La valeur de votre variable t n'est jamais affectée à une valeur correcte - le reste, dU ne l'a pas vérifié parce que cela seul peut empêcher tout d'être calculé correctement

Vous aidez mon "push smartfon".

 
popej30:
Vous aidez mon "push smartfon".

Si tout le reste (MetQuotesID et le reste) est configuré correctement, il suffit d'utiliser SendNotificaton() et cela devrait fonctionner.

Raison: