Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Tester_v04_5_EURUSD_
//+------------------------------------------------------------------+
//| 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>
#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.11.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=70; //70
int TakeProfit=70; //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:\\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++)
{
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 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
---