Спасибо Nicholi за более упрощенный код. После некоторых экспериментов я обнаружил, что объявление ask_diff как float дает разности с правильным количеством цифр, но при этом выдает ошибку компиляции о возможной потере данных при преобразовании типа. Похоже, что мне придется выбирать между очень маленькими погрешностями в моих разностях и предупреждением о компиляции. Последнее было бы лучше для торговых решений, но есть ли у кого-нибудь еще решение, как получить не более пяти знаков после запятой в ask_diff?
rdone: Спасибо Nicholi за этот более упрощенный код. После некоторых экспериментов я обнаружил, что объявление ask_diff как float дает разности с правильным количеством цифр, но при этом выдает ошибку компиляции о возможной потере данных при преобразовании типа. Похоже, что мне придется выбирать между очень маленькими погрешностями в моих разностях и предупреждением о компиляции. Последнее было бы лучше для торговых решений, но есть ли у кого-нибудь еще решение, как получить не более пяти знаков после запятой в ask_diff?
ваш ask_diff должен иметь тип int и выглядеть следующим образом.
int diff = int(round((current.ask - last.ask) / _Point));
rdone: Я только что обнаружил NormalizeDouble и DoubleToString. Эй, это мой первый день в этом деле...
Моя цель - определить разницу между текущим Ask и предыдущим Ask (часть 1), а затем вести текущий итог этой разницы (часть 2). Часть 1 работает, но часть 2 просто возвращает сумму предыдущего Ask. Может ли кто-нибудь увидеть, где я ошибаюсь, и предложить какую-нибудь коррекцию курса?
Как это часто бывает, код делал то, что должен был делать, а не то, что я хотел. Логика требует, чтобы tick_prev всегда был заполнен, но это не так на первом тике. Меня интересует логика, которая не требует, чтобы tick_prev был заполнен на первом тике, но в остальном все работает.
rdone: Как это часто бывает, код делал то, что должен был делать, а не то, что я хотел. Логика требует, чтобы tick_prev всегда был заполнен, но это не так на первом тике. Меня интересует логика, которая не требует, чтобы tick_prev был заполнен на первом тике, но в остальном все работает.
rdone: Как это часто бывает, код делал то, что должен был делать, а не то, что я хотел. Логика требует, чтобы tick_prev всегда был заполнен, но это не так на первом тике. Меня интересует логика, которая не требует, чтобы tick_prev был заполнен на первом тике, но в остальном все работает.
rdone: Это тот уровень кодирования, к которому я стремлюсь. Спасибо, Эрнст!
Вы не хотите хранить разность точек как двойное число, поскольку двойные числа редко бывают равными. Вы хотите хранить ее как целое значение. Например, (1.00001 - 1.00000) / 0.00001 = 1 балл. Поэтому если вы сравниваете только два тика, вы можете сделать свой код более компактным и просто создать подкласс MqlTick и добавить атрибут int для разницы в баллах.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Спасибо Nicholi за этот более упрощенный код. После некоторых экспериментов я обнаружил, что объявление ask_diff как float дает разности с правильным количеством цифр, но при этом выдает ошибку компиляции о возможной потере данных при преобразовании типа. Похоже, что мне придется выбирать между очень маленькими погрешностями в моих разностях и предупреждением о компиляции. Последнее было бы лучше для торговых решений, но есть ли у кого-нибудь еще решение, как получить не более пяти знаков после запятой в ask_diff?
ваш ask_diff должен иметь тип int и выглядеть следующим образом.
Я только что обнаружил NormalizeDouble и DoubleToString. Эй, это мой первый день в этом деле...
Как это часто бывает, код делал то, что должен был делать, а не то, что я хотел. Логика требует, чтобы tick_prev всегда был заполнен, но это не так на первом тике. Меня интересует логика, которая не требует, чтобы tick_prev был заполнен на первом тике, но в остальном все работает.
Как это часто бывает, код делал то, что должен был делать, а не то, что я хотел. Логика требует, чтобы tick_prev всегда был заполнен, но это не так на первом тике. Меня интересует логика, которая не требует, чтобы tick_prev был заполнен на первом тике, но в остальном все работает.
Это тот уровень кодирования, к которому я стремлюсь. Спасибо, Эрнст!
Вы не хотите хранить разность точек как двойное число, поскольку двойные числа редко бывают равными. Вы хотите хранить ее как целое значение. Например, (1.00001 - 1.00000) / 0.00001 = 1 балл. Поэтому если вы сравниваете только два тика, вы можете сделать свой код более компактным и просто создать подкласс MqlTick и добавить атрибут int для разницы в баллах.