Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйтесь продавцом и начните зарабатывать!
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2013.08.12 10:49 

Коллеги, прошу объяснить, как такое может происходить.

Мой советник (XAUUSD_5-5_Unicorn) использует функции двух библиотек (AH_Common, AH_XAUUSD_Common). В init() и start() он передает в эти библиотеки текущие значения входных параметров, констант и пары переменных, чтобы все скрипты работали с одинаковыми данными. Обе библиотеки хранят полученные данные в глобальных переменных, которые имеют дефолтные значения. И всё прекрасно работает при ручной проверке (через Print()). Но в некоторых ситуациях (и в тестере, и на демо) библиотека перезатирает полученные от скрипта советника данные и её глобальные переменные внезапно имеют дефолтные значения, будто бы библиотека была переинициализированна (о чем не пишется в логе).

Пример текста из лога, отражающего корректную передачу значений через start() и последующие некорректные значения в библиотеке:

// Значения переменных в советнике, в первой и второй библиотеках
01:38  XAUUSD_5-5_Unicorn XAUUSD,M1: orderMagic:123457,periodEntry:1,periodExit:1,DebugPrint:1,StopLossMode:2,StopLossDelta:0,StopLossInitialLimit:200
01:38  AH_Common XAUUSD,M1:          orderMagic:123457,periodEntry:1,periodExit:1,DebugPrint:1,StopLossMode:2,StopLossDelta:0,StopLossInitialLimit:200
01:38  AH_XAUUSD_Common XAUUSD,M1:   orderMagic:123457,periodEntry:1,periodExit:1,DebugPrint:1,StopLossMode:2,StopLossDelta:0,StopLossInitialLimit:200
// Записи журнала в рамках этого же тика.
01:38  AH_Common XAUUSD,M1: orderType:1, stopLoss:1283.05, currentBid:1274.64, StopLossInitialLimit:200
01:38  AH_Common XAUUSD,M1: Order 8 new stop loss is 1283.05 (old is 0, Bid/Ask is 1274.64/1274.87)
01:38  AH_Common XAUUSD,M1: modify #8 sell 0.09 XAUUSD at 1274.87 sl: 1283.05 tp: 0.00 ok
01:38  AH_Common XAUUSD,M1: closeOrderAndCheckPending. DebugPrint:0, StringLen():42
01:38  AH_Common XAUUSD,M1: orderMagic:0,periodEntry:0,periodExit:0,DebugPrint:0,StopLossMode:0,StopLossDelta:0,StopLossInitialLimit:0

Как видно по последней строке, значения всех переменных обнулились, хотя значение orderMagic всегда устанавливается по константе, которая не равна нулю.

Прошу прокомментировать, как такое возможно тех, кто сталкивался! И подскажите, есть ли способ перехватить загрузку скрипта, но не через init()? То есть в тот момент, когда в логе появляются сообщения вида:

AH_Common XAUUSD,M1: loaded successfully
XAUUSD_5-5_Unicorn XAUUSD,M1: loaded successfully
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2013.08.12 11:04  
Я недавно пишу на MQL4, может я вообще неверных подход выбрал, храня данные окружения в библиотеках в глобальных переменных? Но я не знаю, как сделать иначе в MQL4. Мне нужно передавать иметь в библиотеках доступ ко всем входным переменным, а также к нескольким константам, определенным в скрипте советника, подключающего эти библиотеки. Подскажите более корректное решение по обмену данными между скриптами, пожалуйста!
Sergey Nevmerzhitsky
106
Sergey Nevmerzhitsky 2013.08.12 14:20  
Нашел ответ в другом топике "don't use multiple libraries with cross dependencies. cross calling works but errorhandling will be cumbersome. example: eaA calls libB, libB calls libC, later eaA directly calls libC. now there are 2 instances of libC in memory with different state of local and global scopes. they don't know nothing about each other." https://www.mql5.com/en/forum/143213
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий