¿Cómo codificar? - página 327

 

Hola a todos, tengo este error particular con mi EA en Stocastic.

Mi criterio es el siguiente:

Cuando mi stocEquator cruza al alza (Uptrend), sólo se activan los largos cuando mi stocTrigger cruza al alza y cuando el stocEquator cruza a la baja (Downtrend), sólo se activan los cortos cuando el stocTrigger cruza a la baja.

Sin embargo, cuando ejecuto el EA para probarlo, no hay operaciones que se activen y me preguntaba cuál podría ser el problema aquí y agradecería si alguien puede ayudarme.

Gracias de antemano por la ayuda.

Saludos

Terrance

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

si ((diff1Trigger*diff2Trigger)<0)

{

si (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

si no, isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

si no, isCrossedEquator = 2;

}

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Comprar

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vender

}

return(0);

}

return(0);

 
tkuan77:
Hola a todos, tengo este error en particular con mi EA en Stocastic.

Mi criterio es el siguiente:

Cuando mi stocEquator cruza al alza (Uptrend), sólo se activan las operaciones largas cuando mi stocTrigger cruza al alza y cuando el stocEquator cruza a la baja (Downtrend), sólo se activan las operaciones cortas cuando el stocTrigger cruza a la baja.

Sin embargo, cuando ejecuto el EA para probarlo, no hay operaciones que se activen y me preguntaba cuál podría ser el problema aquí y agradecería si alguien puede ayudarme.

Gracias de antemano por la ayuda.

Saludos

Terrance

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

si ((diff1Trigger*diff2Trigger)<0)

{

si (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

si no, isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

si no, isCrossedEquator = 2;

}

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Comprar

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vender

}

return(0);

}

return(0);

Terrance

Lo único que no he podido comprobar es la variable "total"

El código debería funcionar si la variable total está bien configurada. Aquí hay un indicador de prueba que utilicé con tus condiciones y está levantando señales de compra y venta válidas (ejecuta el indicador en modo visual y verás cuando alerte) así que el error está en otro lado

#property indicator_separate_window

#property indicator_buffers 0

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

Hola mladen, gracias por la aclaración. Volví a revisar mis códigos y no pude entender a qué te referías con la variable "total". ¿Cuál podría ser la causa de mi error?

Saludos

Terrance

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

//| Mi_Primera_EA.mq4 ||

//| TK|

//| Plataforma comercial MetaTrader 4 / MetaQuotes Software Corp. |

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

#property copyright "TK"

#property link "http://www.metaquotes.net"

//--- parámetros de entrada

extern double TakeProfit=500,0;

extern double Lots=0,1;

extern double StopLoss=500.0;

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

//---función de inicialización del experto ||.

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

int init()

{

//----

//----

return(0);

}

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

//| función de desinicialización experta ||

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

datetime newbar;

int inicio()

{

if(newbar==Time[0])return(0);

si no, newbar=Time[0];

int ticket, total;

if(Bares<100)

{

Print("barras menos de 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit menos de 10");

return(0);

}

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

//| función de inicio experto | Disparo estocástico

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //orignial Stoc movement

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //orignal Stoc movement

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

//| función de inicio de experto | Establecer comercio de gatillo sólo cuando la línea cruzada y la vela cerrada |//

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

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

double diff2 = shortStoc2-longStoc2;

si ((diff1*diff2)<0)

{

if (shortStoc1>longStoc1)

isCrossed = 1;

si no, isCrossed = 2;

}

// Parada del ecuador Inicio -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

si no, isCrossedEquator = 2;

}

// Stoc del ecuador Fin -------------------------------------

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

//| función de fin de experto | Establecer comercio de gatillo sólo cuando la línea cruzada y la vela cerrada |//

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

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

//| función final experta | Disparo estocástico

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

//| Función de inicio de experto | Orden de activación

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

total = OrdersTotal();

if(total < 2) //restringir el número de operaciones abiertas

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mi EA",12345,0,Verde);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de COMPRA : ",GetLastError());

return(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mi EA",12345,0,Rojo);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

//| función final experta ||

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

mladen:
Terrance

Lo único que no he podido comprobar es la variable "total"

El código debería funcionar si la variable total está bien configurada. Aquí hay un indicador de prueba que usé con tus condiciones y está levantando señales de compra y venta válidas (ejecuta el indicador en modo visual y verás cuando alerta) así que el error está en otro lado

#property indicator_separate_window

#property indicator_buffers 0

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
Hola mladen, gracias por lo destacado. Volví a echar un vistazo a mis códigos y no pude averiguar a qué te referías con la variable "total". ¿Cuál podría ser la causa de mi error?

Saludos

Terrance

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

//| Mi_Primera_EA.mq4 ||

//| TK|

//| Plataforma comercial MetaTrader 4 / MetaQuotes Software Corp. |

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

#property copyright "TK"

#property link "http://www.metaquotes.net"

//--- parámetros de entrada

extern double TakeProfit=500,0;

extern double Lots=0,1;

extern double StopLoss=500.0;

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

//---función de inicialización del experto ||.

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

int init()

{

//----

//----

return(0);

}

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

//| función de desinicialización experta ||

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

datetime newbar;

int inicio()

{

if(newbar==Time[0])return(0);

si no, newbar=Time[0];

int ticket, total;

if(Bares<100)

{

Print("barras menos de 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit menos de 10");

return(0);

}

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

//| función de inicio experto | Disparo estocástico

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //orignial Stoc movement

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //orignal Stoc movement

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

//| función de inicio de experto | Establecer comercio de gatillo sólo cuando la línea cruzada y la vela cerrada |//

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

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

double diff2 = shortStoc2-longStoc2;

si ((diff1*diff2)<0)

{

if (shortStoc1>longStoc1)

isCrossed = 1;

si no, isCrossed = 2;

}

// Parada del ecuador Inicio -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

si no, isCrossedEquator = 2;

}

// Stoc del ecuador Fin -------------------------------------

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

//| función de fin de experto | Establecer comercio de gatillo sólo cuando la línea cruzada y la vela cerrada |//

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

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

//| función de fin de experto | Disparador estocástico

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

//| Función de inicio de experto | Orden de activación

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

total = OrdersTotal();

if(total < 2) //restringir el número de operaciones abiertas

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Mi EA",12345,0,Verde);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de COMPRA : ",GetLastError());

return(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Mi EA",12345,0,Rojo);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

//| función final experta |

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

Terrance

En mis pruebas ese EA funciona

Aquí está el resultado de la prueba más el informe de la prueba de espalda. Probado en el marco de tiempo de 1 minuto

Archivos adjuntos:
tk.zip  16 kb
result.gif  13 kb
 

¡Hola a todos, pls puede alguien me ayude con este código below,,,,it continuar dándome sonido de alerta en cada garrapata en lugar de sólo cuando las condiciones requeridas de comercio se activan! No quiero que la alerta suene en cada tick o cuando se formen nuevas velas.

#property indicator_chart_window

#propiedad indicator_buffers 2

#property indicador_color1 Cal

#property indicator_color2 Red

//---- parámetros de entrada

extern int ADXbars=14;

extern int CountBars=350;

//---- búferes

double val1[];

double val2[];

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| Función de desinicialización de los indicadores personalizada ||.

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

int deinit()

{

//----

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int init()

{

//-- nombre corto del indicador

IndicatorShortName("PipsdatorPro1("+Símbolo()+")";

//---- línea del indicador

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

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

//| AltrTrend_Signal_v2_2 ||

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

int inicio()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bares-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- comprobar posibles errores

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

//---- cero inicial

if(barras_contadas<1)

{

for(i=1;i<=Barras Contadas;i++) val1[Barras Contadas-i]=0.0;

for(i=1;i<=Barras Contadas;i++) val2[Barras Contadas-i]=0.0;

}

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

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

si (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alerta("Flecha de compra","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

i++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=Alto[shift]+5*Punto;

// Alerta("Flecha de venta","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

i++;

}

}

return(0);

}

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

 
Mastercash:
¡Hola a todos, por favor, alguien puede ayudarme con este código de abajo ,,,, que continúa dándome sonido de alerta en cada garrapata en lugar de sólo cuando las condiciones requeridas de comercio se activan! No quiero que la alerta suene en cada tick o cuando se formen nuevas velas.

#property ventana_del_gráfico

#propiedad indicator_buffers 2

#property indicador_color1 Cal

#property indicator_color2 Red

//---- parámetros de entrada

extern int ADXbars=14;

extern int CountBars=350;

//---- buffers

double val1[];

double val2[];

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| Función de desinicialización de los indicadores personalizada ||.

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

int deinit()

{

//----

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int init()

{

//-- nombre corto del indicador

IndicatorShortName("PipsdatorPro1("+Símbolo()+")";

//---- línea del indicador

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

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

//| AltrTrend_Signal_v2_2 ||

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

int inicio()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bares-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- comprobar posibles errores

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

//---- cero inicial

if(barras_contadas<1)

{

for(i=1;i<=Barras Contadas;i++) val1[Barras Contadas-i]=0.0;

for(i=1;i<=Barras Contadas;i++) val2[Barras Contadas-i]=0.0;

}

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

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

si (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alerta("Flecha de compra","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

i++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=Alto[shift]+5*Punto;

// Alerta("Flecha de venta","\n", "La hora actual es ",TimeToStr(CurTime()),"\n",Symbol());

i++;

}

}

return(0);

}

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

Mastercash, hay una versión de ese indicador aquí https://www.mql5.com/en/forum/173574/page320 tal vez le ayudará.

 
mladen:
Terrance

En mis pruebas ese EA funciona

Aquí está el resultado de la prueba más el informe de la prueba de espalda. Probado en un marco de tiempo de 1 minuto

Hola mladen, he vuelto a revisar el código según tus comentarios y me he dado cuenta de que la operación sólo se activará cuando mis dos líneas estocásticas se activen al alza o a la baja en la misma vela.

Sin embargo, lo que estoy tratando de lograr es que si el indicador ecuatorial está cruzando hacia arriba indicando una tendencia alcista, el EA se activará sólo cuando el indicador rápido se dispare hacia arriba y viceversa en lugar de tener tanto el indicador ecuatorial como el rápido disparados en la misma dirección en la misma vela.

He intentado ajustar el EA para que se adapte a ese criterio pero no he podido obtener los resultados deseados. ¿Hay algo que esté haciendo mal? Por favor, ayuda. Gracias de nuevo.

Saludos

Terrance

 
tkuan77:
Hola mladen, he vuelto a revisar el código de acuerdo con tus comentarios y me he dado cuenta de que la operación sólo se activará cuando mis dos líneas estocásticas se activen al alza o a la baja en la misma vela.

Sin embargo, lo que estoy tratando de lograr es que si el indicador de ecuador está cruzando hacia arriba indicando tendencia alcista, el EA se activará sólo en largo cuando el indicador rápido se disparó hacia arriba y viceversa en lugar de tener tanto el ecuador y el indicador rápido disparado en la misma dirección en la misma vela.

He intentado ajustar el EA para que se adapte a ese criterio pero no he podido obtener los resultados deseados. ¿Hay algo que esté haciendo mal? Por favor, ayuda. Gracias de nuevo.

Saludos

Terrance

Terrance

Probablemente tendrás que escribir un indicador personalizado para lograr eso (algunas cosas en los EAs simplemente no se pueden hacer de la misma manera que los indicadores)

 
mladen:
Terrance Probablemente tendrás que escribir un indicador personalizado para lograrlo (algunas cosas en los EAs simplemente no se pueden hacer de la misma manera que los indicadores)

Hola mladen, 1 cosa que no entiendo es que por qué soy capaz de hacer esto con MA y no iMA a pesar de ser el mismo tipo de criterios? ¿Podría ser algún tipo de configuración del indicador?

Saludos

Terrance

 
tkuan77:
Hola mladen, 1 cosa que no entiendo es que por qué soy capaz de hacer esto con MA y no iMA a pesar de ser el mismo tipo de criterio? ¿Podría ser algún tipo de configuración del indicador?

Saludos

Terrance

porque con el indicador personalizado puedes guardar estados (tendencias) entre los dos ticks, y cuando usas iMA no puedes (solo un ejemplo)