okWarrior_EA/references/MQL5/Experts/CT/StudyWorker.mq5

155 lines
11 KiB
MQL5

<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| Study.mq5 |
//| Copyright DNG<EFBFBD> |
//| https://www.mql5.com/en/users/dng |
//+------------------------------------------------------------------+
#property copyright "Copyright DNG<00>"
#property link "https://www.mql5.com/en/users/dng"
#property version "1.00"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define Study
#include "Trajectory.mqh"
//+------------------------------------------------------------------+
//| Input parameters |
//+------------------------------------------------------------------+
input int Iterations = 1e7;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CNet Worker;
CNet Descrimitator;
//---
float dError;
datetime dtStudied;
//---
CBufferFloat *Data;
CBufferFloat *Result;
STrajectory Buffer[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- load models
float temp;
if(!Worker.Load(FileName + "Work.nnw", temp, temp, temp, dtStudied, true) ||
!Descrimitator.Load(FileName + "Descr.nnw", temp, temp, temp, dtStudied, true))
{
CArrayObj *worker = new CArrayObj();
CArrayObj *descriminator = new CArrayObj();
if(!CreateWorkerDescriptions(worker, descriminator))
{
delete worker;
delete descriminator;
return INIT_FAILED;
}
if(!Worker.Create(worker) ||
!Descrimitator.Create(descriminator))
{
delete worker;
delete descriminator;
return INIT_FAILED;
}
delete worker;
delete descriminator;
//---
}
//---
Descrimitator.SetOpenCL(Worker.GetOpenCL());
//---
Worker.getResults(Data);
if(Data.Total() != NActions)
{
PrintFormat("The scope of the Worker does not match the actions count (%d <> %d)", NActions, Data.Total());
return INIT_FAILED;
}
//---
Descrimitator.GetLayerOutput(0, Data);
if(Data.Total() != NActions)
{
PrintFormat("Input size of Descriminator doesn't match Worker output (%d <> %d)", Data.Total(), NActions);
return INIT_FAILED;
}
Data.Clear();
Worker.TrainMode(true);
//---
if(!EventChartCustom(ChartID(), 1, 0, 0, "Init"))