Советники: cm ea StopOrdersTrendLine

 

cm ea StopOrdersTrendLine:

Советник ставит отложенный ордер на определенном расстоянии от трендовой линии. И тралит его вдоль нее.

cm ea StopOrdersTrendLine

Автор: Vladimir Khlystov

 

Добрый день, Владимир!

Установил советника на график МТ5-Демо (buil 2132), но кроме кнопок Buy и Sell ничего не появилось, т.е. советник не установил трендовые линии и отложенные ордера. При нажатии на кнопки появляются трендовые линии и отложенные ордера. Дальше с ними можно работать, как было отражено в описании советника. Можете поправить, чтобы советник при старте сам устанавливал ордера?

С уважением, Владимир.

 
MrBrooklin:

Добрый день, Владимир!

Установил советника на график МТ5-Демо (buil 2132), но кроме кнопок Buy и Sell ничего не появилось, т.е. советник не установил трендовые линии и отложенные ордера. При нажатии на кнопки появляются трендовые линии и отложенные ордера. Дальше с ними можно работать, как было отражено в описании советника. Можете поправить, чтобы советник при старте сам устанавливал ордера?

С уважением, Владимир.

Так Вы нажмите кнопочку и появится соответствующая линия, а потом ее уже будете перемещать как нужно

 

Здравствуйте, Владимир!

Так написал же в предыдущем сообщении о том, что при нажатии на кнопки Buy и Sell появляются трендовые линии и отложенные ордера, и что дальше с ними можно работать, как было отражено в описании советника. Однако при установке советника на график любой из валютных пар, ничего не происходит, кроме того, как появляются эти две кнопки. Или так и было задумано? Просто на рисунке, прикрепленном к описанию Вашего советника, были показаны две трендовые линии и отложенные ордера, в результате чего создалось впечатление, что они сами устанавливаются после запуска советника в работу. Это не так?

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Владимир!

Так написал же в предыдущем сообщении о том, что при нажатии на кнопки Buy и Sell появляются трендовые линии и отложенные ордера, и что дальше с ними можно работать, как было отражено в описании советника. Однако при установке советника на график любой из валютных пар, ничего не происходит, кроме того, как появляются эти две кнопки. Или так и было задумано? Просто на рисунке, прикрепленном к описанию Вашего советника, были показаны две трендовые линии и отложенные ордера, в результате чего создалось впечатление, что они сами устанавливаются после запуска советника в работу. Это не так?

С уважением, Владимир.

1 установите советник на график

2 появились кнопки

3 нажмите одну из кнопок

4 появилась линия

5 появился отложенный ордер

6 переместили линию

7 переместился отложенный ордер


Вы так делаете?

 
Vladimir Khlystov:

1 установите советник на график

2 появились кнопки

3 нажмите одну из кнопок

4 появилась линия

5 появился отложенный ордер

6 переместили линию

7 переместился отложенный ордер


Вы так делаете?

Здравствуйте, Владимир. Большое спасибо Вам за то, что сразу откликнулись и извините меня, что Ваш вопрос остался без ответа. Дело в том, что не стал больше заглядывать в эту тему, т.к. самостоятельно разобрался с работой советника. Кстати, очень хорошо работает. Ещё раз спасибо!

С уважением, Владимир.

 
Vladimir Khlystov:

Так Вы нажмите кнопочку и появится соответствующая линия, а потом ее уже будете перемещать как нужно

Владимир, упустил один момент. После удаления советника (пока не понял почему, т.к. не силен в языке MQL5) на графике остаются все графические объекты (кнопки, линии). Это не совсем удобно, поэтому для себя нашёл вот такое решение:

вместо кода

//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   switch(reason)
     {
      case REASON_ACCOUNT: //Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета
         break;
      case REASON_CHARTCHANGE: //Символ или период графика был изменен
         break;
      case REASON_CHARTCLOSE: //График закрыт
         ObjectDelete(0,"cm trend line");
         break;
      case REASON_PARAMETERS: //Входные параметры были изменены пользователем
         break;
      case REASON_RECOMPILE: //Программа перекомпилирована
         break;
      case REASON_REMOVE: //Программа удалена с графика
         ObjectDelete(0,"cm trend line");
         break;
      case REASON_TEMPLATE: //Применен другой шаблон графика
         ObjectDelete(0,"cm trend line");
         break;
      case REASON_PROGRAM://Эксперт прекратил свою работу, вызвав функцию ExpertRemove()
         ObjectDelete(0,"cm trend line");
         break;
      default:
         ObjectDelete(0,"cm trend line");
     }
  }
//--------------------------------------------------------------------

вставил другой код (отдельное спасибо Владимиру Карпутову за его скрипт откуда он был взят), который полностью очищает график от всех существующих графических объектов

//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll(0,-1,-1);
   ChartRedraw();
  }
//--------------------------------------------------------------------

Может кому-нибудь пригодится!

С уважением, Владимир.

 
MrBrooklin:

Владимир, упустил один момент. После удаления советника (пока не понял почему, т.к. не силен в языке MQL5) на графике остаются все графические объекты (кнопки, линии). Это не совсем удобно, поэтому для себя нашёл вот такое решение:

вместо кода

вставил другой код (отдельное спасибо Владимиру Карпутову за его скрипт откуда он был взят), который полностью очищает график от всех существующих графических объектов

Может кому-нибудь пригодится!

С уважением, Владимир.

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

 
Vladimir Khlystov:

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

Здравствуйте, Владимир. Спасибо за то, что откликнулись! Полностью с Вами согласен по поводу плохого решения, но в данный момент мне оно подходит.

О том, что этот код полностью очищает график от всех существующих графических объектов, специально веделил жирными буквами. Когда подучу язык MQL5, тогда напишу другое, т.е. ХОРОШЕЕ решение этой проблемы. Сейчас уже есть к чему стремиться в плане изучения языка MQL5.

С уважением, Владимир.

 

MrBrooklin:

... Когда подучу язык MQL5, тогда напишу другое, т.е. ХОРОШЕЕ решение этой проблемы. Сейчас уже есть к чему стремиться в плане изучения языка MQL5.

С уважением, Владимир.

УРА! Нашел ХОРОШЕЕ решение. Заменил ObjectDelete на ObjectsDeleteAll и теперь всё удаляется при закрытии советника.

//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   switch(reason)
     {
      case REASON_ACCOUNT: //Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета
         break;
      case REASON_CHARTCHANGE: //Символ или период графика был изменен
         break;
      case REASON_CHARTCLOSE: //График закрыт
         ObjectsDeleteAll(0,"cm trend line");
         break;
      case REASON_PARAMETERS: //Входные параметры были изменены пользователем
         break;
      case REASON_RECOMPILE: //Программа перекомпилирована
         break;
      case REASON_REMOVE: //Программа удалена с графика
         ObjectsDeleteAll(0,"cm trend line");
         break;
      case REASON_TEMPLATE: //Применен другой шаблон графика
         ObjectsDeleteAll(0,"cm trend line");
         break;
      case REASON_PROGRAM://Эксперт прекратил свою работу, вызвав функцию ExpertRemove()
         ObjectsDeleteAll(0,"cm trend line");
         break;
      default:
         ObjectsDeleteAll(0,"cm trend line");
     }
  }
//--------------------------------------------------------------------

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Владимир. Спасибо за то, что откликнулись! Полностью с Вами согласен по поводу плохого решения, но в данный момент мне оно подходит.

О том, что этот код полностью очищает график от всех существующих графических объектов, специально веделил жирными буквами. Когда подучу язык MQL5, тогда напишу другое, т.е. ХОРОШЕЕ решение этой проблемы. Сейчас уже есть к чему стремиться в плане изучения языка MQL5.

С уважением, Владимир.

Лучше будет вот такое решение

void OnDeinit(const int reason)
{
   ObjectsDeleteAll(0,"cm trend line");
}
Оно же было и изначально в моем советнике, но только удаление не всегда необходимо. Например, не нужно удалять линии при смене тренда и именно для этого я ввел выборочное удаление. Т.е. линии удалялись только если закрывался советник
Причина обращения: