Блог им. RomanSSS

Аномалия WLD

Второй раз натыкаюсь на проблему с расчётом цены в программе WLD. Может кто встречал такую проблему и подскажет как её решить.

К примеру: есть часовая свеча индекса РТС:

Open: 740,94 
High: 742,33 
Low: 740,59 
Close: 732,67 

Подключаю эти данные через файл MS к WLD4.
 
И в WLD она отражается, уже следующим образом:

Open: 740,940002441406
High: 742,330017089844
Low: 740,590026855469
Close: 732,679992675781

Проверяю исходняк, не каких изменений,  все данные только в пределах сотых.
 
Вопрос:
1. каким образом WLD округляет до триллионных (откуда он эти цифры берёт, точней что прибавляет)?
2. Как его заставить @#High[Bar] (цены) выводить как есть в сотых, да в настройках есть смещение, но это смещение для графика!
А как математически это повторить. Просто мне нужно перенести стратегию из WLD в C#, и не получается из-за этой разницы. На C# нужно симулировать точную копию этой ошибки.
avatar

mr.Potter

WildTraider, в C# должно быть точно так же, посмотри в режиме отладки.
avatar

Чёрный кот

Kaiman, я о том же, алгоритм не могу нагуглить.
avatar

mr.Potter

Может в опциях настроек Вэлса ограничить число знаков после запятой  !?
avatar

alt

alt, это ограничение для графика.
avatar

mr.Potter

Ок. Откуда качаем данные чем какие- попробую глянуть у себя. Вроде не сталкивался с подобным…
avatar

alt

alt, данные обычные с Финама. Я в топике написал, что проверил MS файл не раз, там всё правильно:

Open: 740,94 
High: 742,33 
Low: 740,59 
Close: 732,67

не каких триллионных нет, это в самом WLD меняеться, а вот как — вот это вопрос!

Используйте дебарг: print('High: '+ FloatToStr( @#High[Bar]));
avatar

mr.Potter

Kaiman, 732,67 -> 732,679992675781 настораживает только )
Чему вы удивляетесь. В WLD  серия баров (Open, High, Low, Close) имеет тип double. Если нужен другой — преобразуйте.
avatar

Karim

Karim, и причём здесь double?
avatar

mr.Potter

Косяк при загрузке данных. У меня такого не возникало, ни при закачке данных, ни при переносе стратегий на C#.
avatar

Karim

Karim, не уверен вот WLD4 — загружаю c MS, загружаю с TXT — одним боком!
avatar

mr.Potter

WildTraider, Про WLD4 ничего не могу сказать. Загружаю *.csv файлы в WLD 6.4. И  если в файле число 41.150000, то оно преобразуется в 41.15
avatar

Karim

Karim, на графике может оно и преобразуеться, вы через дебарг проверяли?
avatar

mr.Potter

WildTraider, Дебарг это что? 
Считается все корректно, переносится в С# и там все норм. Все сделки (вход/выход) робота на С# и WLD совпадают.
Если же пытаться вывести Open через print, то надо понимать, что это тип double и нужно указывать формат вывода.
avatar

Karim

Kaiman, а как вы округляете?
avatar

mr.Potter

Пока не понятно. На графике всё ок… А по print('High: '+ FloatToStr( @#High[Bar]));

High: 1152.31005859375
High: 1154.80004882813
High: 1156.48999023438


avatar

alt

alt, на графике он режет, а в реале нет, но отрезать не проблема (лишний цикл правда писать), а вот как преобразовать 732,67 -> 732,679992675781 — вот загадка! Или хотя бы свести всё под один стандарт.
avatar

mr.Potter

не могу пока ничего посоветовать на сей счёт. Мож на Пауке
полистай ветку по Вэлсу..
При случае попробую спросит у ребят которые более продвинуты в нём

avatar

alt

alt, она в обще ко всем исчислениям хвост цепляет:

 High := StrToFloat(FormatFloat('#,##0.00',@#High[Bar])) — StrToFloat(FormatFloat('#,##0.00',@#High[Bar-1]))
 
High  =  0,0600128173828125
avatar

mr.Potter

WildTraider, лишние цифры возникают т.к. в double нельзя точно отразить некоторые числа. У Float точность еще ниже, так что не стоит его использовать!!! В метатрейдере для точного отображения цены есть функция NormalizeDouble, в ВЛД должно быть что-то аналогичное.  про float вообще забудь!
avatar

Чёрный кот

Чёрный кот, я на Дельфи не особо специализируюсь, но там кроме float double не предусмотрен. И как в самом WLD решить эту проблему я не нашёл. Так что 2-а вопроса в силе!
avatar

mr.Potter

WildTraider, вроде как float в WLD 4 и есть double. В общем все упирается в точность double. Но как решить хз, я никогда не писал под WLD 4, да и не вижу смысла использовать древнюю систему, с таким корявым языком программирования.
avatar

Чёрный кот

WildTraider, вроде при работе системы в вэлсе берутся реальные Хай, Лоу....-  как на графике !?
avatar

alt

alt, нет, график это вообще конечные цифры с отрезанными хвостами. Используйте print
avatar

mr.Potter

alt, надо ещё понять как это в WLD вырубить, а то что за бред, тестить систему которую без ошибки нельзя реализовать на друх платформах.
avatar

mr.Potter


теги блога mr.Potter

....все тэги



2010-2020
UPDONW