__s_Koh_OEMA

Indicators Used
Moving average indicator
Miscellaneous
Uses files from the file systemIt writes information to file
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---