Ошибки, баги, вопросы - страница 2657

чем инициализировать в тестере rand() ?

код:

input ulong param = 18446744073709551615;
void OnTick()
   {
   }
//+------------------------------------------------------------------+
double OnTester()
   {
      srand(GetTickCount()); 
      return(rand());
   }
//+------------------------------------------------------------------+

мне не совсем нравится такая псевдослучайная генерация:


Igor Makanu:

чем инициализировать в тестере rand() ?

код:

мне не совсем нравится такая псевдослучайная генерация:


Справка: MathRand

Примечание

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


Попробуйте теперь с MathSrand.

Документация по MQL5: Математические функции / MathRand
Документация по MQL5: Математические функции / MathRand
  • www.mql5.com
Математические функции / MathRand - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Vladimir Karputov:

Справка: MathRand

Примечание

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

Спасибо, Кэп !

речь идет о тестере

этот код тоже не работает в ТЕСТЕРЕ

input ulong param = 18446744073709551615;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {
   MathSrand(GetTickCount()); 
   return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
void OnTick()
   {
   }
//+------------------------------------------------------------------+
double OnTester()
   {
      return(rand());
   }
//+------------------------------------------------------------------+
Igor Makanu:

думаю, что, если тестер, то не нужно использовать MathSrand.

Но если это не поможет, тогда скорей всего принудительно на каком-то этапе тестер вызывает MathSrand(GetTickCount())

Тогда можно попробовать MathSrand(int(GetMicrosecondCount()%1000000)); 

ЗЫ ведь нужно помнить, что GetTickCount() меняет свои значения каждые 15.625 милисекунд. Это очень большой промежуток времени для тестера.

Nikolai Semko:

думаю, что, если тестер, то не нужно использовать MathSrand.

это противоречит документации https://www.mql5.com/ru/docs/math/mathrand

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

не хочу алглиб исходники листать, но для нейросетевых пакетов инициализация рендомным значением весов НС это обязательно, подозреваю, что и делалось по материалом справки MQL - т.е. использовался srand()

т.е. использование внутри тестера  MQL-программ с таким НС-пакетом будет проходить, скорее всего, по сути на одном ядре процессора - начальные веса НС будут же иметь одинаковые значения?

без srand() еще прикольнее

int OnInit()
   {
   return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
void OnTick()
   {
   }
//+------------------------------------------------------------------+
double OnTester()
   {
      return(rand());
   }
//+------------------------------------------------------------------+
Igor Makanu:

это противоречит документации https://www.mql5.com/ru/docs/math/mathrand

не хочу алглиб исходники листать, но для нейросетевых пакетов инициализация рендомным значением весов НС это обязательно, подозреваю, что и делалось по материалом справки MQL - т.е. использовался srand()

т.е. использование внутри тестера  MQL-программ с таким НС-пакетом будет проходить, скорее всего, по сути на одном ядре процессора - начальные веса НС будут же иметь одинаковые значения?

без srand() еще прикольнее

Игорь, ну тогда попробуй MathSrand(int(GetMicrosecondCount()%16384)); 

Интересно как картина измениться

Nikolai Semko:

Игорь, ну тогда попробуй MathSrand(int(GetMicrosecondCount()%16384)); 

Интересно как картина измениться

int OnInit()
   {
   MathSrand(int(GetMicrosecondCount()%16384));   
   return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
void OnTick()
   {
   }
//+------------------------------------------------------------------+
double OnTester()
   {
      return(rand());
   }
//+------------------------------------------------------------------+


Такая проблема.

Класс CSymbolInfo.

При обращение к текущей цене Ask или Bid возвращает 0.

Все остальные параметры работают нормально, например AskHigh или Point

Ruslan Udintsev:

Такая проблема.

Класс CSymbolInfo.

При обращение к текущей цене Ask или Bid возвращает 0.

Все остальные параметры работают нормально, например AskHigh или Point

Сначала нужно обновить цены.

//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }
Igor Makanu:


Вау.  Ничего не понимаю.