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

 
Azerus:

La última función publicada por Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), sólo tiene en cuenta las órdenes abiertas:

He intentado ampliarlo un poco incluyendo las órdenes pendientes en él (simplemente añadiendo otros tipos): pero las órdenes pendientes no se tienen en cuenta. ¿Se cuentan de forma diferente? La documentación no dice nada al respecto....


Las órdenes pendientes no tienen "pérdida potencial total de las posiciones abiertas en la moneda de depósito".

La función GetPotentialLossInCurrency() devuelve la pérdida potencial total de las posiciones abiertas en la moneda del depósito.

Se refiere a las posiciones en el mercado. Pulse F1 en estas funciones de mercado, vuelva a leer la información con atención:

tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
              if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
              if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
              pl+=OrderCommission()+OrderSwap();
 
Roman.:


Lasórdenes pendientes no tienen "pérdida potencial total de las posiciones abiertas en la moneda del depósito".

La función GetPotentialLossInCurrency() devuelve la pérdida potencial total de las posiciones abiertas en la moneda del depósito.

Estamos hablando de posiciones en el mercado. Pulse F1 en estas funciones de mercado, vuelva a leer la información con atención:

 

Pregunta a los programadores:
en una nueva barra, el Asesor Experto comprueba si la orden sobre el euro está viva (por ejemplo), si no - hace una nueva operación, si sí - deja todo como está.
poner tal condición:

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!="EURUSD"||Tip>1){continue;}else{// Не наш ордер

      
   RefreshRates();
  double point5 =MarketInfo("EURUSD", MODE_POINT);//Запрос Point
 double bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Bid
 double ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Ask
  double SL5 = NormalizeDouble(bid5+(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5 = NormalizeDouble(bid5-(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS)); 
  double SL5v = NormalizeDouble(bid5-(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5v = NormalizeDouble(bid5+(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));  
 if ((iVolume("EURUSD",Period(),4)) > (iVolume("EURUSD",Period(),1))) { 
 ticket=OrderSend("EURUSD",OP_SELL,lot_EUR,bid5,Slip,0,0);// Открытие Sell
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5,TP5 ,0,CLR_NONE); 
 {Alert (GetLastError());} // Сообщение об ошибке
}else{ticket=OrderSend("EURUSD",OP_BUY,lot_EUR,ask5,Slip,0,0); // Открытие BUY
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE); 
 { Alert (GetLastError());} // Сообщение об ошибке
}}

        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.

Pero el código no funciona. ¿Dónde está el error?

 
Cruc:

He aquí una pregunta para los programadores:
en una nueva barra, el Asesor Experto comprueba si la orden EUR está viva (por ejemplo, si no lo está, abre una nueva operación, si lo está, deja todo como está.
He puesto esa condición:

Pero el código no funciona. ¿Dónde está el error?

Mira lo que pasa si hay una docena de pedidos y el tuyo es el séptimo (por ejemplo)

Compruebe el primero: no es el nuestro.

Comprueba el segundo, no es el nuestro.

...

comprobar el séptimo - el nuestro

comprueba el octavo, no es nuestro.

...

 


La idea es que cuando abra un grupo de órdenes en un par, pueda cerrar todas las órdenes superpuestas en un solo movimiento.

Modificar/borrar orden--->tipo---->Cerrar órdenes superpuestas

Borra los pedidos superpuestos... ¿Existe esta función en MQL?

Oops, lo encontré:https://forum.mql4.com/ru/4822

 
ilunga:

ver qué pasa si hay una docena de pedidos y el tuyo es el séptimo (por ejemplo)

comprueba el primero - no es nuestro.

Comprueba el segundo, no es nuestro.

...

comprobar el séptimo - el nuestro

comprueba el octavo, no es el nuestro, establece el orden

...


Sólo hay una orden abierta en este par. Sólo compruebo el símbolo EURUSD dado, pero no debo haber establecido la condición correctamente

if(OrderSymbol()!="EURUSD"||Tip>1){continuar;}else{

necesitamos if(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


Sólo hay una orden abierta para este par. Estoy comprobando sólo el símbolo EURUSD dado, pero debo haber puesto la condición mal

if(OrderSymbol()!="EURUSD"||Tip>1){continuar;}else{

need if(OrderSymbol()= Symbol("EURUSD"){

Si sólo tienes un símbolo en un Asesor Experto, puedes simplemente recordar su ticket y comprobarlo cada vez, sin tener que pasar por todas las órdenes
 
ilunga:
si sólo tienes 1 en tu EA, puedes simplemente recordar su entrada y comprobar cada vez que se cierra o no, sin tener que pasar por todas las órdenes

Muchas gracias por la recomendación, casi lo he resuelto, solo que no recuerdo si se activa la orden, entonces el ticket toma valor -10?
 
Roman.:


Las órdenes pendientes no tienen "pérdida potencial total de las posiciones abiertas en la moneda del depósito".

La función GetPotentialLossInCurrency() devuelve la pérdida potencial total de las posiciones abiertas en la moneda del depósito.

Se refiere a las posiciones en el mercado. Pulse F1 en estas funciones de mercado, vuelva a leer la información con atención:


Entiendo muy bien que la función GetPotentialLossInCurrency() está hablando de posiciones abiertas. Tengo una pregunta: ¿por qué no se pueden contabilizar también las órdenes pendientes?

La documentación:

double OrderOpenPrice(  )

 Возвращает цену открытия для выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

double OrderStopLoss(   )

 Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

En ningún sitio dice que OrderOpenPrice y/o OrderStopLoss sólo se apliquen a las órdenes abiertas.

 
Cruc:

Muchas gracias por la recomendación, casi lo he resuelto, sólo que no recuerdo si la orden se dispara, ¿el ticket toma un valor de -10?
El billete se queda como estaba