Dukascopy Support Board
http://www.dukascopy.com/swiss/english/forex/jforex/forum/

Приведение типов - разница в тестере движка Visual JForex и тестере движка торговой платформы JForex (вер.3.4.13)
http://www.dukascopy.com/swiss/english/forex/jforex/forum/viewtopic.php?f=175&t=56832
Page 1 of 1

Author:  valador [ Wed 21 Nov, 2018, 22:58 ]
Post subject:  Приведение типов - разница в тестере движка Visual JForex и тестере движка торговой платформы JForex (вер.3.4.13)

Для того, чтобы понять в чем разница в тестерах,
предлагаю два варианта вычислений одного и того же коэффициента с помощью Visual JForex.

В торговом роботе задаются внешние значения SL и TP в пипсах (из-за разночтений в понимании уточняю, что в данном контексте это 0.1 пункта, минимальное расстояние движения цены, в частности в EurUsd это 0.00001 - 1 деленное на 100 000).

Вычисляется отношение SL к TP и сохраняется в отдельной переменной "ka".
SL и TP внешне задаются целыми числами, хранятся в переменных "My_SL_pips" и "My_TP_pips" соответственно (целый тип "Integer").
Помимо вычисления "ka", которое по сути равно SL/TP, заданные в пипсах целые SL и TP переводятся в вещественный тип (например, был задано 5 пипсов, привели к 0.00005, то есть поделили на 100 000) "CurrentSLpips" и "CurrentTPpips" соответственно (вещественный тип "Double").

С математической точки зрения без разницы, когда и как вычислять значение "ka". Можно вычислить с помощью My_SL_pips делить на My_TP_pips, а можно CurrentSLpips делить на CurrentTPpips. Результат будет одинаковым.

К сожалению к Visual JForex я не нашел информации о таком понятии как "приведение типов" в неявном случае (явное приведение типа происходит, когда значение типа "Integer" передаем в переменную типа "Double", мы как бы явно задаем задачу перевести целое в вещественное, а неявно, это когда целое делится на вещественное, результат вещественный, а целое делится на целое - результат зависит от системы). Ранее тренировался на языке mql, там всё с этим в порядке - деление целых дает целое. А чтобы не было казусов, дели вещественные и получишь точный результат.

Из-за наличия такого понятия "приведения типов" в том же mql при делении целых получится целое (то есть если математически результат будет вещественным, то в результате вещественная часть просто будет отброшена, например 5/2=2, 3/2=1, 2/5=0).

Так вот обнаружил для случаев неявного приведения типов, что судя по всему:
1. Тестер движка Visual JForex и тестер движка торговой платформы JForex (вер.3.4.13) по разному приводят типы.
2. Приведение типов здесь не похоже на классическое (поделил целые - получил целое).

Есть два варианта результатов вычисления соотношения SL и TP:
1. результат деления - больше или равно 1 (то есть SL больше или равно TP).
2. результат деления - меньше 1 и ограничен 0 (то есть SL меньше TP).

Если будем делить целые, то есть My_SL_pips делить на My_TP_pips, то результат будет:
- математически, чаще всего вещественное число;
- при классическом приведении типов, всегда целое число.

В тестере движка Visual JForex почему-то работает чистая математика - всегда когда это должно быть математически получается вещественное, со всеми дробными разрядами.
А в тестере движка торговой платформы JForex расчет такой же, только если числительное больше знаменательного, то есть в нашем случае, если SL > или = TP.
Но если SL будет меньше TP мы получим результат как в mql - 0!

Привожу пример блоками Visual JForex в двух вариантах (два фото). В варианте, где "ka" вычисляется с помощью вещественных "CurrentSLpips" и "CurrentTPpips" результат такой какой нужно в обоих тестерах. А в другом варианте, результат нулевой в тестере платформы JForex.

РАБОЧИЙ ВАРИАНТ

Image

_____________________________________________________________________________________

НЕРАБОЧИЙ ВАРИАНТ


Image

Attachments:
02_Ошибочный_код_2_1_9.png [74.76 KiB]
Downloaded 424 times
01_Исправленный_код_2_1_10.png [74.08 KiB]
Downloaded 430 times

  Page 1 of 1