if U will set TrailingStop to 0 , traling stop will not be used.
As for order takeproft change this part:
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,Ask-StopLoss*Point,0 ,ExpertComment,MagicNumber,0,Green)
to this
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,Ask-StopLoss*Point,Ask+Traling*Point ,ExpertComment,MagicNumber,0,Green)
And opposite for short trade.
Regards
Kale
You type "Triling" , I understand it as "TrailingStop" and put it, but now the EA doesn't even open an order. Help.
You type "Triling" , I understand it as "TrailingStop" and put it, but now the EA doesn't even open an order. Help.
Try this:
#include
//---- Trades limits
extern double TakeProfit = 150;
extern double TrailingStop = 50;
extern double StopLoss = 50;
extern double Lots = 0.1;
extern int Slippage = 100;
//--- Indicators settings
extern int MA_Period=120;
extern int MA_Shift=60;
extern int Price=10;
extern int Mode=8;
//--- Global variables
int CurrentBar = 1;
int MagicNumber = 122334;
string ExpertComment = "EA";
int NumberOfTries = 1;
//+------------------------------------------------------------------
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------
bool isNewSymbol(string current_symbol)
{
//loop through all the opened order and compare the symbols
int total = OrdersTotal();
for(int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
string selected_symbol = OrderSymbol();
if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
return (False);
}
return (True);
}
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;
double mSL; //Broker stop loss minimum value
double OsUSD_P = 0 , OsUSD_C = 0 ;
if(Bars < 100) {Print("bars less than 100"); return(0);}
OsUSD_C = USDINDEX(CurrentBar,MA_Period,MA_Shift,Price,Mode) ;
OsUSD_P = USDINDEX(CurrentBar+1,MA_Period,MA_Shift,Price,Mod e);
//--- Trading conditions
bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ;
int base = true;
if (Symbol() == "EURUSD" || Symbol() == "GBPUSD" || Symbol() == "AUDUSD") base = 1;
if (Symbol() == "USDJPY" || Symbol() == "USDCHF") base = 2;
if (base == 1)
{
if (OsUSD_C > 0 && OsUSD_P < 0 )
SellCondition = true;
if (OsUSD_C 0 )
BuyCondition = true;
}
if (base == 2)
{
if (OsUSD_C > 0 && OsUSD_P < 0)
BuyCondition = true;
if (OsUSD_C 0)
SellCondition = true;
}
total = OrdersTotal();
if(total < 1 || isNewSymbol(Symbol()))
{
if(BuyCondition) //<-- BUY condition
{
ticket = OpenOrder(OP_BUY); //<-- Open BUY order
}
if(SellCondition) //<-- SELL condition
{
ticket = OpenOrder(OP_SELL); //<-- Open SELL order
}
}
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(CloseBuyCondition) //<-- Close the order and exit!
{
CloseOrder(OrderType());
}
TrailOrder(OrderType());
}
if(OrderType()==OP_SELL) //<-- Go to short position
{
if(CloseSellCondition) //<-- Close the order and exit!
{
CloseOrder(OP_SELL);
}
TrailOrder(OrderType());
}
}
}
return(0);
}
//+------------------------------------------------------------------+
void TrailOrder(int type)
{
if(TrailingStop>0){
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
if(type==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
int OpenOrder(int type)
{
int ticket=0;
int err=0;
int c = 0;
if(type==OP_BUY)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,Ask-StopLoss*Point,Ask+TakeProfit*Point ,ExpertComment,MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error opening BUY order : ", ErrorDescription(err));
break;
}
}
}
}
if(type==OP_SELL)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,Bid+StopLoss*Point,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0 ,Red);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error opening SELL order : ", ErrorDescription(err));
break;
}
}
}
}
return(ticket);
}
bool CloseOrder(int type)
{
Print("Asked to close!");
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
return (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage ,Violet));
if(type==OP_SELL)
return (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage ,Violet));
}
}
double USDINDEX(int bar,int MA_Period,int MA_Shift,int Price,int Mode)
{
double USD_Index=
(iMA("EURUSD",0,MA_Period,0,Mode,Price,bar+MA_Shif t)-
iMA("EURUSD",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("GBPUSD",0,MA_Period,0,Mode,Price,bar+MA_Shif t)-
iMA("GBPUSD",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("USDCHF",0,MA_Period,0,Mode,Price,bar+MA_Shif t)-
iMA("USDCHF",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("USDJPY",0,MA_Period,0,Mode,Price,bar+MA_Shif t)-
iMA("USDJPY",0,MA_Period,0,Mode,Price,bar))*100
;
return (USD_Index);
}
Code that was changed:
to:
and
to
[CODE]OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,Bid+StopLoss*Point,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0 ,Red);And I fixed traling:
[CODE]OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Po int*TrailingStop,OrderTakeProfit(),0,Red);to
[CODE]OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);God bless you, Kalenzo, good job, thanks
The earliest date from that I can test the EA is 25.09.2006, how can I have earlier hystory, because I want to test from earlier date than 25.09?
God bless you, Kalenzo, good job, thanks The earliest date from that I can test the EA is 25.09.2006, how can I have earlier hystory, because I want to test from earlier date than 25.09?
Here is the post about backtesting
https://www.mql5.com/en/forum/general
U can also read about how to make backtest with the best modeling quality at codersguru web page www.metatrader.info
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello, there, I have an EA, which profits are based on TrailingStopLoss. It has constant StopLoss, but doesn't have constant TakeProfit.
I'll ask any coder here to edit this EA to have TakeProfit, that can be defined by the user, and to remove the TrailingStopLoss.
Here is it:
#include
//---- Trades limits
extern double TakeProfit = 150;
extern double TrailingStop = 50;
extern double StopLoss = 50;
extern double Lots = 0.1;
extern int Slippage = 100;
//--- Indicators settings
extern int MA_Period=120;
extern int MA_Shift=60;
extern int Price=10;
extern int Mode=8;
//--- Global variables
int CurrentBar = 1;
int MagicNumber = 122334;
string ExpertComment = "EA";
int NumberOfTries = 1;
//+------------------------------------------------------------------
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------
bool isNewSymbol(string current_symbol)
{
//loop through all the opened order and compare the symbols
int total = OrdersTotal();
for(int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
string selected_symbol = OrderSymbol();
if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
return (False);
}
return (True);
}
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;
double mSL; //Broker stop loss minimum value
double OsUSD_P = 0 , OsUSD_C = 0 ;
if(Bars < 100) {Print("bars less than 100"); return(0);}
OsUSD_C = USDINDEX(CurrentBar,MA_Period,MA_Shift,Price,Mode);
OsUSD_P = USDINDEX(CurrentBar+1,MA_Period,MA_Shift,Price,Mode);
//--- Trading conditions
bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ;
int base = true;
if (Symbol() == "EURUSD" || Symbol() == "GBPUSD" || Symbol() == "AUDUSD") base = 1;
if (Symbol() == "USDJPY" || Symbol() == "USDCHF") base = 2;
if (base == 1)
{
if (OsUSD_C > 0 && OsUSD_P < 0 )
SellCondition = true;
if (OsUSD_C 0 )
BuyCondition = true;
}
if (base == 2)
{
if (OsUSD_C > 0 && OsUSD_P < 0)
BuyCondition = true;
if (OsUSD_C 0)
SellCondition = true;
}
total = OrdersTotal();
if(total < 1 || isNewSymbol(Symbol()))
{
if(BuyCondition) //<-- BUY condition
{
ticket = OpenOrder(OP_BUY); //<-- Open BUY order
}
if(SellCondition) //<-- SELL condition
{
ticket = OpenOrder(OP_SELL); //<-- Open SELL order
}
}
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(CloseBuyCondition) //<-- Close the order and exit!
{
CloseOrder(OrderType());
}
TrailOrder(OrderType());
}
if(OrderType()==OP_SELL) //<-- Go to short position
{
if(CloseSellCondition) //<-- Close the order and exit!
{
CloseOrder(OP_SELL);
}
TrailOrder(OrderType());
}
}
}
return(0);
}
//+------------------------------------------------------------------+
void TrailOrder(int type)
{
if(TrailingStop>0){
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
if(type==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
int OpenOrder(int type)
{
int ticket=0;
int err=0;
int c = 0;
if(type==OP_BUY)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,0 ,ExpertComment,MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error opening BUY order : ", ErrorDescription(err));
break;
}
}
}
}
if(type==OP_SELL)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,0,ExpertComment,MagicNumber,0,Red);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
Print("Error opening SELL order : ", ErrorDescription(err));
break;
}
}
}
}
return(ticket);
}
bool CloseOrder(int type)
{
Print("Asked to close!");
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
return (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet));
if(type==OP_SELL)
return (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet));
}
}
double USDINDEX(int bar,int MA_Period,int MA_Shift,int Price,int Mode)
{
double USD_Index=
(iMA("EURUSD",0,MA_Period,0,Mode,Price,bar+MA_Shift)-
iMA("EURUSD",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("GBPUSD",0,MA_Period,0,Mode,Price,bar+MA_Shift)-
iMA("GBPUSD",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("USDCHF",0,MA_Period,0,Mode,Price,bar+MA_Shift)-
iMA("USDCHF",0,MA_Period,0,Mode,Price,bar))*10000
+
(iMA("USDJPY",0,MA_Period,0,Mode,Price,bar+MA_Shift)-
iMA("USDJPY",0,MA_Period,0,Mode,Price,bar))*100
;
return (USD_Index);
}