This is a simple EA. just a 20 days break out system.
when price break 20 days new high, buy. exit when price reach's 10 day's low
when price break 20 day new low, sell. exit when price reach's 10 day's high.
after first open ticket, 2 more ticket could be added.
but when I backtest from 2006 to now on EUR/USD, no trading happened.
Who can help to find out what's the problem?
//---- input parameters
extern double Lots = 0.1;
extern int n_enter_days=20;
extern int m_exit_days=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
datetime last_time=0;
int start()
{
int cnt, ticket, total;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
total=OrdersTotal();
if( Close[1]>High[iHighest( Symbol(),Period(),MODE_HIGH,n_enter_days,1)]
&& last_time !=Time[0]
&& total<3)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening BUY order : ",GetLastError());
return(0);
}
last_time =Time[0];
}
if( Close[1]<Low[iLowest(Symbol(),Period(),MODE_LOW,n_enter_days,1)]
&& last_time !=Time[0]
&& total<3)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"My EA",12345,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());
return(0);
}
last_time =Time[0];
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // long position is opened
{
if(Close[1]<Low[iLowest(OrderSymbol(),Period(),MODE_LOW,m_exit_days,1)])
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
}
}
if(OrderType()==OP_SELL)
{
if(OrderType()==OP_BUY) // long position is opened
{
if(Close[1]>High[iHighest(OrderSymbol(),Period(),MODE_HIGH,m_exit_days,1)])
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+
when price break 20 days new high, buy. exit when price reach's 10 day's low
when price break 20 day new low, sell. exit when price reach's 10 day's high.
after first open ticket, 2 more ticket could be added.
but when I backtest from 2006 to now on EUR/USD, no trading happened.
Who can help to find out what's the problem?
//---- input parameters
extern double Lots = 0.1;
extern int n_enter_days=20;
extern int m_exit_days=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
datetime last_time=0;
int start()
{
int cnt, ticket, total;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
total=OrdersTotal();
if( Close[1]>High[iHighest( Symbol(),Period(),MODE_HIGH,n_enter_days,1)]
&& last_time !=Time[0]
&& total<3)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening BUY order : ",GetLastError());
return(0);
}
last_time =Time[0];
}
if( Close[1]<Low[iLowest(Symbol(),Period(),MODE_LOW,n_enter_days,1)]
&& last_time !=Time[0]
&& total<3)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"My EA",12345,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());
return(0);
}
last_time =Time[0];
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // long position is opened
{
if(Close[1]<Low[iLowest(OrderSymbol(),Period(),MODE_LOW,m_exit_days,1)])
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
}
}
if(OrderType()==OP_SELL)
{
if(OrderType()==OP_BUY) // long position is opened
{
if(Close[1]>High[iHighest(OrderSymbol(),Period(),MODE_HIGH,m_exit_days,1)])
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+