Ayuda a la codificación - página 514

 
mladen:
triip

Mira este : https://www.mql5.com/en/forum/general

Pon el periodo de la fast ma en 1 y entonces será lo mismo que si el precio cruza la media móvil (la slo ma)

¡Excelente! Gracias mladen

 

Indicador tal es errores. ¿Cómo se soluciona?

Archivos adjuntos:
xxc.jpg  188 kb
 
popej30:
El indicador es un error. ¿Cómo se soluciona?

No se puede ver en esa imagen donde está el error

 

¿Cómo añadir una alerta en el smartfone?

El código es :....

.... ¡¡¡pero la alerta muestra cada vela ahora !!!

Tengo el número 'push' MetaQuotes ID.

Prueba OK.

¿Qué está mal?

Archivos adjuntos:
xxc_1.jpg  97 kb
xxv.jpg  115 kb
 
popej30:
¿Cómo añadir una alerta en el smartfone?

El código es :....

.... ¡¡¡pero la alerta mostrar cada ahora vela !!!

Tengo el número 'push' MetaQuotes ID.

Prueba OK.

¿Qué pasa?

Usted no tiene ningún criterio que determinará cuando la notificación debe ser enviada (algo así como "si (condición==true) SentNotification("alerta");). Añade el criterio "if" cuando debe ejecutarse

Y debe estar en el procedimiento de inicio no en el deinit (ya que el deinit se ejecuta sólo cuando el indicador se detiene por cualquiera de las razones)

 

¡Alerta es en la vela abierta - un error!

Alerta para ser sólo cambio de color de la vela.

#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:
¡Alerta es en la vela abierta - un error !

Alerta para ser sólo cambio de color de la vela.

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

}

}

¿Por qué no utiliza simplemente cualquiera de los ya codificados correctamente no lag mas? Su valor de la variable t nunca se asigna un valor adecuado - el resto dU no comprobó porque sólo eso puede impedir que todo sea calculado correctamente

 
triip:
¡Excelente! Gracias mladen

Feliz comercio

 
mladen:
¿Por qué no usas simplemente cualquiera de los mas no lag ya codificados correctamente? Su valor de la variable t nunca se asigna un valor adecuado - el resto dU no comprobó porque sólo eso puede evitar que todos se calcula correctamente

Ayudas a mi "push smartfon".

 
popej30:
Ayuda a mi "push smartfon".

Si todo lo demás (MetQuotesID y demás) está bien configurado, sólo hace falta SendNotificaton() y debería funcionar

Razón de la queja: