Скачать MetaTrader 5

Некорректная работа функции HistorySelect() или HistoryDealsTotal() в тестере Build 555

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Владимир
1402
Владимир  
Читаю матчасть:

HistorySelect() запрашивает историю сделок и ордеров за указанный период серверного времени, а HistoryDealsTotal() возвращает количество за указанный период.

В реальной жизни всё ОК, а в тестере эта связка не работает. Возвращает все имеющиеся(или на много больше чем заказывали).

Для проверки написал функцию, которая запрашивает количество сделок за последнюю минуту прошлого дня и первую минуту текущего:

void TEST_HistoryDealsTotal()
{
   MqlDateTime dt;
   datetime t=TimeCurrent();
   TimeToStruct(t,dt);
   datetime s=t-dt.hour*3600-dt.min*60-dt.sec-60;
   t=t-dt.hour*3600-dt.min*60-dt.sec+59;
   HistorySelect(s,t);//Заказываем историю с 23:59:00 по 00:00:59
   
   int tot=HistoryDealsTotal();
   Alert("История с ",s,"  по ",t,"    HistoryDealsTotal() = ",tot);
}

P.S. Функция писалась для обхода проблемы перехода через 0 в банках, обозначенной в теме https://www.mql5.com/ru/forum/5548

Переход позиций через 0:00 при работе банком. Как идентифицировать? Нужна помощь зала.
Переход позиций через 0:00 при работе банком. Как идентифицировать? Нужна помощь зала.
  • www.mql5.com
Но вновь открытые позиции(ордера) содержат новые номера тикетов и поле MAGIC содержит 0.
Slava
Модератор
6928
Slava  

Спасибо за сообщение. Проблему нашли. В ближайшее время исправим

Serj
1429
Serj  

Опять HistorySelect() не работает.

MetaTrader 5 Client Terminal build 565

MetaTester: Исправлен запрос торговой истории при указании начальной и конечной даты.

Пример:

//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>

CTrade trade;
MqlTick tick;
datetime start,prevtime,Time[];
int total;
//+------------------------------------------------------------------+
int OnInit()
  {
   start=TimeCurrent();
   return(0);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   CopyTime(_Symbol,PERIOD_CURRENT,0,1,Time);
   if(prevtime==Time[0]) return;
   prevtime=Time[0];

   HistorySelect(start,TimeCurrent());
   int TotalHistoryDeals=HistoryDealsTotal();
   Print("HistorySelect start = ",start,"    end = ",TimeCurrent(),"      HistoryDealsTotal = ",TotalHistoryDeals);

   if(total>10) return;

   double rnd=MathRand()/32767.5;
   if(rnd>0.5) trade.Buy(0.1);
   if(rnd<0.5) trade.Sell(0.1);

   total++;

   if(total==5) start=TimeCurrent();
  }
//+------------------------------------------------------------------+

 

Вот что выдает тестер:

2011.12.25 19:09:40 Core 1 2011.12.23 20:30:00   HistorySelect start = 2011.12.23 02:00:00    end = 2011.12.23 20:30:00      HistoryDealsTotal = 12

2011.12.25 19:09:40 Core 1 2011.12.23 20:00:00   HistorySelect start = 2011.12.23 02:00:00    end = 2011.12.23 20:00:00      HistoryDealsTotal = 7

2011.12.25 19:09:40 Core 1 2011.12.23 19:30:00   HistorySelect start = 2011.12.23 02:00:00    end = 2011.12.23 19:30:00      HistoryDealsTotal = 12

2011.12.25 19:09:40 Core 1 2011.12.23 19:00:00   HistorySelect start = 2011.12.23 02:00:00    end = 2011.12.23 19:00:00      HistoryDealsTotal = 7


Если на каждом тике запрашивать историю, еще больше чехарда получается.

 

Slava
Модератор
6928
Slava  
Разберёмся

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий