Нейросетевая торговая система Meta Trader 4 + MATLAB. Пошаговая разработка. Издание второе - страница 5



double Buf_0[];

double Buf_1[];

double Str0;

double Str1;

datetime Date0;

datetime Date1;

int Handle;

int i;

//+–+

//| Custom indicator initialization function |

//+–+

int init()

{

SetIndexBuffer(0,Buf_0);

SetIndexBuffer(1,Buf_1);

IndicatorBuffers(2);

IndicatorDigits(4);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);

SetLevelValue(0,0.5);

return(0);

}

//+–+

//| |

//+–+

int start()

{

Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");

while(i==0)

{

Date0=StrToTime(FileReadString(Handle));

i++;

}

FileClose(Handle);

i=iBarShift(NULL,PERIOD_H1,Date0);

Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");

while(i>=0)

{

Date1=StrToTime(FileReadString(Handle));

Str0=StrToDouble(FileReadString(Handle));

Str1=StrToDouble(FileReadString(Handle));

Buf_0[i]=Str0;

Buf_1[i]=Str1;

i–;

}

FileClose(Handle);

return(0);

}

//+–+





Этот индикатор представлен на рисунке выше. Согласитесь – индикатор сложно как – либо интерпретировать, и строить на его основе торговую стратегию. Т.е. нам необходимо совершенствовать обучение нейросети и попытаться добиться хотя бы результата представленного ниже.










С помощью эксперта “

ExpertPrimerReal

” протестируем отклик нейросети.


//+–+

//| ExpertPrimerReal.mq4|

//| Copyright © 2019, Andrey Dibrov. |

//|"https://www.youtube.com/channel/UCScAAn_sRRaKHdNIxl0aI9A?view_as=subscriber" |

//+–+

#property copyright "Copyright © 2019, Andrey Dibrov."

#property link "https://www.youtube.com/channel/UCScAAn_sRRaKHdNIxl0aI9A?view_as=subscriber"

extern int H1;

extern int H2;

extern int H3;

extern int H4;

extern int Loss1;

extern int Profit1;

extern int Loss0;

extern int Profit0;

int MagicBuy1;

int MagicSell0;

int TicketBuy1;

int TicketSell0;

datetime Count=1;

double Buf_0[100000];

double Buf_1[100000];

string File_Name="Indicator.csv";

int K;

int i;

//+–+

//| Expert initialization function |

//+–+

int OnInit()

{

//–

int Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");

while(Count>0)

{

Count=StrToTime(FileReadString(Handle));

Buf_0[i]=StrToDouble(FileReadString(Handle));

Buf_1[i]=StrToDouble(FileReadString(Handle));

i++;

}

//–

return(INIT_SUCCEEDED);

}

//+–+

//| Expert deinitialization function |

//+–+

void OnDeinit(const int reason)

{

//–

}

//+–+

//| Expert tick function |

//+–+

void OnTick()

{

//–

for( i=1; i<=OrdersHistoryTotal(); i++)

{

if(OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)==true)

{

if(TicketBuy1==OrderTicket()) MagicBuy1=0;

if(TicketSell0==OrderTicket()) MagicSell0=0;

}

}

//–Buy0

if(MagicBuy1==0 && K>0 && Buf_0[K-1]Buf_1[K] && TimeHour(TimeCurrent())>H1 && TimeHour(TimeCurrent())

{

bool send1=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-Loss1*Point,Ask+Profit1*Point,NULL,1,0,Red);

for( i=1; i<=OrdersTotal(); i++)

{

if(OrderSelect(i-1,SELECT_BY_POS)==true)

{

TicketBuy1=OrderTicket();

MagicBuy1=OrderMagicNumber();

}

}

}

if(MagicBuy1==1 && K>0 && Buf_0[K-1]>Buf_1[K-1] && Buf_0[K]

{

bool close1=OrderClose(TicketBuy1,1,Bid,2,Blue);

}

//–Sell0

if(MagicSell0==0 && K>0 && Buf_0[K-1]>Buf_1[K-1] && Buf_0[K]H3 && TimeHour(TimeCurrent())

{

bool send0=OrderSend(Symbol(),OP_SELL,1,Bid,3,Ask+Loss0*Point,Bid-Profit0*Point,NULL,3,0,Green);

for( i=1; i<=OrdersTotal(); i++)

{

if(OrderSelect(i-1,SELECT_BY_POS)==true)

{

TicketSell0=OrderTicket();

MagicSell0=OrderMagicNumber();

}

}

}

if(MagicSell0==3 && K>0 && Buf_0[K-1]Buf_1[K])

{

bool close0=OrderClose(TicketSell0,1,Ask,2,Blue);