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

 

Todo se selecciona con normalidad, pero los errores son extraños, no puedo resolverlos con el probador.

Dice que cerré el lote 0.3 y vendí el lote 0.7 al mismo tiempo. ¿Es así como se cierra parte de un acuerdo en el probador? No sé de dónde salen esos volúmenes; no veo ninguna información sobre esos volúmenes en mi Expert Advisor.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Todo se selecciona con normalidad, pero los errores son extraños, no puedo resolverlos con el probador.

Dice que cerré el lote 0.3 y vendí el lote 0.7 al mismo tiempo. ¿Es así como se cierra parte de un acuerdo en el probador? Además, no sé de dónde salen esos volúmenes cuando se cierra una parte de una operación y luego se abre 0,16, 0,24, 0,12; el Asesor Experto no tiene esos volúmenes.

sí, así es como se muestra parte del cierre - primero se cierra todo, luego se abre parte


Tengo dos preguntas:

1) ¿cómo saber qué no cerrar a continuación?

en el siguiente tick, la condición se cumplirá de nuevo para esta función

2) si no me equivoco, el ticket de pedido cambia después del cierre parcial, es decir

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

no habrá cambios en la segunda línea


3) Y no olvidemos la normalización...

 
ilunga:

sí, así es como se muestra el cierre de una parte - primero todo cerrado, luego la parte abierta


dos preguntas inmediatamente:

1) ¿cómo sabe que no es necesario cerrar más?

la condición en el siguiente tick se cumplirá de nuevo para esta función

2) si no me equivoco, el ticket de pedido cambia después del cierre parcial, es decir

no habrá cambios en la segunda línea


3) Y no nos olvidemos de la normalización...


¿Cambia realmente el billete? Esa debe ser la razón de todos los errores. Entonces, ¿por qué no cambia el ticket cuando se modifica el pedido manualmente? Necesito saber con seguridad si el billete cambia o no.
 


Realmente cambiante, muchas gracias
 
He oído que cuando se obtiene un precio de un par de divisas para seguir trabajando con él, debe ser normalizado, por ejemplo, un precio obtenido de un mínimo y debe ser normalizado para establecerlo en un stop loss, ¿es esto cierto?
 
sss2019:
He oído que cuando se obtiene un precio de un par de divisas, hay que normalizarlo, por ejemplo, se obtiene un precio de un mínimo y hay que normalizarlo a un stop loss, ¿es esto cierto?

Sí, pero nos referimos a la normalización en el momento de ponerlo en Ordersend/OrderModify/... antes de estas funciones se puede trabajar con él y realizar operaciones
 
sergeev:

Sí, pero la normalización se hace en el momento de la sustitución en Ordersend/OrderModify/... antes de estas funciones se puede trabajar con él y realizar operaciones

¿A cuántos dígitos debe normalizarse? Por defecto, el precio parece tener 4 dígitos después del punto decimal, incluso para los valores de precio de cinco dígitos, al menos el Bajo[0] y el Alto[0] siempre tienen sólo 4 dígitos después del punto decimal, traté de imprimirlo vía Alerta o vía Impresión,
 
sss2019:

¿A cuántos dígitos se debe normalizar? Por defecto el precio parece tener 4 dígitos después del punto decimal, incluso para el valor de cinco dígitos, al menos el Bajo[0] y el Alto[0] siempre tienen sólo 4 dígitos después del punto decimal, intenté imprimirlo vía Alerta o vía Impresión,

por defecto, el precio Digits tiene dígitos después del punto decimal

y la salida de Alerta e Impresión sólo 4 por defecto. Utilice la cadena DoubleToStr( valor doble, dígitos int) para más.

 

Ayuda entonces a implementar un trailing stop, así. Orden de venta

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

El problema es que el stop loss sólo debería rodar hacia adelante, pero en mi orden también rueda hacia atrás.

________________________________

Mi pregunta se ha ido, lo siento.

 
sss2019:

Ayuda entonces a implementar un trailing stop, así. Orden de venta

El problema es que el stop loss sólo debería moverse hacia adelante, pero también lo tengo movido hacia atrás.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

equivale a

NewStopLoss2 = NewStopLoss;