И если с ордерами расчетов было много и погрешность double была предсказуема + кривизна моих рук, то боюсь, что из-за подобных ошибок в советнике я мог пару годных стратегий спустить на мусорку, в частности тех, которые работают с пересчетом лотов на сделку.
Вот кусок банального, неприметного кода, MT5 hedging mode :
double sellAlignment = sizeBuy - sizeSell; // check if lot of Buy > lot of Sell
if (buyAlignment > 0) // if Sell > Buy, make positions equal by size
{
Print("################## BUY : " + buyAlignment + " = " + sizeSell + " - " + sizeBuy);
openSimplePosition(symbol, 1, buyAlignment);
}
if (sellAlignment > 0) // if Buy > Sell, make positions equal by size
{
Print("################## SELL : " + sellAlignment + " = " + sizeBuy + " - " + sizeSell);
openSimplePosition(symbol, -1, sellAlignment);
}
2016.12.17 03:08:33.094 2016.01.06 19:54:01 failed market buy 0.00 EURUSD.m [Invalid volume]
Для воспроизведения ошибки, напишите советника, которые, на каждом баре открывает позицию, рандомно, а через каждые, допустим, 5 баров делает позиции равными, как в коде выше.
Поможет это.

- голосов: 18
- 2016.08.25
- fxsaber
- www.mql5.com
Ну ок, допустим, у МТ какие-то свои мысли по поводу того, как представлять число, но тогда логично предположить, что код везде сьедает double в меньшую сторону, НО ... тут проиходит второе чудо и МТ решает, что 0 это вовсе не 0, а 0.0000000000000000000036453265234832582365325, ну что ж логично, и в результате этого "логично" я получаю такое :)
Для воспроизведения ошибки, напишите советника, которые, на каждом баре открывает позицию, рандомно, а через каждые, допустим, 5 баров делает позиции равными, как в коде выше.
Строите из себя умного...
но при этом нет понимания принципов сравнения doulbe вообще.
печаль...

- 2009.11.02
- MetaQuotes Software Corp.
- www.mql5.com
Строите из себя умного...
но при этом нет понимания принципов сравнения doulbe вообще.
печаль...
2. ты действительно в упор не видишь ошибки?
Если вот эту чепуху еще можно списать на представление числа
вот только изменений все нет и нет :)
В разделе 6. Приведение типов - integer и double
А вообще, наличие этой статьи и соответствующих библиотек говорит о том, что decimal реально нужен, и это не пожелание ничтожества вроде меня, а фактическая необходимость
Очень нужен тип decimal, это тот который double, но не такой плавающий :)
Может есть вероятность, что в какой-то версии МТ появится возможность более точного задания десятичных дробей?
Просто уже не первый раз замечаю, что из-за внезапной смены представления десятичных чисел программа начинает вести себя непредсказуемо, буквально.
В таком случае ни о каких алгоритмах речи быть не может.
Или хотя бы, может есть возможность задания своего типа в MQL5, о которой я не знаю? Например, как-то так или через макросы :
Если Вам нужен тип decimal, то Вы можете сами его сделать.
{
...
public:
decimal( double val );
decimal( int val );
decimal( string val );
void operator=( const decimal& val );
void operator=( const double val );
void operator=( const int val );
void operator+=( const decimal& val );
void operator+=( const double val );
void operator+=( const int val );
void operator-=( const decimal& val );
void operator-=( const double val );
void operator-=( const int val );
bool operator==( const decimal& val);
bool operator!=( const decimal& val );
decimal operator+( const decimal& val );
decimal operator+( const double val );
decimal operator+( const int val );
decimal operator-( const decimal& val );
decimal operator-( const double val );
decimal operator-( const int val );
decimal operator*( const decimal& val );
decimal operator*( const double val );
decimal operator*( const int val );
decimal operator/( const decimal& val );
decimal operator/( const double val );
decimal operator/( const int val );
string toString() const;
double toDouble() const;
};
Работать будет в точности так, как Вы сами захотите.
Помещаете этот класс в файл decimal.mqh и включаете его везде, где нужно:
Если Вам нужен тип decimal, то Вы можете сами его сделать.
Ладно, фразу про другие языки забираю обратно, был неправ, в C# воспроизводится.
Но тем не менее, decimal был бы полезен.
double x2 = 0.02;
double x3 = 0.03;
double x4 = 0.01;
double x5 = 0.01;
double x6 = 0.01;
double x7 = 0.01;
double x8 = 0.05;
double x = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8;
double y = 0.15;
double z = x - y;
if (z != 0) Print(x - y);
// 2016.12.17 16:01:04.983 Index (GBPAUD.m,H1) -2.775557561562891e-17

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может есть вероятность, что в какой-то версии МТ появится возможность более точного задания десятичных дробей?
Просто уже не первый раз замечаю, что из-за внезапной смены представления десятичных чисел программа начинает вести себя непредсказуемо, буквально.
В таком случае ни о каких алгоритмах речи быть не может.
Или хотя бы, может есть возможность задания своего типа в MQL5, о которой я не знаю? Например, как-то так или через макросы :