[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 87

 
FOReignEXchange:


A quien le gusta lo que le gusta. La letra de cada persona es diferente. Tal vez lo hayas entendido bien, pero creo que es una chapuza.

Yo no lo haría así.

En primer lugar, no estoy muy seguro de por qué debería declarar una variable ahí y qué sentido tiene, tampoco lo entiendo.

En segundo lugar, la línea PriceBuy = Ask; se encuentra justo después de la función OrderSend. Y según tengo entendido, los cálculos se pasan inmediatamente a la siguiente línea en cuanto esta función termina su ejecución. No creo que el precio Ask pueda cambiar. Intento escribir todo lo más sencillo posible, reduciendo el número de caracteres, si no interfiere con el funcionamiento normal del programa. Puedo asignar un valor de la misma manera que tú, no veo ningún problema. Escribí lo primero y más fácil que se me ocurrió.

Una vez escribí un Asesor Experto en Pips y me presenté a un concurso en el que el beneficio mínimo a tener en cuenta era de 5 pips. Puse TP=5, SL=10 en mi EA y me fui a dar un paseo. Llegué a casa por la noche, miré el terminal y me decepcionó. Mi Pips Expert Advisor cerró la mayoría de mis operaciones con ganancias, pero el beneficio de algunas de ellas fue de 4 puntos e incluso de 3, y no de 5, que era lo que necesitaba. Por cierto, la SL a veces no era de 10, sino de 11 o 12 puntos...

¿Por qué? Estoy seguro de que sabes la respuesta. :D

Esta es la situación de la vida real, en la que he dejado de contar con los precios Ask y Bid como precios de apertura de las órdenes. Si 1-2 puntos no son significativos para usted, está bien. Para mí lo importante son las pequeñas cosas.

 
MaxZ:

¿Por qué no? ¡Estoy seguro de que sabes la respuesta! :D

No. Al principio pensé que era porque no se contaba con el diferencial.

¿Hubo alguna operación en la que el beneficio fuera de 6-7 pips?

 
FOReignEXchange:
No. Primero pensé que era porque no se había calculado el diferencial.

Mierda... Citándome a mí mismo:

MaxZ:

Tercero: si se especifica el deslizamiento en la función comercial OrderSend y queremos abrir una orden de compra, no es necesario que la orden se abra exactamente al precio Ask, ya que se necesita una cierta cantidad de tiempo para ejecutar una orden comercial dada por la función OrderSend y el precio puede alejarse de este valor.

¿Y a qué valor de precio estamos vinculando TP y SL? Para preguntar... El precio ha cambiado, pero el TP y el SL no se han movido a ninguna parte.

 
MaxZ:

¿A qué valor de precio fijamos el TP y el SL? Para preguntar... El precio ha cambiado, pero el TP y el SL no se han movido a ninguna parte.

No puedo garantizar que mi ortografía sea absolutamente correcta. Pero yo lo hago así siempre que lo necesito. No he notado nada malo en él.

No puedo decir nada sobre tu caso, en el que tuviste una fijación de beneficios inferior a 5 pips, porque no he visto el código.

 

Era:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Se convirtió:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

El principio es el siguiente. Pero en realidad es un poco más complicado que eso...

¿Cuántas líneas? ¿De verdad? :)))

 
MaxZ:

Era:

Se convirtió:

El principio es el siguiente. Pero en realidad es un poco más complicado que eso...

¿Cuántas líneas? ¿De verdad? :)))


??? No lo entiendo. ¿Dónde están el SL y el TP en el primer ejemplo?
 
FOReignEXchange:

??? No lo entiendo. ¿Dónde están el SL y el TP en el primer ejemplo?

Sólo mostré el principio. Muy bien, entonces. Añadido.

MaxZ:

El principio es el siguiente. Pero en realidad es un poco más complicado que eso...

Si la orden no se abre al precio indicado, puede haber un error al modificar la orden y nos encontraremos con el mismo rastrillo... Por eso, en realidad, intentamos modificar la orden más de una vez si tiene un Ticket positivo... No queremos copiar todo el código. Es engorroso. Pero el principio está establecido.
 
Ah, ya veo. SL y TP se encuentran ante la función OrderSend. ¿Quizás ese era el problema?
 
FOReignEXchange:
Ah, ya veo. SL y TP están delante de la función OrderSend. ¿Quizás ese era el problema?
¿Cuál puede ser el problema? Para cuando se calculen el SL y el TP, el precio tendrá tiempo de cambiar? ;)))
 
MaxZ:
¿Cuál podría ser el problema con eso? Para cuando se calculen el SL y el TP, ¿tendrá el precio tiempo para cambiar? ;)))

Te dije que mientras la función OrderSend se ejecuta, el precio puede cambiar. Así que tenemos que asignarlo después, cuando ya ha cambiado.