Библиотеки: HistoryTicks - страница 2

 
Если в любом MT4/5-советнике в начале прописать такую строку
#include <fxsaber\HistoryTicks\ArrayResize.mqh> // https://www.mql5.com/ru/code/20298

то получите подробное уведомление на случай, если произошла ошибка при выполнении ArrayResize или ArrayCopy.

Это позволяет увидеть сложно идентифицируемые проблемы при передаче информации через массивы, но еще более важно - получить сообщение, что советник остановился из-за array out of range (не по вине автора советника). Например, из-за нехватки памяти или другого сбоя. Т.е. Вы будете сразу знать, что произошла нештатная остановка советника, а не случайно заметите это через несколько часов.


Библиотека HistoryTicks уже содержит эту строку (доп. прописывать не нужно), т.к. основная цель инструментария - боевые советники на реальных счетах.

 
Перезапускал советник на основе данной библиотеки. В логах увидел такую производительность передачи данных из индикатора в советник одним куском.
2019.08.26 20:03:25.586 EURCHF.rann,M1: Received  1980006 ticks: 2019.07.30 01:23:13 - 2019.08.26 20:03:26, TransferTime = 801ms. (2471214 ticks/sec)
Около 2.5 млн тиков (MqlTick[]) в секунду.
 

Привет, fxsaber,

Когда я компилирую HistoryTicks_Example с MT4, он компилируется нормально. Однако при компиляции с MT5 (2085) я получаю следующие ошибки


 
Enrique Dangeroux:

Когда я компилирую HistoryTicks_Example с MT4, он компилируется нормально. Однако при компиляции с MT5 (2085) я получаю следующие ошибки

Версия HistoryTicks, которую использую, значительно отличается от выложенной в паблик. Как руки дойдут, обновлю.

ЗЫ Библиотека все же в первую очередь предназначена для MT4.

 

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

Библиотеки: HistoryTicks

fxsaber, 2018.12.10 13:55

Если в любом MT4/5-советнике в начале прописать такую строку
#include <fxsaber\HistoryTicks\ArrayResize.mqh> // https://www.mql5.com/ru/code/20298

то получите подробное уведомление на случай, если произошла ошибка при выполнении ArrayResize или ArrayCopy.

Это позволяет увидеть сложно идентифицируемые проблемы при передаче информации через массивы, но еще более важно - получить сообщение, что советник остановился из-за array out of range (не по вине автора советника). Например, из-за нехватки памяти или другого сбоя. Т.е. Вы будете сразу знать, что произошла нештатная остановка советника, а не случайно заметите это через несколько часов.

В журнале Терминала была только такая запись в другом проекте.

MemoryException 4471871064 bytes not available, 0 heapmin result


Благодаря вставленной строке, в пользовательском журнале стали видны подробности произошедшего

Alert: ThirdPartyTicks - ERROR in int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int)! - see the logs.
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 64: ::MQLInfoString(MQL_PROGRAM_PATH) = C:\Program Files\ICMarkets - MetaTrader 5\MQL5\Scripts\fxsaber\ThirdPartyTicks.ex5
PROGRAM_SCRIPT
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 66: typename(T) = MqlTick
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 67: sizeof(T) = 60
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 68: Res = -1
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 69: NewSize = 129140
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 70: Reserve = 74402041
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 71: ::ArraySize(Array) = 129139
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 72: PrevSize = 129139
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 73: NewSize*sizeof(T) = 7748400
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 74: PrevSize*sizeof(T) = 7748340
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 75: Reserve*sizeof(T) = 169155164
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 76: ::GetLastError() = 4004
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 77: DuringTime = 1195
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 79: ::TerminalInfoInteger(TERMINAL_BUILD) = 2138
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 80: ::TerminalInfoInteger(TERMINAL_DISK_SPACE) = 6344
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 81: ::TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL) = 16301
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 82: ::TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE) = 31530
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 83: ::TerminalInfoInteger(TERMINAL_MEMORY_TOTAL) = 32602
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 84: ::TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1072
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 86: ::ChartID() = 132088214536525342
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 87: ::PeriodSeconds() = 60
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 88: ::Symbol() = EURUSD
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 89: ::TimeCurrent() = 2019.09.10 19:49:15
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 90: ::TimeLocal() = 2019.09.10 19:49:12
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 94: ::SymbolInfoTick(_Symbol,Tick) = true
 time = 2019.09.10 19:49:13.178 bid = 1.10436 ask = 1.10439 last = 0.00000 volume = 0 2 TICK_FLAG_BID
int ARRAYRESIZE::ArrayResize_Real<MqlTick>(MqlTick&[],const int,const int), Line = 97: ::ChartSetInteger(0,CHART_BRING_TO_TOP,true) = true
array out of range in 'Array.mqh' (11,10)
 

Сегодня после обновления MT4 (сборка 1210) сама ошибка компилятора как в посте №13. Для тех, у кого такая же проблема, решение можно скачать здесь:

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

Библиотеки: TradeTransaction

fxsaber , 2019.07.09 13:01

Обойдя ошибку, замените Include \ fxsaber \ TradeTransactions \ Convert.mqh на прикрепленный.


 
fxsaber:

Версия HistoryTicks, которую использую, значительно отличается от выложенной в паблик. Как руки дойдут, обновлю.

Обновил.

 

Столкнулся с такой ситуацией.

Два терминала подключены к одному и тому же счету. На обоих запущен индикатор HistoryTicks. Соответствующие файлы с собранными тиками отличаются: то в одном, то в другом попадается отсутствие каких-нибудь тиков.

Получается, OnCalculate вызывается не на каждом тике в MT4.

 
А не пробовали это проверить на MT5? Оно тоже страдает пропуском тиков? Или это только проблема 4 версии?
 
traveller00:
А не пробовали это проверить на MT5? Оно тоже страдает пропуском тиков? Или это только проблема 4 версии?

Не помню уже. Но почему-то осталось впечатление, что MT5-индикаторы не пропускают.

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