Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 595

 
Подскажите, пожалуйста, при закрытии терминала выполняется ли функция деинициализации в советниках и индикаторах?
 
-Aleks-:
Подскажите, пожалуйста, при закрытии терминала выполняется ли функция деинициализации в советниках и индикаторах?

Выполнение программ.

Загрузка и выгрузка индикаторов

Индикаторы загружаются в следующих случаях:

•прикрепление индикатора к графику;

•запуск терминала (если индикатор был прикреплен к графику перед предыдущим закрытием терминала);

•загрузка шаблона (если в шаблоне указан прикрепленный к графику индикатор);

•смена профиля (если индикатор прикреплен к одному из графиков профиля);

•смена символа и/или периода графика, к которому прикреплен индикатор;

•после удачной перекомпиляции индикатора, если данный индикатор был прикреплен к графику.

•изменение входных параметров индикатора.

Индикаторы выгружаются в следующих случаях:

•при откреплении индикатора от графика;

•закрытие терминала (если индикатор был прикреплен к графику);

•загрузка шаблона, если к графику прикреплен индикатор;

•закрытие графика, к которому был прикреплен индикатор;

•смена профиля, если индикатор прикреплен к одному из графиков сменяемого профиля;

•смена символа и/или периода графика, к которому прикреплен индикатор;

•изменение входных параметров индикатора.

 

Загрузка и выгрузка экспертов

Загрузка эксперта производится в следующих случаях:

•прикрепление эксперта к графику;

•запуск терминала (если эксперт был прикреплен к графику перед предыдущим закрытием терминала);

•загрузка шаблона (если в шаблоне указан прикрепленный к графику эксперт);

•после удачной перекомпиляции эксперта, если данный эксперт был прикреплен к графику.

•смена профиля (если эксперт прикреплен к одному из графиков профиля);

•подключение к счету, даже если номер счета не менялся (если эксперт был прикреплен к графику перед авторизацией терминала на сервере).

Выгрузка эксперта, прикрепленного к графику, производится в следующих случаях:

•при откреплении эксперта от графика;

•при прикреплении эксперта к графику – если на данном графике был уже другой эксперт, то этот эксперт выгружается;

•закрытие терминала (если эксперт был прикреплен к графику);

•загрузка шаблона, если к графику прикреплен эксперт;

•закрытие графика, к которому был прикреплен эксперт;

•смена профиля, если эксперт прикреплен к одному из графиков сменяемого профиля;

•смена счета, к которому подключен терминал (если эксперт был прикреплен к графику перед авторизацией терминала на сервере);

•вызов функции ExpertRemove().

При смене символа или таймфрейма графика, к которому эксперт прикреплен, выгрузка и загрузка эксперта не производится. При этом последовательно вызываются обработчики OnDeinit() на старом символе/таймфрейме и OnInit() на новом символе/таймфрейме (если они есть), значения глобальных переменных и статических переменных не сбрасываются. Все события, поступившие для эксперта до завершения инициализации (функции OnInit()), пропускаются.

 

 

OnDeinit

Событие Deinit генерируется для экспертов и индикаторов в следующих случаях:

•перед переинициализацией в связи со сменой символа или периода графика, к которому прикреплена mql5-программа;

•перед переинициализацией в связи со сменой входных параметров;

•перед выгрузкой mql5-программы.

 

[Удален]  
Sergey Gritsay:
а что именно пишет компилятор?
 
Alexander Antoshkin:
без полного кода трудно понять, но подозреваю что у вас одинаковое имя переменной ticket объявлено на глобальном уровне и локальном в функции DeleteOrder, поменяйте название переменных
 

Спасибо, но есть подозрение, что не всегда отрабатывает OnDeinit.... при закрытии терминала.

 
-Aleks-:

Спасибо, но есть подозрение, что не всегда отрабатывает OnDeinit.... при закрытии терминала.

Сделайте распринтовку в OnDeinit(). Тогда можно говорить более предметно.
[Удален]  
Sergey Gritsay:
без полного кода трудно понять, но подозреваю что у вас одинаковое имя переменной ticket объявлено на глобальном уровне и локальном в функции DeleteOrder, поменяйте название переменных

Ага , есть такое.

Спасибо разобрался! 

 

Я туплю, или это так и должно быть?

Было открыто 5 позиций в бай, сработал трал и перенёс Стоплоссы, цена откатила и закрылись 4 позиции, а одна осталась открыта с уровнем стопа выше цены. В журнале ничего нет, кроме записей о закрытии 4 позиций.

 

 
не могу понять почему в цикле прекращается поиск и закрытие позиции, уже и переворачивал цикл и увеличивал кол-во позиций, в тестере всё равно пропускает (оставляет) позиции. подскажите если видно где и что не верно...
int positions=PositionsTotal();
       for(int x1=-1;x1<positions;x1++) 
          {
           ulong pos_tiket11=PositionGetTicket(x1);
           if(PositionSelectByTicket(pos_tiket11))
             {
              string comment11=PositionGetString(POSITION_COMMENT);
              Print("ПОЗИЦИЯ ТИКЕТ + "+(string)pos_tiket11+" "+comment11+" ТИП "+(string)PositionGetInteger(POSITION_TYPE));
              if(pos_tiket11!=TIKET11) 
                {
                 ENUM_POSITION_TYPE type11=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
                 if(type11==POSITION_TYPE_BUY)
                   {
                    Print("ПОЗИЦИЯ ВЫБРАНА КОМЕНТ = "+comment11);
                    mytrade111.PositionClose(pos_tiket11,15);
                    TIKKET=0;    
                    dolivka_P1=1;
                   } 
                }
             }
          }
 
Anatolii Zainchkovskii:
не могу понять почему в цикле прекращается поиск и закрытие позиции, уже и переворачивал цикл и увеличивал кол-во позиций, в тестере всё равно пропускает (оставляет) позиции. подскажите если видно где и что не верно...

Я так понимаю, у вас хеджинг? Надо вот так:

int positions=PositionsTotal();
       for(int x1=PositionsTotal()-1;x1>=0;x1--) 
          {
              // далее без изменений