![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
То есть имеется проблема непредсказуемой потери точности расчета, с неизвестной причиной и величиной и мы её будем игнорировать поскольку никогда ранее вопросов не возникало?
Вот выловил разброс на 4 пипса:
Вот на 5:
И Вы не хотите повысить точность расчетов на 3 пипса? Для Вас такая погрешность не важна?
Зачем, что это принесёт? Попробуйте использовать для своей прямой задачи стандартную функцию, и свою, вы вообще не увидите разницы, это всё забубоны.
Не придумывайте проблему, чтоб потом искать к ней решение.
Исследование отличия значений стандартных функций от значений полученных расчетным методом было продолжено.
Результаты приведены на скриншоте внизу.
Было произведено 1000 потиковых прогонов для 14 валютных пар.
Подсчитывались:
1. Суммарное отклонение значений.
2. Суммарное абсолютное (по модулю) отклонение значений.
3. Среднее отклонение значений (суммарное отклонение/число прогонов).
Результаты дают повод для размышлений - погрешность является систематической и не усредняется при большом числе прогонов. Наихудшие результаты:
1. Суммарное отклонение значений: EURTRY +0.20460 GBPNZD -0.08996 EURNZD -0.07415
2. Суммарное абсолютное (по модулю) отклонение значений: EURTRY +101.81853 GBPNZD 48.22592 EURNZD 38.70629
3. Среднее отклонение значений (суммарное отклонение/число прогонов): EURTRY +0.00020 GBPNZD -0.00009 EURNZD -0.00007
Советник примененный для тестирования:
Скриншот результатов:
ээ... то есть вы предполагаете, но рассчитывать не пробовали?
а я не предполагаю, а беру конкретные значения: комиссия 10, лот 0.1, MODE_TICKVALUE...
и считаю)
...и пока всё совпадает
Для красоты пейзажа, я бы "_Point" выразил через "MarketInfo(OrderSymbol(),11)", чтобы, что то такое было: MarketInfo(OrderSymbol(),MODE_TICKVALUE) * (int)MarketInfo(OrderSymbol(),MODE_POINT);.
Для мультивалютника, более приемлемая комбинация, а на одноинструментный не влияет, если фильтр по символу применён, поскольку комиссия интересует по ордеру. При небольшой пределке, можно применить и к свопу.
А я склоняюсь к следующей формуле:
double tickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
double tickSize = MarketInfo(Symbol(), MODE_TICKSIZE);
((OrderCommission() + OrderSwap()) / (tickValue * OrderLots()) * tickSize);
Опровергните меня, если я неправ.