Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подключи MQL5 Cloud Network. Увеличивай свой рейтинг!
Andrew Kornishkin
6793
Andrew Kornishkin 2015.09.14 20:32 

Подскажите пожалуйста в чем ошибка? Облазил форум, доки уже несколько дней не могу решить этот вопрос.

Есть функция, которая рисует линию:

void PutHLine(string name,double price)
  {
   ObjectsDeleteAll(0,OBJ_HLINE);
   ObjectCreate(0,name,OBJ_HLINE,0,0,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }

 Функция, читающая строку с ценой из файла:

   string pr;

   int h=FileOpen("Files\\log.txt",FILE_READ|FILE_TXT);

   if(h!=-1)
     {
      pr=FileReadString(h,7);
      //--- закроем файл
      FileClose(h);
     }

 Линию рисую таким образом:

  PutHLine("Price "+pr,NormalizeDouble(StrToDouble(pr),Digits));


В результате линия рисуется на уровне 1.0000.

Цена считывается правильно, в имени линии выводит: Price 1.13073. 

В Comment выводится также правильное значение. StringToDouble дает тот же результат. Без нормализации все тоже.

Таким образом выводит линию правильно: 

PutHLine("Price " + pr, 1.13073);

 

Не пойму в чем дело, где искать ошибку?


Boris
3902
Boris 2015.09.14 20:55  

Попробуйте так:

PutHLine("Price "+pr,StrToDouble(pr));

 если не ошибаюсь! Подправил, просто нормализовать зачем?

Andrew Kornishkin
6793
Andrew Kornishkin 2015.09.14 23:01  
borilunad:

Попробуйте так:

 если не ошибаюсь! Подправил, просто нормализовать зачем?

Я так делал, все равно на единицу ставит.
Slawa
Модератор
6756
Slawa 2015.09.15 06:20  

Чему равняются price и Digits?

Распечатайте все параметры перед конвертацией.

Hint: У нас уже давно появилась отладка в MetaEditor.

Andrew Kornishkin
6793
Andrew Kornishkin 2015.09.15 07:22  
stringo:

Чему равняются price и Digits?

Распечатайте все параметры перед конвертацией.

Hint: У нас уже давно появилась отладка в MetaEditor.

Вот параметры в отладчике:

 

Slawa
Модератор
6756
Slawa 2015.09.15 07:31  
AM2:

Вот параметры в отладчике:

 

А результат DoubleToString? (Не StringToDouble!!!)
Slawa
Модератор
6756
Slawa 2015.09.15 07:37  
stringo:
А результат DoubleToString? (Не StringToDouble!!!)
Кстати да. Причём тут StrToDouble?
Ihor Herasko
8641
Ihor Herasko 2015.09.15 07:40  
AM2:

Вот параметры в отладчике:

 

Значение pr у Вас равно буквально: "1,13073". Конвертация этого значения в double через StrToDouble приведет к числу 1. Это естественно, т. к. символ "," является нековертируемым. Чтобы получить double, нужно в pr записать "1.13073"
Ihor Herasko
8641
Ihor Herasko 2015.09.15 07:40  
stringo:
Кстати да. Причём тут StrToDouble?
Слава, Вы заработались )) pr - строковая переменная.
Slawa
Модератор
6756
Slawa 2015.09.15 07:43  
Scriptong:
Слава, Вы заработались )) pr - строковая переменная.

Да. Спасибо.

Запятая является разделителем значений. Для разделения целой и дробной части в символьном представлении числа используется точка. Она так и называется "десятичная точка"

Andrew Kornishkin
6793
Andrew Kornishkin 2015.09.15 08:10  
Scriptong:
Значение pr у Вас равно буквально: "1,13073". Конвертация этого значения в double через StrToDouble приведет к числу 1. Это естественно, т. к. символ "," является нековертируемым. Чтобы получить double, нужно в pr записать "1.13073"

 

Всех благодарю за помощь. Сейчас все работает. Сделал так:

 

   int n=StringReplace(pr,",",".");
   PutHLine("Price "+pr,NormalizeDouble(StrToDouble(pr),Digits));
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий