манименеджмент на несколько экспертов - страница 2

 
ktest0:


Подвоха нет ...

Ок, вот тебе ситуация. Терминал запущен в неторговое время (например в воскресенье, либо просто в перерыве между торговыми сессиями). Соответственно тиков нет. Затем, спустя продолжительное время, торги открываются. По одному из рабочих инструментов приходит тик. Запускается старт() и советник удаляет все переменные, относящиеся к другим советникам, поскольку считает их уже неактуальными (связь с сервером есть, инструменты доступны для торговли, а тики давно не поступали). И если в этот момент возникает сигнал на открытие позы, то он откроет её максимальным лотом. Но ведь остальные советники продолжают висеть на графиках, их никто не удалял, они просто ждут своего тика.

Так что зацикливать надо. 

 
Meat:

Ок, вот тебе ситуация. Терминал запущен в неторговое время (например в воскресенье, либо просто в перерыве между торговыми сессиями). Соответственно тиков нет. Затем, спустя продолжительное время, торги открываются. По одному из рабочих инструментов приходит тик. Запускается старт() и советник удаляет все переменные, относящиеся к другим советникам, поскольку считает их уже неактуальными (связь с сервером есть, инструменты доступны для торговли, а тики давно не поступали). И если в этот момент возникает сигнал на открытие позы, то он откроет её максимальным лотом. Но ведь остальные советники продолжают висеть на графиках, их никто не удалял, они просто ждут своего тика.

Так что зацикливать надо. 


"Запускается старт() и советник удаляет все переменные" и создает свою если её не находит, также как и остальные запущенные советники, а новые переменные будут уже со свежим штампом времени и их никакой советник просто так не удалит...

"то он откроет её максимальным лотом" запретить советнику открывать позу с первого тика. Откровенно говоря советник херачащий открытие позиций с первого тика не принимая во внимание разрыв по времени, а скорее всего и гэп, от того не имеющий возможность нормального прогнозирования открытия направления позиции вообще полнейшее г...

 "Так что зацикливать надо. " Что надо зацикливать?

 
ktest0:

запретить советнику открывать позу с первого тика.  

 Это уже изменение торговой системы, и неизвестно как оно отразится на конечных результатах. Так что обойдёмся без самодеятельности :)  Тем более ваше мнение не единственно верное. Я например, не разделяю его. Логика системы не должна зависеть от того, в какой момент ДЦ запустил поток котировок, сейчас или секундой раньше.

  Что надо зацикливать?

Советника зацикливать
 
Meat:

 Это уже изменение торговой системы, и неизвестно как оно отразится на конечных результатах. Так что обойдёмся без самодеятельности :)  Тем более ваше мнение не единственно верное. Я например, не разделяю его. Логика системы не должна зависеть от того, в какой момент ДЦ запустил поток котировок, сейчас или секундой раньше.

Советника зацикливать


И что подразумевается под фразой "Советника зацикливать"?

Он что, Start() заново не запускает при появлении нового тика?

Хотелось бы услышать развернутое определение этой фразы...

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

Какое практическое отношение имеет зацикливание к поставленной задаче?

 
Meat:
"Зацикливать" - это значит организовать работу в бесконечном цикле, т.е. без выхода из функции start(). Работа советника не будет привязана к приходу тиков, и это вполне разумно, тем более когда нужно оперативно получать инфу по нескольким символам. Я например уже давно все свои советники делаю зацикленными.

 Ну по сути, если на то пошло то в init подобную операцию вообще не резонно задавать, а разумнее выполнить сразу в старте. В самом начале старта проверять наличие сигнатуры данного эксперта и, если сигнатуры нет, значит дабавить сигнатуру + добавить 1 к счётчику количества экспертов. Выходит так?
 
Делить общий баланс на количество советников не совсем корректо, а если один советник отлично наливает счет, а другой это всё благополучно сливат, то что тогда ? Не лучше ли открыть несколько счетов и пусть себе работают или у вас в системе всё взаимосвязано что надо именно несколько советников для общего результата ?
 
BeerGod:
Делить общий баланс на количество советников не совсем корректо, а если один советник отлично наливает счет, а другой это всё благополучно сливат, то что тогда ? Не лучше ли открыть несколько счетов и пусть себе работают или у вас в системе всё взаимосвязано что надо именно несколько советников для общего результата ?


 Ну это один из вариантов. Ведь на одном счёте может быть именно такой вариант *делить риск на количество запущенных сов), а на других счетах можно применять другие варианты управления капиталом.

 Ведь по сути, если есть, скажем так, 5 экспертов с высоким мат. ожиданием, количеством непрерывных проигрышей 2-3, а непрерывных выигрышем 3-4, например, то такой вариант будет самым приемлимым. Ведь программист должен быть уверен в совах, которые он запускает в торговлю. Иначе не фиг их запускать вообще, если одна сова льёт, а другая зарабатывает. Статистика и алгоритм своё возьмут.

 Но мы отвлеклись от темы. В учебнике написано, что мол они рекомендуют через init  реализовывать подобную задачу, НО выше в данной теме описаны случаи, исходя из которых я видно, что предложенный в учебнике вариант не есть адекватный для советника расположенного на реальном счёте, т.е. он не стабильный.

 Вот, что я имею ввиду. Остаётся понять, как тогда лучше решить данную задачу. 

 

Вот ещё хочу заметить по поводу предложенного ktest0 варианта не торговать на первом тике. Это проблему не решит. Ведь какая разница, первый это тик, второй или ещё какой-то? Если при этом не было тиков по другим рабочим символам (на которых запущены советники), то первый советник будет думать что этих советников нет. Хотя они есть, просто они в режиме ожидания  Поэтому я и предложил зацикливание, чтобы все советники крутились постоянно и не зависели от прихода тиков.

А вообще, что касается нештатного завершения работы конкретного советника (без вызова deinit), то это может произойти только при коряво написанном коде, когда отсутствует обработка IsExpertStopped() в теле цикла. Так не проще ли отладить код своего советника и не заморачиваться с таймаутами?

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