Срочно нужно почитать про вещественные числа в языке программирования.
Срочно нужно почитать про то, какие параметры передавать в структуру для открытия/модификации позиций, чтобы не было invalid stops.
Не обижайтесь, но тут проблема не в MT5, а в слабых знаниях в программировании.
Пытаюсь перейти на МТ5, но что-то у меня из всех щелей лезет не пойму что. Не знаю имеет ли это значение, но на всякий случай уточняю: тестирую в тестере стратегий, в режиме "Каждый тик на основе реальных".
первая Печать печатает неверное значение вещественной ТР, полученной сложением вещественных:
а вторая Печать печатает верное значение величины (Ev.L+minhl/2).
Естественно, что с подобными расчетами даже когда не [Invalid stops], то все равно стопы не такие, как задумано.
Я конечно могу вместо ТП везде поставить (Ev.L+minhl/2), но ведь у меня в коде полно и других арифметических выражений.
Что это? баг? или я в синтаксисе что-то не понимаю?
Отличие ровно в 0,00050 - такое ощущение, что где то еще minhl прибавилось...
Пытаюсь перейти на МТ5, но что-то у меня из всех щелей лезет не пойму что. Не знаю имеет ли это значение, но на всякий случай уточняю: тестирую в тестере стратегий, в режиме "Каждый тик на основе реальных".
первая Печать печатает неверное значение вещественной ТР, полученной сложением вещественных:
а вторая Печать печатает верное значение величины (Ev.L+minhl/2).
Естественно, что с подобными расчетами даже когда не [Invalid stops], то все равно стопы не такие, как задумано.
Я конечно могу вместо ТП везде поставить (Ev.L+minhl/2), но ведь у меня в коде полно и других арифметических выражений.
Что это? баг? или я в синтаксисе что-то не понимаю?
все используемые переменные точно double ?
и повысьте точность при отладочной печати, DoubleToString(xxx,8)
Что это? баг? или я в синтаксисе что-то не понимаю?
Приведение типов при вычислении ТР.
TP=Ev.L+minhl/2; // заменить на TP=Ev.L+minhl/2.0; // или на TP=Ev.L+(double)minhl/2;
- www.mql5.com
Код:
int OnInit() { double EV = 50.0000099; double minhl = 0.0000001; double Bid = 199.999995; double tp = EV + minhl / 2; int digits = 5; Print(digits, " TP: sell ", DoubleToString(Bid, digits), " TP= ", DoubleToString(EV, digits), " + ", DoubleToString(minhl / 2, digits), " = ", DoubleToString(tp, digits)); Print(digits, " CALC: sell ", DoubleToString(Bid, digits), " TP= ", DoubleToString(EV, digits), " + ", DoubleToString(minhl / 2, digits), " = ", DoubleToString(EV + minhl / 2, digits)); digits = 8; Print(digits, " TP: sell ", DoubleToString(Bid, digits), " TP= ", DoubleToString(EV, digits), " + ", DoubleToString(minhl / 2, digits), " = ", DoubleToString(tp, digits)); Print(digits, " CALC: sell ", DoubleToString(Bid, digits), " TP= ", DoubleToString(EV, digits), " + ", DoubleToString(minhl / 2, digits), " = ", DoubleToString(EV + minhl / 2, digits)); return(INIT_SUCCEEDED); }
Результат:
2023.04.01 17:52:37.354 PriceChange (AUDCADrfd,H1) 5 TP: sell 200.00000 TP= 50.00001 + 0.00000 = 50.00001 2023.04.01 17:52:37.354 PriceChange (AUDCADrfd,H1) 5 CALC: sell 200.00000 TP= 50.00001 + 0.00000 = 50.00001 2023.04.01 17:52:37.354 PriceChange (AUDCADrfd,H1) 8 TP: sell 199.99999500 TP= 50.00000990 + 0.00000005 = 50.00000995 2023.04.01 17:52:37.354 PriceChange (AUDCADrfd,H1) 8 CALC: sell 199.99999500 TP= 50.00000990 + 0.00000005 = 50.00000995
Вывод:
ТС привел не весь код, а вырезал что-то, вставил что-то. Гадание на магическом шаре не дало точного ответа, почему у автора получились разные значения.
Нет, отличия самые разные, вот несколько примеров, причем последний, 2256-ой - правильно подсчитано
CO 0 18:17:46.583 Core 1 2023.03.01 02:02:28 1 sell 1.05733 TP= 1.05713 + 0.00025 = 0.00000 IS 0 18:17:46.583 Core 1 2023.03.01 02:02:28 1 sell 1.05733 TP= 1.05713 + 0.00025 = 1.05738 IH 0 18:17:46.583 Core 1 2023.03.02 12:02:11 13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.05704 FL 0 18:17:46.583 Core 1 2023.03.02 12:02:11 13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.06216 HO 0 18:18:17.105 Core 1 2023.03.28 09:45:32 2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158 LL 0 18:18:17.105 Core 1 2023.03.28 09:45:32 2556 sell 1.08081 TP= 1.07133 + 0.00025 = 1.07158
попробовал ваши варианты, результат идентичный:
ER 0 14:58:34.804 Core 1 2023.03.02 12:02:11 13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.05704 JF 0 14:58:34.804 Core 1 2023.03.02 12:02:11 13 sell 1.06218 TP= 1.06191 + 0.00025 = 1.06216
Пытаюсь перейти на МТ5, но что-то у меня из всех щелей лезет не пойму что. Не знаю имеет ли это значение, но на всякий случай уточняю: тестирую в тестере стратегий, в режиме "Каждый тик на основе реальных".
первая Печать печатает неверное значение вещественной ТР, полученной сложением вещественных:
а вторая Печать печатает верное значение величины (Ev.L+minhl/2).
Естественно, что с подобными расчетами даже когда не [Invalid stops], то все равно стопы не такие, как задумано.
Я конечно могу вместо ТП везде поставить (Ev.L+minhl/2), но ведь у меня в коде полно и других арифметических выражений.
Что это? баг? или я в синтаксисе что-то не понимаю?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь перейти на МТ5, но что-то у меня из всех щелей лезет не пойму что. Не знаю имеет ли это значение, но на всякий случай уточняю: тестирую в тестере стратегий, в режиме "Каждый тик на основе реальных".
первая Печать печатает неверное значение вещественной ТР, полученной сложением вещественных:
TP=Ev.L+minhl/2;
а вторая Печать печатает верное значение величины (Ev.L+minhl/2).
Естественно, что с подобными расчетами даже когда не [Invalid stops], то все равно стопы не такие, как задумано.
Я конечно могу вместо ТП везде поставить (Ev.L+minhl/2), но ведь у меня в коде полно и других арифметических выражений.
Что это? баг? или я в синтаксисе что-то не понимаю?