最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

股票量化交易軟件:神經(jīng)網(wǎng)絡(luò)在交易中的實(shí)際應(yīng)用 Python 1

2023-07-12 10:07 作者:大牛啊呢  | 我要投稿

1. 準(zhǔn)備數(shù)據(jù)

讓我們考慮一些與神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)準(zhǔn)備有關(guān)的問題。

  • 為了決策,我們將使用兩個(gè)神經(jīng)網(wǎng)絡(luò)在一個(gè)方向上打開倉位。赫茲股票量化交易軟件

  • 根據(jù)前一點(diǎn),訓(xùn)練數(shù)據(jù)應(yīng)分為兩組-每個(gè)方向一組。

  • 與前一個(gè)系統(tǒng)一樣,將訓(xùn)練第一個(gè)神經(jīng)網(wǎng)絡(luò)來構(gòu)建類似于標(biāo)準(zhǔn)技術(shù)指標(biāo)的指標(biāo)。我們在以前的系統(tǒng)中使用了這個(gè)解決方案,因?yàn)槲覀兪褂昧俗詫懙闹甘痉?,我們不想讓專家顧問的工作?fù)擔(dān)過重。之所以使用Python,是因?yàn)橹荒軓慕K端接收報(bào)價(jià),為了為神經(jīng)網(wǎng)絡(luò)準(zhǔn)備數(shù)據(jù),我們需要在 Python 腳本中構(gòu)建這些指標(biāo)。通過教神經(jīng)網(wǎng)絡(luò)建立這樣的指標(biāo),我們消除了在腳本中復(fù)制它們的需要。 赫茲股票量化交易軟件

  • 第二個(gè)神經(jīng)網(wǎng)絡(luò)建立信號指標(biāo),在此基礎(chǔ)上建立交易策略。赫茲股票量化交易軟件

  • 神經(jīng)網(wǎng)絡(luò)將針對 EURUSD H1 圖表進(jìn)行訓(xùn)練。赫茲股票量化交易軟件

  • 因此,為了建立這個(gè)系統(tǒng),我們需要準(zhǔn)備兩個(gè)神經(jīng)網(wǎng)絡(luò)用于買入和兩個(gè)網(wǎng)絡(luò)用于賣出。因此,系統(tǒng)中將有四個(gè)神經(jīng)網(wǎng)絡(luò)工作。赫茲股票量化交易軟件

兩個(gè)腳本將用于為網(wǎng)絡(luò)培訓(xùn)準(zhǔn)備數(shù)據(jù):PythonPrices.mq5 文件以及 PythonIndicators.mq5 文件。

//+------------------------------------------------------------------+ //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PythonPrices.mq5 | //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Copyright 2020, Andrey Dibrov. | //| ? ? ? ? ? ? ? ? ? ? ? ? ? https://www.mql5.com/ru/users/tomcat66 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Andrey Dibrov." #property link ? ? ?"https://www.mql5.com/ru/users/tomcat66" #property version ? "1.00" #property strict #property script_show_inputs input string Date="2004.07.01 00:00"; input string DateOut="2010.12.31 23:00"; input int History=0; double inB[22]; string Date1; int HandleInpuNet1Min; int HandleInpuNet1Max; double DibMin1_1[]; double DibMax1_1 []; int DibMin1_1Handle; int DibMax1_1Handle; //+------------------------------------------------------------------+ //| Script program start function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ void OnStart() ?{ //--- ? int k=iBars(NULL,PERIOD_H1)-1; ? DibMin1_1Handle=iCustom(NULL,PERIOD_H1,"DibMin1-1",History); ? CopyBuffer(DibMin1_1Handle,0,0,k,DibMin1_1); ? ArraySetAsSeries(DibMin1_1,true); ? DibMax1_1Handle=iCustom(NULL,PERIOD_H1,"DibMax1-1",History); ? CopyBuffer(DibMax1_1Handle,0,0,k,DibMax1_1); ? ArraySetAsSeries(DibMax1_1,true); ? HandleInpuNet1Min=FileOpen(Symbol()+"InputNet1Min.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? HandleInpuNet1Max=FileOpen(Symbol()+"InputNet1Max.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? FileSeek(HandleInpuNet1Min,0,SEEK_END); ? FileSeek(HandleInpuNet1Max,0,SEEK_END); ? if(HandleInpuNet1Min>0) ? ? { ? ? ?Alert("Writing to the file InputNet1Min"); ? ? ?for(int i=iBars(NULL,PERIOD_H1)-1; i>=0; i--) ? ? ? ?{ ? ? ? ? Date1=TimeToString(iTime(NULL,PERIOD_H1,i)); ? ? ? ? if(DateOut>=Date1 && Date<=Date1) ? ? ? ? ? { ? ? ? ? ? ?if((DibMin1_1[i]==-1 && DibMin1_1[i+1]==1 && DibMax1_1[i]==1) || (DibMin1_1[i]==1 && DibMax1_1[i]==1)) ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? for(int m=0; m<=14; m++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ?inB[m]=inB[m+5]; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? inB[15]=(iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000; ? ? ? ? ? ? ? inB[16]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000; ? ? ? ? ? ? ? inB[17]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? inB[18]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i+1))*10000; ? ? ? ? ? ? ? inB[19]=(iOpen(NULL,PERIOD_H1,i+1)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? inB[20]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i))*10000; ? ? ? ? ? ? ? inB[21]=(iOpen(NULL,PERIOD_H1,i)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? FileWrite(HandleInpuNet1Min, ? ? ? ? ? ? ? ? ? ? ? ? inB[0],inB[1],inB[2],inB[3],inB[4],inB[5],inB[6],inB[7],inB[8],inB[9],inB[10],inB[11],inB[12],inB[13],inB[14],inB[15], ? ? ? ? ? ? ? ? ? ? ? ? inB[16],inB[17],inB[18],inB[19],inB[20],inB[21]); ? ? ? ? ? ? ?} ? ? ? ? ? } ? ? ? ?} ? ? ?FileClose(HandleInpuNet1Min); ? ? } //------------------------------------------------------------------------------------------------------------------------------------------------ ? if(HandleInpuNet1Max>0) ? ? { ? ? ?Alert("Writing the file InputNet1Max"); ? ? ?for(int i=iBars(NULL,PERIOD_H1)-1; i>=0; i--) ? ? ? ?{ ? ? ? ? Date1=TimeToString(iTime(NULL,PERIOD_H1,i)); ? ? ? ? if(DateOut>=Date1 && Date<=Date1) ? ? ? ? ? { ? ? ? ? ? ?if((DibMax1_1[i]==-1 && DibMax1_1[i+1]==1 && DibMin1_1[i]==1)|| (DibMin1_1[i]==1 && DibMax1_1[i]==1)) ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? for(int m=0; m<=14; m++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ?inB[m]=inB[m+5]; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? inB[15]=(iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000; ? ? ? ? ? ? ? inB[16]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000; ? ? ? ? ? ? ? inB[17]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? inB[18]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i+1))*10000; ? ? ? ? ? ? ? inB[19]=(iOpen(NULL,PERIOD_H1,i+1)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? inB[20]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i))*10000; ? ? ? ? ? ? ? inB[21]=(iOpen(NULL,PERIOD_H1,i)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000; ? ? ? ? ? ? ? FileWrite(HandleInpuNet1Max, ? ? ? ? ? ? ? ? ? ? ? ? inB[0],inB[1],inB[2],inB[3],inB[4],inB[5],inB[6],inB[7],inB[8],inB[9],inB[10],inB[11],inB[12],inB[13],inB[14],inB[15], ? ? ? ? ? ? ? ? ? ? ? ? inB[16],inB[17],inB[18],inB[19],inB[20],inB[21]); ? ? ? ? ? ? ?} ? ? ? ? ? } ? ? ? ?} ? ? ?FileClose(HandleInpuNet1Max); ? ? } ? Alert("Files written"); ?} //+------------------------------------------------------------------+


//+------------------------------------------------------------------+ //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PythonIndicators.mq5 | //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Copyright 2020, Andrey Dibrov. | //| ? ? ? ? ? ? ? ? ? ? ? ? ? https://www.mql5.com/ru/users/tomcat66 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Andrey Dibrov." #property link ? ? ?"https://www.mql5.com/ru/users/tomcat66" #property version ? "1.00" #property strict #property script_show_inputs input string Date="2004.07.01 00:00"; input string DateOut="2010.12.31 23:00"; input int History=0; double Stochastic0[]; double Stochastic1[]; double CCI_Open[]; double CCI_Low[]; double CCI_High[]; double Momentum_Open[]; double Momentum_Low[]; double Momentum_High[]; double RSI_Open[]; double RSI_Low[]; double RSI_High[]; double WPR[]; double MACD_Open[]; double MACD_Low[]; double MACD_High[]; double OsMA_Open[]; double OsMA_Low[]; double OsMA_High[]; double TriX_Open[]; double TriX_Low[]; double TriX_High[]; double BearsPower[]; double BullsPower[]; double ADX_MINUSDI[]; double ADX_PLUSDI[]; double StdDev_Open[]; double StdDev_Low[]; double StdDev_High[]; //-------------------------- double DibMin1_1[]; double DibMax1_1 []; int DibMin1_1Handle; int DibMax1_1Handle; //-------------------------- double inB[60]; double inS[60]; string Date1; int HandleInputNet2OutNet1Min; int HandleOutNet2Min; int HandleInputNet2OutNet1Max; int HandleOutNet2Max; //+------------------------------------------------------------------+ //| Script program start function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ void OnStart() ?{ //--- ? int k=iBars(NULL,PERIOD_H1)-1; //------ Daily Low ? DibMin1_1Handle=iCustom(NULL,PERIOD_H1,"DibMin1-1",History); ? CopyBuffer(DibMin1_1Handle,0,0,k,DibMin1_1); ? ArraySetAsSeries(DibMin1_1,true); ? DibMax1_1Handle=iCustom(NULL,PERIOD_H1,"DibMax1-1",History); ? CopyBuffer(DibMax1_1Handle,0,0,k,DibMax1_1); ? ArraySetAsSeries(DibMax1_1,true); ? int Stochastic_handle=iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,STO_LOWHIGH); ? CopyBuffer(Stochastic_handle,0,0,k,Stochastic0); ? CopyBuffer(Stochastic_handle,1,0,k,Stochastic1); ? ArraySetAsSeries(Stochastic0,true); ? ArraySetAsSeries(Stochastic1,true); ? int CCI_Open_handle=iCCI(NULL,PERIOD_H1,14,PRICE_OPEN); ? CopyBuffer(CCI_Open_handle,0,0,k,CCI_Open); ? ArraySetAsSeries(CCI_Open,true); ? int CCI_Low_handle=iCCI(NULL,PERIOD_H1,14,PRICE_LOW); ? CopyBuffer(CCI_Low_handle,0,0,k,CCI_Low); ? ArraySetAsSeries(CCI_Low,true); ? int Momentum_Open_handle=iMomentum(NULL,PERIOD_H1,14,PRICE_OPEN); ? CopyBuffer(Momentum_Open_handle,0,0,k,Momentum_Open); ? ArraySetAsSeries(Momentum_Open,true); ? int Momentum_Low_handle=iMomentum(NULL,PERIOD_H1,14,PRICE_LOW); ? CopyBuffer(Momentum_Low_handle,0,0,k,Momentum_Low); ? ArraySetAsSeries(Momentum_Low,true); ? int RSI_Open_handle=iRSI(NULL,PERIOD_H1,14,PRICE_OPEN); ? CopyBuffer(RSI_Open_handle,0,0,k,RSI_Open); ? ArraySetAsSeries(RSI_Open,true); ? int RSI_Low_handle=iRSI(NULL,PERIOD_H1,14,PRICE_LOW); ? CopyBuffer(RSI_Low_handle,0,0,k,RSI_Low); ? ArraySetAsSeries(RSI_Low,true); ? int WPR_handle=iWPR(NULL,PERIOD_H1,14); ? CopyBuffer(WPR_handle,0,0,k,WPR); ? ArraySetAsSeries(WPR,true); ? int MACD_Open_handle=iMACD(NULL,PERIOD_H1,12,26,9,PRICE_OPEN); ? CopyBuffer(MACD_Open_handle,0,0,k,MACD_Open); ? ArraySetAsSeries(MACD_Open,true); ? int MACD_Low_handle=iMACD(NULL,PERIOD_H1,12,26,9,PRICE_LOW); ? CopyBuffer(MACD_Low_handle,0,0,k,MACD_Low); ? ArraySetAsSeries(MACD_Low,true); ? int OsMA_Open_handle=iOsMA(NULL,PERIOD_H1,12,26,9,PRICE_OPEN); ? CopyBuffer(OsMA_Open_handle,0,0,k,OsMA_Open); ? ArraySetAsSeries(OsMA_Open,true); ? int OsMA_Low_handle=iOsMA(NULL,PERIOD_H1,12,26,9,PRICE_LOW); ? CopyBuffer(OsMA_Low_handle,0,0,k,OsMA_Low); ? ArraySetAsSeries(OsMA_Low,true); ? int TriX_Open_handle=iTriX(NULL,PERIOD_H1,14,PRICE_OPEN); ? CopyBuffer(TriX_Open_handle,0,0,k,TriX_Open); ? ArraySetAsSeries(TriX_Open,true); ? int TriX_Low_handle=iTriX(NULL,PERIOD_H1,14,PRICE_LOW); ? CopyBuffer(TriX_Low_handle,0,0,k,TriX_Low); ? ArraySetAsSeries(TriX_Low,true); ? int BearsPower_handle=iBearsPower(NULL,PERIOD_H1,13); ? CopyBuffer(BearsPower_handle,0,0,k,BearsPower); ? ArraySetAsSeries(BearsPower,true); ? int ADX_MINUSDI_handle=iADX(NULL,PERIOD_H1,14); ? CopyBuffer(ADX_MINUSDI_handle,2,0,k,ADX_MINUSDI); ? ArraySetAsSeries(ADX_MINUSDI,true); ? int StdDev_Open_handle=iStdDev(NULL,PERIOD_H1,20,0,MODE_SMA,PRICE_OPEN); ? CopyBuffer(StdDev_Open_handle,0,0,k,StdDev_Open); ? ArraySetAsSeries(StdDev_Open,true); ? int StdDev_Low_handle=iStdDev(NULL,PERIOD_H1,20,0,MODE_SMA,PRICE_LOW); ? CopyBuffer(StdDev_Low_handle,0,0,k,StdDev_Low); ? ArraySetAsSeries(StdDev_Low,true); //--------------------------------------------------------------------------------------------------------------------------- ? HandleInputNet2OutNet1Min=FileOpen(Symbol()+"InputNet2OutNet1Min.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? HandleOutNet2Min=FileOpen(Symbol()+"OutNet2Min.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? FileSeek(HandleInputNet2OutNet1Min,0,SEEK_END); ? FileSeek(HandleOutNet2Min,0,SEEK_END); ? if(HandleInputNet2OutNet1Min>0) ? ? { ? ? ?Alert("Writing the files InputNet2OutNet1Min and OutNet2Min"); ? ? ?for(int i=iBars(NULL,PERIOD_H1)-1; i>=0; i--) ? ? ? ?{ ? ? ? ? Date1=TimeToString(iTime(NULL,PERIOD_H1,i)); ? ? ? ? if(DateOut>=Date1 && Date<=Date1) ? ? ? ? ? { ? ? ? ? ? ?if(((DibMin1_1[i]==-1 && DibMin1_1[i+1]==1 && DibMax1_1[i]==1)) || (DibMin1_1[i]==1 && DibMax1_1[i]==1)) ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? for(int m=0; m<=35; m++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ?inB[m]=inB[m+12]; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? inB[36]=Stochastic0[i]; ? ? ? ? ? ? ? inB[37]=Stochastic1[i]; ? ? ? ? ? ? ? inB[38]=CCI_Low[i]; ? ? ? ? ? ? ? inB[39]=Momentum_Low[i]; ? ? ? ? ? ? ? inB[40]=RSI_Low[i];; ? ? ? ? ? ? ? inB[41]=WPR[i+1]; ? ? ? ? ? ? ? inB[42]=MACD_Low[i]*10000; ? ? ? ? ? ? ? inB[43]=OsMA_Low[i]*100000; ? ? ? ? ? ? ? inB[44]=TriX_Low[i]*100000;; ? ? ? ? ? ? ? inB[45]=BearsPower[i+1]*1000; ? ? ? ? ? ? ? inB[46]=ADX_MINUSDI[i+1]; ? ? ? ? ? ? ? inB[47]=StdDev_Low[i]*10000; ? ? ? ? ? ? ? inB[48]=Stochastic0[i]; ? ? ? ? ? ? ? inB[49]=Stochastic1[i]; ? ? ? ? ? ? ? inB[50]=CCI_Open[i]; ? ? ? ? ? ? ? inB[51]=Momentum_Open[i]; ? ? ? ? ? ? ? inB[52]=RSI_Open[i];; ? ? ? ? ? ? ? inB[53]=WPR[i]; ? ? ? ? ? ? ? inB[54]=MACD_Open[i]*10000; ? ? ? ? ? ? ? inB[55]=OsMA_Open[i]*100000; ? ? ? ? ? ? ? inB[56]=TriX_Open[i]*100000;; ? ? ? ? ? ? ? inB[57]=BearsPower[i]*1000; ? ? ? ? ? ? ? inB[58]=ADX_MINUSDI[i]; ? ? ? ? ? ? ? inB[59]=StdDev_Open[i]*10000; ? ? ? ? ? ? ? FileWrite(HandleInputNet2OutNet1Min, ? ? ? ? ? ? ? ? ? ? ? ? inB[0],inB[1],inB[2],inB[3],inB[4],inB[5],inB[6],inB[7],inB[8],inB[9],inB[10],inB[11],inB[12],inB[13], ? ? ? ? ? ? ? ? ? ? ? ? inB[14],inB[15],inB[16],inB[17],inB[18],inB[19],inB[20],inB[21],inB[22],inB[23],inB[24],inB[25],inB[26], ? ? ? ? ? ? ? ? ? ? ? ? inB[27],inB[28],inB[29],inB[30],inB[31],inB[32],inB[33],inB[34],inB[35],inB[36],inB[37],inB[38],inB[39], ? ? ? ? ? ? ? ? ? ? ? ? inB[40],inB[41],inB[42],inB[43],inB[44],inB[45],inB[46],inB[47],inB[48],inB[49],inB[50],inB[51],inB[52], ? ? ? ? ? ? ? ? ? ? ? ? inB[53],inB[54],inB[55],inB[56],inB[57],inB[58],inB[59]); ? ? ? ? ? ? ? FileWrite(HandleOutNet2Min, ? ? ? ? ? ? ? ? ? ? ? ? (iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i))*10000); ? ? ? ? ? ? ?} ? ? ? ? ? } ? ? ? ?} ? ? } ? //------ Daily High ? int CCI_High_handle=iCCI(NULL,PERIOD_H1,14,PRICE_HIGH); ? CopyBuffer(CCI_High_handle,0,0,k,CCI_High); ? ArraySetAsSeries(CCI_High,true); ? int Momentum_High_handle=iMomentum(NULL,PERIOD_H1,14,PRICE_HIGH); ? CopyBuffer(Momentum_High_handle,0,0,k,Momentum_High); ? ArraySetAsSeries(Momentum_High,true); ? int RSI_High_handle=iRSI(NULL,PERIOD_H1,14,PRICE_HIGH); ? CopyBuffer(RSI_High_handle,0,0,k,RSI_High); ? ArraySetAsSeries(RSI_High,true); ? int MACD_High_handle=iMACD(NULL,PERIOD_H1,12,26,9,PRICE_HIGH); ? CopyBuffer(MACD_High_handle,0,0,k,MACD_High); ? ArraySetAsSeries(MACD_High,true); ? int OsMA_High_handle=iOsMA(NULL,PERIOD_H1,12,26,9,PRICE_HIGH); ? CopyBuffer(OsMA_High_handle,0,0,k,OsMA_High); ? ArraySetAsSeries(OsMA_High,true); ? int TriX_High_handle=iTriX(NULL,PERIOD_H1,14,PRICE_HIGH); ? CopyBuffer(TriX_High_handle,0,0,k,TriX_High); ? ArraySetAsSeries(TriX_High,true); ? int BullsPower_handle=iBullsPower(NULL,PERIOD_H1,13); ? CopyBuffer(BullsPower_handle,0,0,k,BullsPower); ? ArraySetAsSeries(BullsPower,true); ? int ADX_PLUSDI_handle=iADX(NULL,PERIOD_H1,14); ? CopyBuffer(ADX_PLUSDI_handle,1,0,k,ADX_PLUSDI); ? ArraySetAsSeries(ADX_PLUSDI,true); ? int StdDev_High_handle=iStdDev(NULL,PERIOD_H1,20,0,MODE_SMA,PRICE_HIGH); ? CopyBuffer(StdDev_High_handle,0,0,k,StdDev_High); ? ArraySetAsSeries(StdDev_High,true); //--------------------------------------------------------------------------------------------------------------------------- ? HandleInputNet2OutNet1Max=FileOpen(Symbol()+"InputNet2OutNet1Max.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? HandleOutNet2Max=FileOpen(Symbol()+"OutNet2Max.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_READ|FILE_ANSI|FILE_COMMON,";"); ? FileSeek(HandleInputNet2OutNet1Max,0,SEEK_END); ? FileSeek(HandleOutNet2Max,0,SEEK_END); ? if(HandleInputNet2OutNet1Max>0) ? ? { ? ? ?Alert("Writing the files InputNet2OutNet1Max and OutNet2Max"); ? ? ?for(int i=iBars(NULL,PERIOD_H1)-1; i>=0; i--) ? ? ? ?{ ? ? ? ? Date1=TimeToString(iTime(NULL,PERIOD_H1,i)); ? ? ? ? if(DateOut>=Date1 && Date<=Date1) ? ? ? ? ? { ? ? ? ? ? ?if(((DibMax1_1[i]==-1 && DibMax1_1[i+1]==1 && DibMin1_1[i]==1)) || (DibMin1_1[i]==1 && DibMax1_1[i]==1)) ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? for(int m=0; m<=35; m++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ?inS[m]=inS[m+12]; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? inS[36]=Stochastic0[i]; ? ? ? ? ? ? ? inS[37]=Stochastic1[i]; ? ? ? ? ? ? ? inS[38]=CCI_High[i]; ? ? ? ? ? ? ? inS[39]=Momentum_High[i]; ? ? ? ? ? ? ? inS[40]=RSI_High[i];; ? ? ? ? ? ? ? inS[41]=WPR[i+1]; ? ? ? ? ? ? ? inS[42]=MACD_High[i]*10000; ? ? ? ? ? ? ? inS[43]=OsMA_High[i]*100000; ? ? ? ? ? ? ? inS[44]=TriX_High[i]*100000;; ? ? ? ? ? ? ? inS[45]=BullsPower[i+1]*1000; ? ? ? ? ? ? ? inS[46]=ADX_PLUSDI[i+1]; ? ? ? ? ? ? ? inS[47]=StdDev_High[i]*10000; ? ? ? ? ? ? ? inS[48]=Stochastic0[i]; ? ? ? ? ? ? ? inS[49]=Stochastic1[i]; ? ? ? ? ? ? ? inS[50]=CCI_Open[i]; ? ? ? ? ? ? ? inS[51]=Momentum_Open[i]; ? ? ? ? ? ? ? inS[52]=RSI_Open[i];; ? ? ? ? ? ? ? inS[53]=WPR[i]; ? ? ? ? ? ? ? inS[54]=MACD_Open[i]*10000; ? ? ? ? ? ? ? inS[55]=OsMA_Open[i]*100000; ? ? ? ? ? ? ? inS[56]=TriX_Open[i]*100000;; ? ? ? ? ? ? ? inS[57]=BullsPower[i]*1000; ? ? ? ? ? ? ? inS[58]=ADX_PLUSDI[i]; ? ? ? ? ? ? ? inS[59]=StdDev_Open[i]*10000; ? ? ? ? ? ? ? FileWrite(HandleInputNet2OutNet1Max, ? ? ? ? ? ? ? ? ? ? ? ? inS[0],inS[1],inS[2],inS[3],inS[4],inS[5],inS[6],inS[7],inS[8],inS[9],inS[10],inS[11],inS[12],inS[13], ? ? ? ? ? ? ? ? ? ? ? ? inS[14],inS[15],inS[16],inS[17],inS[18],inS[19],inS[20],inS[21],inS[22],inS[23],inS[24],inS[25],inS[26], ? ? ? ? ? ? ? ? ? ? ? ? inS[27],inS[28],inS[29],inS[30],inS[31],inS[32],inS[33],inS[34],inS[35],inS[36],inS[37],inS[38],inS[39], ? ? ? ? ? ? ? ? ? ? ? ? inS[40],inS[41],inS[42],inS[43],inS[44],inS[45],inS[46],inS[47],inS[48],inS[49],inS[50],inS[51],inS[52], ? ? ? ? ? ? ? ? ? ? ? ? inS[53],inS[54],inS[55],inS[56],inS[57],inS[58],inS[59]); ? ? ? ? ? ? ? FileWrite(HandleOutNet2Max, ? ? ? ? ? ? ? ? ? ? ? ? (iOpen(NULL,PERIOD_H1,i)-iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000); ? ? ? ? ? ? ?} ? ? ? ? ? } ? ? ? ?} ? ? } ? Alert("Files written"); ?} //+------------------------------------------------------------------+


一個(gè)樣本將從工作日開始直到第一次到達(dá)當(dāng)天的低點(diǎn)。第二個(gè)樣本將持續(xù)到第一次達(dá)到當(dāng)天的最高點(diǎn)。為此,腳本中將使用兩個(gè)指標(biāo):赫茲股票量化交易軟件

//+------------------------------------------------------------------+ //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DibMin1-1.mq5 | //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Copyright 2020, Andrey Dibrov. | //| ? ? ? ? ? ? ? ? ? ? ? ? ? https://www.mql5.com/ru/users/tomcat66 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Andrey Dibrov." #property link ? ? ?"https://www.mql5.com/ru/users/tomcat66" #property version ? "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots ? 1 #property indicator_type1 ? DRAW_LINE #property indicator_minimum -2 #property indicator_maximum 2 #property indicator_color1 Red #property indicator_label1 ?"DibMin1-1" //---- input parameters input int History=500; double Buf[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ int OnInit() ?{ //--- indicator buffers mapping ? SetIndexBuffer(0,Buf,INDICATOR_DATA); //--- ? return(INIT_SUCCEEDED); ?} //+------------------------------------------------------------------+ //| Custom indicator iteration function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, ? ? ? ? ? ? ? ?const int prev_calculated, ? ? ? ? ? ? ? ?const datetime &time[], ? ? ? ? ? ? ? ?const double &open[], ? ? ? ? ? ? ? ?const double &high[], ? ? ? ? ? ? ? ?const double &low[], ? ? ? ? ? ? ? ?const double &close[], ? ? ? ? ? ? ? ?const long &tick_volume[], ? ? ? ? ? ? ? ?const long &volume[], ? ? ? ? ? ? ? ?const int &spread[]) ?{ //--- ? int ? ?i,z,Calc; ? double price; ? i=iBars(NULL,PERIOD_H1)-1; ? if(i>History-1) ? ? ?i=History-1; ? if(History==0) ? ? ?i=iBars(NULL,PERIOD_H1)-1; ? ArraySetAsSeries(Buf,true); ? ArraySetAsSeries(time,true); ? while(i>=0) ? ? { ? ? ?int min=0; ? ? ?Calc=(int)time[i]%86400/3600; ? ? ?double min1=iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))); ? ? ?for(z=0;z<=Calc;z++) ? ? ? ?{ ? ? ? ? ?price=iLow(NULL,PERIOD_H1,i+z); ? ? ? ? ?if(min1<price) ? ? ? ? ?{ ? ? ? ? ? min=1; ? ? ? ? ?}else ? ? ? ? ?{ ? ? ? ? ? min=-1; ? ? ? ? ?break; ? ? ? ? ?} ? ? ? ? } ? ? ?Buf[i]=min; ? ? ?i--; ? ? } ? return(rates_total); ?} //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DibMax1-1.mq5 | //| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Copyright 2020, Andrey Dibrov. | //| ? ? ? ? ? ? ? ? ? ? ? ? ? https://www.mql5.com/ru/users/tomcat66 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Andrey Dibrov." #property link ? ? ?"https://www.mql5.com/ru/users/tomcat66" #property version ? "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots ? 1 #property indicator_type1 ? DRAW_LINE #property indicator_minimum -2 #property indicator_maximum 2 #property indicator_color1 LightSeaGreen #property indicator_label1 ?"DibMax1-1" //---- input parameters input int History=500; double Buf[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ int OnInit() ?{ //--- indicator buffers mapping ? SetIndexBuffer(0,Buf,INDICATOR_DATA); //--- ? return(INIT_SUCCEEDED); ?} //+------------------------------------------------------------------+ //| Custom indicator iteration function ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, ? ? ? ? ? ? ? ?const int prev_calculated, ? ? ? ? ? ? ? ?const datetime &time[], ? ? ? ? ? ? ? ?const double &open[], ? ? ? ? ? ? ? ?const double &high[], ? ? ? ? ? ? ? ?const double &low[], ? ? ? ? ? ? ? ?const double &close[], ? ? ? ? ? ? ? ?const long &tick_volume[], ? ? ? ? ? ? ? ?const long &volume[], ? ? ? ? ? ? ? ?const int &spread[]) ?{ //--- ? int ? ?i,z,Calc; ? double price; ? ? i=iBars(NULL,PERIOD_H1)-1; ? if (i>History-1)i=History-1; ? if (History==0) i=iBars(NULL,PERIOD_H1)-1; ? ArraySetAsSeries(Buf,true); ? ArraySetAsSeries(time,true); ? ? while(i>=0) ? ? { ? ? ?int max=0; ? ? ?Calc=(int)time[i]%86400/3600; ? ? ?double max1=iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))); ? ? ?for(z=0;z<=Calc;z++) ? ? ? ?{ ? ? ? ? ?price=iHigh(NULL,PERIOD_H1,i+z);//+1-1 ? ? ? ? ?if(max1>price) ? ? ? ? ?{ ? ? ? ? ? max=1; ? ? ? ? ?}else ? ? ? ? ?{ ? ? ? ? ? max=-1; ? ? ? ? ? break; ? ? ? ? ?} ? ? ? ? } ? ? ? ?Buf[i]=max; ? ? ?i--; ? ? ?} ? return(rates_total); ?} //+------------------------------------------------------------------+


編輯切換為居中


當(dāng)價(jià)格達(dá)到每日極值時(shí),指標(biāo)值設(shè)置為-1。

在 EURUSD H1 圖表上運(yùn)行腳本后,將在 \Common\files 文件夾中創(chuàng)建六個(gè) CSV 文件。


  • EURUSDInputNet1Max 和 EURUSDInputNet1Min 是包含價(jià)格數(shù)據(jù)的文件。我們可以從文件名中看到,例如,EURUSDInputNet1Max 包含 Net1Max 神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)。赫茲股票量化交易軟件

  • EURUSDInputNet2OutNet1Max 和 EURUSDInputNet2OutNet1Min 是具有指標(biāo)值的文件。這些值將是 Net2 的輸入和 Net1 的輸出。請注意,這部分需要一些實(shí)驗(yàn):Net2 可以使用標(biāo)準(zhǔn)技術(shù)指標(biāo)或 Net1 響應(yīng)進(jìn)行訓(xùn)練。赫茲股票量化交易軟件

  • EURUSDOutNet2Max 和 EURUSDOutNet2Min 是用于 Net2 的輸出:小時(shí)開盤和日開盤之間的價(jià)差(或日收盤和小時(shí)開盤之間的價(jià)差)。赫茲股票量化交易軟件


  1. 神經(jīng)網(wǎng)絡(luò)是通過價(jià)格逼近極值來訓(xùn)練的,不是解釋價(jià)格本身,而是解釋指標(biāo)值。

  2. 神經(jīng)網(wǎng)絡(luò)的目標(biāo)是小時(shí)開盤價(jià)和日開盤價(jià)之間的差異(日收盤價(jià)和小時(shí)開盤)價(jià)。您也可以在這里嘗試其他目標(biāo),例如其他價(jià)格之間的差異。

  3. 通過這種方法,我們平滑了神經(jīng)網(wǎng)絡(luò)模塊中錯(cuò)誤響應(yīng)的概率,因?yàn)樯窠?jīng)網(wǎng)絡(luò)沒有訓(xùn)練來尋找特定的日高和日低價(jià)格,但是它們使用高/低接近的概率,同時(shí)考慮到價(jià)格幅度到日極值。如果我們決定使用價(jià)格幅度,我們可以使用日收盤價(jià)和小時(shí)開盤價(jià)之間的差值。第一種選擇似乎更可取,因?yàn)樵谶@種情況下,我們使用實(shí)現(xiàn)的目標(biāo)而不是應(yīng)該發(fā)生的事件來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。這個(gè)選項(xiàng)更符合邏輯,因?yàn)樵u估過去的事件比預(yù)測更容易。赫茲股票量化交易軟件

2. Python 神經(jīng)網(wǎng)絡(luò)訓(xùn)練

首先,檢查 MQL5 文檔的集成部分。安裝Python3.8并連接MetaTrader 5集成模塊后,以相同的方式連接 TensorFlow、Keras、Numpy 和 Pandas 庫。赫茲股票量化交易軟件


編輯




編輯切換為居中



神經(jīng)網(wǎng)絡(luò)將使用 Python 腳本來訓(xùn)練 EURUSDPyTren.py.

import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.models import load_model InputNet1=pd.read_csv('EURUSDInputNet1Min.csv', delimiter=';',header=None) InputNet2OutNet1=pd.read_csv('EURUSDInputNet2OutNet1Min.csv', delimiter=';',header=None) OutNet2=pd.read_csv('EURUSDOutNet2Min.csv', delimiter=';',header=None) mean = InputNet1.mean(axis=0) std = InputNet1.std(axis=0) InputNet1 -= mean InputNet1 /= std mean = InputNet2OutNet1.mean(axis=0) std = InputNet2OutNet1.std(axis=0) InputNet2OutNet1 -= mean InputNet2OutNet1 /= std Net1Min = Sequential() Net1Min.add(Dense(22, activation='relu', input_shape=(InputNet1.shape[1],))) Net1Min.add(Dense(60)) Net1Min.compile(optimizer='adam', loss='mse', metrics=['mse']) print(Net1Min.summary()) Net1Min.fit(InputNet1, InputNet2OutNet1, epochs=10, batch_size=10,verbose=2,validation_split=0.3) Net1Min.save('net1Min.h5') mean = OutNet2.mean(axis=0) std = OutNet2.std(axis=0) OutNet2 -= mean OutNet2 /= std Net2Min = Sequential() Net2Min.add(Dense(60, activation='relu', input_shape=(InputNet2OutNet1.shape[1],))) Net2Min.add(Dense(1)) Net2Min.compile(optimizer='adam', loss='mse', metrics=['mae']) print(Net2Min.summary()) Net2Min.fit(InputNet2OutNet1, OutNet2, epochs=100, batch_size=10,verbose=2,validation_split=0.3) Net2Min.save('net2Min.h5') InputNet1=pd.read_csv('EURUSDInputNet1Max.csv', delimiter=';',header=None) InputNet2OutNet1=pd.read_csv('EURUSDInputNet2OutNet1Max.csv', delimiter=';',header=None) OutNet2=pd.read_csv('EURUSDOutNet2Max.csv', delimiter=';',header=None) mean = InputNet1.mean(axis=0) std = InputNet1.std(axis=0) InputNet1 -= mean InputNet1 /= std mean = InputNet2OutNet1.mean(axis=0) std = InputNet2OutNet1.std(axis=0) InputNet2OutNet1 -= mean InputNet2OutNet1 /= std Net1Max = Sequential() Net1Max.add(Dense(22, activation='relu', input_shape=(InputNet1.shape[1],))) Net1Max.add(Dense(60)) Net1Max.compile(optimizer='adam', loss='mse', metrics=['mse']) print(Net1Max.summary()) Net1Max.fit(InputNet1, InputNet2OutNet1, epochs=10, batch_size=10,verbose=2,validation_split=0.3) Net1Max.save('net1Max.h5') mean = OutNet2.mean(axis=0) std = OutNet2.std(axis=0) OutNet2 -= mean OutNet2 /= std Net2Max = Sequential() Net2Max.add(Dense(60, activation='relu', input_shape=(InputNet2OutNet1.shape[1],))) Net2Max.add(Dense(1)) Net2Max.compile(optimizer='adam', loss='mse', metrics=['mae']) print(Net2Max.summary()) Net2Max.fit(InputNet2OutNet1, OutNet2, epochs=100, batch_size=10,verbose=2,validation_split=0.3) Net2Max.save('net2Max.h5') NetTest=pd.read_csv('EURUSDTest.csv', delimiter=';',header=None) Date=pd.read_csv('EURUSDDate.csv', delimiter=';',header=None) Net1Min = load_model('net1Min.h5') Net2Min= ?load_model('net2Min.h5') Net1Max = load_model('net1Max.h5') Net2Max= ?load_model('net2Max.h5') Net1Min = Net1Min.predict(NetTest) Net2Min = Net2Min.predict(Net1Min) Net1Max = Net1Max.predict(NetTest) Net2Max = Net2Max.predict(Net1Max) Date=pd.DataFrame(Date) Date['0'] = Net2Min Date.to_csv('IndicatorMin.csv',index=False, header=False,sep=';') Date['0'] = Net2Max Date.to_csv('IndicatorMax.csv',index=False, header=False,sep=';') Date['0'] = Net2Min Date['1'] = Net2Max Date.to_csv('Indicator.csv',index=False, header=False,sep=';') input('Press ENTER to exit')

把這個(gè)腳本保存到 \Common\Files。

讓我們仔細(xì)看看這個(gè)腳本。

import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.models import load_model

用于連接來自Keras的庫、包和模塊的部分。

InputNet1=pd.read_csv('EURUSDInputNet1Min.csv', delimiter=';',header=None) InputNet2OutNet1=pd.read_csv('EURUSDInputNet2OutNet1Min.csv', delimiter=';',header=None) OutNet2=pd.read_csv('EURUSDOutNet2Min.csv', delimiter=';',header=None)

從數(shù)據(jù)文件構(gòu)建數(shù)據(jù)幀。

mean = InputNet1.mean(axis=0) std = InputNet1.std(axis=0) InputNet1 -= mean InputNet1 /= std

數(shù)據(jù)標(biāo)準(zhǔn)化。

Net1Min = Sequential() Net1Min.add(Dense(22, activation='relu', input_shape=(InputNet1.shape[1],))) Net1Min.add(Dense(60))

序貫網(wǎng)絡(luò)模型,輸入層有22個(gè)神經(jīng)元,輸出層有60個(gè)神經(jīng)元。

Net1Min = Sequential() Net1Min.add(Dense(22, activation='relu', input_shape=(InputNet1.shape[1],))) Net1Min.add(Dense(11)) Net1Min.add(Dense(60))

此外,還可以嘗試添加隱藏層。

Net1Max.compile(optimizer='adam', loss='mse', metrics=['mse']) print(Net1Max.summary())

編譯網(wǎng)絡(luò)并打印其參數(shù)。

Net1Min.fit(InputNet1, InputNet2OutNet1, epochs=10, batch_size=10,verbose=2,validation_split=0.3) Net1Min.save('net1Min.h5')

神經(jīng)網(wǎng)絡(luò)訓(xùn)練:10個(gè) epoch;最小樣本量為10;30%的訓(xùn)練數(shù)據(jù)分配用于驗(yàn)證。這些超參數(shù)可能還需要進(jìn)一步調(diào)整。詳細(xì)-訓(xùn)練 epoch 可視化參數(shù)。保存訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)。

NetTest=pd.read_csv('EURUSDTest.csv', delimiter=';',header=None) Date=pd.read_csv('EURUSDDate.csv', delimiter=';',header=None)



股票量化交易軟件:神經(jīng)網(wǎng)絡(luò)在交易中的實(shí)際應(yīng)用 Python 1的評論 (共 條)

分享到微博請遵守國家法律
班戈县| 清丰县| 阿荣旗| 丰镇市| 宾阳县| 龙海市| 慈利县| 茂名市| 册亨县| 资阳市| 鄢陵县| 彝良县| 夏津县| 朝阳县| 龙胜| 梅州市| 垫江县| 宣恩县| 荣成市| 和龙市| 阿勒泰市| 清镇市| 双流县| 张家港市| 延寿县| 望都县| 韶关市| 敖汉旗| 孝感市| 沙湾县| 集安市| 永年县| 德昌县| 民丰县| 新和县| 天镇县| 津南区| 鹿泉市| 教育| 互助| 潼关县|