[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 898

 
Dimka-novitsek:
La misma situación.
Mostrar el código
 
arvis:
¿Cómo puedo configurar el indicador para que cuente las ganancias en pips a partir de un determinado momento en MT4?

Si quieres que se base en el tiempo, así será cuando el precio se cierre, y si quieres que cuente los puntos a partir de las 21:00, entonces tienes que jugar con el tiempo y no es nada complicado.

 double Profit; // или double Profit = 0;

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2);
CurrCl = iClose(Symbol(), 0, 1);

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}
 

Por favor, aconséjeme cómo hacer que el siguiente código sea correcto:

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

Para que pueda hacer así:

if (LastOpenOrder - Bid >= 25 * Point) CloseOrder;

Es decir, cerrar sólo esta última orden abierta, ¡no tocar las demás!

Gracias de antemano.

 

¿Cómo puedo escribir correctamente en mi EA y obtener el resultado del indicador en él?

double ROC = iCustom(NULL,0, "ROC",12,0,0); - no hay salida de datos.

double ROC = iCustom(NULL,0, "ROC",12,0,0,0); - los datos no se imprimen.

double ROC = iCustom(NULL,0, "ROC",12,0,0,0,0); - los datos no se imprimen.

Indicador: https://www.mql5.com/ru/code/9340

 
DhP:

¿Cómo puedo escribir correctamente en mi EA y obtener el resultado del indicador en él?

double ROC = iCustom(NULL,0, "ROC",12,0,0); - no hay salida de datos.

double ROC = iCustom(NULL,0, "ROC",12,0,0,0); - los datos no se imprimen.

double ROC = iCustom(NULL,0, "ROC",12,0,0,0,0); - los datos no se imprimen.

Indicador: https://www.mql5.com/ru/code/9340

La forma correcta sería así:

double ROC = iCustom(NULL,0,"ROC",0,0);

pero no puedo entender lo que vas a hacer con él. bueno, tal vez no necesito entenderlo )

 
belck:

Si quieres usar la hora, así será cuando el precio se cierre, y si quieres usar las 21:00, entonces tienes que jugar con la hora y no hay nada complicado en ello.


Gracias por la ayuda, Belck.

Dígame, ¿cómo puede calcular la misma cantidad de beneficios en pips, si opera en varios pares? Además, hay que tener en cuenta los tratos cerrados.

 
arvis:


Gracias por tu ayuda, Belck.

¿Cómo puedo calcular el mismo beneficio en pips si opero en varios pares? Además, también hay que tener en cuenta las operaciones cerradas.

Me resulta difícil responder a esta pregunta.

Pero puedo decir una cosa que todo esto debe ser llamado.

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2); // то тут указываете какая валютная пара и по желанию период : PrevCl = iClose("EURUSD", PERIOD_H1, 2);
CurrCl = iClose(Symbol(), 0, 1); // тут так же

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}

el precio de la última orden abierta se llama así:

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 
Todo está más o menos claro. Muchas gracias por su tiempo, Belck.
 
arvis:


Gracias por la ayuda, Belck.

¿Cómo puedo calcular el mismo beneficio en pips si opero en varios pares? Ya he empezado a hacerlo así, pero no estoy seguro de cómo hacerlo.

Empecé a hacerlo así, pero ahora entiendo que me confundí:

double LastOpenPriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

и

double LastClosePriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderClosePrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 

Este es el criterio con el que estoy perplejo:

- Si hubo más de una orden cerrada, se debe contar su número total de pips rentables, pero lo que se debe contar son los pips.

Por favor, aconseje cómo proceder correctamente en este código:

LastBuyPrice = FindLastBuyPrice();     

if (Ask - LastBuyPrice >= 25 * Point) {
      for (int l_pos_16 = OrdersTotal()  - 1; l_pos_16 >= 0; l_pos_16--) {
 OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         }
       }
     }


double FindLastBuyPrice() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}