Особенности языка mql5, тонкости и приёмы работы - страница 109

 
Taras Slobodyanik:

логично жеж - это переворот

Написал информацию без оценки логичности. Если же ее затрагивать, то PositionID должен был бы смениться аналогично.

Сейчас он не сменяется. Если это баг, то было бы замечательно!


Поэтому вопрос. Должна ли DEAL_ENTRY_INOUT-сделка менять PositionID на DEAL_ORDER?

Сам считаю, что должна менять. Такое поведение было бы очень удобным/правильным.
 
fxsaber:

Написал информацию без оценки логичности. Если же ее затрагивать, то PositionID должен был бы смениться аналогично.

Сейчас он не сменяется. Если это баг, то было бы замечательно!


Поэтому вопрос. Должна ли DEAL_ENTRY_INOUT-сделка менять PositionID на DEAL_ORDER?

Тут написано что нет. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Хотя раньше было написано что да, и  Position ID менялся.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Andrey Barinov:

Тут написано что нет. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

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

Хотя раньше было написано что да, и  Position ID менялся.

Просьба разработчиков прояснить ситуацию. Когда PositionID меняется, то после пяти переворотов во вкладке Истории торгов в режиме показа "Позиции" будут показаны пять позиций.

Сейчас же (PositionID при перевороте не изменяется) всегда показывается только одна позиция. Мягко говоря, странное решение.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5

fxsaber, 2018.11.09 16:19

 в режиме "по реальным тикам" Тестер формирует бары самостоятельно - по приходу тиков. По этой причине баровая история кастомного символа в Терминале и в Тестере могут быть совершенно разными.

 
Часто происходит ситуация, когда после компиляции советника сбрасываются настройки Тестера, если этот советник был в нем ранее выбран. Это, мягко говоря, раздражает. Т.к. после каждой компиляции нужно лезть в древо советников и выискивать свой. Если кто не знает, есть рецепт, чтобы Тестер не сбрасывался. Нужно один раз запустить советник в дебаг-режиме на истории - CTRL+F5. После этого любые перекомпиляции не будут влиять на настройки Тестера.
 
fxsaber:
Часто происходит ситуация, когда после компиляции советника сбрасываются настройки Тестера, если этот советник был в нем ранее выбран. Это, мягко говоря, раздражает. Т.к. после каждой компиляции нужно лезть в древо советников и выискивать свой. Если кто не знает, есть рецепт, чтобы Тестер не сбрасывался. Нужно один раз запустить советник в дебаг-режиме на истории - CTRL+F5. После этого любые перекомпиляции не будут влиять на настройки Тестера.


Такая же штука, вчера обратил внимание!

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

После этого тестер не сбрасывает на предыдущий файл при компиляции.


Эта проблема появлялась несколько раз ранее, потом пропала. Потом опять появилась.... 

З.Ы. Не вчитался в смысл Ваших слов. а Вы советовали, а не спрашивали... 

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам".
 

Ребят есть кто?  Проверьте плиз скрипт на закачку истории ...

Только у меня все намертво зависает ? Скрипт взят из справки...

//+------------------------------------------------------------------+ 
//|                                              TestLoadHistory.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.02" 
#property script_show_inputs 

//--- input parameters 

//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart()
  {



   int      all_symbols=SymbolsTotal(false);   string  sym_name="";
   Print("Load symbols ",all_symbols);

   for(int k=0;k<all_symbols;k++)
      if((sym_name=SymbolName(k,false))!="")
        {
         SymbolSelect(sym_name,true);

         Print(k," Symbol name ",sym_name);

         int res=CheckLoadHistory(sym_name,PERIOD_M1,(TimeCurrent()-60*60*24*5));

         switch(res)
           {
            case -1 : Print("Unknown symbol ",sym_name);             break;
            case -2 : Print("Requested bars more than max bars in chart ",sym_name); break;
            case -3 : Print("Program was stopped ",sym_name);                        break;
            case -4 : Print("Indicator shouldn't load its own data ",sym_name);      break;
            case -5 : Print("Load failed ",sym_name);                                break;
            case  0 : Print("Loaded OK ",sym_name);                                  break;
            case  1 : Print("Loaded previously ",sym_name);                          break;
            case  2 : Print("Loaded previously and built ",sym_name);                break;
            default : Print("Unknown result ",sym_name);
           }

         datetime first_date;
         SeriesInfoInteger(sym_name,PERIOD_M1,SERIES_FIRSTDATE,first_date);
         int bars=Bars(sym_name,PERIOD_M1);
         Print("First date ",first_date," - ",bars," bars");
        }
//--- 

//--- 
  }
//+------------------------------------------------------------------+ 
//|                                                                  | 
//+------------------------------------------------------------------+ 
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
  {
   datetime first_date=0;
   datetime times[100];
//--- check symbol & period 
   if(symbol==NULL || symbol=="") symbol=Symbol();
   if(period==PERIOD_CURRENT)     period=Period();
//--- check if symbol is selected in the MarketWatch 
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);

      SymbolSelect(symbol,true);
     }
//--- check if data is present 
   SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
   if(first_date>0 && first_date<=start_date) return(1);
//--- don't ask for load of its own data if it is an indicator 
   if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
      return(-4);
//--- second attempt 
   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries 
      if(first_date>0)
        {
         //--- force timeseries build 
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
//--- max bars in chart from terminal options 
   int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info 
   datetime first_server_date=0;
   while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
      Sleep(5);
//--- fix start date for loading 
   if(first_server_date>start_date) start_date=first_server_date;
   if(first_date>0 && first_date<first_server_date)
      Print("Warning: first server date ",first_server_date," for ",symbol,
            " does not match to first series date ",first_date);
//--- load data step by step 
   int fail_cnt=0;
   while(!IsStopped())
     {
      //--- wait for timeseries build 
      while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
         Sleep(5);
      //--- ask for built bars 
      int bars=Bars(symbol,period);
      if(bars>0)
        {
         if(bars>=max_bars) return(-2);
         //--- ask for first date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(0);
        }
      //--- copying of next part forces data loading 
      int copied=CopyTime(symbol,period,bars,100,times);
      if(copied>0)
        {
         //--- check for data 
         if(times[0]<=start_date)  return(0);
         if(bars+copied>=max_bars) return(-2);
         fail_cnt=0;
        }
      else
        {
         //--- no more than 100 failed attempts 
         fail_cnt++;
         if(fail_cnt>=100) return(-5);
         Sleep(10);
        }
     }
//--- stopped 
   return(-3);
  }
//+------------------------------------------------------------------+ 
//| Возвращает строкое значение периода                              | 
//+------------------------------------------------------------------+ 
string GetPeriodName(ENUM_TIMEFRAMES period)
  {
   if(period==PERIOD_CURRENT) period=Period();
//--- 
   switch(period)
     {
      case PERIOD_M1:  return("M1");
      case PERIOD_M2:  return("M2");
      case PERIOD_M3:  return("M3");
      case PERIOD_M4:  return("M4");
      case PERIOD_M5:  return("M5");
      case PERIOD_M6:  return("M6");
      case PERIOD_M10: return("M10");
      case PERIOD_M12: return("M12");
      case PERIOD_M15: return("M15");
      case PERIOD_M20: return("M20");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H2:  return("H2");
      case PERIOD_H3:  return("H3");
      case PERIOD_H4:  return("H4");
      case PERIOD_H6:  return("H6");
      case PERIOD_H8:  return("H8");
      case PERIOD_H12: return("H12");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
//--- 
   return("unknown period");
  }
//+------------------------------------------------------------------+
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Непонятная ситуация при срабатывании отложенных ордеров.

fxsaber, 2018.11.26 13:37

Еще бывает такая ситуация:

  1. Выставили открывающий позицию маркет-ордер и OrdersTotal увеличился на единицу.
  2. Он исполнился и OrdersTotal уменьшился на единицу, но при этом PositionsTotal не увеличился на единицу. Т.е. существует позиция, но Терминал о ней не знает.

Например, нет ни позиций, ни ордеров - PositionsTotal = 0, OrdersTotal = 0.

Выставляете маркет-ордер. При этом PositionsTotal = 0, OrdersTotal = 1.

Маркет-ордер исполнился - OrdersTotal = 0. Но PositionsTotal = 0!

 
Длительность выполнения
PositionSelectByTicket(OrderGetInteger(ORDER_TICKET));

такая, что может (не сложно воспроизвести) измениться PositionsTotal.


Например, PositionsTotal возвращает ноль прямо перед PositionsSelectBytTicket, который возвращает true.

Причина обращения: