Помогите Разобраться, пожалуйста.

 

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

А проблема такая: При написании советника хотел чтобы он при инициализации накидывал шаблон на график и проверял есть ли открытые позиции по данной паре, получился такой код

int OnInit()
{ 
  ChartApplyTemplate(0,"\\Files\\StochSarStrat.tpl");
        ChartRedraw(0);
        ispos=false;
        if (PositionsTotal()!=0)
      for (i=0;i<PositionsTotal();i++);
            if (PositionGetSymbol(i)==Symbol())
                ispos=true;               
        Alert(ispos);
return(0);
}

Но при запуске советника он зацыкливается на OnInit , и без конца выдает Алерты.

Мне кажется это из-за того что при применении шаблона он снова инициализирует OnInit и так до бесконечности.

Подскажите пожалуйста что можно сделать?

Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 (MQL5), среда разработки MetaEditor и инструменты тестирования стратегий. Любую информацию о разработке торговых стратегий на языке MQL5 можно найти на официальном сайте MQL5.community. На этом же сайте в разделе Code Base могут быть...
Файлы:
 
ed.net:

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

А проблема такая: При написании советника хотел чтобы он при инициализации накидывал шаблон на график и проверял есть ли открытые позиции по данной паре, получился такой код


int OnInit()

  ChartApplyTemplate(0,"\\Files\\StochSarStrat.tpl");

    ChartRedraw(0);

    ispos=false;

    if (PositionsTotal()!=0)

      for (i=0;i<PositionsTotal();i++);

            if (PositionGetSymbol(i)==Symbol())

                ispos=true;               

    Alert(ispos);

return(0);

}

Но при запуске советника он зацыкливается на OnInit , и без конца выдает Алерты.

Мне кажется это из-за того что при применении шаблона он снова инициализирует OnInit и так до бесконечности.

Подскажите пожалуйста что можно сделать?

во первых идеалогически неправильный подход.. Шаблон - это личное пространство пользователя. Он в него накидывает индикаторы, линии, коменты и возможно ваш советник.

во вторых происходит следующее : вы грузите советник, он даёт команду загрузить шаблон, терминал выгружает советник чтобы применить шаблон, загружает шаблон в котором ваш-же советник. В котором вызывается OnInit в котором загружается шаблон :-)

конечно можно обойти и сделать чтобы сработал ваш сценарий:

- при выгрузке в OnDeinit проверить причину выгрузки, и если это применение нового шаблона, то выставить глобальную временную переменную

- в OnInit проверять эту самую переменную и если она есть то не подавать ChartApplyTemplate.

- дополнительно можно в шаблон добавить невидимый пользователю объект, по которому советник может определить что он запущен на уже готовом шаблоне.

 
ed.net:

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


      for (i=0;i<PositionsTotal();i++);


Подскажите пожалуйста что можно сделать?

а еще точку с запятой уберите после правой скобки цикла for
 
Maxim Kuznetsov:

во первых идеалогически неправильный подход.. Шаблон - это личное пространство пользователя. Он в него накидывает индикаторы, линии, коменты и возможно ваш советник.

во вторых происходит следующее : вы грузите советник, он даёт команду загрузить шаблон, терминал выгружает советник чтобы применить шаблон, загружает шаблон в котором ваш-же советник. В котором вызывается OnInit в котором загружается шаблон :-)

конечно можно обойти и сделать чтобы сработал ваш сценарий:

- при выгрузке в OnDeinit проверить причину выгрузки, и если это применение нового шаблона, то выставить глобальную временную переменную

- в OnInit проверять эту самую переменную и если она есть то не подавать ChartApplyTemplate.

- дополнительно можно в шаблон добавить невидимый пользователю объект, по которому советник может определить что он запущен на уже готовом шаблоне.

Спасибо большое, но я все равно не разобрался))) 

А не подскажите как добавить на график Стохастик с заданными параметрами, может я без шаблона обойдусь, просто индикаторы в OnInit буду добавлять?

 
ed.net:

Спасибо большое, но я все равно не разобрался))) 

А не подскажите как добавить на график Стохастик с заданными параметрами, может я без шаблона обойдусь, просто индикаторы в OnInit буду добавлять?

ChartIndicatorAdd

А для оформления:

ChartSetInteger

ChartSetDouble

ChartSetString

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
//| Expert initialization function                                   |                                                                                       ); "Внимание! %s: Попробуем добавить индикатор MACD(%s/%s) на график %s/%s. Получим ошибку 4114"                         subwindow...
 
Здравствуйте не могу подключить виртуальный сервер.Оформил подписку все прошло нормально,вот с сервером проблема.Вроде и пароли обновил на мкл.Не хочет ,помогите пожалуйста!
 
Oleg0808:
Здравствуйте не могу подключить виртуальный сервер.Оформил подписку все прошло нормально,вот с сервером проблема.Вроде и пароли обновил на мкл.Не хочет ,помогите пожалуйста!

Так Вам же пишет: нельзя работать с этой услугой, когда Вы залогинены к торговому счёту по ИНВЕСТОРСКОМУ паролю. Нужно логиниться в терминале к торговому счёту с основным паролем.


Добавлено: плюс проверьте, Вы точно правильно указали в настройках терминала (Сервис - Настройки - вкладка Сообщество) пароль и логин от mql5 аккаунта?