Советник закрывает сделки, когда он увеличит Эквити на n долларов. Как реализовать, если в соседнем окне работает другой советник. Советник должен учитывать только свое увеличение эквити.
Мой вариант. При запуске советника в ините запоминаем время запуска t.
Потом на каждом тике проверяем список закрытых сделок. проверяем все сделки, время открытия которых больше за t.
Также проверяем список открытых сделок и суммируем их профиты.
(мэйджики всех сделок конечно должны отвечать нужному нам мэйджику).
потом суммируем профиты открытых и закрытых.
Хочу спросить у более опытных программистов, проканает такой вариант?
По большому счету все верно. Проблемы в нюансах. Например: что делать при переинициализации? При описанном варианте каждый новый Init() будет сбрасывать прогресс эквити в 0. Таким образом, напрашивается запись прогресса в глобальные переменные терминала или в файл.
По большому счету все верно. Проблемы в нюансах. Например: что делать при переинициализации? При описанном варианте каждый новый Init() будет сбрасывать прогресс эквити в 0. Таким образом, напрашивается запись прогресса в глобальные переменные терминала или в файл.
Ну можно тогда на первом тике брать значение времени t, и потом устанавливать флаг в положение false.
так пойдет?
да. при смене таймфрейма происходит переинициализация (не знаю зачем это сделано разработчиками именно при смене таймфрейма)
Ну можно тогда на первом тике брать значение времени t, и потом устанавливать флаг в положение false.
так пойдет?
После успешного открытия позиции, писать эквити/баланс в глобальную переменную терминала, потом её сравнивать с прибылью по текущему символу и с определённым Magic.
Таким образом переинициализация не страшна.
- www.mql5.com
Как я понимаю вопрос, то закрытые сделки не должны участвовать в подсчёте, ни по времени открытия, ни по времени закрытия.
Считать надо прибыль открытых, действующих позиций, именно они влияют на эквити, а закрытые изменяют только баланс счёта.
Как я понимаю вопрос, то закрытые сделки не должны участвовать в подсчёте, ни по времени открытия, ни по времени закрытия.
Считать надо прибыль открытых, действующих позиций, именно они влияют на эквити, а закрытые изменяют только баланс счёта.
закрытые тоже.
После успешного открытия позиции, писать эквити/баланс в глобальную переменную терминала, потом её сравнивать с прибылью по текущему символу и с определённым Magic.
Таким образом переинициализация не страшна.
"Ну можно тогда на первом тике брать значение времени t, и потом устанавливать флаг в положение false."
А вот так прокатит?
"Ну можно тогда на первом тике брать значение времени t, и потом устанавливать флаг в положение false."
Перегрузите терминал, и значения по нулям
нет. нужно проводить отслеживание сколько именно этот советник наторговал.
закрытые тоже.
За сутки? Или от определённого времени? Правильный вопрос ставится:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ihor Herasko, 2018.01.11 21:00
По большому счету все верно. Проблемы в нюансах. Например: что делать при переинициализации? При описанном варианте каждый новый Init() будет сбрасывать прогресс эквити в 0. Таким образом, напрашивается запись прогресса в глобальные переменные терминала или в файл.
Вместо того чтобы решать эту проблему, вы сетуете на разработчиков... А "завтра" появится необходимость переинициализации при смене периода и опять будут недовольства в адрес разработчиков... Ну не правильно-же это.
Наверное лучший вариант писать увеличение баланса и эквити в GV и при достижении определённого уровня, сбрасывать в 0. Тогда при инициализации читать эту GV и к ней плюсовать текущую прибыль.
Хотя тоже есть нюанс. Если во время выключенного терминала закрылась какая-то позиция, то она не будет учтена.
И тут напрашивается вопрос: А надо-ли это??? Ведь если советник принёс прибыль, то зачем его ограничивать, сдерживать? Пусть скачет галопом...
За сутки? Или от определённого времени? Правильный вопрос ставится:
Вместо того чтобы решать эту проблему, вы сетуете на разработчиков... А "завтра" появится необходимость переинициализации при смене периода и опять будут недовольства в адрес разработчиков... Ну не правильно-же это.
Наверное лучший вариант писать увеличение баланса и эквити в GV и при достижении определённого уровня, сбрасывать в 0. Тогда при инициализации читать эту GV и к ней плюсовать текущую прибыль.
Хотя тоже есть нюанс. Если во время выключенного терминала закрылась какая-то позиция, то она не будет учтена.
И тут напрашивается вопрос: А надо-ли это??? Ведь если советник принёс прибыль, то зачем его ограничивать, сдерживать? Пусть скачет галопом...
В функции OnDeinit() анализируйте причину выхода. Если это переключение ТаймФрейма - записывайте (в файл или глобалы) нужные значения. В OnInit() анализируйте прошлую причину выхода и нужное восстанавливайте. А то так Вы и к движению планет начнете претензии предъявлять.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если бы он был один в терминале, все было бы просто.
При запуске советника нужно было бы запомнить уровень средств AccountInfoDouble(ACCOUNT_EQUITY).
И потом отслеживать изменение средств на счету.
Но как сделать если рядом работает другой советник?
Мой вариант. При запуске советника в ините запоминаем время запуска t.
Потом на каждом тике проверяем список закрытых сделок. проверяем все сделки, время открытия которых больше за t.
Также проверяем список открытых сделок и суммируем их профиты.
(мэйджики всех сделок конечно должны отвечать нужному нам мэйджику).
потом суммируем профиты открытых и закрытых.
Хочу спросить у более опытных программистов, проканает такой вариант?
Может есть более простой вариант?