Обсуждение статьи "Применение метода Монте-Карло в обучении с подкреплением" - страница 5

 

Спасибо, Максим.

Я поигрался с кодом и ввел разные типы данных для входных векторов признаков: Close, Open, High, Low, Price Typical, Tick Volumes и производные от них.

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

Если я строил производную, например Close[1]-Close[2], то иногда значения close совпадали, что давало нулевую производную. Для таких типов значений входных векторов я нашел самое простое решение - добавить константу, скажем, 1000, ко всем значениям векторов. Это устранило ошибки оптимизатора и позволило RDF функционировать.

Я также заметил непредвиденное последствие выполнения одних и тех же тестов снова и снова: количество подгонок кривых увеличивается за период тестирования. Иногда лучше удалить записанные файлы RDF и запустить оптимизацию снова.

Я продолжаю экспериментировать, и у меня есть еще идеи для других типов функций.


[Удален]  
Mark Flint:

Спасибо Максиму.

Я поиграл с кодом и ввел различные типы данных для входных векторов признаков. Я пробовал Close, Open, High, Low, Price Typical, Tick Volumes и производные от них.

У меня были проблемы с тем, что оптимизатор жаловался на "какую-то ошибку после завершения прохода", но в итоге мне удалось это отследить: ошибки оптимизатора возникают, если данные входного вектора имеют нулевые значения.

Если я строил производную, например Close[1]-Close[2], то иногда значения close совпадали, что давало нулевую производную. Для таких типов значений входных векторов я нашел самое простое решение - добавить константу, скажем, 1000, ко всем значениям вектора. Это устранило ошибки оптимизатора и позволило RDF функционировать.

Я также заметил непредвиденное последствие выполнения одних и тех же тестов снова и снова: количество подгонок кривых увеличивается за период тестирования. Иногда лучше удалить записанные файлы RDF и запустить оптимизацию снова.

Я продолжаю экспериментировать, и у меня есть еще идеи для других типов функций.


Привет, Марк. Зависит от алгоритма выбора признака (в случае данной статьи это 1 признак/другой признак (с использованием ценовых доходностей) в "рекурсивной функции устранения"), поэтому если у вас в делителе стоит "0", то при использовании cl[1]-cl[2] может возникнуть "некоторая ошибка".

Да, разные прогоны оптимизатора могут отличаться, так как используется случайная выборка, также случайный алгоритм RDF. Чтобы исправить это, вы можете использовать MathSrand(number_of_passes) в экспертной функции OnInint(), или другое фиксированное число.

[Удален]  
Maxim Dmitrievsky:

Да, если переписать всю логику (в том числе RF) на ядрах open cl :) также random forest имеет худшую реализуемость на gpu и параллельность

Привет, Максим, я просто смотрел на твой код. Я заметил, что хотя файлы с лучшей моделью, признаками и значениями параметров сохраняются во время оптимизации (" OFFLINE") . Обновление политики агента и обновление вознаграждения агента также "OFFLINE", если вы решите запустить советник, так как вознаграждение и политика обновляются во время работы советника в реальном времени, поскольку MQLInfoInteger(MQL_OPTIMIZATION) == true в автономном режиме, а при работе на демо или реальном счете с вашим советником MQLInfoInteger(MQL_OPTIMIZATION) == false. Я что-то упустил ????


//+------------------------------------------------------------------+
//|Обновление политики агента|
//+------------------------------------------------------------------+
CRLAgent::updatePolicy(double action,double &featuresValues[]) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      numberOfsamples++;
      RDFpolicyMatrix.Resize(numberOfsamples,features+2);
      //входные переменные
      for(int i=0;i<features;i++)
         RDFpolicyMatrix[numberOfsamples-1].Set(i,featuresValues[i]);
      //выходные переменные
      RDFpolicyMatrix[numberOfsamples-1].Set(features,action);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-action);
     }
  }
//+------------------------------------------------------------------+
//|Обновление вознаграждения агента|
//+------------------------------------------------------------------+
CRLAgent::updateReward(void) {
   if(MQLInfoInteger(MQL_OPTIMIZATION)) {
      if(getLastProfit()>0) return;
      double randomReward = (getLastOrderType()==0) ? 1 : 0;
      RDFpolicyMatrix[numberOfsamples-1].Set(features,randomReward);
      RDFpolicyMatrix[numberOfsamples-1].Set(features+1,1-randomReward);
     }
  }
[Удален]  
developeralgo:

Привет Максим, я тут посмотрел на твой код и заметил, что даже если файлы с лучшей моделью, характеристиками и значениями параметров сохраняются во время оптимизации (" OFFLINE") . Обновление политики агента и обновление вознаграждения агента также "OFFLINE", если вы решите запустить советника, так как вознаграждение и политика обновляются во время работы советника в реальном времени, поскольку MQLInfoInteger(MQL_OPTIMIZATION) == true в автономном режиме, а при работе на демо или реальном счете с вашим советником MQLInfoInteger(MQL_OPTIMIZATION) == false. Я что-то упустил ????


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

 

есть такой файл, в котором не хватает " #include <MT4Orders.mqh> " и фонкции выглядят как MT4 fonction.

Так это эксперт MT4 или эксперт MT5?

[Удален]  
ffoorr:

есть этот файл, который отсутствует, " #include <MT4Orders.mqh> " и фонкции выглядят как MT4 фонкции.

Так это эксперт MT4 или эксперт MT5?

Эта библиотека позволяет использовать стиль ордеров МТ4 в МТ5

https://www.mql5.com/ru/code/16006

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
Maxim Dmitrievsky:

хорошо, спасибо

 

неправильно или устарел:
CRLAgent::getRDFstructure(void) { ...... 

право:
void CRLAgent::getRDFstructure(void) {......

Еще одна версия компилятора?

 
Otto Pauser:

неправильно или устарел:
CRLAgent::getRDFstructure(void) { ...... 

право:
void CRLAgent::getRDFstructure(void) {......

Еще одна версия компилятора?

Да, добавили в последнем билде более строгую проверку.

 

Здравствуйте Максим, спасибо за вашу работу, я пытался протестировать ваш код, однако он показывает мне несколько ошибок в mq4 файле со следующим текстом

'getRDFstructure' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 76 11

'RecursiveElimination' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 133 11

'updatePolicy' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 221 11

'updateReward' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 236 11

'setAgentSettings' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 361 12

'updatePolicies' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 373 12

'updateRewards' - функция уже определена и имеет другой тип RL_Monte_Carlo.mqh 380 12

Вы знаете, как решить эту проблему?