Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1107

 
Alexey Viktorov:

Никак. Может лучше тестировать на реальных тиках?

Просто я знаю, что тестирование в мт5 несравненно лучше мт4, поэтому я хотел протестировать робота в мт5, но ему нужен очень маленький спред, таких брокеров на мт5 я не знаю

 

Приветствую!

Создаю поле ввода, во входных параметрах прописываю "double"

input double TralingStop = 15;

int OnInit()
 {
  EditCreate(0,"TR",0,0,0,X,Y,(string)TralingStop,true);

По итогу на выходе в мт4 если ввести целое число, то отображение:


В мт5 получаю дробное:


Если вносить дробное, то проблем нет - всё работает во фэн-шую :)


Вопрос: как получить отображение в мт5 целым числом?

 
Vitaly Muzichenko:

Приветствую!

Создаю поле ввода, во входных параметрах прописываю "double"

По итогу на выходе в мт4 если ввести целое число, то отображение:


В мт5 получаю дробное:


Если вносить дробное, то проблем нет - всё работает во фэн-шую :)


Вопрос: как получить отображение в мт5 целым числом?

DoubleToString(TralingStop,0);

DoubleToString

Преобразование числового значения в текстовую строку.

string  DoubleToString( 
   double  value,      // число 
   int     digits=8    // кол-во знаков после запятой 
   );
 
Vladimir Karputov:

DoubleToString(TralingStop,0);

DoubleToString

Преобразование числового значения в текстовую строку.

Тогда не получу дробное число.

Нужно видимо что-то на подобии:

EditCreate(0,"TR",0,0,0,X,Y, isInteger(TralingStop) ? DoubleToString(TralingStop,0) : DoubleToString(TralingStop,1),true);
 
Vitaly Muzichenko:

Тогда не получу дробное число.

Нужно видимо что-то на подобии:

typename(TralingStop)=="double" ? ...

 
Artyom Trishkin:

typename(TralingStop)=="double" ? ...

Не совсем, если ввели во входных параметрах "input" к примеру 15 или 15.0, то отображать в поле ввода просто 15, то есть целое число. Если во входных параметрах ввели 12.3, то в поле ввода и отображать 12.3

 
Vitaly Muzichenko:

Не совсем, если ввели во входных параметрах "input" к примеру 15 или 15.0, то отображать в поле ввода просто 15, то есть целое число. Если во входных параметрах ввели 12.3, то в поле ввода и отображать 12.3

Ну тогда это - определение количества знаков после запятой у любого числа. Где-то такая тема была - там всё обсуждалось.

 
Artyom Trishkin:

Ну тогда это - определение количества знаков после запятой у любого числа. Где-то такая тема была - там всё обсуждалось.

Вроде было, но найти не смог, поэтому написал здесь (

 
Vitaly Muzichenko:

Не совсем, если ввели во входных параметрах "input" к примеру 15 или 15.0, то отображать в поле ввода просто 15, то есть целое число. Если во входных параметрах ввели 12.3, то в поле ввода и отображать 12.3

поэкспериментируй с таким скриптом:

#property script_show_inputs
input double inp1 = 15.0;
input double inp2 = 12.3;
//+------------------------------------------------------------------+
void OnStart()
  {
   int dig1 = GetDigitsInDouble(inp1);
   int dig2 = GetDigitsInDouble(inp2);
   printf("inp1 = %f --> %s",inp1,DoubleToString(inp1,dig1));
   printf("inp2 = %f --> %s",inp2,DoubleToString(inp2,dig2));
  }
//_______________________________________________________________________
int      GetDigitsInDouble(double doublevalue)
  {
   long l=long(doublevalue/0.0000001);int result=0,i=10000000; while(result<7 && l%i>0)
     {i/=10; result++;}return result;
  }

2019.08.06 22:40:44.668 tst1 (EURUSD,H1) inp1 = 15.000000 --> 15

2019.08.06 22:40:44.668 tst1 (EURUSD,H1) inp2 = 12.300000 --> 12.3


кажется в 7-м знаке после запятой будет иногда ошибаться

 
Vitaly Muzichenko:

Вроде было, но найти не смог, поэтому написал здесь (

Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
  • 2018.11.03
  • www.mql5.com
Думаю не у одного меня была редкая ситуация когда нужно было получить количество десятичных знаков после запятой, а функция Digits() работает тольк...