[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 582

 
Azerus:

A última função publicada pela Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), leva em conta apenas os pedidos em aberto:

Tentei ampliar um pouco, incluindo nele as ordens pendentes (simplesmente adicionando outros tipos): mas as ordens pendentes não são levadas em conta. Eles são contados de maneira diferente? A documentação não diz nada sobre esta....


As ordens pendentes não têm "perda potencial total de posições em aberto na moeda do depósito".

A função GetPotentialLossInCurrency() retorna a perda potencial total de posições em aberto na moeda de depósito.

Refere-se a posições no mercado. Pressione F1 sobre estas funções de mercado, releia as informações cuidadosamente:

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.:


Asordens pendentes não têm "perda potencial total de posições abertas na moeda de depósito".

A função GetPotentialLossInCurrency() retorna a perda potencial total de posições em aberto na moeda de depósito.

Estamos falando de posições no mercado. Pressione F1 sobre estas funções de mercado, releia as informações cuidadosamente:

 

Pergunta aos programadores:
em um novo bar, o Expert Advisor verifica se o pedido em euro está vivo (por exemplo), se não - faz um novo negócio, se sim - deixa tudo como está.
coloca tal condição:

 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());} // Сообщение об ошибке
}}

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

Mas o código não funciona. Onde está o erro?

 
Cruc:

Esta é uma pergunta para os programadores:
em um novo bar, a EA verifica se o pedido EUR está vivo (por exemplo, se não estiver, abre um novo negócio, se estiver, deixa tudo como está.
Eu estabeleci tal condição:

Mas o código não funciona. Onde está o erro?

Veja o que acontece se houver uma dúzia de pedidos e o seu for o sétimo (por exemplo)

Verifique o primeiro - não é o nosso.

Verifique o segundo, não é o nosso.

...

verifique o sétimo - o nosso

verifique a oitava, não é a nossa.

...

 


A idéia é que quando você abre um monte de pedidos em um par, você pode fechar todos os pedidos sobrepostos em um único movimento.

Modificar/eliminar pedido--->tipo---->Fechar pedidos sobrepostos

Elimina as ordens sobrepostas. Existe tal função na MQL?

Oops, encontrei-o:https://forum.mql4.com/ru/4822

 
ilunga:

veja o que acontece se houver uma dúzia de pedidos e o seu for o sétimo (por exemplo)

verifique a primeira - não é a nossa.

Verifique o segundo, não é o nosso.

...

verifique o sétimo - o nosso

verifique o oitavo, não é nosso, defina a ordem

...


Há apenas uma ordem em aberto neste par. Eu só verifico o símbolo EURUSD dado, mas não devo ter definido a condição corretamente.

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

precisamos se(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


Há apenas um pedido em aberto para este par. Estou verificando apenas o símbolo EURUSD dado, mas devo ter colocado a condição de forma errada

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

necessidade if(OrderSymbol()= Símbolo("EURUSD"){

Se você tiver apenas 1 símbolo em um Expert Advisor, você pode simplesmente lembrar seu bilhete e verificá-lo sempre, sem passar por todos os pedidos
 
ilunga:
se você tiver apenas 1 em sua EA, você pode simplesmente lembrar seu bilhete e verificar cada vez que ele for fechado ou não, sem passar por todas as ordens

Muito obrigado pela recomendação, eu quase descobri, só não lembro se o pedido é acionado, então o bilhete tem valor -10?
 
Roman.:


As ordens pendentes não têm "perda potencial total de posições abertas na moeda de depósito".

A função GetPotentialLossInCurrency() retorna a perda potencial total de posições em aberto na moeda de depósito.

Refere-se a posições no mercado. Pressione F1 sobre estas funções de mercado e releia as informações cuidadosamente:


Entendo muito bem que a função GetPotentialLossInCurrency() está falando de posições em aberto. Tenho uma pergunta: por que as ordens pendentes também não podem ser contabilizadas?

A documentação:

double OrderOpenPrice(  )

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

double OrderStopLoss(   )

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

Em nenhum lugar diz que OrderOpenPrice e/ou OrderStopLoss se aplicam somente a pedidos abertos.

 
Cruc:

Muito obrigado pela recomendação, eu quase descobri, só não consigo lembrar se o pedido é acionado, o bilhete leva um valor de -10?
O bilhete permanece como estava