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();
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);//Запрос Pointdouble bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Biddouble ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Askdouble 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);// Открытие SellOrderSelect(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); // Открытие BUYOrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE);
{ Alert (GetLastError());} // Сообщение об ошибке
}}
} // Конец анализа орд.
} // Конец перебора орд.
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)
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?
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:
doubleOrderOpenPrice( )
Возвращает цену открытия для выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
doubleOrderStopLoss( )
Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
En ningún sitio dice que OrderOpenPrice y/o OrderStopLoss sólo se apliquen a las órdenes abiertas.
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:
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:
Pero el código no funciona. ¿Dónde está el error?
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
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"){
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 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?
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:
En ningún sitio dice que OrderOpenPrice y/o OrderStopLoss sólo se apliquen a las órdenes abiertas.
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?