Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
__s_Koh_OEMA
#define I_NET 15
#define O_NET 15
#define DHIST 100
//+------------------------------------------------------------------+
double in_net[I_NET],out_net[O_NET],ww[I_NET][O_NET],WW0[I_NET],in_data[DHIST][I_NET];
int CountClass[O_NET];
string ss,sss;
//+------------------------------------------------------------------+
int start()
{
SetWeights(); //èíèöèàëèçàöèÿ íà÷àëüíûõ âåñîâ
TeachNET(); //îáó÷åíèå
//--- èñïîëüçîâàíèå ñåòè (ïðîâåðêà) -------------------------------
for(int i=0; i<DHIST; i++)
{
Fill_IN(i); //âõîäíûå äàííûå
int Y=Net(); //ãîòîâàÿ ñåòü
CountClass[Y]++; //ïîñ÷èòàåì êîëè÷åñòâà êëàññîâ
ObjectCreate (""+Time[i],OBJ_TEXT,0,Time[i],High[i]+15*Point);
ObjectSetText(""+Time[i],""+Y,14,"Times New Roman",Yellow);
}
sss=sss+"\n\nÊîëè÷åñòâî êëàññîâ â êàæäîé êàòåãîðèè\n";
for(int j=0; j<O_NET; j++)
{
sss=sss+DoubleToStr(j,0)+" - "+CountClass[j]+"\n";
}
Comment(sss);
return(0);
}
//-------------------------------------------------------------------+
int Net()
{
for(int j=0; j<O_NET; j++)
{
out_net[j]=0;
for(int i=0; i<I_NET; i++) out_net[j]+=MathPow((in_net[i]-ww[i,j]),2);
}
return(ArrayMinimum(out_net)); //îïðåäåëåíèå íåéðîíà-ïîáåäèòåëÿ ïî Êîõîíåíó
}
//+------------------------------------------------------------------+
void SetWeights()
{
double x2;
int h=FileOpen("IN_DATA.csv",FILE_CSV|FILE_WRITE,';');
for(int k=0; k<DHIST; k++)
{
x2=0;
string sdata="";
for(int i=0; i<I_NET; i++)
{
in_data[k,i]=Data(k,i);
sdata=sdata+in_data[k,i]+";";
x2+=MathPow(in_data[k,i],2);//ñîáèðàåì ñóììó êâàäðàòîâ äëÿ äàëüíåéøåé íîðìàëèçàöèè ê åäèíè÷íîìó âåêòîðó
}
sdata=sdata+";";
//--- íîðìàëèçàöèÿ ê åäèíè÷íîìó âåêòîðó ---
x2=MathSqrt(x2);
for(i=0; i<I_NET; i++)
{
in_data[k,i]=in_data[k,i]/x2;
sdata=sdata+in_data[k,i]+";";
}
//-----------------------------------------
FileWrite(h,sdata);
}
FileClose(h);
/*
double N=1.0/MathSqrt(O_NET); //âûïóêëàÿ êîìáèíàöèÿ
ArrayInitialize(WW0,N);
double step=1.0/(DHIST+1);
for(i=0; i<I_NET; i++)
{
double alfa=0;
for(k=0; k<DHIST; k++)
{
WW0[i]=WW0[i]+(alfa*in_data[k,i]+(1.0-alfa)*N);// /DHIST;
Comment(alfa," - ",WW0[0]," ",WW0[1]," ",WW0[2]," ",WW0[3]," ",WW0[4]," ",WW0[5]," ",WW0[6]," ",WW0[7]," ",WW0[8]," ",WW0[9]," ",WW0[10]," ",WW0[11]," ",WW0[12]," ",WW0[13]," ",WW0[14]);
alfa+=step;
}
WW0[i]/=DHIST;
}
*/
ArrayInitialize(WW0,0); //ñðåäíåå
for(i=0; i<I_NET; i++)
{
for(k=0; k<DHIST; k++)
{
WW0[i]=WW0[i]+in_data[k,i]/DHIST;
Comment(" ",WW0[0]," ",WW0[1]," ",WW0[2]," ",WW0[3]," ",WW0[4]," ",WW0[5]," ",WW0[6]," ",WW0[7]," ",WW0[8]," ",WW0[9]," ",WW0[10]," ",WW0[11]," ",WW0[12]," ",WW0[13]," ",WW0[14]);
}
}
ss="Íà÷àëüíûå âåñà\n";
//--- ïðèñâàèâàåì ïîëó÷åííûå íà÷àëüíûå âåñà ñèíàïñàì -------------------------------
for(int j=0; j<O_NET; j++)
{
for(i=0; i<I_NET; i++) ww[i,j]=WW0[i]; //íà÷àëüíûå âåñà ñèíàïñîâ
ss=ss+"Íåéðîí "+j+" "+DoubleToStr(ww[j,j],4)+"\n";
}
ss=ss+"\n\n";
//----------------------------------------------------------------------------------
string s="";
for(i=0; i<I_NET; i++) s=s+WW0[i]+";";
h=FileOpen("WEIGHTS.csv",FILE_CSV|FILE_WRITE,';');
FileWrite(h,s);
FileClose(h);
return(0);
}
//+------------------------------------------------------------------+
void TeachNET()
{
int Epoch=50;
int Radius=(O_NET/2+O_NET%2),Rmax,Rmin,Rstep,Rchange; //îêðåñòíîñòü âûèãðàâøåãî íåéðîíà
int e,i,j,k,class;
int wincnt_max=DHIST/(O_NET),wincnt[O_NET]; //áóäåì ñ÷èòàòü è òîðìîçèòü ÷àñòî âûèãðûâàþùèé íåéðîí
double alfa,step;
alfa=0.5/O_NET; //ñêîðîñòü îáó÷åíèÿ
step=alfa/(Epoch+1); //èçìåíåíèå ñêîðîñòè îáó÷åíèÿ
Rstep=Epoch/Radius; //øàã èçìåíåíèÿ ðàäèóñà îêðåñòíîñòè
Rchange=Rstep; //çàäàëè íà÷àëüíóþ ãðàíèöó èçìåíåíèÿ ðàäèóñà îêðåñòíîñòè
for(e=0; e<Epoch; e++)
{
ArrayInitialize(wincnt,0);
if(Radius>0 && e>Rchange) { Radius--; Rchange+=Rstep; }
for(k=1; k<DHIST; k++)
{
Fill_IN(k); //çàïîëíåíèå âõîäíîãî ìàññèâà äàííûõ
for(j=0; j<O_NET; j++)
{
out_net[j]=0;
for(i=0; i<I_NET; i++) out_net[j]+=MathPow(in_net[i]-ww[i,j],2);
}
class=ArrayMinimum(out_net);
if(wincnt[class]>wincnt_max) //òîðìîæåíèå ÷àñòî âûèãðûâàþùåãî íåéðîíà
{
out_net[class]=999;
class=ArrayMinimum(out_net);
}
wincnt[class]++;
Print("class ",wincnt[class]);
Rmax=class+Radius; Rmin=class-Radius;
sss="Ýïîõ "+DoubleToStr(e+1,0)+" ("+DoubleToStr(Epoch,0)+") "+DoubleToStr(k,0)+" alfa "+DoubleToStr(alfa,6)+" Radius "+DoubleToStr(Radius,0)+" Rmax="+DoubleToStr(Rmax,0)+" Rmin="+DoubleToStr(Rmin,0)+"\n\n"+ss+"\nÍàñòðîéêà âåñîâ\n";
for(j=0; j<O_NET; j++) //Ïîäñòðîéêà âåñîâ íåéðîíîâ
{
if(Radius>0 && (j<Rmin || j>Rmax)) continue;
sss=sss+"Íåéðîí "+DoubleToStr(j,0)+" ";
for(i=0; i<I_NET; i++)
{
if(Radius>0)
ww[i,j]=ww[i,j]+alfa*(in_net[i]-ww[i,j]);
else if(j==class)
ww[i,j]=ww[i,j]+alfa*(in_net[i]-ww[i,j]);//ìåòîä îáó÷åíèå Êîõîíåíà
sss=sss+DoubleToStr(ww[i,j],4)+" ";
}
sss=sss+"\n";
}
Comment(sss);
}
alfa-=step;
}
return(0);
}
//+------------------------------------------------------------------+
void Fill_IN(int k)
{
double x2=0;
for(int i=0; i<I_NET; i++)
{
in_net[i]=Data(k,i);
x2+=MathPow(in_net[i],2);
}
x2=MathSqrt(x2);
for(i=0; i<I_NET; i++) in_net[i]/=x2; //ïðèâåäåíèå ê åäèíè÷íîìó âåêòîðó
return(0);
}
//+------------------------------------------------------------------+
double Data(int k, int i)
{
double y=0;
if(i>= 0 && i< 5) y=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,k+i)-Open[k+i];
if(i>= 5 && i<10) y=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,k+i)-Open[k];
if(i>=10 && i<15) y=Open[k+i]-Open[k];
/*
if(i>= 0 && i< 5) y = Close[k+i] - Open[k+i];
if(i>= 5 && i<10) y = Open[k+i] - Low[k+i];
if(i>=10 && i<15) y = Open[k+i] - Open[k];
*/
return(y);
}
//+------------------------------------------------------------------+
int init()
{
ObjectsDeleteAll(); Comment("");
return(0);
}
//+------------------------------------------------------------------+
int deinit() { return(0); }
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---