Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В советниках нет OnStart(), но я понял, что вы имели в виду. Однако ОП даже в ответ на ваши комментарии сказал, цитирую:
Да, я имел в виду OnTick(). Вы все еще придаете слишком большое значение "во время работы советника". Это не обязательно или даже наиболее правдоподобно означает "пока советник выполняет OnTick()", а не "пока советник привязан к графику, т.е. в течение всего времени его работы".
Нам нужна дополнительная информация от paranoyakX.
Да, я имел в виду OnTick(). Вы все еще придаете слишком большое значение фразе "пока советник работает". Это не обязательно или даже наиболее правдоподобно означает "пока советник выполняет OnTick()", а не "пока советник привязан к графику, т.е. в течение всего времени его работы".
Нам нужна дополнительная информация от paranoyakX.
Привет, ребята,
позвольте мне прояснить следующее. Мой код ищет очень базовый паттерн на предыдущих барах и решает, будет ли открыт ордер, но открытие нового ордера будет проверяться только при появлении нового бара. Я имею в виду, что я жду закрытия последнего бара, затем проверяю паттерн, если он в порядке, я открываю ордер. Таким образом, открытие ордера происходит при открытии нового бара. Как сказал @jjc, я храню основную информацию о паттерне в глобальных переменных, например, когда паттерн начался и закончился, какое самое высокое и самое низкое значение и т.д.
Так или иначе, если мне придется повторно запускать советника, я хочу найти эту базовую информацию снова (начало и конец бара, самая высокая и самая низкая цены и т.д.) и снова заполнить мои глобальные переменные, вот почему мне это нужно. Я буду использовать информацию о начале и конце, чтобы решить, когда закрыть мой ордер. Так что достаточно, если новый бар не появится в OnInit, во время работы советника, это не проблема.
Да, я имел в виду OnTick(). Вы все еще придаете слишком большое значение фразе "пока советник работает". Это не обязательно или даже наиболее правдоподобно означает "пока советник выполняет OnTick()", а не "пока советник привязан к графику, т.е. в течение всего времени его работы".
Нам нужна дополнительная информация от paranoyakX.
Привет, ребята,
Позвольте мне прояснить следующее. Мой код ищет очень базовый паттерн на предыдущих барах и решает, будет ли открыт ордер, но открытие нового ордера будет проверяться только при появлении нового бара. Я имею в виду, что я жду закрытия последнего бара, затем проверяю паттерн, если он в порядке, я открываю ордер. Таким образом, открытие ордера происходит при открытии нового бара. Как сказал @jjc, я храню основную информацию о паттерне в глобальных переменных, например, когда мой паттерн начался и закончился, какое самое высокое и самое низкое значение и т.д.
Так или иначе, если мне придется повторно запускать советника, я хочу найти эту базовую информацию снова (начало и конец бара, самая высокая и самая низкая цены и т.д.) и снова заполнить мои глобальные переменные, вот почему мне это нужно. Я буду использовать информацию о начале и конце, чтобы решить, когда закрыть мой ордер. Так что достаточно, если новый бар не появится в OnInit, во время работы советника, это не проблема.
Вы НЕ должны делать все это в OnInit(). Вы должны делать всю эту логику (включая восстановление) в OnTick(). Это очень важно! Выполнение этого в OnInit() приведет к дальнейшим проблемам, которые вы не предусмотрели, и оставит ваш советник в состоянии "инициализации", пока вы выполняете всю эту логику. Поэтому делайте все правильно! Выполняйте только инициализацию (например, переменные, проверку внешних параметров и т.д.) в OnInit(), а все остальное - в OnTick().
Нет, нет, нет! Я не смог объяснить, извините, я запускаю все в OnTick. но просто я проверяю, принадлежит ли этот тик новому бару и делаю свой персонал. Что я запускаю в OnInit, так это заново нахожу ордера и паттерн, который я рассчитал ранее, пересчитываю его. Я сказал, что это работает в OnInit, найти мой паттерн, что в настоящее время открытый ордер принадлежит.
Надеюсь, я могу объяснить.
Нет, нет, нет! Я не смог объяснить, извините, я запускаю все в OnTick. но просто я проверяю, принадлежит ли этот тик новому бару и делаю свой персонал. Что я запускаю в OnInit, так это заново нахожу ордера и паттерн, который я рассчитал ранее, пересчитываю его. Я сказал, что это работает в OnInit, найти мой паттерн, что в настоящее время открытый ордер принадлежит.
Надеюсь, я могу объяснить.
Да, я понял это в вашем посте! Я хочу сказать, что не надо делать этого в OnInit(). Вы должны найти свои ордера, паттерны и все эти вычисления в OnTick().
Просто определите локальную статическую переменную в OnTick() и сделайте все ваши проверки и определение паттернов, а затем установите переменную в false.
Да, я понял это в вашем сообщении! Я хочу сказать, что НЕ делайте этого в OnInit(). Вы должны найти свои ордера, паттерны и все эти вычисления в OnTick().
Просто определите локальную статическую переменную в OnTick() и сделайте все ваши проверки и определение паттернов, а затем установите переменную в false.
Тогда извините, я неправильно вас понял. Почему я не делаю это в OnInit ? Разве это не удобнее? Когда я это сделаю, то для каждого тика после первого я буду выполнять оператор if, который не будет истинным каждый раз. Я подумал, что это лишняя нагрузка на код.
Разве OnInit существует не для того, чтобы инициализировать что-то вроде моих глобальных переменных?
Надеюсь, я смогу объяснить.
Я думаю, что нам нужно увидеть код, чтобы быть уверенными в том, о чем вы говорите. Например, неясно, ищете ли вы исторический паттерн, который породил существующую открытую сделку, потому что (а) это подскажет вам, как управлять открытой сделкой, где/когда ее закрыть и т.д., или (б) просто для того, чтобы нарисовать на графике маркеры, объясняющие, почему была открыта существующая сделка.
Я в целом согласен с FMIC, что вы должны стараться делать как можно больше в OnTick(), и хранить как можно меньше состояния в глобальных переменных.
Тогда извините, я вас неправильно понял. Почему я не делаю это OnInit ? Разве это не удобнее? Когда я это сделаю, для каждого тика после первого, я буду запускать оператор if, который не будет истинным каждый раз. Я подумал, что это лишняя нагрузка на код.
Разве OnInit существует не для того, чтобы инициализировать что-то вроде моих глобальных переменных?
спасибо за совет, вот очень простая версия моего кода, это не мой реальный код, но я надеюсь, что это будет более понятно.
как я уже сказал, это не настоящий код, поиск паттерна и т.д. - это просто пример. причина, по которой я открыл эту тему - функция DetectExistingPattern()