Здравствуйте,
обнаружил ошибку:
при тике приходящем на новой минуте в нулевую секунду, например после тика в 01.22.59 новый тик в 01.23.00
Тиковые объемы приходят старые - от 23 и 21 минуты. А по идее должны за 23 и 22 минуты. Т.е. по текущей 23 минуте правильно, а предыдущая смещена на 1 дополнительную минуту, вместо 22 - 21.
пример кода
long Arr[2];
CopyTickVolume(vSymb, PERIOD_M1, 0, 2, Arr);
curVal=Arr[1];
preVal=Arr[0];
На следующих тиках приходящих на секунде>1 все становится правильно.
Ошибку сейчас обхожу условием && tm.sec>0
Не проверял, но могу предположить, что ошибка возникает не только по тиковым объемам, но и по др. параметрам.
круто. в сервисдеск отправил ?
Думал разработчики тут увидят...
Теперь отправил.
Думал разработчики тут увидят...
круто. в сервисдеск отправил ?
Ошибку сейчас обхожу условием && tm.sec>0
Не проверял, но могу предположить, что ошибка возникает не только по тиковым объемам, но и по др. параметрам.
Попробуйте проверить таким экспертом:
//+------------------------------------------------------------------+ //| CheckTicksOnNewBar.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" int last_minute=-1; //--- long Arr[2],curVal,preVal; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- MqlDateTime dt; datetime time=TimeCurrent(dt); if(dt.min!=last_minute) { long currTicks[2]; CopyTickVolume(Symbol(),PERIOD_M1,0,2,currTicks); PrintFormat("%s curVal=%d preVal=%d",TimeToString(time),curVal,preVal); if(currTicks[0]!=curVal && (last_minute!=-1)) { PrintFormat("Achtung! Volume[1]=%d was %d at previous minute",currTicks[0],curVal); } last_minute=dt.min; } CopyTickVolume(Symbol(),PERIOD_M1,0,2,Arr); curVal=Arr[1]; preVal=Arr[0]; Comment(StringFormat("%s curVal=%d preVal=%d",TimeToString(time),curVal,preVal)); } //+------------------------------------------------------------------+
если проблемы нет, то будет наблюдать ежеминутный вывод в журнал "Эксперты" похожих строк
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
обнаружил ошибку:
при тике приходящем на новой минуте в нулевую секунду, например после тика в 01.22.59 новый тик в 01.23.00
Тиковые объемы приходят старые - от 23 и 21 минуты. А по идее должны за 23 и 22 минуты. Т.е. по текущей 23 минуте правильно, а предыдущая смещена на 1 дополнительную минуту, вместо 22 - 21.
пример кода
long Arr[2];
CopyTickVolume(vSymb, PERIOD_M1, 0, 2, Arr);
curVal=Arr[1];
preVal=Arr[0];
На следующих тиках приходящих на секунде>1 все становится правильно.
Ошибку сейчас обхожу условием && tm.sec>0
Не проверял, но могу предположить, что ошибка возникает не только по тиковым объемам, но и по др. параметрам.