Откуда HistorySelect берет историю из терминала или с сервера?

 

Откуда HistorySelect берет историю из терминала или с сервера?

В документации не написано.

 
Grigoriy Chaunin:

Откуда HistorySelect берет историю из терминала или с сервера?

В документации не написано.

Терминал.

 

Справка к MQL5 по этой функции:

Функция HistorySelect() создает в mql5-программе список ордеров и список сделок для дальнейшего обращения к элементам списка посредством соответствующих функций. Размер списка сделок можно узнать с помощью функции HistoryDealsTotal(), размер списка ордеров в истории можно получить с HistoryOrdersTotal(). Перебор элементов списка ордеров лучше всего проводить функцией HistoryOrderGetTicket(), для элементов списка сделок соответственно подходит функция HistoryDealGetTicket().

После применения функции HistoryOrderSelect() список ордеров в истории, доступных mql5-программе, сбрасывается и заполняется заново найденным ордером, если поиск ордера по тикету завершился успешно. То же самое относится к списку сделок, доступных mql5-программе – он сбрасывается функцией HistoryDealSelect() и заполняется заново в случае успешного получения сделки по номеру тикета.


Мое, по памяти, так сразу в справке не нашел: Точнее, для каждого экземпляра из запущенных в этом терминале MQL5 программ поддерживается свой экземпляр истории. Есть еще и история, принадлежащая терминалу.

 

Есть статья, имхо, must-read для каждого (кто не пишет на MQL4)  "ОРДЕРA, ПОЗИЦИИ И СДЕЛКИ В METATRADER 5". В ней чётко указана схема.


Точно скажет только разработчик. Но мысль такая: если при запросе истории её нет в терминале, или она не синхронизирована с сервером, то идёт обращение к серверу. В любом случае, терминал проверяет факт синхронизации.

А вообще вопрос поставлен некорректно.


 

В общем ситуация такая. Есть советник. В нем есть функция расчета лота. Советник работал правильно. Когда надо удваивал лот. В тестере работает правильно. А сейчас вдруг прекратил удваивать. Единственная причина которую я вижу советник перестал подгружать историю ордеров из терминала. Код:

double Martingail::Lot(void)
  {
   double Lot=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/Shape)*SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   if(Lot==0)Lot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   if(DoublingCount<=0) return Lot;
   double MaxLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);

   if(Lot>MaxLot){Lot=MaxLot; return Lot;}
   double lt1=Lot;
   HistorySelect(0,TimeCurrent());
   if(HistoryOrdersTotal()==0)return(Lot);
   double cl=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-1),ORDER_PRICE_OPEN);
   double op=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_PRICE_OPEN);

   long typeor=HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_TYPE);
   if(typeor==ORDER_TYPE_BUY)
     {
      if(op>cl)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*2;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(typeor==ORDER_TYPE_SELL)
     {
      if(cl>op)
        {
         if(ud<DoublingCount)
           {
            lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*2;
            ud++;
           }
         else ud=0;
        }
      else ud=0;
     }
   if(lt1>MaxLot)lt1=MaxLot;
   return(lt1);
  }
 
Grigoriy Chaunin:

В общем ситуация такая. Есть советник. В нем есть функция расчета лота. Советник работал правильно. Когда надо удваивал лот. В тестере работает правильно. А сейчас вдруг прекратил удваивать. Единственная причина которую я вижу советник перестал подгружать историю ордеров из терминала. Код:

Если владеете MQL4, то под MT5 будет просто. А если нет, то сложно объяснить. В код не вникал, но два места сразу бросились

HistorySelect(0,TimeCurrent()); // Лучше INT_MAX вместо TimeCurrent()
if(HistoryOrdersTotal()==0)return(Lot); // Условие должно быть < 2
 
Grigoriy Chaunin:

В общем ситуация такая. Есть советник. В нем есть функция расчета лота. Советник работал правильно. Когда надо удваивал лот. В тестере работает правильно. А сейчас вдруг прекратил удваивать. Единственная причина которую я вижу советник перестал подгружать историю ордеров из терминала. Код:

А попроще причину не искали? Может, средств не хватает?

 

Средств хватает.

Замечания по коду правильны.

 

Так что это баг терминала? И можно ли это как-то исправить средствами MQL?

 

Все перепроверил. Код правильный! В тестере работает как часы. На реале удваивается когда не надо и не удваивается когда надо. Что это козни брокера? В Открывашке не должны в роди бы так себя вести. Ведь они выводят на биржу. Или все таки могут? Баг терминала? Тогда почему советник месяц проработал нормально. Пробовал перезапускать терминал, не помогло.

 
Grigoriy Chaunin:

Все перепроверил. Код правильный! В тестере работает как часы. На реале удваивается когда не надо и не удваивается когда надо. Что это козни брокера? В Открывашке не должны в роди бы так себя вести. Ведь они выводят на биржу. Или все таки могут? Баг терминала? Тогда почему советник месяц проработал нормально. Пробовал перезапускать терминал, не помогло.

Нет кода.