Как убрать дробные числа после запятой? MQL4 - страница 2

 

А тут еще вопрос появился:

На реале и на демо-счете информация о балансе, эквити и прибыли отображается правильно. Но в тестере стратегий , при тестировании робота, на графике - значения баланса , эквити и профита остается неизменным.

Что нужно сделать чтобы и в тестере стратегий менялись цифры? 

P.S. Я - новичек в программировании, поэтому даже может такие элементарные вещи не смог пока что разрешить..

 
a_universal:

Здравствуйте! Ребята, подскажите пожалуйста, кто знает: Как правильно преобразовывать дробные числа или переменные, так чтобы дробь после запятой либо вообще убрать, либо просто уменьшить эти дроби? 

Мне вот нужно сделать так чтобы такие переменные как:  AccountBalance() , AccountEquity() , AccountProfit() через Comment() на графике отображались с наименьшим количеством чисел после запятой.

           "\n Баланс: "+DoubleToStr(Balance),                                          

           "\n Средства: "+DoubleToStr(Equity),

           "\n Прибыль: "+DoubleToStr(Profit)                                          

На графике видно множество нулей после запятой. Как бы мне их сократить?

Выбирайте ту функцию, которая больше подходит:

// Переводит в строку денежные средства
string MoneyS(double d) {
string S; // Концевые нули сохраняем
S=DoubleToString(d,2); if ((S=="0.00") || (S=="-0.00")) S="0"; 
return (S);
} // MoneyS

// Переводит в строку денежные средства для внутренних потребностей, без красивых нулей в конце
string MoneyIS(double d) {
int k, i;
string S; 
S=DoubleToString(d,2); 
if ((S=="0.00") || (S=="-0.00")) {S="0"; return (S);}
i=StringLen(S)-1;  // Уберем концевые нули
if (StringSubstr(S,i,1)!="0") return(S); // Нулей в конце нет
for (k=i-1;k>0;k--) if (StringSubstr(S,k,1)!="0") {S=StringSubstr(S,0,k+1); break;}
i=StringLen(S)-1; // Уберем концевую точку
if (StringSubstr(S,i,1)==".") S=StringSubstr(S,0,i);
return (S);
} // MoneyIS
 
Comment(" Брокер: "+Broker,                                            // Комментарии на графике

           "\n Счет N: "+IntegerToStr(Number,0,' '),

           "\n Баланс: "+IntegerToStr((int)Balance,0,' '),                                      

           "\n Средства: "+IntegerToStr((int)Equity,0,' '), 

           "\n Прибыль: "+IntegerToStr((int)Profit,0,' '),    
 
a_universal:

А тут еще вопрос появился:

На реале и на демо-счете информация о балансе, эквити и прибыли отображается правильно. Но в тестере стратегий , при тестировании робота, на графике - значения баланса , эквити и профита остается неизменным.

Что нужно сделать чтобы и в тестере стратегий менялись цифры? 

P.S. Я - новичек в программировании, поэтому даже может такие элементарные вещи не смог пока что разрешить..

Уже разобрался сам! Теперь и в тестере стратегий циферки тоже бегают. )))

 
a_universal:

Уже разобрался сам! Теперь и в тестере стратегий циферки тоже бегают. )))

Ну и в дополнение ко всему. Старайтесь не использовать старые функции типа DoubleToStr из MQL4. А сразу пишите новыми DoubleToString  которые корректно работают в MQL4/5. Меньше будет проблем в будущем.

 
Konstantin Nikitin:

Ну и в дополнение ко всему. Старайтесь не использовать старые функции типа DoubleToStr из MQL4. А сразу пишите новыми DoubleToString  которые корректно работают в MQL4/5. Меньше будет проблем в будущем.

Хорошо. Спасибо.

Пожалуй теперь поработаю над  размером и цветом букв.

 
a_universal:


Иногда многие программисты копируют то, что обычно предлагают многие.

Вот когда участвуете на таких соревнованиях по программированию, как написать самый короткий код, или самый быстро работающую прогу или которая займет минимум место в памяти и т.д.

И вспоминается книгу Кнута: "Искусство программирования".


Советую изучить и использовать форматы для вывода данных. Они очень эффективны и более компактны. 

На вашем примере будет так, всего одна строка. Так более грамотно.


   string Broker="xxxxxxxxxxxxxxx";
   int    Number=1232456;
   double Balance=6542.56;
   double Equity=3215.22;
   double Profit=123.542;


   Comment( StringFormat(" Брокер: %s  \n Счет N: %d \n Баланс: %d \n Средства: %d \n Прибыль: %d", Broker, Number, (int)Balance, (int)Equity, (int)Profit));                                        
 
Petros Shatakhtsyan:

Иногда многие программисты копируют то, что обычно предлагают многие.

Вот когда участвуете на таких соревнованиях по программированию, как написать самый короткий код, или самый быстро работающую прогу или которая займет минимум место в памяти и т.д.

И вспоминается книгу Кнута: "Искусство программирования".

Советую изучить и использовать форматы для вывода данных. Они очень эффективны и более компактны. 

На вашем примере будет так, всего одна строка. Так более грамотно.

А так более читабельно :)

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как убрать дробные числа после запятой? MQL4

Evgeniy Chumakov, 2018.07.07 01:00

Comment(" Брокер: "+Broker,                                            // Комментарии на графике

           "\n Счет N: "+IntegerToStr(Number,0,' '),

           "\n Баланс: "+IntegerToStr((int)Balance,0,' '),                                      

           "\n Средства: "+IntegerToStr((int)Equity,0,' '), 

           "\n Прибыль: "+IntegerToStr((int)Profit,0,' '),    

 
Vitaly Muzichenko:

А так более читабельно :)


Это не важно кто как располагает команды: на одной строке или на нескольких. Это дело вкуса.

Надо понимать, что всякие преобразования данных в строку и обратно, это тяжелое действие, замедляет работу.

А у вас 4 функции преобразования.  Тем более, что без использования форматов, вы не сможете вывести данных в удобном виде. Например, если вам нужно вывести данных с одним знаком после запятой.

Для "Баланса" это будет так:     "\n %.1f",   Balance. 


P.S.  И не надо спорить, а надо взрослым слушаться!  :)

 

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

Print(a); // 1.01250000

b = магия;

Print(b); // 1.0125

Причина обращения: