Новая версия платформы MetaTrader 5 build 3440: Новый отчет по торговому счету - страница 14

 
MetaQuotes:

MQL5: Добавлен метод векторов и матриц Assign. Он позволяет заменить содержимое матрицы/вектора данными переданной матрицы/вектора или массива.

Очень не удобно передавать массивы, так как я привык работать с одномерными массивами, виртуально распределяя элементы по строкам.

Прошу Вас рассмотреть возможность копирования одномерного массива в матрицу с указанием в функции числа колонок или размера строки, и если элементов в массиве не хватает, то просто их добавить равными нулю. Это очень нужно сделать, так как в MQL5 нет динамически изменяемых многомерных массивов, я и, думаю многие, по этой причине используют одномерные для "табличных" данных. И обратный процесс тут нужен - из матрицы в одномерный массив.

И ещё технический вопрос, правильно ли я понимаю, что прирост производительности над матрицами достигается за счет подачи очереди заданий на выполнение набору инструкции и за счет этого экономится процессорное время? Если это так, то нельзя ли расширить функционал, сделав к примеру возможность сравнения матриц и векторов в виде неравенств? К примеру проверяем поэлементно неравенство "матрица А > больше матрицы Б", а по результату возвращается такого же размера матрица с булевыми значениями для каждого числа - "1" - условие неравенства выполняется и "0" - не выполняется. Это как раз мне требуется в задачах машинного обучения.

 

Может есть возможность расширить настройки  Форвард оптимизации? Хотелось бы проводить её только для тех проходов, которые отвечают определенному набору критериев. Реализацию вижу в виде добавления кнопки, при нажатии которой появляется таблица с перечислением показателей, как в отчете тестера стратегий, в которой можно выбрать галкой нужный параметр и настроить неравенство для отбора и использования на форвард оптимизации. Это нужно для ускорения оптимизации.

И такой вопрос, как определить, что советник в режиме форварда - это нужно для обработки фреймов, что б писать результаты в разные файлы. Впрочем, мне это будет нужно если исполнится первая часть сообщения, в котором изложено предложение.

 
Vladimir Pastushak #:

Маркет не принимает новые советники

Метаедитор


попробуйте увеличить версию продукта и снова попытаться отправить.

 

Извините, что не совсем по теме.

Для нормализации цены используется размер тика и точность, которые можно получить через  SYMBOL_DIGITS и SYMBOL_TRADE_TICK_SIZE.

А вот как нормализовать размер лота для открытия позиций ? Минимальный размер лота есть  SYMBOL_VOLUME_STEP ,а точности нет. Добавьте пожалуйста точность.

 
pivomoe #:

Извините, что не совсем по теме.

Для нормализации цены используется размер тика и точность, которые можно получить через  SYMBOL_DIGITS и SYMBOL_TRADE_TICK_SIZE.

Для приведения цены к точности тика SYMBOL_DIGITS не требуется. Достаточно SYMBOL_TRADE_TICK_SIZE:

double NP(string symbol, double value)
{
   double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   if (tickSize == 0.0)
      return 0.0;
      
   return MathRound(value / tickSize) * tickSize;
}

А вот как нормализовать размер лота для открытия позиций ? Минимальный размер лота есть  SYMBOL_VOLUME_STEP ,а точности нет. Добавьте пожалуйста точность.

Для объема есть еще SYMBOL_VOLUME_MAX и SYMBOL_VOLUME_MIN. Определение ближайшего меньшего объема делается так:

double VolumeCast(string symbol, double volume)
{
   double volumeMin = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
   double volumeMax = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
   double volumeStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
   if (volumeStep == 0.0)
      return 0.0;

   return MathMin(MathMax(MathFloor(volume / volumeStep) * volumeStep, volumeMin), volumeMax);
}
 
pivomoe #:

Извините, что не совсем по теме.

Для нормализации цены используется размер тика и точность, которые можно получить через  SYMBOL_DIGITS и SYMBOL_TRADE_TICK_SIZE.

А вот как нормализовать размер лота для открытия позиций ? Минимальный размер лота есть  SYMBOL_VOLUME_STEP ,а точности нет. Добавьте пожалуйста точность.

Это одинаковые значения, потому лучше пользоваться SYMBOL_VOLUME_STEP без каких либо опасений. Просто нормализовать надо не функцией NormaliseDouble(), а своей функцией.

 
Ihor Herasko #:

Для приведения цены к точности тика SYMBOL_DIGITS не требуется. Достаточно SYMBOL_TRADE_TICK_SIZE:

Для объема есть еще SYMBOL_VOLUME_MAX и SYMBOL_VOLUME_MIN. Определение ближайшего меньшего объема делается так:

   Есть стандартный класс Trade\CSymbolInfo.mqh В нем есть функция нормализации цены.  

//+------------------------------------------------------------------+
//| Normalize price                                                  |
//+------------------------------------------------------------------+
double CSymbolInfo::NormalizePrice(const double price) const
  {
   if(m_tick_size!=0)
      return(NormalizeDouble(MathRound(price/m_tick_size)*m_tick_size,m_digits));
//---
   return(NormalizeDouble(price,m_digits)); // Эту строчку вроде я сам добавил.
  }

  Я так понимаю все таки точность нужна.

  А не подскажите почему SYMBOL_VOLUME_LIMIT всегда ноль выдает ?    

   double VolumeLimit;
   if(  !SymbolInfoDouble( Simvol, SYMBOL_VOLUME_LIMIT, VolumeLimit ) )
     {
      Print("ERROR не удается получить максимальный объем лота. ",Simvol," ",__FILE__," ",__LINE__);
      return false;      
     }    
   Print(Simvol," VolumeLimit=",VolumeLimit); 

 Это ММВБ фьючерсы.

 
pivomoe #:

   Есть стандартный класс Trade\CSymbolInfo.mqh В нем есть функция нормализации цены.  

Здесь не учтено, что тик может быть 10 пунктов. В итоге нормализовать будем до точности, которая в 10 раз меньше реально нужной.

  Я так понимаю все таки точность нужна.

  А не подскажите почему SYMBOL_VOLUME_LIMIT всегда ноль выдает ?    

Один из трех вариантов:

  1. Реальное отсутствие ограничений (так указано в документации)
  2. Ограничения есть, но они плавающие
  3. На сервере попросту не внесено правильное значение ограничения
Таким образом, лучше всего обратиться с этим вопросом к брокеру.
 

Подскажите, в чем может быть проблема замедления скроллинга графика мышкой?

На этой анимации видно, что EURUSD скроллится великолепно, а AUDNZD - с большим трудом.

 
Ihor Herasko #:

Для приведения цены к точности тика SYMBOL_DIGITS не требуется. Достаточно SYMBOL_TRADE_TICK_SIZE:

double NP(string symbol, double value)
{
   double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   if (tickSize == 0.0)
      return 0.0;
      
   return MathRound(value / tickSize) * tickSize;
}

  Мне кажется такой код иногда будет приводить к invalid Price .

  т.к  

 return MathRound(value / tickSize) * tickSize;

не всегда равно

 return NormalizeDouble(MathRound(value / tickSize) * tickSize,Digits);

Например для BR-12.22 если цена больше 1800 почти через раз цены не совпадают.