5_bar_SVM_input

Author: Copyright � 2008, MetaQuotes Software Corp.
Indicators Used
MACD Histogram
Miscellaneous
Uses files from the file systemIt writes information to file
0 Views
0 Downloads
0 Favorites
5_bar_SVM_input
//+------------------------------------------------------------------+
//|                                              5_bar_SVM_input.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#define NR_OF_ATTRIB           4
#define NR_BARS1               1500 //Bars for train
#define NR_BARS2               300  //Bars for test (predict)

#include <gFiles.mqh>

#property indicator_chart_window

extern int Signal=7;
extern string Symb = "EURUSD";
extern int TrainPeriod=PERIOD_M5;
extern int Price1=PRICE_CLOSE;
extern int FastPeriod=16;
extern int SlowPeriod=26;
extern int SignalPeriod=9;
extern int FutureWindow = 5;
extern int decimalplace=14;
extern bool Ramdisk  = false;

string nameData1,nameData2,nameData3;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  if(Ramdisk==true)
  {
    nameData1 =  "R:/B4/DD/train"+Signal+"/"+Symbol()+".libsvm";         // name of the data file to be sent
    nameData2 =  "R:/B4/DD/test"+Signal+"/"+Symbol()+".libsvm"; 
    nameData3 =  "R:/B4/DD/s"+Signal+"/"+Symbol(); 
  }
  else
  {
    nameData1 = "B4/DD/train"+Signal+"/"+Symbol()+".libsvm";         // name of the data file to be sent
    nameData2 = "B4/DD/test"+Signal+"/"+Symbol()+".libsvm"; 
    nameData3 = "B4/DD/s"+Signal+"/"+Symbol(); 
 
  }  
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     string s1,s2;
     int handle3;
     if (Period() !=TrainPeriod) 
     {
      Comment("WARNING: Invalid timeframe! Valid timeframe = M5.");
      return(0);
     }
     if(StringFind(Symbol(),"m",0)>0)
     {
       Symb = Symb+"m";
     }         
     if ((Symbol() != Symb)  ) 
     {
      Comment("WARNING: Invalid symbol! Valid symbol = "+Symb);
      return(0);
     }  
//----
   if(isNewBarM1())
   { 
     if(Ramdisk==true)
     {
       handle3 = gFileOpen(nameData3,WRITE);  
       gFileWrite(handle3,"stop");      
       gFileClose(handle3);            
     }
     else
     {
       handle3 = FileOpen(nameData3, FILE_CSV|FILE_WRITE,' ');
       if(handle3 < 1)
       {
         Comment("Creation of "+nameData3+" failed. Error #", GetLastError());
         return(0);
       }   
       FileWrite(handle3,"stop");  
       FileClose(handle3);             
     }    
     /////////////////////////
     s1=write_data_train_2(); // write the data file
     s2=write_data_test_2();
     //////////////////////////
     
     if(Ramdisk==true)
     {
       handle3 = gFileOpen(nameData3,WRITE);  
       gFileWrite(handle3,"start");            
       gFileClose(handle3);
     }
     else
     {
       handle3 = FileOpen(nameData3, FILE_CSV|FILE_WRITE,' ');
       if(handle3 < 1)
       {
         Comment("Creation of "+nameData3+" failed. Error #", GetLastError());
         return(0);
       }  
       FileWrite(handle3,"start");       
       FileClose(handle3);            
     }     
   }  
      
//----
   return(0);
  }

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

bool isNewBarM1()
  {
  static datetime BarTimeM1;
   bool res=false; 
   if (BarTimeM1!=iTime(NULL,PERIOD_M1,0)) 
      {
         BarTimeM1=iTime(NULL,PERIOD_M1,0); 
         res=true;
      } 
   return(res);
  }

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

bool isNewBarM5()
  {
  static datetime BarTimeM5;
   bool res=false; 
   if (BarTimeM5!=iTime(NULL,PERIOD_M5,0)) 
      {
         BarTimeM5=iTime(NULL,PERIOD_M5,0); 
         res=true;
      } 
   return(res);
  }

//+------------------------------------------------------------------+
//| up to 16 digits after decimal point                              |
//+------------------------------------------------------------------+
string DoubleToStr1(double number,int precision)
  {
   double rem,integer,integer2;
   double DecimalArray[17]={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0,  10000000.0, 100000000.0,
                             1000000000.0, 10000000000.0, 100000000000.0, 10000000000000.0, 100000000000000.0,
                             1000000000000000.0, 1000000000000000.0, 10000000000000000.0 };
   string intstring,remstring,retstring;
   bool   isnegative=false;
   int    rem2;
//----
   if(precision<0)  precision=0;
   if(precision>16) precision=16;
//----
   double p=DecimalArray[precision];
   if(number<0.0) { isnegative=true; number=-number; }
   integer=MathFloor(number);
   rem=MathRound((number-integer)*p);
   remstring="";
   for(int i=0; i<precision; i++)
     {
      integer2=MathFloor(rem/10);
      rem2=NormalizeDouble(rem-integer2*10,0);
      remstring=rem2+remstring;
      rem=integer2;
     }
//----
   intstring=DoubleToStr(integer,0);
   if(isnegative) retstring="-"+intstring;
   else           retstring=intstring;
   if(precision>0) retstring=retstring+"."+remstring;
   return(retstring);
  }

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

string write_data_train_2()
{
  int handle;
  if(Ramdisk==true)
  {
    handle = gFileOpen(nameData1,WRITE);    
  }
  else
  {
    handle = FileOpen(nameData1, FILE_CSV|FILE_WRITE,' ');
    if(handle < 1)
    {
      Comment("Creation of "+nameData1+" failed. Error #", GetLastError());
      return(0);
    }  
  }

  string ss1; 
  int i;  
  //                   FutureWindow=5 . . . . .
  //                                  4 3 2 1 0
  //
  int nb1=NR_BARS1+FutureWindow+100;
  for (i=(NR_BARS1+FutureWindow)-1; i>=FutureWindow; i--)
  {
     ss1= Line1(   
                 nb1,
                 FutureWindow,
                 Price1, 
                 true,
                 decimalplace,
                 i              
            );
    
    if(Ramdisk==true)
    {
      gFileWrite(handle,ss1);    
    }
    else
    {
      FileWrite(handle,ss1);    
    } 
  }   
  if(Ramdisk==true)
  {
    gFileClose(handle);  
  }
  else
  {  
    FileClose(handle);
  }   
  string s1="File "+nameData1+" has been created. "+TimeToStr(TimeCurrent(), TIME_SECONDS);
  return(s1);
}

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+

string write_data_test_2()
{
  int handle,handle2,handle3,handle4;
  int i;
  string ss1,sig;  
  if(Ramdisk==true)
  {
    handle  = gFileOpen(nameData2,WRITE);  
    handle2 = gFileOpen(nameData2+".t",WRITE);      
    handle3 = gFileOpen(nameData2+".fw",WRITE);        
    handle4 = gFileOpen(nameData2+".cl",WRITE);          
  }
  else
  {
    handle = FileOpen(nameData2, FILE_CSV|FILE_WRITE,' ');
    if(handle < 1)
    {
      Comment("Creation of "+nameData2+" failed. Error #", GetLastError());
      return(0);
    }  
    //...............................................................................
    handle2 = FileOpen(nameData2+".t", FILE_CSV|FILE_WRITE,' ');
    if(handle2 < 1)
    {
      Comment("Creation of "+nameData2+".t"+" failed. Error #", GetLastError());
      return(0);
    }
    //...............................................................................    
    handle3 = FileOpen(nameData2+".fw", FILE_CSV|FILE_WRITE,' ');
    if(handle3 < 1)
    {
      Comment("Creation of "+nameData2+".fw"+" failed. Error #", GetLastError());
      return(0);
    }
    //...............................................................................    
    handle4 = FileOpen(nameData2+".cl", FILE_CSV|FILE_WRITE,' ');
    if(handle4 < 1)
    {
      Comment("Creation of "+nameData2+".cl"+" failed. Error #", GetLastError());
      return(0);
    }  
    //...............................................................................      
  }  
 
  int nb2=(NR_BARS2+FutureWindow)-1+100;  
  for (i=(NR_BARS2+FutureWindow)-1; i>=0; i--)
  {   
    ss1= Line1(   
                 nb2,
                 FutureWindow,
                 Price1, 
                 false,
                 decimalplace,
                 i              
            );
    if(Ramdisk==true)
    {
      gFileWrite(handle,ss1);    
      gFileWrite(handle2,DoubleToStr(Time[i],0)+"\n");    
      gFileWrite(handle4,StringConcatenate(DoubleToStr(Time[i],0),",",DoubleToStr(Close[i],Digits))+"\n");                    
    }
    else
    {
      FileWrite(handle,ss1);         
      FileWrite(handle2,Time[i]);    
      FileWrite(handle4,Time[i],Close[i]);    
    }        
  }
  if(Ramdisk==true)
  {
    gFileClose(handle);  
    gFileClose(handle2);  
    gFileClose(handle4);  
    gFileWrite(handle3,DoubleToStr(FutureWindow,0));  
    gFileClose(handle3);  
  } 
  else
  {
    FileClose(handle);    
    FileClose(handle2);    
    FileClose(handle4);    
    FileWrite(handle3,FutureWindow);  
    FileClose(handle3);  
  } 

  string s1="File "+nameData2+" has been created. "+TimeToStr(TimeCurrent(), TIME_SECONDS);
  return(s1);

}

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
string Line1(   
               int nb1,
               int FW,
               int Price1, 
               bool train,
               int pr1,
               int i              
            )
{
  int sig0;
  string ss0;
  string ssig0;  
  
  /*
extern int NrOfBars=500;
extern int bars1 = 5; 
  */

   if(train)
   {
    sig0 = iCustom(Symbol(),0,"5_bar_sig",
                                   nb1,
                                   FW,
                                   0,
                                   i+0);  
   }
   else
   {
     sig0 = 0;                                
   }  

    string x1=DoubleToStr1(iMACD(Symbol(),0,FastPeriod,SlowPeriod,SignalPeriod,Price1,MODE_MAIN,i+0)/Point,pr1);
    string x2=DoubleToStr1(iMACD(Symbol(),0,FastPeriod,SlowPeriod,SignalPeriod,Price1,MODE_MAIN,i+1)/Point,pr1);
    string x3=DoubleToStr1(iMACD(Symbol(),0,FastPeriod,SlowPeriod,SignalPeriod,Price1,MODE_SIGNAL,i+0)/Point,pr1);
    string x4=DoubleToStr1(iMACD(Symbol(),0,FastPeriod,SlowPeriod,SignalPeriod,Price1,MODE_SIGNAL,i+1)/Point,pr1);
    

    if(sig0==-1)
      ssig0="1";//SELL
    else if(sig0==1)
      ssig0="2";//BUY
    else         
      ssig0="3";//NO TRADE    
          
    if(Ramdisk==true)
    {    
      ss0=StringConcatenate(ssig0,                
                     " 1:"+x1,
                     " 2:"+x2,
                     " 3:"+x3,
                     " 4:"+x4,
                     "\n"
                );  
    }
    else
    {
      ss0=StringConcatenate(ssig0,                
                     " 1:"+x1,
                     " 2:"+x2,
                     " 3:"+x3,
                     " 4:"+x4                    
                );      
    }                
                
    return(ss0);          
}

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 ---