Tester_v04_5_EURCHF_001

Author: Copyright � 2008, 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 barSeries array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
Miscellaneous
Uses files from the file systemIt writes information to file
0 Views
0 Downloads
0 Favorites
Tester_v04_5_EURCHF_001
//+------------------------------------------------------------------+
//|                                                   Tester_v02.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <Train_04.mqh>

/*
EURUSD s/l=160 pips      70
EURJPY s/l=200 pips
GBPUSD s/l=152 pips
EURCHF s/l=50pips
AUDUSD s/l=75pips

EURUSD s/l=70 pips
EURJPY s/l=90 pips
GBPUSD s/l=67 pips
EURCHF s/l=22pips
AUDUSD s/l=33pips

*/
#define NR_OF_SAMPLE_LINES   2000
#define NR_OF_TEST_LINES     800
#define NR_OF_TEST_BARS      10
#define FUTURE_WINDOW        200
#include <stdlib.mqh>
extern datetime BeginDate= D'2008.09.01 00:00';
int CurrBar1;
int      MagicNumber1 = 1001;
extern double  Lots=0.1;
int     MaxOrdersTotal1=1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int myBars1;

bool isNewBar1(int tf1)
  {
//----
   bool res=false;
   if (myBars1!=iBars(Symbol(),tf1))
   {
      res=true;
      myBars1=iBars(Symbol(),tf1);
   }  
  
//----
   return(res);
  }
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  CurrBar1=iBarShift(Symbol(),PERIOD_M1,BeginDate,false); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

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 ptr_predict_label_1[NR_OF_TEST_LINES];

int start()
  {
  int i;
  string s1="";
//----
   if (Time[0]<BeginDate) 
   {
    return(0);
   }
if(NrOrders(MagicNumber1 )<MaxOrdersTotal1)    
if(isNewBar1(PERIOD_M1))
{
   /*
     s1=""+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS);
     for(i=0;i<NR_OF_SAMPLE_LINES;i++)
     {   
       s1=s1+","+       
       iClose(NULL,PERIOD_M1,i)+","+
       iClose(NULL,PERIOD_M5,i)+","+
       iClose(NULL,PERIOD_H1,i);//+","+
       //iMA(NULL,PERIOD_M1, 5,0,MODE_SMA,PRICE_CLOSE,i)+","+
       //iMA(NULL,PERIOD_M5, 5,0,MODE_SMA,PRICE_CLOSE,i)+","+
       //iMA(NULL,PERIOD_H1, 5,0,MODE_SMA,PRICE_CLOSE,i);
       //TimeToStr(Time[1],TIME_DATE|TIME_SECONDS)+","+
       //TimeToStr(Time[2],TIME_DATE|TIME_SECONDS);
     }  
     //Write2("Tester.csv",s1);
   */
   for(i=0;i<NR_OF_SAMPLE_LINES;i++)
   {
      t[i]=iTime(NULL,PERIOD_M5,i);
      c[i]=iClose(NULL,PERIOD_M5,i);
      l[i]=iLow(NULL,PERIOD_M5,i);
      h[i]=iHigh(NULL,PERIOD_M5,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);
      
      
   }
   for(i=0;i<NR_OF_TEST_LINES;i++)
   {
     ptr_predict_label_1[i]=0;   
   }   
   //Print(t[0]);
   int NrTrainBars=NR_OF_SAMPLE_LINES;
   int NrTestBars=NR_OF_TEST_LINES;
   int FutureWindow=FUTURE_WINDOW;
	int StopLoss=22;		//70
	int TakeProfit=22;	//70								
   int spread=MarketInfo(Symbol(),MODE_SPREAD);
   double Point1=MarketInfo(Symbol(),MODE_POINT);
   //string filename1="c:\\mt4\\t4\\test04_1_"+(myBars1-CurrBar1)+".libsvm";
   string filename1="c:\\mt4\\t4\\test04_1_"+Symbol()+".libsvm";
   double C=32.0;
   double gamma=2.0;
   Example5(  
                        t,
                        c,
                        l,
                        h,
                        ma5_M5,
                        ma10_M5,
                        ma15_M5,
                        ma5_H1,
                        ma10_H1,
                        ma15_H1,
                        ma5_H4,
                        ma10_H4,
                        ma15_H4,      
						      NrTrainBars, //2200
						      NrTestBars, //800
					         FutureWindow,	//200
					         StopLoss,		//70
					         TakeProfit,	//70								
					         Point1,
					         spread,
		                  filename1,
								C,
								gamma,
								ptr_predict_label_1, //output label 		                  
		                  0,  //0-no file ,1-file ma,2-file ma diff,3-file libsvm
		                  1,  //0-don't normalize, 1-normalize with std, 2-normalize with train mean, 3-normalize with range, 4-normalize with train range
		                  3,  //0-do nothing 1-create model 2-predict only 3-create model and predict
		                  0   //0-no predict file, 1-predict file, 2-predict and range file
		                  
		       );  
		       
   int buy=0;
   int sell=0; 
   string ss1=""; 
   int res1=0;		         
   //for(i=FUTURE_WINDOW/2;i>=0;i--)   
   //for(i=0;i<NR_OF_TEST_LINES/2;i++)
   //for(i=0;i<NR_OF_TEST_BARS;i++)
   //for(i=NR_OF_TEST_LINES;i>=(NR_OF_TEST_LINES-NR_OF_TEST_BARS);i--)   
   for(i=NR_OF_TEST_BARS;i>=0;i--)
   {
         if (ptr_predict_label_1[i]==1)
         {
           buy++;   
           ss1=ss1+"0";
         }  
         if (ptr_predict_label_1[i]==-1)
         {
           sell++;              
           ss1=ss1+"1";
         }     
   }
   
       if(buy>sell)
         res1=1;
       else if(buy<sell)
         res1=-1;
       Print("class=",res1,"->",ss1); 
       if (res1==-1) 
       {
           Sell(MagicNumber1,Lots,TakeProfit,StopLoss );
       }  
       else if (res1==1) 
       {
           Buy(MagicNumber1,Lots,TakeProfit,StopLoss );
       }  
           		       
} 
   
//----
   return(0);
}
//+------------------------------------------------------------------+

int Write2(string filename,string str)
{
//Write log file
   
   int handle; 
   handle = FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV,"/t");
   FileSeek(handle, 0, SEEK_END);      
   //FileWrite(handle,"" + TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS) + ": " + str);
   FileWrite(handle,str);
   FileClose(handle);
	//Print(str);
}


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

void Buy(int Magic,double Lots,int TakeProfit, int StopLoss )
{
    //if(NrOrders(MagicNumber1 )<MaxOrdersTotal1)    
    {
      int ticket=OrdSend(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 )
{
    //if(NrOrders(MagicNumber1 )<MaxOrdersTotal1)    
    {
      int ticket=OrdSend(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()); 
     }
} 

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

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);
}   

int Write(string str)
{
//Write log file
   string filename="SVM_EA.log";
   int handle; 
   handle = FileOpen(filename,FILE_READ|FILE_WRITE|FILE_CSV,"/t");
   FileSeek(handle, 0, SEEK_END);      
   FileWrite(handle," Time " + TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS) + ": " + str);
   FileClose(handle);
	Print(str);
}
int OrdSend(string _symbol, int _cmd, double _volume, double _price, int _slippage, double _stoploss, double _takeprofit, string _comment="", int _magic=0, datetime _expiration=0, color _arrow_color=CLR_NONE) 
{
int NumberOfTries=10;
int RetryTime=2;
//Send order with retry capabilities and log
int _stoplevel=MarketInfo(_symbol,MODE_STOPLEVEL);
double _priceop=0;
int ticket,err,tries;
tries = 0;
switch (_cmd) {
    case OP_BUY:
        if (!IsTradeContextBusy() && IsTradeAllowed()) {
        while (tries < NumberOfTries) {
            RefreshRates();
            ticket = OrderSend(_symbol,OP_BUY,_volume,Ask,_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Buy @ "+Ask+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Buy @ "+Ask+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);
        }
        }
        err=ticket;
        break;
 
    case OP_SELL:
        if (!IsTradeContextBusy() && IsTradeAllowed()) {
        while (tries < NumberOfTries) {
            RefreshRates();
            ticket = OrderSend(_symbol,OP_SELL,_volume,Bid,_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Sell @ "+Bid+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Sell @ "+Bid+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);    
        }
        }
        err=ticket;
        break;
 
    case OP_BUYSTOP:
        while (tries < NumberOfTries) {
            RefreshRates();
            if ((_price-Ask)<_stoplevel*Point) _priceop=Ask+_stoplevel*Point; else _priceop=_price;            
            ticket = OrderSend(_symbol,OP_BUYSTOP,_volume,NormalizeDouble(_priceop,Digits),_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Buy Stop @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Buy Stop@ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);
        }
        err=ticket;
        break;
 
 
    case OP_SELLSTOP:
        if (!IsTradeContextBusy() && IsTradeAllowed()) {
        while (tries < NumberOfTries) {
            RefreshRates();
            if ((Bid-_price)<_stoplevel*Point) _priceop=Bid-_stoplevel*Point; else _priceop=_price;            
            ticket = OrderSend(_symbol,OP_SELLSTOP,_volume,NormalizeDouble(_priceop,Digits),_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Sell Stop @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Sell Stop @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);
        }
        }
        err=ticket;
        break;
 
 
    case OP_BUYLIMIT:
        if (!IsTradeContextBusy() && IsTradeAllowed()) {
        while (tries < NumberOfTries) {
            RefreshRates();
            if ((Ask-_price)<_stoplevel*Point) _priceop=Ask-_stoplevel*Point; else _priceop=_price;            
            ticket = OrderSend(_symbol,OP_BUYLIMIT,_volume,NormalizeDouble(_priceop,Digits),_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Buy Limit @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Buy Limit @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);
        }
        }
        err=ticket;
        break;
 
    case OP_SELLLIMIT:
        if (!IsTradeContextBusy() && IsTradeAllowed()) {
        while (tries < NumberOfTries) {
            RefreshRates();
            if ((_price-Bid)<_stoplevel*Point) _priceop=Bid+_stoplevel*Point; else _priceop=_price;            
            ticket = OrderSend(_symbol,OP_BUYLIMIT,_volume,NormalizeDouble(_priceop,Digits),_slippage,NormalizeDouble(_stoploss,Digits),NormalizeDouble(_takeprofit,Digits),_comment,_magic,_expiration,_arrow_color);
            if(ticket<=0) {
                Write("Error Occured : "+ErrorDescription(GetLastError()));
                Write(Symbol()+" Sell Limit @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
                tries++;
            } else {
                tries = NumberOfTries;
                Write("Order opened : "+Symbol()+" Sell Limit @ "+_priceop+" SL @ "+_stoploss+" TP @"+_takeprofit+" ticket ="+ticket);
            }
            Sleep(RetryTime*1000);
        }
        err=ticket;
        }
        break;
 
    default:
        Write("No valid type of order found");
        err=-1;
        break;
}
return(err);
}
     

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