Обсуждение статьи "Рецепты MQL5 – Получаем свойства открытой хеджевой позиции" - страница 2

 

Привет, Денис,

Прежде всего, я хотел бы поблагодарить вас за эту замечательную библиотеку, она очень облегчает жизнь таким начинающим пользователям, как я. Я не являюсь профессиональным программистом, но примерно могу понять, подправить и немного отладить код.

Я использую ваш пример кода из "Test_Hedge_Properties" в качестве функции в советнике, который я тестирую, и обнаружил, что после закрытия всех (2) позиций, когда я вызываю функцию

"Update_Hedge_Info", после закрытия первого тикета, переменная, которая подсчитывает количество позиций, "hdg_number_of_pos_total" обновляется с (2) до (1).

Однако после закрытия второго тикета переменная по-прежнему показывает (1), она не обновляется до (0).

Я не уверен, правильно ли я ее закодировал, но ваш добрый вклад и опыт будут очень признательны.

Я прилагаю советник и скриншот.

Спасибо и с уважением.

Файлы:
 

Я использую hedge_info.Margin() для расчета текущей маржи в моем советнике.

Меня интересует следующая (*) строка в CHedgePositionInfo::AveragePrice внутри "switch(curr_quote_type) ... case QUOTE_TYPE_CROSS:".

Я использую EURCHF, а major_symbol - USDEUR. Так как USDEUR не поддерживается 99,9% всех форекс-брокеров, а является максимум кроссом, определенным пользователем, следующая команда SymbolSelect приводит к сообщению об ошибке во время бэктестинга. Возможно, это проблема брокера, но в моем случае это приводит к резкому прерыванию работы тестера стратегий, поскольку активным символом теперь является USDEUR, а не пара, на которой я изначально запускал тестер стратегий (EURCHF).

if(SymbolSelect(major_symbol,true))    // (*)

Так что в моем случае помогло удаление USDEUR из просмотра рынка в конце CHedgePositionInfo::AveragePrice by:

SymbolSelect(major_symbol,false);