Страница 4 из 6
int handleOut=FileOpen("Out.csv",FILE_CSV|FILE_READ|FILE_WRITE,";");
Alert("Идет запись файлов");
for(int i=iBars(NULL,0)-1; i>=0; i–)
{
string Date1=TimeToStr(iTime(NULL,0,i));
if(DateOut>=Date1 && Date<=Date1)
{
if(iHigh(NULL,0,i)>iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i) && iLow(NULL,0,i)<iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i) && ((iHigh(NULL,0,i+1)<iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i+1) && iLow(NULL,0,i+1)<iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i+1)) ||
(iHigh(NULL,0,i+1)>iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i+1) && iLow(NULL,0,i+1)>iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i+1))))
{
FileWrite(handle,
iWPR(NULL,0,14,i+3),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i+3),
iRVI(NULL,0,10,MODE_MAIN,i+3),
iRSI(NULL,0,14,PRICE_CLOSE,i+3),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,i+3),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+3),
iWPR(NULL,0,14,i+2),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i+2),
iRVI(NULL,0,10,MODE_MAIN,i+2),
iRSI(NULL,0,14,PRICE_CLOSE,i+2),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,i+2),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2),
iWPR(NULL,0,14,i+1),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i+1),
iRVI(NULL,0,10,MODE_MAIN,i+1),
iRSI(NULL,0,14,PRICE_CLOSE,i+1),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,i+1),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1),
iWPR(NULL,0,14,i),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i),
iRVI(NULL,0,10,MODE_MAIN,i),
iRSI(NULL,0,14,PRICE_CLOSE,i),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,i),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i));
FileWrite(handleOut,iClose(NULL,1440,iBarShift(NULL,1440,iTime(NULL,0,i)))-iOpen(NULL,0,i));
}
}
}
FileClose(handle);
FileClose(handleOut);
Alert("Файлы записаны");
return(0);
}
//+–+
В результате работы скрипта мы получим в папке /MQL4/Files каталога данных MT4 два файла In.csv и Out.csv. Исходя из имен этих файлов – первый является файлом входов нейросети. Выборку данных мы делаем с использованием технического индикатора Bollinger Bands. Т.е. записываем значения индикаторов с глубиной три часа в момент, когда максимум часа выше средней линии, а минимум ниже. Также максимум и минимум предыдущего часа либо одновременно выше средней линии или ниже. Файл Out.csv – файл, в который мы записали, соответственно с использованием индикатора Bollinger Bands выборку разницы закрытия дня и открытия текущего часа. Таким образом, мы тренируем нейросеть на направление движения цены и ее амплитуду. Эти данные мы записываем с помощью скрипта, так как нам необходимы значения (закрытие дня), которые с помощью эксперта мы записать не сможем. А вот для того, что бы получить достоверный результат при тестировании нейросети – тестовое множество нам надо записать с помощью эксперта.
Запустим в тестере стратегий эксперт “ExpertPrimer”, как показано на рисунке выше.
//+–+
//| ExpertPrimer.mq4 |
//| Copyright © 2019, Andrey Dibrov. |
//|"https://www.youtube.com/cha
//+–+
#property copyright "Copyright © 2019, Andrey Dibrov."
#property link "https://www.youtube.com/cha
extern string DateTren="2004.07.01 00:00";
extern string DateTest="2010.12.31 23:00";
int handleTest=FileOpen("Test.csv",FILE_TXT|FILE_WRITE|FILE_SHARE_READ,";");
int handleDate=FileOpen("Date.csv",FILE_TXT|FILE_WRITE|FILE_SHARE_READ,";");
//+–+
//| Expert initialization function |
//+–+
int OnInit()
{
//–
//–
return(INIT_SUCCEEDED);
}
//+–+
//| Expert deinitialization function |
//+–+
void OnDeinit(const int reason)
{
//–
FileClose(handleTest);
FileClose(handleDate);
}
//+–+
//| Expert tick function |
//+–+
void OnTick()
{
//–
string Date=TimeToStr(iTime(NULL,0,0));
if(handleTest>0 && handleDate>0 && DateTest<Date)
{
FileWrite(handleTest,
iWPR(NULL,0,14,3),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,3),
iRVI(NULL,0,10,MODE_MAIN,3),
iRSI(NULL,0,14,PRICE_CLOSE,3),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,3),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,3),
iWPR(NULL,0,14,2),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,2),
iRVI(NULL,0,10,MODE_MAIN,2),
iRSI(NULL,0,14,PRICE_CLOSE,2),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,2),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2),
iWPR(NULL,0,14,1),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,1),
iRVI(NULL,0,10,MODE_MAIN,1),
iRSI(NULL,0,14,PRICE_CLOSE,1),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,1),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1),
iWPR(NULL,0,14,0),
iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,0),
iRVI(NULL,0,10,MODE_MAIN,0),
iRSI(NULL,0,14,PRICE_CLOSE,0),
iOsMA(NULL,0,12,26,9,PRICE_CLOSE,0),
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0));
FileWrite(handleDate,Date);
}
}
//+–+
В папке /tester/files каталога данных MT4 мы получим также два файла Date.csv и Test.csv. В первом мы записали дату и почасово время тестового множества. Во втором непосредственно значения, по которым мы будем получать отклик нейросети.
Файлы Date.csv и Test.csv мы перенесем в папку …MQL4Files.