Во-первых определим понятие мультивалютный советник. Мультивалютным будем называть исключительно тот советник, который работая на одном инструменте открывает и контролирует ордера и позиции так-же и других, указанных инструментов. Те советники которые могут работать на разных инструментах, но исключительно по тому, на графике которого он прикреплён мультивалютным не называется.
Итак Вопрос: Как вы определяете наступление нового бара на инструментах из списка в советнике?
К примеру, советник находясь на графике GBPUSD так-же открывает позиции по GBPAUD и GBPCAD на открытии новой недели.
Само определение новой недели не вызывает проблем. Но если на GBPUSD уже прошёл первый тик новой недели, а на GBPAUD и GBPCAD ещё нет, тогда как? Ну, можно конечно определить и для каждого символа отдельно. Но это просто когда 3 пары в работе. А если все? А если количество валютных пар при запуске советника может быть изменено? Если подготовить проверку нового бара по всем инструментам, а в работу запустить только 3... какая будет потеря производительности...
В общем, прошу не кидать примеры кодов с репликами типа "Я так определяю". Меня больше интересует теория.
ООП. Оборачиваешь в класс свою любимую ф-цию определения нового бара для одного таймфрейма одного символа, и вуаля - у тебя мультивалютная IsNewBar() для любого символа и любого тф.
Далее в OnTimer() опрашиваешь все экземпляры получившегося класса для определения факта открытия нового бара на заданных тф и символах.
Остается таймер - перебираем пары в таймере, ловим когда будет бар+1 (но не бар+х).
ООП. Оборачиваешь в класс свою любимую ф-цию определения нового бара для одного таймфрейма одного символа, и вуаля - у тебя мультивалютная IsNewBar() для любого символа и любого тф.
Далее в OnTimer() опрашиваешь все экземпляры получившегося класса для определения факта открытия нового бара на заданных тф и символах.
Думаешь в OnTimer() лучше сделать? Что-то я об этом не подумал, наверное лучше чем проверять на следующем тике пары на котором стоит советник.
Думаешь в OnTimer() лучше сделать? Что-то я об этом не подумал, наверное лучше чем проверять на следующем тике пары на котором стоит советник.
Ну так если по паре, на которой стоит советник тиков нет, а на других рабочих - идут, то как собрался определять новый бар?
В OnTimer() - не зависит от тиков.
Ну так если по паре, на которой стоит советник тиков нет, а на других рабочих - идут, то как собрался определять новый бар?
В OnTimer() - не зависит от тиков.
Не в этом моё недопонимание.
Ну вызываешь IsNewBar() для одного символа, получаешь bool ответ, пишешь его в переменную. Вызываешь IsNewBar() для другого символа... В другую переменную надо писать... Сколько переменных надо завести если неизвестно сколько пар будут работать?
И вторая непонятка: Все действия перенести в OnTimer() а OnTick() оставить пустым? Или только для действий с символом на котором стоит советник?
Делаете синтетик из нужных валют и запускаете на нем советника, новый бар на синтетике означает что на всех валютах синтетика наступил новый бар.
Но тогда будет запаздывание для валюты на которой новый бар наступил первым. Да и на втором и третьем будет запаздывание. И это запаздывание может повлиять на цену открытия позиции. Разве не так?
Не в этом моё недопонимание.
Ну вызываешь IsNewBar() для одного символа, получаешь bool ответ, пишешь его в переменную. Вызываешь IsNewBar() для другого символа... В другую переменную надо писать... Сколько переменных надо завести если неизвестно сколько пар будут работать?
И вторая непонятка: Все действия перенести в OnTimer() а OnTick() оставить пустым? Или только для действий с символом на котором стоит советник?
У меня для этого реализован класс, который работает с конкретным символом.
Вот например.
class Trader { ... bool NewBar(); //класс работает только с символом заданным при инициализации. int Init(string Symbols); void OpenOrder(); ...... } Trader Tr[]// динамический массив размер зависит от количества торгуемых символов. OnTimer() { for (int i=0;i<ArraySize(Tr)-1;i++) { if (Tr[i].NewBar())//пришел новый бар { if (проверка условия открытия позиции) { Tr[i].OpenOrder(); } } } }
Но тогда будет запаздывание для валюты на которой новый бар наступил первым. Да и на втором и третьем будет запаздывание. И это запаздывание может повлиять на цену открытия позиции. Разве не так?
Тогда на каждый символ свой советник + мастер советник, который по каким то условиям изменяет глобальные переменные на которые смотрят советники на символах. Советник на символе только открывает позицию и в случае отсутствия активности мастер советника упрощенно ее сопровождает/закрывает, а мастер советник шаманит с позициями и глобальными переменными для остальных советников.
Тогда на каждый символ свой советник + мастер советник, который по каким то условиям изменяет глобальные переменные на которые смотрят советники на символах. Советник на символе только открывает позицию и в случае отсутствия активности мастер советника упрощенно ее сопровождает/закрывает, а мастер советник шаманит с позициями и глобальными переменными для остальных советников.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Во-первых определим понятие мультивалютный советник. Мультивалютным будем называть исключительно тот советник, который работая на одном инструменте открывает и контролирует ордера и позиции так-же и других, указанных инструментов. Те советники которые могут работать на разных инструментах, но исключительно по тому, на графике которого он прикреплён мультивалютным не называется.
Итак Вопрос: Как вы определяете наступление нового бара на инструментах из списка в советнике?
К примеру, советник находясь на графике GBPUSD так-же открывает позиции по GBPAUD и GBPCAD на открытии новой недели.
Само определение новой недели не вызывает проблем. Но если на GBPUSD уже прошёл первый тик новой недели, а на GBPAUD и GBPCAD ещё нет, тогда как? Ну, можно конечно определить и для каждого символа отдельно. Но это просто когда 3 пары в работе. А если все? А если количество валютных пар при запуске советника может быть изменено? Если подготовить проверку нового бара по всем инструментам, а в работу запустить только 3... какая будет потеря производительности...
В общем, прошу не кидать примеры кодов с репликами типа "Я так определяю". Меня больше интересует теория.