Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 587

 
Andrey Barinov:

Вот так компилируется:


Спасибо. Наивно полагал, что исправление десятка ошибок компиляции, заставит рабочий код mql4 превратиться в mql5 индикатор)

Не хочет он показывать максимум, минимум дня. На сколько это далеко от цели?

 
bij:

Спасибо. Наивно полагал, что исправление десятка ошибок компиляции заставит рабочий код mql4 превратиться в mql5 индикатор)

Не хочет он показывать максимум минимум дня. На сколько это далеко от цели?

Не знаю :)

Попробуйте еще массивы буферов развернуть в самом начале OnCalculate, с помощью ArraySetAsSeries

 
bij:

Спасибо. Наивно полагал, что исправление десятка ошибок компиляции, заставит рабочий код mql4 превратиться в mql5 индикатор)

Не хочет он показывать максимум, минимум дня. На сколько это далеко от цели?

Вот такое громадное количество строк кода только ради показа максимума и минимума дня???
 
Alexey Viktorov:
Вот такое громадное количество строк кода только ради показа максимума и минимума дня???
Да, ещё закрытие дня, но это же в истории, а не только прошлый день. В этом сложность.
 
bij:
Да, ещё закрытие дня, но это же в истории, а не только прошлый день. В этом сложность.

Это ваш код? Или это писали на заказ?

Покажите снимок как это выглядит в МТ4?

 
Alexey Viktorov:

Это ваш код? Или это писали на заказ?

Покажите снимок как это выглядит в МТ4?

Индикатор из сети. МТ4 нет под рукой, словами скажу. Линии от начала до окончания каждых суток, по ценам High, Low и Close дня. Но, вместо линии на цене закрытия дня, хочу поставить линию на цену закрытия бара в 21:00

Может быть, действительно, это можно проще сделать чем наворочено.

 

Закрываю одновременно 4 позиции, как посчитать их за одну, в функции подсчёта убытков подряд?

Закрыться, из за проскальзывания, могут не по одной цене и время, наверное, разное

Попытка:

int CountLOS()
  {
  double priceold=0;
  datetime datold;
   int count=0;
   for(int trade=OrdersHistoryTotal()-1;trade>=0; trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            if(OrderMagicNumber()==_MagicNumber)
              {
               if(OrderProfit()<=0&&datold !=OrderCloseTime()) {count++; datold =OrderCloseTime();}
               //if(OrderProfit()<=0&&priceold !=OrderClosePrice()) {count++; priceold =OrderClosePrice();}
               else  break;
              }
           }
        }
     }
   return(count);
  }
 
lil_lil:

Закрываю одновременно 4 позиции, как посчитать их за одну, в функции подсчёта убытков подряд?

Закрыться, из за проскальзывания, могут не по одной цене и время, наверное, разное

Цена из-за проскальзывания разная, время тоже - один закрылся в конце секунды, другой в начале следующей. Попробуйте во время закрытия запоминать тикеты ордеров. Можно в файл их записывать...

 
lil_lil:

Закрываю одновременно 4 позиции, как посчитать их за одну, в функции подсчёта убытков подряд?

Закрыться, из за проскальзывания, могут не по одной цене и время, наверное, разное

Попытка:

Я прохожу в цикле по последним закрытым. Если последняя закрытая имеет минус, то дальше смотрю все закрытые в течении 120 сек.(2 минуты), и считаю общий профит

 
lil_lil:

Закрываю одновременно 4 позиции, как посчитать их за одну, в функции подсчёта убытков подряд?

Закрыться, из за проскальзывания, могут не по одной цене и время, наверное, разное

Попытка:

Как-то так:

 datetime _oct=0,time=0,_pt=0;
 int _cnt=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if(OrderSymbol()==symb && OrderMagicNumber()==mg) {
     int OrdersType=OrderType();
     // BUY && SELL
     if(OrdersType<=1) {
       CopyTime(OrderSymbol(),PERIOD_D1,0,1,itime);
       if((OrderCloseTime()>=itime[0] && OrderCloseTime()<itime[0]+86400)) {
         _Get.Hist.BS._ProfitDaily+=OrderProfit()+OrderCommission()+OrderSwap(); // Profit за сегодня
       }
       // 120 секунд разницы между закрытием первой и последней в сетке
       _oct=OrderCloseTime();
       if(_cnt==0 && _oct!=0) time=_oct;
        if(_oct+120>=time) {
          _Get.Hist.BS._ProfitOldClose+=OrderProfit()+OrderSwap()+OrderCommission(); // Profit последнего трейда
          _cnt++;
        }
     }
  }}} 
Причина обращения: