Скачать MetaTrader 5

такой странный MathRand

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай мобильную версию MetaTrader 5 и торгуй из любой точки мира!
Oksana Berenko
2598
Oksana Berenko 2015.09.04 12:32 

Есть индикатор Line_Sound, который создает трендовую линию с именем:

string LineName  = "HLine_Sound_" + (string)TimeCurrent() + "_"+(string)MathRand() + "_"+(string)MathRand();

Если на график добавить еще индикатор Line_Sound, то на графике будет две линии, никакого конфликта.

Имена: HLine_Sound_1441373185_3692_23760 и HLine_Sound_1441373186_9757_27839

Но если же выключить и включить терминал, то при инициализации имена будут одинаковые!

1 

Вот как так? В индикаторе, два раза помещенном на графике, два раза сработал одинаково рандом? 

Sergey Eremin
4362
Sergey Eremin 2015.09.04 12:39  

Возможно дело в том, что документация явно говорит:

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

MathSrand - Документация на MQL4
  • docs.mql4.com
MathSrand - Документация на MQL4
Oksana Berenko
2598
Oksana Berenko 2015.09.04 12:41  
Sergey Eremin:

Возможно дело в том, что документация явно говорит:

Я пока не придумала, какое число в MathSrand поместить. Потому что, если делать так: MathSrand(GetTickCount()), то результат тот же. 
Sergey Eremin
4362
Sergey Eremin 2015.09.04 12:42  
Oksana Berenko:
Я пока не придумала, какое число в MathSrand поместить. Потому что, если делать так: MathSrand(GetTickCount()), то результат тот же. 

Хмм, тогда не могли бы сам индикатор дать посмотреть (можно в личку)?

Alexander Puzanov
29609
Alexander Puzanov 2015.09.04 12:49  
Чем-то значения настроек этих индикаторов различаются, иначе зачем их 2? Включите эту настройку (или неск настроек) в имя объекта вместо этого МатаРэнда
Oksana Berenko
2598
Oksana Berenko 2015.09.04 13:14  
Alexander Puzanov:
Чем-то значения настроек этих индикаторов различаются, иначе зачем их 2? Включите эту настройку (или неск настроек) в имя объекта вместо этого МатаРэнда

Этот индикатор - это алерт.

Вот индикатор один на графике.

 3

Вот их два.

 4

Я уже обошла проблему - создаю линию в init, и если уже на графике есть линия с таким же названием, то присваиваю другое имя.

Мне не придумать, как не создавая линию в init, чтобы у переменной  LineName были разные значения.

Renat Akhtyamov
4843
Renat Akhtyamov 2015.09.04 13:21  
Oksana Berenko:
Я пока не придумала, какое число в MathSrand поместить. Потому что, если делать так: MathSrand(GetTickCount()), то результат тот же. 
GetTickCount()*MathSrand(1000)
Oksana Berenko
2598
Oksana Berenko 2015.09.04 13:23  
new-rena:
GetTickCount()*MathSrand(1000)

Вначале обрадовалась вашей идее - решила проверить, не получилось.

 

Я уже по своему решила  - перенесла создание имени из init в start. 

Renat Akhtyamov
4843
Renat Akhtyamov 2015.09.04 13:23  
Oksana Berenko:

Здорово! Не догадалась бы.

Я уже по своему решила  - перенесла создание имени из init в start. 

ок
Sergey Eremin
4362
Sergey Eremin 2015.09.04 13:31  
new-rena:
GetTickCount()*MathSrand(1000)

int умножить на void? О_о

Даже если имелось в виду

MathSrand(1000*GetTickCount());

То ничего не меняется - в момент инициализации GetTickCount() вернёт в двух индикаторах одинаковое значение, следовательно и GetTickCount()*1000 будет одинаковым.

К примеру, вывод такого кода:

      int value = 1000*GetTickCount();
      MathSrand(value);
      LineName  = LineName + (string)TimeCurrent() + "_"+(string)MathRand() + "_"+(string)MathRand();
      
      Print(value," ", LineName);

запущенного в двух экземплярах, при старте терминала будет таким:


Oksana Berenko
2598
Oksana Berenko 2015.09.04 13:33  
Sergey Eremin:

int умножить на void? О_о

Даже если имелось в виду

То ничего не меняется - в момент инициализации GetTickCount() вернёт в двух индикаторах одинаковое значение, следовательно и GetTickCount()*1000 будет одинаковым.

К примеру, вывод такого кода:

запущенного в двух экземплярах, при старте терминала будет таким:


я тоже проверила, уже ради любопытства, не получилось
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий