Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 282

 

Hola a todos los miembros del foro.

¿Algún consejo de gente entendida? Tengo un EA que abre operaciones sobre la señal del indicador, cómo prescribir un contador de señales programáticamente, es decir, después de tomar Take Profit o cerrar una orden sobre un Trailing Stop, el EA se salta las dos siguientes señales y no abre operaciones.

Agradecería la ayuda.

void CheckForOpen()
{
   int ticket, STOPLEVEL;
   double Price, SL, TP; 
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   
   
   double AO = iIchimoku (Symbol(),0,Tenkan,Kijun,Senkou,MODE_SENKOUSPANA,1); // верхняя граница облака 
   double BO = iIchimoku (Symbol(),0,Tenkan,Kijun,Senkou,MODE_SENKOUSPANB,1); // нижняя граница облака 

      
   if(Volume[0]>1) return;

   if (AO>BO) // продажа
   {
   if (Open[1]>Close[1] && Close[1] < BO && Open[1]>BO) // продажа

     {
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss >= STOPLEVEL)
          if(StopLoss > 0)
      {
       SL = Price + StopLoss*Point; // вычисляем стоплос
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
       else SL = 0;

      if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;

      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
    }
    }
 
alexey1979621:

Hola a todos los miembros del foro.

¿Algún consejo de gente entendida? Tengo un EA que abre operaciones sobre la señal del indicador, cómo prescribir un contador de señales programáticamente, es decir, después de tomar Take Profit o cerrar una orden sobre un Trailing Stop, el EA se salta las dos siguientes señales y no abre operaciones.

Agradecería cualquier ayuda.


No sé lo que quiero pero, por favor, aconséjeme cómo ponerlo en práctica.

¿Y qué quiere decir exactamente con saltarse las señales?

1) Una operación virtual... como si abriéramos una posición ficticia, la controláramos, la cerráramos también ficticiamente ( Ilanim);

2) Trate de utilizar la señal después de un cierto período de tiempo, una nueva señal puede ser recibida en ХХХ minutos;

3) ¿Evaluación de la señal después de una cierta cantidad de barras? Se puede recibir una nueva señal después de ХХХ barras;

..................

Además, cualquier otra petición:

sustituir la construcción if(Volumen[0]>1) return; no siempre se activará ya en la demo, y mucho menos en la real;

¿No es posible arreglárselas con una condición más?

if (StopLoss >= STOPLEVEL)         //    if (StopLoss > STOPLEVEL) так не проще?
   if(StopLoss > 0)

la lógica no es correcta, si no maneja la segunda condición:

if (StopLoss >= STOPLEVEL)
   if (StopLoss > 0){
      SL = Price + StopLoss*Point; // вычисляем стоплос
      SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
   }
   else SL = 0;

y mucho más...

 
ALXIMIKS:


Quiero algo que no sé qué, pero dime cómo ponerlo en práctica.

¿A qué se refiere exactamente con lo de las señales perdidas?

1) Una operación virtual... como si abriéramos una posición ficticia, la controláramos, la cerráramos también ficticiamente ( Ilanim);

2) Trate de utilizar la señal después de un cierto período de tiempo, una nueva señal puede ser recibida en ХХХ minutos;

3) ¿Evaluación de la señal después de una cierta cantidad de barras? Se puede recibir una nueva señal después de ХХХ barras;

..................

Además, cualquier otra petición:

sustituir la construcción if(Volumen[0]>1) return; no siempre se activará ya en la demo, y menos aún en la real;

¿No es posible arreglárselas con una condición más?

la lógica no es correcta, si no maneja la segunda condición:

y muchos más...

Lo principal es que funciona. if(Volumen[0]>1) funciona bien tanto en el real como en la demo, y en el tester. He escrito mis deseos con bastante claridad. Se abre una operación basada en la señal del indicador (he adjuntado la condición de apertura de la operación en el código). Después de que la operación anterior se cerró en Take Profit y Trailing Stop, necesito omitir 1 o 2 o 3 (parámetro ajustable) señales del indicador, es decir, no abrir una operación. No sé cómo prescribirlo programáticamente, por eso pido ayuda.
 

Buenos días a todos!) Recientemente me he interesado por el MQL y ahora me he encontrado con los primeros problemas. La idea es que el EA abre posiciones según la función pero no quiere cerrarlas, y por lo tanto estas órdenes de mercado sin ningún tipo de stop se colocan hasta el final de la sesión de prueba. La cuestión es dónde me he equivocado.

Aquí hay un fragmento cercano:

 if(Level >= 0.000100 && LevelXP>LevelXM && CountSell() > 0)
          {
               for(i=OrdersTotal()-1; i >= 0; i--)
               {
                   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
                   {
                       if(OrderMagicNumber() == Magic && OrderType() == OP_SELL)
                          OrderClose(OrderTicket(), OrderLots(), Ask, Slippage);
                   }
               }
          }
 
ElhoroS:

Buenos días a todos!) Recientemente me he interesado por el MQL y ahora me he encontrado con los primeros problemas. La idea es que el EA abre posiciones según la función pero no quiere cerrarlas, y por lo tanto estas órdenes de mercado sin ningún tipo de stop se colocan hasta el final de la sesión de prueba. La pregunta es ¿en qué me he equivocado?


1) Tal vez el problema esté en las condiciones de cierre (lo has dado implícitamente)

2) Sólo has cerrado OP_SELL en este código (¿te has acordado de implementar condiciones para comprar?)

3) Cuando se comprueba durante la fuerza bruta, no se comprueba el par de divisas y el marco temporal (¿por qué debería hacerlo de nuevo?)

4) No hay comprobación de las recotizaciones (en el Probador de Estrategias todo debería estar bien, pero en la cuenta demo o real - no siempre)

5) Como declaró Artemis artmedia70, MarketInfo(Symbol(),MODE_ASK) es mejor queAsk - da más precios reales

 
ALXIMIKS:


5) Como dijo Artemis MarketInfo(Symbol(),MODE_ASK) será mejor queAsk - se darán precios más relevantes

No... Basta de insultos...
 
artmedia70:
No... Basta de insultos...


Sí, me acuerdo de la última situación, Artyom, lo siento - se quedó.
 
ALXIMIKS:

Sí, recuerdo la situación pasada, Artem, lo siento - se quedó.
Artyom+Femis=Artemisa; ¡Enorgullécete, Artyom! ¡Es una confesión! Deseo que siga siendo así.
 
borilunad:
Artyom + Themis = Artemisa; ¡Enorgullécete, Artyom! ¡Es una confesión! ¡Deseo que sigan así!
 
artmedia70:
¿De dónde proceden las imágenes y cómo las hace? Es cierto que estos personajes no representan a Themis.