Перейти к содержимому

Theme© by Fisana
 

Фотография
- - - - -

Запуск/остановка советника


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 19 February 2011 - 23:45

Хороший вопрос...
Давно над ним задумывался, но не имею удовлетворительного решения.

Вот здесь:
http://fxgeneral.com...opic=454&st=220
увидел:

Все зависит от того, как написан советник. Есть такие варианты, когда советник после того как пропадает связь не всегда может восстановиться работать по начальному алгоритму, но обычно в советниках такие меры предусмотрены. Всё зависит от алгоритма, если советник без стопов, то даже иногда и пару минут могут испортить настроение, резко как обвалится рынок, а советник отключён. Если же советник работает по средне сроку, т.е. открытие и модификация ордеров происходит не часто, то тут никаких проблем не будет


1. вот и вопрос: как нужно писать советники?

2. то, что написано в цитате - не совсем верно ... поверхностно, но всё же...

3. могут быть перебои в связи ... что ожидать в этих случаях? тоже хороший вопрос...

4. но самое интересное: как должен поступать советник в случаях его переинициализации (когда он теряет внутренний контроль за уже ним же открытыми ордерами)?

Когда наступает переинициализация?
Я знаю случаи:
а). выключение компьютера, или MT4 терминала;
б). смена счёта в MT4;
в). закрытие графика валютной пары (с последующим, возможно, его переоткрытием);
г). смена тайм-фрейма (вот здесь вообще очень опасное место, и я не понимаю - зачем?);
д). ручная остановка советника и снова помещение его на график;
Некоторые случаи (б., в., г.) - можно запретить настройками MT4.

Какие ещё есть случаи перезапуска (переинициализации) советника?
Какие последствия?
Как должен быть написан советник с учётом этих случаев?

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

Особенно это должно вести (мне представляется) к безобразным последствиям в советниках отрабатывающих алгоритмику мартингейл!

P.S.
1. причём, переинициализация переинициализации - рознь...
В любом случае, выполняется последовательность вызовов:
... - deinit() - init() - start() - ...
Но!
После deinit() может происходить выгрузка советника, с потерей всех внутренних структур (например, при ручной выгрузке советника и снова загрузке, или остановке компьютера)... а может и не происходить (как при смене тайм-фрейма, например).
В чём будет различие в первом и втором случае?

2. но и это ещё не всё! : советник может быть перезапущен с другими настроечными параметрами.

P.P.S.
Если относительно советника (любого конкретного) на все эти вопросы не могут быть даны исчерпывающие объяснения, то такой советник вообще нельзя эксплуатировать на реальном счёте! ... в этом случае он интересен только как какая-то теоретическая игрушка, подмтаерждающая ТС.
А, поскольку многие трейдеры не являются экспертами в программировании, а об вот этом аспекте им никогда не расказывают и не упоминают, то происходит просто дезинформация трейдеров относительно возможности использования роботов-советников.

 
 

#2 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 21 February 2011 - 18:27

Вопрос интересный :) .
В mql4 есть функция UninitializeReason():

int UninitializeReason( )Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов. Возвращаемые значения могут быть одним из кодов деинициализации. Эту функцию можно также вызывать в функции init() для анализа причин деинициализации предыдущего запуска.


Соответственно коды деинициализации следующие:
                                       0  Скрипт самостоятельно завершил свою работу  
 REASON_REMOVE        1   Программа удалена с графика  
 REASON_RECOMPILE   2  Программа перекомпилирована  
 REASON_CHARTCHANGE 3  Символ или период графика был изменен  
 REASON_CHARTCLOSE   4  График закрыт  
 REASON_PARAMETERS    5  Входные параметры были изменены пользователем  
 REASON_ACCOUNT        6  Активирован другой счет
Их и нужно анализировать при деините. Т.е. например, если переключили таймфрейм - сохраняем нужные нам переменные в некоторый файл (например, .ini), если советник удален - значит сохраненные переменные обнуляем и т.д..

Подхватить свои ордера советнику, думаю, не проблема: цикл по открытым ордерам, проверили символ, магик,тип ордера и т.д..

При перебоях в связи произойдет деинит, т.к. , если не ошибаюсь, будет автоматический перелогин счета (UninitializeReason()==REASON_ACCOUNT).

При использовании мартингейла вообще лучше всего чтобы пользователь выбрал в истории счета "Показать всю историю" (вроде так называется), потому что OrdersHistoryTotal() вернет как раз это значение. Альтернативный вариант: советник при своей работе записывает свои сделки в файл, а потом перебирает сделки уже по файлу. В таком случае не зависишь от того, сколько истории пользователь отображает в истории счета.
Каждый сам кузнец своей судьбы.

#3 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 February 2011 - 22:54

Вопрос интересный :) .
В mql4 есть функция UninitializeReason():

Соответственно коды деинициализации следующие:

                                         0  Скрипт самостоятельно завершил свою работу  
   REASON_REMOVE        1   Программа удалена с графика  
   REASON_RECOMPILE   2  Программа перекомпилирована  
   REASON_CHARTCHANGE 3  Символ или период графика был изменен  
   REASON_CHARTCLOSE   4  График закрыт  
   REASON_PARAMETERS    5  Входные параметры были изменены пользователем  
   REASON_ACCOUNT        6  Активирован другой счет
Их и нужно анализировать при деините. Т.е. например, если переключили таймфрейм - сохраняем нужные нам переменные в некоторый файл (например, .ini), если советник удален - значит сохраненные переменные обнуляем и т.д..

Очень, очень интересная информация!

Подхватить свои ордера советнику, думаю, не проблема: цикл по открытым ордерам, проверили символ, магик,тип ордера и т.д..

Это не всегда будет просто... Если советник устанавливает целую сетку ордеров (так зачастую делает мартингейл стратегии), то за время пока он "спал" (а это может быть и долго) с этой кучей ордеров могло произойти всё, что угодно: часть из них из отложенных могли перейти в рыночные (сработали), часть рыночных могли закрыться (по SL или TP), так что и общее число ордеров сильно поменялось - общая картина ордеров может поменяться до неузнаваемости!

При перебоях в связи произойдет деинит, т.к. , если не ошибаюсь, будет автоматический перелогин счета (UninitializeReason()==REASON_ACCOUNT).

Вот это очень интересно, но требует обязательной проверки наверняка.

Не исключено, что пи некоторых резонах перезапуска ( REASON_RECOMPILE , REASON_PARAMETERS ) советнику при обнаружении следов своих открытых ордеров, вообще лучше отказаться от любой реакции на прошлый сеанс, выдать предупреждение пользователь (делай, мол, что знаешь) и запуститься с изменённым (инкрементированным) значением MAGIC... потому как перекомпилированный советник или с другими параметрами - это уже другой советник, и в работу предыдущего ему не следует вмешиваться.

#4 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 February 2011 - 23:06

Их и нужно анализировать при деините. Т.е. например, если переключили таймфрейм - сохраняем нужные нам переменные в некоторый файл (например, .ini), если советник удален - значит сохраненные переменные обнуляем и т.д..


Точнее, как я понимаю, и при deinit() и при последующем init().

Тут нужно бы иточнения:
- к моменту deinit() код причины завершения уже готов? он корректно сформировался?
- при последующем init() это будет тот же код?
- а где этот код хранится... т.е. к вопросу: а если между deinit() и init() нашего советника ненароком произойдёт остановка другого советника (а может и не советника, а индикатора или скрипта), и по совершенно другой причине - то какой код мы получем при следующем init() интересующего нас советника? свой или чужой?

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

#5 Necron

Necron

    Пошёл в рукопашку

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPip
  • 683 сообщений

Отправлено 21 February 2011 - 23:24

Точнее, как я понимаю, и при deinit() и при последующем init().

Тут нужно бы иточнения:
- к моменту deinit() код причины завершения уже готов? он корректно сформировался?
- при последующем init() это будет тот же код?
- а где этот код хранится... т.е. к вопросу: а если между deinit() и init() нашего советника ненароком произойдёт остановка другого советника (а может и не советника, а индикатора или скрипта), и по совершенно другой причине - то какой код мы получем при следующем init() интересующего нас советника? свой или чужой?

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


1. да, код причины готов и полностью корректен.
2. не знаю :)
3. я вообще не знаю правильно ли возвращается на ините причина деинициализации (не проверял никогда). Поэтому ее скорее всего нужно будет вручную (т.е. при деините) сохранить где-нибудь, например, в файле переменных советника (мне нравится использовать .ini файлы, есть библиотека Игоря Кима, очень удобная). Тогда уже будет более-менее полная картина.

Это не всегда будет просто... Если советник устанавливает целую сетку ордеров (так зачастую делает мартингейл стратегии), то за время пока он "спал" (а это может быть и долго) с этой кучей ордеров могло произойти всё, что угодно: часть из них из отложенных могли перейти в рыночные (сработали), часть рыночных могли закрыться (по SL или TP), так что и общее число ордеров сильно поменялось - общая картина ордеров может поменяться до неузнаваемости!


Да, конечно такая ситуация возможна. Выход, как мне кажется, действовать по ситуации: если есть сигнал на открытие/закрытие сделки - открывать/закрывать, т.е. продолжать работать по заложенной в советник схеме.
Каждый сам кузнец своей судьбы.

#6 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 25 March 2011 - 11:44

Обсуждения последнего месяца ... вот здесь в теме:
Советник PuriaM2
- но и в других темах там рядом - наводят на мысль, что корректный останов-перезапуск ещё как-то можно не очень сложно сделать в советниках, отслеживающих индикаторы, в частности мувинги сглаженные...

... но для советников, выставляющих целую сетку ордеров - а это, в частности, все "модные" мартингейл - сделать корректный перезапуск это ... "что-то-с чем-то" :angry:

#7 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 27 March 2011 - 15:53

Подобная проблема наверное возникала у любого писателя автоматов.
Для себя я решил, что неважно по какой причине перезапустился советник.
В любом случае нужен анализ обстановки и определения дальнейших действий. Что и воплощено в алгоритме.
У меня советники работают в отдельном МТ-терминале, те переключения таймов, счетов и тд - исключено.
Просмотр работы Советника выполняю на другом терминалеМТ, даже на другом компе.
Изменения параметров советника тоже делаю со второго терминалаМТ.
Пока проблем не было. Но от изменения параметров советника дистанционно тоже отказался - автомат должен быть автоматом.
(Сетки не использую, и основной таймфрэйм 1Н или выше.)
Ты это, заходи, если что...(С)

#8 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 27 March 2011 - 16:36

Просмотр работы Советника выполняю на другом терминалеМТ, даже на другом компе.
Изменения параметров советника тоже делаю со второго терминалаМТ.
Пока проблем не было.


Любопытно...
А подробнее?: как это технически осуществляется - советник работает в одном месте, а диагностика и управление ним из другого?

#9 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 27 March 2011 - 17:07

Любопытно...
А подробнее?: как это технически осуществляется - советник работает в одном месте, а диагностика и управление ним из другого?


Можно подключаться к одному счету с нескольких МТ. Пробовал подключаться с 4-х ПК и коммуникатора одновременно (в ДЦ с моими счетами можно, другими не пробовал).
На других платформах, например Rumus это не возможно.
На одном экземпляре МТ работает советник. Постоянно смотрит ордера, в частности их комментарии.
Например на другом ПК (или коммуникаторе) открываю лимит или стор с коментом "Предопределенный комент"). Советник видит ордер, по списку смотрит что надо делать, делает, ордер удаляет. (можно чтоб и написал в ответ что-нибудь, мэйл послал и тд).
Вот.
  • Kortizon это нравится
Ты это, заходи, если что...(С)

#10 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 27 March 2011 - 18:22

Можно подключаться к одному счету с нескольких МТ. Пробовал подключаться с 4-х ПК и коммуникатора одновременно (в ДЦ с моими счетами можно, другими не пробовал).
На других платформах, например Rumus это не возможно.

Любопытно.
Надо будет проверить.
Кстати, какой это "ДЦ с моими счетами"? ... если на другом не пройдёт номер...


На одном экземпляре МТ работает советник. Постоянно смотрит ордера, в частности их комментарии.
Например на другом ПК (или коммуникаторе) открываю лимит или стор с коментом "Предопределенный комент"). Советник видит ордер, по списку смотрит что надо делать, делает, ордер удаляет. (можно чтоб и написал в ответ что-нибудь, мэйл послал и тд).

Т.е., если я правильно понял, лимит или стоп в данном случае ордером не является (сработать не может, границы выставлены какие-то заоблачные...), а являются только такими "письменами" ... переносчиками информации для советника?

#11 Alen_T

Alen_T

    Есть ещё порох в пороховницах

  • Специалист
  • PipPipPipPipPipPipPipPipPipPipPipPip
  • 874 сообщений

Отправлено 27 March 2011 - 19:48

Любопытно.
Надо будет проверить.
Кстати, какой это "ДЦ с моими счетами"? ... если на другом не пройдёт номер...

Т.е., если я правильно понял, лимит или стоп в данном случае ордером не является (сработать не может, границы выставлены какие-то заоблачные...), а являются только такими "письменами" ... переносчиками информации для советника?


liteforex

Зависит от задумки. У меня этот ордер был лимит, заменялся советником на свой с Магиком и это был запрет на открытие ордеров определенного направления пока не сработает. После замены, его если нужно можно было подкорректировать, удалить и тд. Поскольку Магик соответствовал, советник считал его своим, и вел себя соответственно.
  • Kortizon это нравится
Ты это, заходи, если что...(С)

#12 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 31 March 2011 - 14:41

Наблюдение за прошедшее время за разными советниками (из разных рук производства ;)) подсказывает, что:

1. могут быть боты устойчивые к перебоям (остановкам) в работе ... такими будут, например, открывающие торговые ордера с SL/TP, и никогда их не закрывающие... пока само не позакрывается по SL/TP; такие советники можно когда угодно прерывать и так же произвольно запускать.

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

3. могут быть боты, которые будут страдать от перебоев в работе очень сильно... к таким, предполагаю, будут относиться все мартингейл-боты, раскидывающие сетку отложенных ордеров; после периода простоя T когда бот снова включится, часть ордеров могла сработать, т.е. из отложенных стать торговыми + закрыться ... т.е. картина открытых ордеров поменяется как по числу, так и по составу... да к этому ещё добавляется, что мартингейл-боты ещё имеют возможность параметром указать сколько ордеров в сетке открывать...
Разгрести такую картину в общем случае вряд ли возможно : когда вы видите 5 ордеров это что? : открывалось 7 и 2 уже сработали и закрылись? или открывалось 5?
В общем случае, мартингейл боты в смысле перерывов в работе нужно отнести к абсолютно неустойчивым.



Copyright © 2024 Your Company Name