SVM_EA_2sig_v02

Author: Copyright � 2007, MetaQuotes Software Corp.
Price Data Components
Series array that contains close prices for each barSeries array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
SVM_EA_2sig_v02
//+------------------------------------------------------------------+
//|                                                   SVM_EA_v06.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <stdlib.mqh>
//#include <WinUser32.mqh>
#include <SVM_EA_inc.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#define NR_OF_SAMPLE_LINES   1000
#define NR_OF_TEST_LINES     200
#define NR_OF_TEST_BARS      10
#define NR_OF_ATTRIB         27
#define FUTURE_WINDOW        200

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern int     TrainTimeFrame=PERIOD_M5;
extern int     TrainPeriod=PERIOD_M5;
extern int     PredictPeriod=PERIOD_M1;
extern int     StopLoss1=60;
extern int     TakeProfit1=60;
extern int     StopLoss2=80;
extern int     TakeProfit2=80;

extern double  Lots=0.1;
extern datetime BeginDate= D'2008.09.01 00:00';
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int     MaxOrdersTotal1=1;
int     MaxOrdersTotal2=1;


int      myBars1;
int      myBars2;

int      MagicNumber1 = 1001;
int      MagicNumber2 = 1002;


double t[NR_OF_SAMPLE_LINES];
double c[NR_OF_SAMPLE_LINES];
double l[NR_OF_SAMPLE_LINES];
double h[NR_OF_SAMPLE_LINES];       
double ma5_M5[NR_OF_SAMPLE_LINES];
double ma10_M5[NR_OF_SAMPLE_LINES];
double ma15_M5[NR_OF_SAMPLE_LINES];
double ma5_H1[NR_OF_SAMPLE_LINES];
double ma10_H1[NR_OF_SAMPLE_LINES];
double ma15_H1[NR_OF_SAMPLE_LINES];
double ma5_H4[NR_OF_SAMPLE_LINES];
double ma10_H4[NR_OF_SAMPLE_LINES];
double ma15_H4[NR_OF_SAMPLE_LINES];

double _ma5_M5[NR_OF_TEST_LINES];
double _ma10_M5[NR_OF_TEST_LINES];
double _ma15_M5[NR_OF_TEST_LINES];
double _ma5_H1[NR_OF_TEST_LINES];
double _ma10_H1[NR_OF_TEST_LINES];
double _ma15_H1[NR_OF_TEST_LINES];
double _ma5_H4[NR_OF_TEST_LINES];
double _ma10_H4[NR_OF_TEST_LINES];
double _ma15_H4[NR_OF_TEST_LINES];

double ptr_predict_label_1[NR_OF_TEST_LINES];
double ptr_predict_label_2[NR_OF_TEST_LINES];


string file_name1="c:\\trade_model_dyn_3tf_1_.txt";
string file_name2="c:\\trade_model_dyn_3tf_2_.txt";


int NrTrainBars=NR_OF_SAMPLE_LINES;
int NrTestBars=NR_OF_TEST_LINES;   
int NrAttrib=NR_OF_ATTRIB;
int FutureWindow=FUTURE_WINDOW;
double Point1;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Point1=Point;
   _train_1();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 if (Time[0]<BeginDate) 
   {
    return(0);
   }
  
   if (isNewBar1(TrainPeriod))
   {  
      if(NrOrders(MagicNumber1 )<MaxOrdersTotal1)             
      { 
        init_train_bars();
        _train_1();   
      }       
      if(NrOrders(MagicNumber2 )<MaxOrdersTotal2)             
      {   
        init_train_bars();
        _train_2();
      
      }   

   if (isNewBar2(PredictPeriod))
   {
      if(NrOrders(MagicNumber1 )<MaxOrdersTotal1)             
      {    
        init_predict_bars1();
        _predict_1();   
        Trade(MagicNumber1,Lots,TakeProfit1,StopLoss1,ptr_predict_label_1,MagicNumber2);
      }
      if(NrOrders(MagicNumber2 )<MaxOrdersTotal2)             
      {   
        init_predict_bars2();
        _predict_2();   
        Trade(MagicNumber2,Lots,TakeProfit2,StopLoss2,ptr_predict_label_2,MagicNumber1);        
      }
   }       
 }
 
 
//----
   return(0);
  }

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

void Trade(int Magic,double Lots,int TP,int SL,double ptr_predict_label_[],int Magic_test)
{
       int res1=0;
/*       
       res1=ptr_predict_label_[0];
       Print("-->",res1);   
*/       

       int buy=0;
       int sell=0; 
       string s1="";
       for(int q=NR_OF_TEST_BARS;q>=0;q--)
       {       
         if (ptr_predict_label_[q]==1)
         {
           buy++;   
           s1=s1+"0";
         }  
         if (ptr_predict_label_[q]==-1)
         {
           sell++;              
           s1=s1+"1";
         }  
       }  
       if(buy>sell)
         res1=1;
       else if(buy<sell)
         res1=-1;
         
       int ot=OrderType1(Magic_test);          
       Print(Magic,"=",res1,"->",s1);              
       Print(Magic_test,"=",ot);              
      
       // Trade
 
       if (res1==-1) 
       {
           //if(ot>=0)    
             Sell(Magic,Lots,TP,SL );
       }  
       else if (res1==1) 
       {
          //if(ot<=0)     
           Buy(Magic,Lots,TP,SL );
       }  

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

bool isNewBar1(int tf1)
  {
//----
   bool res=false;
   if (myBars1!=iBars(Symbol(),tf1))
   {
      res=true;
      myBars1=iBars(Symbol(),tf1);
   }   
//----
   return(res);
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

bool isNewBar2(int tf1)
  {
//----
   bool res=false;
   if (myBars2!=iBars(Symbol(),tf1))
   {
      res=true;
      myBars2=iBars(Symbol(),tf1);
   }   
//----
   return(res);
  }

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

int OrderType1(int Magic ) 
{
   int total = OrdersTotal();
   int nrLongs = 0;
   int nrShorts = 0;
   for(int cnt=0; cnt<total; cnt++) {
      OrderSelect(cnt, SELECT_BY_POS);
      if( OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic )
         continue;
      if (OrderType()==OP_BUY) nrLongs++;
      if (OrderType()==OP_SELL) nrShorts++;
   }
   if(nrLongs>nrShorts)
     return(1);
   else if(nrLongs<nrShorts) 
     return(-1);
   else if(nrLongs==nrShorts)   
     return(0); 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int NrOrders(int Magic ) 
{
   int total = OrdersTotal();
   int nrLongs = 0;
   int nrShorts = 0;
   for(int cnt=0; cnt<total; cnt++) {
      OrderSelect(cnt, SELECT_BY_POS);
      if( OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic )
         continue;
      if (OrderType()==OP_BUY) nrLongs++;
      if (OrderType()==OP_SELL) nrShorts++;
   }
   return(nrLongs+nrShorts);
}
    
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void Buy(int Magic,double Lots,int TakeProfit, int StopLoss )
{
 
    int ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"SVM_EA",Magic,0,Green);
    if(ticket>0)
    {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
    }
    else 
      Print("Error opening BUY order : ",GetLastError()); 
     
    
}

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

void Sell(int Magic,double Lots,int TakeProfit, int StopLoss )
{
    int ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"SVM_EA",Magic,0,Red);
    if(ticket>0)
    {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
    }
    else 
      Print("Error opening SELL order : ",GetLastError()); 
   

}         

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

void init_train_bars()
{
   for(int i=0;i<NR_OF_SAMPLE_LINES;i++)
   {

      t[i]=iTime(NULL,TrainTimeFrame,i);
      c[i]=iClose(NULL,TrainTimeFrame,i);
      l[i]=iLow(NULL,TrainTimeFrame,i);
      h[i]=iHigh(NULL,TrainTimeFrame,i);
      
      ma5_M5[i]=iMA(NULL,PERIOD_M5,5,0,MODE_SMA,PRICE_CLOSE,i);
      ma10_M5[i]=iMA(NULL,PERIOD_M5,10,0,MODE_SMA,PRICE_CLOSE,i);
      ma15_M5[i]=iMA(NULL,PERIOD_M5,15,0,MODE_SMA,PRICE_CLOSE,i);  

      ma5_H1[i]=iMA(NULL,PERIOD_H1,5,0,MODE_SMA,PRICE_CLOSE,i);
      ma10_H1[i]=iMA(NULL,PERIOD_H1,10,0,MODE_SMA,PRICE_CLOSE,i);
      ma15_H1[i]=iMA(NULL,PERIOD_H1,15,0,MODE_SMA,PRICE_CLOSE,i);  

      ma5_H4[i]=iMA(NULL,PERIOD_H4,5,0,MODE_SMA,PRICE_CLOSE,i);
      ma10_H4[i]=iMA(NULL,PERIOD_H4,10,0,MODE_SMA,PRICE_CLOSE,i);
      ma15_H4[i]=iMA(NULL,PERIOD_H4,15,0,MODE_SMA,PRICE_CLOSE,i);  

   }
}

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

void init_predict_bars1()
{
   for(int i=0;i<NR_OF_TEST_LINES;i++)
   {
      
      _ma5_M5[i]=iMA(NULL,PERIOD_M5,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_M5[i]=iMA(NULL,PERIOD_M5,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_M5[i]=iMA(NULL,PERIOD_M5,15,0,MODE_SMA,PRICE_CLOSE,i);  

      _ma5_H1[i]=iMA(NULL,PERIOD_H1,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_H1[i]=iMA(NULL,PERIOD_H1,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_H1[i]=iMA(NULL,PERIOD_H1,15,0,MODE_SMA,PRICE_CLOSE,i);  

      _ma5_H4[i]=iMA(NULL,PERIOD_H4,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_H4[i]=iMA(NULL,PERIOD_H4,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_H4[i]=iMA(NULL,PERIOD_H4,15,0,MODE_SMA,PRICE_CLOSE,i);  
      
      ptr_predict_label_1[i]=0;
              
   }

}


void init_predict_bars2()
{
   for(int i=0;i<NR_OF_TEST_LINES;i++)
   {
      
      _ma5_M5[i]=iMA(NULL,PERIOD_M5,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_M5[i]=iMA(NULL,PERIOD_M5,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_M5[i]=iMA(NULL,PERIOD_M5,15,0,MODE_SMA,PRICE_CLOSE,i);  

      _ma5_H1[i]=iMA(NULL,PERIOD_H1,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_H1[i]=iMA(NULL,PERIOD_H1,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_H1[i]=iMA(NULL,PERIOD_H1,15,0,MODE_SMA,PRICE_CLOSE,i);  

      _ma5_H4[i]=iMA(NULL,PERIOD_H4,5,0,MODE_SMA,PRICE_CLOSE,i);
      _ma10_H4[i]=iMA(NULL,PERIOD_H4,10,0,MODE_SMA,PRICE_CLOSE,i);
      _ma15_H4[i]=iMA(NULL,PERIOD_H4,15,0,MODE_SMA,PRICE_CLOSE,i);  
      
      ptr_predict_label_2[i]=0;
              
   }

}

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

void _train_1()
{

   int xx=SvmCreateDyn_3tf_1( 
                        t,
                        c,
                        l,
                        h,
                        ma5_M5,
                        ma10_M5,
                        ma15_M5,
                        ma5_H1,
                        ma10_H1,
                        ma15_H1,
                        ma5_H4,
                        ma10_H4,
                        ma15_H4,                        
                        NrTrainBars,
                        NrAttrib,
                        FutureWindow,
                        StopLoss1,
                        TakeProfit1,
                        Point1,
                        file_name1);   
   //Print("SvmCreateDyn_3tf_1: ",xx);

}


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

void _train_2()
{

   int xx=SvmCreateDyn_3tf_1( 
                        t,
                        c,
                        l,
                        h,
                        ma5_M5,
                        ma10_M5,
                        ma15_M5,
                        ma5_H1,
                        ma10_H1,
                        ma15_H1,
                        ma5_H4,
                        ma10_H4,
                        ma15_H4,                        
                        NrTrainBars,
                        NrAttrib,
                        FutureWindow,
                        StopLoss2,
                        TakeProfit2,
                        Point1,
                        file_name2);   
   //Print("SvmCreateDyn_3tf_1: ",xx);

}



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

void _predict_1()
{

  int xx=SvmPredictDyn_3tf_1(
                     _ma5_M5,
                     _ma10_M5,
                     _ma15_M5,
                     _ma5_H1,
                     _ma10_H1,
                     _ma15_H1,
                     _ma5_H4,
                     _ma10_H4,
                     _ma15_H4,
							NrTestBars,
							NrAttrib,
							Point1,
							file_name1,
							ptr_predict_label_1
							);							
							
   //Print("SvmPredictDyn_3tf_1: ",xx,
   //   " ptr_predict_label_1[0]:",ptr_predict_label_1[0]
   //);
}


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

void _predict_2()
{

  int xx=SvmPredictDyn_3tf_1(
                     _ma5_M5,
                     _ma10_M5,
                     _ma15_M5,
                     _ma5_H1,
                     _ma10_H1,
                     _ma15_H1,
                     _ma5_H4,
                     _ma10_H4,
                     _ma15_H4,
							NrTestBars,
							NrAttrib,
							Point1,
							file_name2,
							ptr_predict_label_2
							);							
							
   //Print("SvmPredictDyn_3tf_1: ",xx,
   //   " ptr_predict_label_1[0]:",ptr_predict_label_1[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 ---