Ayuda a la codificación - página 253

 

Ayuda para modificar el indicador

Hola chicos

Este indicador de cruce de MA está produciendo alertas con cada tick. Alguien sería tan amable de rectificar el problema o al menos enseñarme cómo hacerlo.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

double g_ibuf_76[];

double g_ibuf_80[];

int g_period_84 = 5;

int g_period_88 = 34;

extern bool Alerts = TRUE;

extern bool PopAlerts = TRUE;

extern bool PushAlerts = TRUE;

extern bool EmailAlerts = TRUE;

extern bool SoundAlerts = TRUE;

extern string SoundFileUp = "UP.wav";

extern string SoundFileDn = "DN.wav";

int gi_96 = 0;

int gi_100 = 0;

int init() {

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, g_ibuf_76);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, g_ibuf_80);

return (0);

}

int deinit() {

return (0);

}

int start() {

int li_20;

double l_ima_24;

double l_ima_32;

double l_ima_40;

double l_ima_48;

double l_ima_56;

double l_ima_64;

double ld_72;

double ld_80;

int li_88 = IndicatorCounted();

if (li_88 < 0) return (-1);

if (li_88 > 0) li_88--;

int li_12 = Bars - li_88;

for (int li_16 = 0; li_16 <= li_12; li_16++) {

li_20 = li_16;

ld_72 = 0;

ld_80 = 0;

for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);

ld_72 = ld_80 / 10.0;

l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {

g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");

if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");

gi_96 = TRUE;

gi_100 = FALSE;

}

} else {

if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {

g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");

if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");

gi_100 = TRUE;

gi_96 = FALSE;

}

}

}

}

return (0);

}

Saludos

Amin

 
aminhakim:
Hola Chicos

Este indicador de cruce de MA está produciendo alertas con cada tick. Alguien sería tan amable de rectificar el problema o al menos enseñarme cómo hacerlo.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

double g_ibuf_76[];

double g_ibuf_80[];

int g_period_84 = 5;

int g_period_88 = 34;

extern bool Alerts = TRUE;

extern bool PopAlerts = TRUE;

extern bool PushAlerts = TRUE;

extern bool EmailAlerts = TRUE;

extern bool SoundAlerts = TRUE;

extern string SoundFileUp = "UP.wav";

extern string SoundFileDn = "DN.wav";

int gi_96 = 0;

int gi_100 = 0;

int init() {

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, g_ibuf_76);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, g_ibuf_80);

return (0);

}

int deinit() {

return (0);

}

int start() {

int li_20;

double l_ima_24;

double l_ima_32;

double l_ima_40;

double l_ima_48;

double l_ima_56;

double l_ima_64;

double ld_72;

double ld_80;

int li_88 = IndicatorCounted();

if (li_88 < 0) return (-1);

if (li_88 > 0) li_88--;

int li_12 = Bars - li_88;

for (int li_16 = 0; li_16 <= li_12; li_16++) {

li_20 = li_16;

ld_72 = 0;

ld_80 = 0;

for (li_20 = li_16; li_20 <= li_16 + 9; li_20++) ld_80 += MathAbs(High[li_20] - Low[li_20]);

ld_72 = ld_80 / 10.0;

l_ima_24 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_40 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_56 = iMA(NULL, 0, g_period_84, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

l_ima_32 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16);

l_ima_48 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 + 1);

l_ima_64 = iMA(NULL, 0, g_period_88, 0, MODE_EMA, PRICE_CLOSE, li_16 - 1);

if (l_ima_24 > l_ima_32 && l_ima_40 l_ima_64) {

g_ibuf_76[li_16] = Low[li_16] - ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-BUY ");

if (PushAlerts) SendNotification(Symbol() + " PRE-BUY ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-BUY ");

gi_96 = TRUE;

gi_100 = FALSE;

}

} else {

if (l_ima_24 l_ima_48 && l_ima_56 < l_ima_64) {

g_ibuf_80[li_16] = High[li_16] + ld_72 / 2.0;

if (li_16 <= 2 && Alerts && !gi_100) {

if (PopAlerts) Alert(Symbol(), " ", Period(), " PRE-SELL ");

if (PushAlerts) SendNotification(Symbol() + " PRE-SELL ");

if (SoundAlerts) PlaySound(SoundFileUp);

if (EmailAlerts) SendMail(Symbol() , " PRE-SELL ");

gi_100 = TRUE;

gi_96 = FALSE;

}

}

}

}

return (0);

}

Saludos

Amin

Amin esa es la versión descompilada de un indicador repintado con problemas que has notado. Utiliza el indicador de este post en su lugar : https://www.mql5.com/en/forum/173574/page447

 

¡Hola queridos codificadores!

¿Es posible añadir opciones de alerta en este indicador en el momento en que cambia de color?

Lo más importante sería dar una alerta lo antes posible (siempre ocurre en la apertura de una vela).

Opción 1: Correo electrónico: (TRUE/FALSE)

Opción 2: Caja: (TRUE/FALSE)

Texto a mostrar en el asunto del correo electrónico o en el buzón: [PAIR] activado TF [TF]

Como honro su tiempo, lo he intentado yo mismo para codificarlo pero sin suerte.

Espero que alguien pueda ayudarme.

¡Gracias de antemano!

hama.mq4

Archivos adjuntos:
hama.mq4  4 kb
 

Hola programadores, estoy intentando crear un indicador que pinte las barras de precios por la fórmula de la media de stepMA. Como es un indicador de élite no sabía si podía ponerlo aquí, pero en mi código no hay rastro de la fórmula original porque he creado la versión MTF de ese indicador usando funciones iCustom.

El compilador no me da ningún error pero el indicador no funciona correctamente, creo que he hecho algún lío con los buffers. ¿Podríais ayudarme?

gracias de antemano.

este es mi código:

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

double slope[];

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

//| |

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

int init()

{

IndicatorBuffers(6);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

SetIndexBuffer(4,MABuffer);

SetIndexBuffer(5,slope);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

for(i=0,y=0;i<limit;i++)

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);

slope = slope;

if (MABuffer>MABuffer) slope = 1;

if (MABuffer<MABuffer) slope = -1;

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

//+------------------------------------------------------------------+
 
thefxpros:
Hola programadores, estoy intentando crear un indicador que pinte las barras de precios por la fórmula de la media de stepMA. Como es un indicador de élite no sabía si podía ponerlo aquí, pero en mi código no hay rastro de la fórmula original porque he creado la versión MTF de ese indicador usando funciones iCustom.

El compilador no me da ningún error pero el indicador no funciona correctamente, creo que he hecho algún lío con los buffers. ¿Podríais ayudarme?

gracias de antemano.

aquí está el código:

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double MABuffer[];

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

double slope[];

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

//| |

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

int init()

{

IndicatorBuffers(6);

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

SetIndexBuffer(4,MABuffer);

SetIndexBuffer(5,slope);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

for(i=0,y=0;i<limit;i++)

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

MABuffer=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,0,y);

slope = slope;

if (MABuffer>MABuffer) slope = 1;

if (MABuffer<MABuffer) slope = -1;

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

thefxpros

Todo lo que necesitas es una llamada al buffer de la pendiente (todo lo demás lo puedes ignorar)

Si la pendiente devuelta es 1 es una tendencia alcista

Si la pendiente devuelta es -1 es una tendencia a la baja

 
thefxpros:
Hola programadores, estoy intentando crear un indicador que pinte las barras de precios por la fórmula de la media de stepMA. Como es un indicador de élite no sabía si podía ponerlo aquí, pero en mi código no hay rastro de la fórmula original porque he creado la versión MTF de ese indicador usando funciones iCustom.

El compilador no me da ningún error pero el indicador no funciona correctamente, creo que he hecho algún lío con los buffers. ¿Podríais ayudarme?

gracias de antemano.

Así :

//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

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

//| |

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

int init()

{

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);

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

{

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

int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

Y luego con los mismos parámetros van a ser los mismos :

Archivos adjuntos:
 
mladen:
Así :
//------------------------------------------------------------------

#property copyright "mladen"

#property link "www.forex-tsd.com"

//------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkGreen

#property indicator_width1 1

#property indicator_color2 FireBrick

#property indicator_width2 1

#property indicator_color3 LimeGreen

#property indicator_width3 2

#property indicator_color4 Orange

#property indicator_width4 2

//

//

//

extern int TimeFrame = 0; // Timeframe

extern int MaLength = 10; // Ma Length

extern int MaMethod = 18; // Ma method

extern double Sensitivity = 3; // Sensivity Factor

extern double StepSize = 3; // Constant Step Size

extern int Shift = 0; // OShify

extern bool HighLow = false; // High/Low Mode Switch (more sensitive)

extern color WickBuyColor = DarkGreen;

extern color WickSellColor = FireBrick;

extern color BodyBuyColor = LimeGreen;

extern color BodySellColor = Orange;

extern int WickWidth = 1;

extern int BodyWidth = 2;

extern bool alertsOn = false;

extern bool alertsOnCurrent = false;

extern bool alertsMessage = false;

extern bool alertsNotification = false;

extern bool alertsSound = false;

extern bool alertsEmail = false;

extern string MaMethods = "";

extern string __0 = "SMA";

extern string __1 = "EMA";

extern string __2 = "Double smoothed EMA";

extern string __3 = "Double EMA (DEMA)";

extern string __4 = "Triple EMA (TEMA)";

extern string __5 = "Smoothed MA";

extern string __6 = "Linear weighted MA";

extern string __7 = "Parabolic weighted MA";

extern string __8 = "Alexander MA";

extern string __9 = "Volume weghted MA";

extern string __10 = "Hull MA";

extern string __11 = "Triangular MA";

extern string __12 = "Sine weighted MA";

extern string __13 = "Linear regression";

extern string __14 = "IE/2";

extern string __15 = "NonLag MA";

extern string __16 = "Zero lag EMA";

extern string __17 = "Leader EMA";

extern string __18 = "Super smoother";

extern string __19 = "Smoother";

//

//

//

double UpBuffer[];

double DnBuffer[];

double UpbBuffer[];

double DnbBuffer[];

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

//| |

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

int init()

{

SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, WickWidth, WickBuyColor);

SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, WickWidth, WickSellColor);

SetIndexBuffer(2,UpbBuffer); SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodyBuyColor);

SetIndexBuffer(3,DnbBuffer); SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, BodyWidth, BodySellColor);

IndicatorShortName("StepMA averages MTF candles("+MaLength+","+Sensitivity+","+StepSize+")");

MaLength = MathMax(MaLength,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("StepMA averages MTF candles ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(MathMax(Bars-counted_bars,3*TimeFrame/Period()),Bars-1);

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

{

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

int slope=iCustom(Symbol(),TimeFrame,"StepMA averages",MaLength,MaMethod,Sensitivity,StepSize,Shift,HighLow,5,y);

if (slope == 1) { UpBuffer=High; DnBuffer=Low; UpbBuffer = MathMax(Open,Close); DnbBuffer = MathMin(Open,Close); }

if (slope == -1) { DnBuffer=High; UpBuffer=Low; DnbBuffer = MathMax(Open,Close); UpbBuffer = MathMin(Open,Close); }

}

return(0);

}

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

[/PHP]

And then with same parameters they are going to be the same :

Ok, gracias.

Mladen, ¿sabes dónde puedo conseguir material para aprender en serio este lenguaje, por favor?

solo una pregunta sobre este tipo de código:

[PHP]if (MABuffer>MABuffer) slope = 1;

significa: si (MABuffer[de la barra actual]>MA Buffer[de la barra actual + 1, por lo que la siguiente barra]) de la pendiente[de la barra actual] es igual a 1;

¿correcto?

 
thefxpros:
Ok, gracias.

Mladen, ¿sabes dónde puedo conseguir material para aprender en serio este lenguaje, por favor?

solo una pregunta sobre este tipo de código:

if (MABuffer>MABuffer) slope = 1;

significa: si (MABuffer[de la barra actual]>MA Buffer[de la barra actual + 1, por lo que la siguiente barra] de pendiente[de la barra actual] es igual a 1;

¿correcto?

Sí. Tal vez una ligera reformulación : si ma actual > ma anterior entonces pendiente = 1

De aprendizaje : Creo que lo mejor es empezar con este post https://www.mql5.com/en/forum/172969/page2 (y por supuesto, preguntando. Nadie ha aprendido nunca sin preguntar)

 

¡solicitud!

Solo quiero un EA muy simple:

- un EA solo abre una operación si 2 velas cierran en la misma dirección y la cierra al final de la misma vela

más explicaciones... ¿ok? .... si hay 2 velas que cierran en verde, entonces abriré una operación de compra, esta operación que abrí se cerrará al final de la misma vela, por lo tanto también se abrirá una operación de venta después del cierre de 2 velas rojas ........ así que esto es sólo 1 restricción fácil.

 

Hola,

Me estoy divirtiendo en convertir algún indicador en MTF usando icustom. El indicador funciona, pero no muestra el color y las flechas correctamente, ¿por qué?

¿Dónde está el error, por favor?

wilders_trailing_stop_mtf.mq4

wilders_trailing_stop.mq4

//------------------------------------------------------------------

#property copyright "thefxpros"

#property link "thefxpros@katamail.com"

//------------------------------------------------------------------

#property indicator_chart_window

//#property indicator_color1 Orange

//#property indicator_color2 LimeGreen

//#property indicator_color3 LimeGreen

//#property indicator_color4 Orange

//#property indicator_width3 1

//#property indicator_width4 1

//

//

//

extern int TimeFrame = 0;

extern int Length = 2;

extern double Coeff = 1.75;

extern int LineWidth = 1;

extern int ArrowWidth = 1;

extern color UpLineClr = LimeGreen;

extern color DnLineClr = Orange;

extern color UpArrowClr = LimeGreen;

extern color DnArrowClr = Orange;

//

double WTS[];

double WTSDn[];

double arrUp[];

double arrDn[];

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

//| |

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

int init()

{

IndicatorBuffers(4);

SetIndexBuffer(0,WTS); SetIndexStyle(0,DRAW_LINE, EMPTY, LineWidth, DnLineClr);

SetIndexBuffer(1,WTSDn); SetIndexStyle(1,DRAW_LINE, EMPTY, LineWidth, UpLineClr);

SetIndexBuffer(2,arrUp); SetIndexStyle(2,DRAW_ARROW, EMPTY, ArrowWidth, UpArrowClr); SetIndexArrow(2,SYMBOL_ARROWUP);

SetIndexBuffer(3,arrDn); SetIndexStyle(3,DRAW_ARROW, EMPTY, ArrowWidth, DnArrowClr); SetIndexArrow(3,SYMBOL_ARROWDOWN);

IndicatorShortName("Wilders trailing stop MTF ("+Length+","+Coeff+")");

Length = MathMax(Length,1);

switch(TimeFrame)

{

case 1 : string TimeFrameStr="Period_M1"; break;

case 5 : TimeFrameStr="Period_M5"; break;

case 15 : TimeFrameStr="Period_M15"; break;

case 30 : TimeFrameStr="Period_M30"; break;

case 60 : TimeFrameStr="Period_H1"; break;

case 240 : TimeFrameStr="Period_H4"; break;

case 1440 : TimeFrameStr="Period_D1"; break;

case 10080 : TimeFrameStr="Period_W1"; break;

case 43200 : TimeFrameStr="Period_MN1"; break;

default : TimeFrameStr="Current Timeframe";

}

IndicatorShortName("Wilders trailing stop MTF ("+TimeFrameStr+")");

return(0);

}

//----

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

//| MTF function |

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

int start()

{

datetime TimeArray[];

int i,limit,y=0,counted_bars=IndicatorCounted();

// Plot defined time frame on to current time frame

ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);

limit= MathMin(Bars-counted_bars+3*TimeFrame/Period(),Bars-1);

for(i=0,y=0;i<limit;i++)

{

if (Time<TimeArray[y]) y++;

/*********************************************************************************************************

Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom.

Rule 1: Add extern inputs above for all neccesary values

Rule 2: Use 'TimeFrame' for the indicator time frame

Rule 3: Use 'y' for your indicator's shift value

********************************************************************************************************/

WTS=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,0,y);

WTSDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,1,y);

arrUp=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,2,y);

arrDn=iCustom(Symbol(),TimeFrame,"Wilders trailing stop",Length,Coeff,3,y);

}

return(0);

}

//+------------------------------------------------------------------+
Archivos adjuntos:
Razón de la queja: