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

 
Valeriy Yastremskiy:

diferencia de módulos. Sin el módulo, sólo la zona superior entra en la condición. | Precio de apertura - Oferta |> 10*_Punto condición de apertura

Así es como debería ser la condición, la oferta es menor que el precio abierto y no hay módulos.

De lo contrario, obtendremos un resultado correcto si la oferta es mayor que el precio abierto

 
Valeriy Yastremskiy:

diferencia de módulos. Sin el módulo, sólo la zona superior entra en la condición. | OpenPrice - Bid |> 10*_Point opening condition

No lo entiendo...

Puede por favor aclararlo... para un principiante)

 
MakarFX:

Me sorprendes.


¿Con qué?
 
Alexey Viktorov:
¿Cómo?
Alexey Viktorov:

En la imagen se puede ver que OpenPrice - Bid no debe ser más de 10*_Point

pero puede ser menor, incluyendo el negativo

 
MakarFX:

pero puede ser menor, incluyendo el negativo

Sí... y consigues la condición con "&& > 0"

¿Cuál es la pregunta? ¿Así, sin más, o por algo?

 
Alexey Viktorov:

Sí... y consigues la condición con "&& > 0"

¿Cuál es la pregunta? ¿Así, sin más, o por algo?

Actualmente estoy utilizando esta definición del momento para entrar en el mercado

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point)

Pensé que podría haber una manera de simplificarlo)

 

Ayudar a optimizar un código para martin

La tarea es ésta:

-después de la parada, un Martin multiplicará el lote;

-El número de multiplicaciones se puede ajustar con la función OrdersClose, y cuando alcanza un valor especificado, el lote se restablece al inicial;

- el volumen del lote no debe restablecerse al volumen inicial, sino que debe disminuirse secuencialmente en orden inverso;

por ejemplo OrdersClose=5, Martin=2, lote=0.01:

tenemos la secuencia: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,01; 0,01;,,,,

necesidad: 0 ,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,16; 0,08; 0,04; .... 0,01.

No tengo suficientes conocimientos para resolver el problema por mí mismo.

He probado diferentes combinaciones, pero no he conseguido el efecto deseado.

double LOT()
{
   int n=0;
   double OL=dLots;
   for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
   {
      if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
         {
            if (OrderProfit()<0) 
            {
               if (n==0) OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) {Comment("1");return(dLots);}
            }
            else
            {
               if (n==0) {Comment("2");return(dLots);}
               else {Comment("3");return(OL);}
            }
         }
      }
   }
   return(OL);
}
 
MakarFX:

Actualmente estoy utilizando esta definición de punto de entrada al mercado

Pensé que podría haber una manera de simplificarlo)

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point) // цену в середину диапазона ставим

OpenPriceS=OpenPrice-X*Point/2;
if(fabs(Bid-OpenPriceS)>Х*Point){ ....   }

Y Alexey tiene razón))

Alexey Viktorov:

Así debería ser por condición, Oferta por debajo del Precio Abierto y sin módulos.

De lo contrario, obtendremos un resultado correcto si la oferta es mayor que el precio abierto

Fijo)

Sí, correcto. No cambió la condición. Por costumbre. Se confunde en una imagen que Bid está en el medio))))

Pero allí la segunda condición, la entrada es la misma en número de condiciones.

 
законопослушный гражданин:

Ayudar a optimizar un código para martin

La tarea es ésta:

-después de la parada, un Martin multiplicará el lote;

-El número de multiplicaciones se puede ajustar con la función OrdersClose, y cuando alcanza un valor especificado, el lote se restablece al inicial;

- el volumen del lote no debe restablecerse al volumen inicial, sino que debe disminuirse secuencialmente en orden inverso;

por ejemplo OrdersClose=5, Martin=2, lote=0.01:

tenemos la secuencia: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,01; 0,01;,,,,

necesidad: 0 ,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,16; 0,08; 0,04; .... 0,01.

No tengo suficientes conocimientos para resolver el problema por mí mismo.

He probado diferentes combinaciones, pero no he conseguido el efecto deseado.

//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double L=0;
   // если последняя закрытая сделка убыточная и лот равен стартовому
   // включаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)==Lot) 
     {
      Martin=true;
     }
   // если последняя закрытая сделка убыточная и лот больше или равен максимальному
   // выключаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)>=MaxMartinLot)
     {
      Martin=false;
     }
   // если последняя закрытая сделка убыточная и Мартин включен, умножаем лот
   if(Martin==true)
     {
      L=NormalizeDouble(GetInfoLastPos(1)*K_Martin,DigitsLot);
     }
   // если последняя закрытая сделка убыточная и Мартин выключен, делим лот
   if(Martin==false)
     {
      L=NormalizeDouble(GetInfoLastPos(1)/K_Martin,DigitsLot);
     }

   if(L>MAXLOT) L = MAXLOT;
   if(L<MINLOT) L = MINLOT;
   return(L);
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                                    |
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
 
Valeriy Yastremskiy:

Y Alexei tiene razón))

Sí, así es. No cambió la condición. Por costumbre. Se confunde en la foto que Bid está en el centro)))

Gracias, pero no simplifica mi código de ninguna manera)

Razón de la queja: