[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 582

 
Azerus:

Последняя опубликованная Кимовская функция GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107) учитывает только открытые ордера:

я попытался ее немного расширить, включив туда и учет отложенных ордеров (попросту дописав остальные типы): но отложенные ордера не учитываются. Они что, считаются как-то по другому? В документации ничего об этом не говорится....


У отложенных ордеров нет "суммарного потенциального убытка открытых позиций в валюте депозита".

Функция GetPotentialLossInCurrency() возвращает суммарный потенциальный убыток открытых позиций в валюте депозита.

Речь идет о позициях в рынке. Понажимайте F1 на этих рыночных функциях, перечитайте инфу внимательней:

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


У отложенных ордеров нет "суммарного потенциального убытка открытых позиций в валюте депозита".

Функция GetPotentialLossInCurrency() возвращает суммарный потенциальный убыток открытых позиций в валюте депозита.

Речь идет о позициях в рынке. Понажимайте F1 на этих рыночных функциях, перечитайте инфу внимательней:

 

Вопрос к программистам такой:
на новом баре, советник проверяет жив ли ордер по евро ( к примеру ), если нет - то заключает новую сделку, если да - то оставляет все как есть.
поставил такое условие:

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

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

Но код не работает. Где ошибка?

 
Cruc:

Вопрос к программистам такой:
на новом баре, советник проверяет жив ли ордер по евро ( к примеру ), если нет - то заключает новую сделку, если да - то оставляет все как есть.
поставил такое условие:

Но код не работает. Где ошибка?

посмотрите что будет, если ордеров с десяток, а ваш седьмой (к примеру)

проверяем первый - не наш. выставим ордер

проверяем второй - не наш. выставим ордер

...

проверяем седьмой - наш

проверяем восьмой - не наш. выставим ордер

...

 


Суть такая- когда открываем кучу оредорв по одной паре, то можно закрывать все перекрытие ордера одним движением.

Модифицировать/удалить ордер--->тип---->Закрыть перекрытые ордера

Он удалаяет перекрытые ордера... А есть ли в MQL такая функция?

Упс, нашел:https://forum.mql4.com/ru/4822

 
ilunga:

посмотрите что будет, если ордеров с десяток, а ваш седьмой (к примеру)

проверяем первый - не наш. выставим ордер

проверяем второй - не наш. выставим ордер

...

проверяем седьмой - наш

проверяем восьмой - не наш. выставим ордер

...


Ордеров по данной паре открыт только один. Я же проверяю только по данному символу EURUSD, но наверное я не правильно задал условие

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

нужно if(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


Ордеров по данной паре открыт только один. Я же проверяю только по данному символу EURUSD, но наверное я не правильно задал условие

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

нужно if(OrderSymbol()= Symbol("EURUSD"){

если он у вас совсем 1 в эксперте, то можете просто запомнить его ticket и каждый раз проверять закрылся он или нет, не перебирая все ордера
 
ilunga:
если он у вас совсем 1 в эксперте, то можете просто запомнить его ticket и каждый раз проверять закрылся он или нет, не перебирая все ордера

Спасибо большое за рекомендацию, я уже почти догадался так сделать, только не помню если ордер сработал, то ticket принимает значение -10?
 
Roman.:


У отложенных ордеров нет "суммарного потенциального убытка открытых позиций в валюте депозита".

Функция GetPotentialLossInCurrency() возвращает суммарный потенциальный убыток открытых позиций в валюте депозита.

Речь идет о позициях в рынке. Понажимайте F1 на этих рыночных функциях, перечитайте инфу внимательней:


Я прекрасно понимаю, что речь в функции GetPotentialLossInCurrency() идет об открытых позициях. У меня вопрос: почему не получается учитывать и отложенные ордера?

Документация:

double OrderOpenPrice(  )

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

double OrderStopLoss(   )

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

Нигде не говорится, что OrderOpenPrice и\или OrderStopLoss применяются только к открытым ордерам.

 
Cruc:

Спасибо большое за рекомендацию, я уже почти догадался так сделать, только не помню если ордер сработал, то ticket принимает значение -10?
Тикет остается какой был
Причина обращения: