Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc= NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+ NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+ NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
long CalcX= NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+ NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+ Low[1]/Point;
Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc= NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+ NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+ NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
long CalcX= NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+ NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+ Low[1]/Point;
Есть мысли в чём ошибка и как её исправить?
Вот так запусти.
/********************Script program start function*******************/ voidOnStart() { string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0); Print(i); Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point); }/*******************************************************************/
Подскажите, кто знает как реализовать индикатор, так чтобы вторая координата по времени в трендовой линии выставлялась по времени пробоя, либо касания оной. То есть есть трендовая линия и есть ее начало в определенном месте, а время второй координаты выставляется по усмотрению, но необходимо чтобы линия заканчивалась там, где она пересекается со свечой. Как допустим в индикаторе отображенном на рисунке
А теперь надо разобрать эти цифры обратно на составляющие.
При попытке преобразовать строку в число ловлю опять не верное число 161184 вместо 161188
long testX = StringToDouble(CalcX); Print("testX=",testX);
Надо резать видимо строку, но как это сделать оптимально правильно?
Ничего разбирать не надо. Перевод в string только для того чтобы увидеть нормальное число. Для вычислений ничего делать не надо.
Ну, а если есть непреодолимое желание поизвращаться то перевести строку обратно в число StringToDouble() и умножить на _Point с нормализацией до нужного количества знаков, наверное _Digits
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Подскажите, пожалуйста, решение проблемы округления!
Необходимо избавить число от запятой без остатка - округление и возведение в степень не решают всей проблемы - как быть?
К примеру было 1,44430 а надо 144430.
Часть кода - как есть
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1)
Просто раздели на _Point
Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Есть мысли в чём ошибка и как её исправить?
Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Есть мысли в чём ошибка и как её исправить?
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Вот так запусти.
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
В моём коде никаких нулей нету. Смотри как написано.
Спасибо - я пропустил ноль.
Получилась такая конструкция
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
А теперь надо разобрать эти цифры обратно на составляющие.
При попытке преобразовать строку в число ловлю опять не верное число 161184 вместо 161188
Print("testX=",testX);
Надо резать видимо строку, но как это сделать оптимально правильно?
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
Ну так ... показывайте шаблон. А то как же ж знать чего там у вас?
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Спасибо - я пропустил ноль.
Получилась такая конструкция
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
А теперь надо разобрать эти цифры обратно на составляющие.
При попытке преобразовать строку в число ловлю опять не верное число 161184 вместо 161188
Print("testX=",testX);
Надо резать видимо строку, но как это сделать оптимально правильно?
Ну, а если есть непреодолимое желание поизвращаться то перевести строку обратно в число StringToDouble() и умножить на _Point с нормализацией до нужного количества знаков, наверное _Digits