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

 
Vovo4ka:

Почему то берется прибыль, не та которая должна быть.....когда закрывается лот, обрано когда прибыль должна быть 30пп в прибыли пишется совершенно другое....хрень какая то


Че за бред: "по сути дела просчитать разницу между открытием ордера и его закрием) и просуммировать??????" ...

А на каких объемах? не надо знать что ли? Цена пункта - разная будет...

Прибыль считается не в пунктах, но в валюте, в зависимости от проторгованных объемов позиций.

 
Vovo4ka:

Почему то берется прибыль, не та которая должна быть.....когда закрывается лот, обрано когда прибыль должна быть 30пп в прибыли пишется совершенно другое....хрень какая то


Прибыль ордера не в пунктах, а в валюте депозить.

 

Правьте - здесь считается общий убыток (лосс) по истории закрытых ПОДРЯД ордеров в убыток.

У Вас будет чуть по другому, но принцип тот же.

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям
  datetime 
  Time_at_History_Current = 0,
  Time_at_History_Previos = 0;      
  if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;              
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0) 
                  break;
               }
            }
         }
      }
   }
 
PapaYozh:


Прибыль ордера не в пунктах, а в валюте депозить.


так мне и нужно в пунктах, лот постояный 1....а вот почему то прибыль или убыток не соответствует действительному.....вот и хочу проще прсчитать кол-во пунктов прибыли и просадки просуммировать и получить результат=)
 
Roman.:

Правьте - здесь считается общий убыток (лосс) по истории закрытых ПОДРЯД ордеров в убыток.

У Вас будет чуть по другому, но принцип тот же.


спсаибо, щас разберусь=)
 
Vovo4ka:

так мне и нужно в пунктах, лот постояный 1....а вот почему то прибыль или убыток не соответствует действительному.....вот и хочу проще прсчитать кол-во пунктов прибыли и просадки просуммировать и получить результат=)


Еще раз:

Прибыль ордера не в пунктах, а в валюте депозита.

 
Vovo4ka:

так мне и нужно в пунктах, лот постояный 1....а вот почему то прибыль или убыток не соответствует действительному.....вот и хочу проще прсчитать кол-во пунктов прибыли и просадки просуммировать и получить результат=)

Ну если лот постоянный, разделите прибыль тестера на Point. Будет прибыль в пунктах.
 

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

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
я попытался ее немного расширить, включив туда и учет отложенных ордеров (попросту дописав остальные типы):
if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP) {
                     pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
                     }
if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) {
                     pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
                  }
но отложенные ордера не учитываются. Они что, считаются как-то по другому? В документации ничего об этом не говорится....
 
artmedia70:
Выведите Comment`ами все флаги на график и будет видно почему сделка открывается.

вставил, теперь сдеки вообще не совершает.
Файлы:
1_1.mq4  21 kb
 
Ivn:

вставил, теперь сдеки вообще не совершает.

Зачем так-то? Выводите в одном Comment`е все флаги сразу.

Вот тут:

int start()
  {
//----


 RefreshRates();                        // Обновление данных
 Symb=Symbol();
 int cnt, ticket, total;
 int ABuy=0;                               // флаг на покупку /продажу   
 int ASell=0;   
 
   Comment(".....Вот сюда и пишите вывод всех флагов......");

 if (NewBar() == true)
{        
     x=x0; //передаем данные 
    x1=x01;
    x2=x02;
Причина обращения: