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

 

Tal vez no entendí mi pregunta.

Estando en el gráfico del periodo M1 quiero llenar el buffer si en el periodo M5, la línea del indicador " Estocástico" está ahora por encima del nivel 55.

input ENUM_TIMEFRAMES   TimeFrame2  =  PERIOD_M5; //ЭТО ВО ВНЕШНИХ Н
////////////////////////////////////////////////
       for(int i=limit; i>=0; i--) {
      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
    
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
    
      if(sto2_0>55.0)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      
      if(sto2_0<44.0)
       {
      BufferDN[i]=high[i]+distance*MyPoint;
       }

      Comment(sto2_0);
       }

En el comentario el valor actual es correcto con M5, pero en el historial las flechas ponen no en condición, caos.

¿Qué puede ser?

En el " sótano" el estocástico de M5

Las flechas están rodeadas no según la señal



xaoc
 

Estoy escribiendo un Asesor Experto que coloca simultáneamente dos StopOrders, una de venta y otra de compra.

¿Cómo escribo la condición para que cuando se dispare una StopOrder se elimine la segunda (la contraria)?

Gracias.

 
RichLux:

Estoy escribiendo un Asesor Experto que coloca simultáneamente dos StopOrders, una de venta y otra de compra.

¿Cómo escribo la condición para que cuando se dispare una StopOrder se elimine la segunda (la contraria)?

Gracias.

La condición es simple. Cuando se dispara una StopOrder, aparece una posición en el mercado, significa que debemos rastrear la posición, y si existe, debemos eliminar la orden contraria.

Este es un trozo de código para pensar)

void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1, color cl=clrOliveDrab) {
  bool b, s;
  switch(op) {
    case OP_BUY : b=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: s=ExistPositions(sy, OP_SELL, mn); break;
  }

  if(b) {
    DeleteOrders(sy, OP_SELLLIMIT, mn, cl);
    DeleteOrders(sy, OP_SELLSTOP , mn, cl);
  }
  if(s) {
    DeleteOrders(sy, OP_BUYLIMIT, mn, cl);
    DeleteOrders(sy, OP_BUYSTOP , mn, cl);
}}
 
Vitaly Muzichenko, por lo que tengo entendido, ahora tienes que añadir las funcionesExistPositions yDeleteOrders
 
RichLux:
Vitaly Muzichenko, según tengo entendido, ahora hay que añadir las funcionesExistPositions yDeleteOrders
Sí, es cierto.
 
RichLux:
Vitaly Muzichenko, según tengo entendido, ahora hay que escribir las funcionesExistPositions yDeleteOrders
No tienes que escribirlos, ambos estánlistos
 
Vitaly Muzichenko:
No tienes que escribirlas, ambas estánhechas.

Bueno..., para fines educativos es bastante útil...

A efectos prácticos, es muy caro ejecutar ciclos en cada función.

 
Artyom Trishkin:

Bueno..., para la formación es muy útil...

A efectos prácticos, es muy costoso ejecutar ciclos en cada función.

Por eso no he adjuntado de una vez y he descrito y adjuntado sólo la lógica del "cierre del contrario" )
 

Qué hacer si el tope/parada es de 200

pero

tp=NormalizarDoble((precio+(TakeProfit*_Punto)),Dígitos);

en un dólar-yen dará 317.000 al cambio de 117.000

el resultado esperado es 117.200

 
trader781:

Qué hacer si el tope/parada es de 200

pero

tp=NormalizarDoble((precio+(TakeProfit*_Punto)),Dígitos);

en un dólar-yen dará 317.000 al cambio de 117.000

el resultado esperado es 117.200

¿Por qué tantos paréntesis? Es cuestión de gustos, por supuesto, pero sigue siendo demasiado.

tp=NormalizarDoble(precio+TakeProfit*_Punto,_Dígitos);

Los valores se sustituyen incorrectamente si el resultado es incorrecto en la salida, porque esta línea de código calculará todo correctamente, incluso con paréntesis adicionales.