NormalizeDouble - то ли лыжи не едут, то ли ....

 

Здравствуйте.

Имеем ДЦ, валюта - Евро/бакс, 5 знаков (Alert(Digits) рисует мне цифру 5.

Имеем код.

double order_open_price;
int order_ticket;

for(int i=0; i<=OrdersTotal()-1; i++)  {
   OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   order_open_price = OrderOpenPrice();
   order_ticket = OrderTicket();
   Print("ticket -  ", order_ticket, " price - ", order_open_price); //Либо Alert() вместо принт.

}

Результат:

08:40:06 Headj EURUSD,M1: ticket - 16317616price - 1.3008

08:40:06 Headj EURUSD,M1: ticket - 16317797price - 1.301

08:40:06 Headj EURUSD,M1: ticket - 16317930price - 1.3013

08:40:06 Headj EURUSD,M1: ticket - 16322670price - 1.3015

При попытке нормализовать

order_open_price = NormalizeDouble(OrderOpenPrice(), Digits);

Результат тот же самый.

Теперь пробуем посмотреть, а вобще 5 знаков я видеть могу

order_open_price = NormalizeDouble(OrderOpenPrice() * 100000, Digits);

Результат

08:46:17 Headj EURUSD,M1: ticket - 16317616price - 130077

08:46:17 Headj EURUSD,M1: ticket - 16317797price - 130104

08:46:17 Headj EURUSD,M1: ticket - 16317930price - 130127

08:46:17 Headj EURUSD,M1: ticket - 16322670price - 130152

Отлично, значит все-таки цену я вижу нормально и полностью, осталось только разделить это все на 100000.

order_open_price = NormalizeDouble(OrderOpenPrice() * 100000, Digits)/100000;

Результат

08:49:49 Headj EURUSD,M1: ticket - 16317616price - 1.3008

08:49:49 Headj EURUSD,M1: ticket - 16317797price - 1.301

08:49:49 Headj EURUSD,M1: ticket - 16317930price - 1.3013

08:49:49 Headj EURUSD,M1: ticket - 16322670price - 1.3015

И теперь я пытаюсь разобраться, это у мета трейдера свои законы математики или у меня руки кривые?

Вместо Digits можно воткнуть любое число, больше 3, результат тот же, если 3 и меньше, то остается соответствующее количество знаков после запятой.

Вопрос: Как же мне все-таки получить мои 5 знаков после запятой? Без NormalizeDouble() с умножением/делением цены на 100000 результат такой же.

Заранее прошу прощения, если вопрос глупый, т.к. с С++ баловался лет 15 назад на уровне "Hello world", а сейчас пробую силы в МКЛ.

 
jarinov:

Вопрос: Как же мне все-таки получить мои 5 знаков после запятой? Без NormalizeDouble() с умножением/делением цены на 100000 результат такой же.

Заранее прошу прощения, если вопрос глупый, т.к. с С++ баловался лет 15 назад на уровне "Hello world", а сейчас пробую силы в МКЛ.


Читайте про функцию Print().
 
jarinov:


В принте используйте функцию DoubleToStr(), тогда увидите сколько захотите цифр.
 

Да, вы правы, спасибо большое, про принт и про алерт не дочитал до конца. Все-таки это были не лыжи.

 
jarinov:

Да, вы правы, спасибо большое, про принт и про алерт не дочитал до конца. Все-таки это были не лыжи.

Лыжи- не лыжи- это неправильная альтернатива.
Набиваете простые, обычные шишки.
Про лыжи рассуждайте, когда шишки станут граблями :-)
Причина обращения: