Особенности языка mql5, тонкости и приёмы работы - страница 268
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2024.09.23 19:07
Допустим, по клавише Q вы открываете позицию.
Чтобы такого не происходило, были даны решения.
Задача об игнорировании случайных ChartEvent-событий. Она решена.
Симуляция задачи.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2024.09.23 09:13
Этот советник по нажатию клавиши делает расчеты. Как модифицировать советник, чтобы повторные нажатия клавиши во время расчетов не вызвали повторные расчеты?
Это лог, когда я дважды (без перерыва) нажал на клавишу. Видно, что после расчета запустился второй расчет.
Решение1.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2024.09.23 09:35
К сожалению, только такое решение пришло в голову.
Решение2.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Aleksandr Slavskii, 2024.09.23 11:00
Да, по ваше подсказке вроде работает)))
Симуляция задачи.
Решение1.
Решение2.
Второй раз кнопка нажмется в то время, когда будут выполняться инструкции после вызова
, но до выхода из текущего вызова OnChartEvent (тот же Print еще даже не начнет выполняться), и, по закону подлости, именно тогда создадутся все условия к тому, что бы произошел наиболее неблагоприятный сценарий)))). Бинго!!! Это будет эпичный и поучительный фейл)))
Вопрос: кто будет в этом виноват?
Ответ: тот кто юзает асинхронщину в боевом коде, слабо представляя всю глубину возможных глубин и ту боль, которая там живет.
Это, что бы все могли понять, как это будет (нажать копку после появления Calculated):
Как-то так надо:
Это, что бы все могли понять, как это будет (нажать копку после появления Calculated):
Нахрена?! Очевидно же, что EventChartCustom делается после выхода расчетов. У Вас Sleep - это завершающие "расчеты". Поэтому именно после него должен был быть EventChartCustom.
Собственно, именно это Вы и сделали через ООП. Изначально демонстрация же была подхода для допиливания, собранная на коленке.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
Vladimir Simakov, 2024.09.24 11:06
Как-то так надо:
Такое добавил бы для надежности.
Нахрена?! Очевидно же, что EventChartCustom делается после выхода расчетов. У Вас Sleep - это завершающие "расчеты". Поэтому именно после него должен был быть EventChartCustom.
Собственно, именно это Вы и сделали через ООП. Изначально демонстрация же была подхода для допиливания, собранная на коленке.
Потому, что, результат будет таким:
TComputer - это шикарная, сторонняя библиотека, которой весь мир будет пользоваться))) Не, даже не так, это будет частью местной стандартной библиотеки)))
Естественно, твой код, который давным-давно работал без сбоев, будет на нее переведен и даже без тестов, а зачем, тут ведь все так тривиально и именно такой вызов в справке показан)))
Я сейчас про то, что недоработанные решения, вкинутые один раз, ведут именно к таким последствиям. Поверь, я через это проходил. Асинхронное программирование - это именно про такие вот подлянки.
Такое добавил бы для надежности.
Молодец! Правильно. Теперь и конструктор не нужен)
Только сразу вылезла проблема. EventChartCustom завершился с false. Дальше что делаем, как защищаться от нашего зла-злого будем?)))
EventChartCustom завершился с false. Дальше что делаем, как защищаться от нашего зла-злого будем?)))
Ровно то, что по коду.
Кстати, о птичках, решение-то есть, если сразу о будущем думать, только вот на уровне терминала это надо делать.
Как пример, так, первое, что в голову пришло.
Надо во все событийные вызовы (OnX) два поля добавить.
ulong id; // монотонно увеличивается на каждом событии.
ulong lastFinishedId; // id последнего OnX, который был завершен на момент начала формирования этого события.
Ровно то, что по коду.
То есть, если повторно была нажата кнопка, то получим неожидаемый вызов?
То есть, если повторно была нажата кнопка, то получим неожидаемый вызов?
Да. Когда ChartEventCustom возвращает false, то это нештатная ситуация. Помочь с ней может добавление Решения1.