[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 513

 

Consejos profesionales para optimizar los precios de apertura en el autooptimizador:

https://forum.mql4.com/ru/42125

 
Hola, soy un principiante tratando de entender cómo escribir un EA
aconsejar como escribir "si una orden previamente cerrada fue una orden de compra y cerrada con un stop loss entonces vender 0.1 lote con un stop loss 50 take profit 50" por favor)
 

¡Especialistas! ¡Ayuda! ¿Cómo se puede poner en práctica?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

Tenemos que fijar OPEN=true hasta que el
condición2. La condición1 puede cambiar durante este tiempo.

Gracias de antemano.

 

sacarlo para la salida

 bool OPEN=false;
 
sergeev:

sacarlo para la salida


¡Muchas gracias! Como dicen, todo es brillantemente simple. Y me he estado devanando los sesos todo el día.
 

Por favor, dígame qué estoy haciendo mal al calcular el número de primeras barras ( Quant_Bars ) que corresponden a la condición sólo por encima o por debajo del buffer. Es decir, en cuanto el indicador se dibuje ANTES de la barra cerrada (1), debería contar las barras anteriores con el indicador POR DEBAJO de las barras (excepto las que no se ajustan a la condición) y viceversa, en el sentido contrario del movimiento. Mi variante da valores erróneos.

¿Quién sabe cómo hacerlo?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

pregunta,

¿Por qué, cuando mi Asesor Experto drena limpiamente todo el depósito y prácticamente todas las operaciones son perdedoras, entonces cuando cambio la "polaridad" de las señales, el depósito no aumenta tan rápidamente, pero ya? )))) los puntos son los mismos, el error está en la dirección de apertura de la orden solamente, o hay algo más?

 
Maxaxa:

pregunta,

¿Por qué, cuando mi Asesor Experto drena limpiamente todo el depósito y prácticamente todas las operaciones son perdedoras, entonces cuando cambio la "polaridad" de las señales, el depósito no aumenta tan rápidamente, pero ya? )))) los puntos son los mismos, el error está en la dirección de apertura de la orden solamente, o hay algo más?

Esta es una filosofía de comercio.
 
Maxaxa:


hay algo más
 
Solree:

Buenas tardes.

Hay 4 órdenes, 2 ventas y 2 compras. Los sellos se crean, en sentido figurado, cuando el precio sube y se compran cuando baja. Las ventas se borran cuando se crea una compra y viceversa. Cuando se crea un ticket, la primera venta o compra se almacena en la variable pos. Los 4 tienen el mismo comentario: "Aelit". Por lo tanto, hay un código:

El orden es seleccionado normalmente por el billete, pero muy a menudo la comparación del comentario falla. Por interés, hice else Alert(OrderComment()); y el log mostró "Alert: Aelit[sl]". ¿Qué es [sl]? ¿Es porque todos los pedidos tienen el mismo comentario? Entonces, ¿por qué el mismo [sl] cuando hice un comentario que no coincidía con los demás para la prueba? Si se elimina la comprobación de los comentarios, aparece un error de ticket en el registro de OrderModify. Al principio pensé que esta condición se alcanzaba antes de crear cualquier orden, pero no, en ese momento la orden ya está ahí, y el ticket es el mismo en caso de que la condición se dispare y no se dispare. ¿Cómo lo entendemos?

No es un milagro que su empresa de corretaje agregó a su comentario - la orden se ha cerrado cuando se alcanzó el StopLoss.

No ha organizado correctamente la selección de pedidos en el billete. Cuando se hace una selección de este tipo, en primer lugar, MODE_TRADES es innecesario - se omite en la función OrderSelect(),

En segundo lugar, después de la selección exitosa de la orden, no se comprueba si la orden se selecciona de la matriz de órdenes según el ticket - de las de mercado o de las cerradas.

Para ello, después de seleccionar la orden, comprueba su hora de cierre y si es igual a cero, sólo entonces la orden es de mercado, de lo contrario - se selecciona de las órdenes ya cerradas (de ahí la adición a su comentario)

Razón de la queja: