Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 249

 

¿Qué tipo de error es este, lo tomo del lado de la DC, un mal entrenamiento?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

¿Qué clase de error es este, lo tomo del lado de la DC de la mala información?

128

ERR_TRADE_TIMEOUT

Tiempo de espera expirado


Pieza del manipulador:

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

ERR_TRADE_TIMEOUT

Tiempo de espera expirado para la ejecución de la operación


Pieza del manipulador:

Hoy decidí comprobar mi programa en la demo de una popular empresa de corretaje y me enfrenté a estos errores por primera vez.

¿Entiendo correctamente que se trata de un problema de hardware de la empresa de corretaje y no de mi parte?

 

Por favor, dígame si esta función es correcta. La idea es calcular si el precio ha roto el precio medio durante una cierta cantidad de velas anteriores.

la función no se ejecuta en absoluto, el resultado debe ser: si no se ha roto returnToMA ==1, si se ha roto returnToMA ==0

¿tal vez haya otra solución a este problema?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=barras;i++)

{

if(iLow(Sym bol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

if (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

Si no es así, return(1);

}

 
forexpipsrunner:

Por favor, dígame si esta función es correcta. La idea es calcular si el precio ha roto el precio medio durante una cierta cantidad de velas anteriores.

la función no se ejecuta en absoluto, el resultado debe ser: si no se ha roto returnToMA ==1, si se ha roto returnToMA ==0

¿Quizás haya otras soluciones a este problema?

Su función siempre tendrá cero porque el máximo o el mínimo siempre es mayor/menor o igual que el MA.

En su caso, la vela debe ser descrita por al menos dos parámetros:

1) Definir dónde se abrió la vela - por encima o por debajo de la MA

2. En función de 1, compruebe si se ha tocado el MA.

 
-Aleks-:

Siempre tendrá cero en la función - ya que el máximo o el mínimo es siempre mayor/menor o igual que el MA.

En su caso, la vela debe ser descrita por al menos dos parámetros:

1. determinar dónde se abrió la vela - por encima o por debajo de la MA

2. En función de 1, compruebe si se ha tocado el MA.

Gracias. He añadido la condición pero siempre devuelve 1. ¿Puedo cambiar los paréntesis en algún sitio? O el break no funciona y la función termina asignando 1 al valor de retorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=barras;i++)

{

if( iLow(Sym bol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si no, devolver(1);

}

 
forexpipsrunner:

Gracias. He añadido la condición, pero siempre devuelve 1. ¿Puedo cambiar los paréntesis en alguna parte? O el break no funciona y la función termina asignando 1 al valor de retorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=barras;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

si no, devolver(1);

}


Pruébalo así

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

Devolverá 1 si se cumple la condición - hubo una intersección - ¿no es eso lo que queremos?

 
-Aleks-:

Prueba esto

Devolverá 1 si se cumple la condición - hubo una intersección - ¿no es eso lo que queremos?

Gracias, funciona como un reloj con su versión del código
 
forexpipsrunner:
Gracias, funciona como un reloj con su versión del código

Me alegro de haber sido de ayuda.
 

¡Buenas tardes!

Chicos, ¿podéis decirme si se puede mostrar programáticamente el indicador en el gráfico? ¿O sólo manualmente?

Si es así, ¿qué orden se da?