Price Data Components
Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
X3MA_EA_V2_0
//+------------------------------------------------------------------+
//| X3MA EA V2.0.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
extern double order_lot=0.1;
extern bool money_management=true;
extern double risk_percent=10;
extern double take_profit=0; //Fixed takeprofit in pips (0=no takeprofit)
extern double stop_loss=0; //Fixed stoploss in pips (0=no stoploss)
extern double equity_stop_loss_percent=20;
extern double equity_take_profit_percent=20;
extern double range_gap_pips=0.2;
extern bool enable_entry_medium_slow_cross=true;
extern bool enable_exit_fast_slow_cross=true;
extern int fast_ma_period=2;
extern int fast_ma_shift=0;
extern int fast_ma_method=0;
extern int fast_ma_apply_price=0;
extern int medium_ma_period=8;
extern int medium_ma_shift=0;
extern int medium_ma_method=0;
extern int medium_ma_apply_price=0;
extern int slow_ma_period=16;
extern int slow_ma_shift=0;
extern int slow_ma_method=0;
extern int slow_ma_apply_price=0;
extern int start_trading_hour=0;
extern int start_trading_minute=0;
extern int end_trading_hour=24;
extern int end_trading_minute=0;
extern int max_trades=2;
extern int signal_bar=0;
extern int magic_number=112413;
extern double slippage=5; //Allowed slippage of open/close order
int bar=1;
int timeframe=0;
int number_retry_open_trade=10;
double myPoint, mySpread, myStopLevel,myTickValue,myTickSize,myLotValue;
int myDigits;
datetime TradeBarTime;
bool enableopen;
bool enable_ea;
double my_lots;
int digit_lot;
int ratio=1000000;
int signal;
int signalclose;
int myBars;
double last_history_check;
string TradeCode="X3MA_EA2.0";
int cross_type;
int err;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
SetPoint();
if(Digits==3 || Digits==5) slippage*=10;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=0.01) digit_lot=2;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=0.1) digit_lot=1;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=1) digit_lot=0;
TradeBarTime=Time[0];
bar=signal_bar;
DrawLine("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,Bid+ratio);
DrawLine("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,Ask+ratio);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
for (int j=0;j<=30;j++) ObjectDelete("bg"+j+"_"+TradeCode);
//----
return(0);
}
int signal()
{
double ma11,ma12;
double ma21,ma22;
double ma31,ma32;
ma11=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar);
ma12=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar+1);
ma21=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar);
ma22=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar+1);
ma31=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar);
ma32=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar+1);
double lastbid,lastask;
lastbid=GetHLineValue("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
lastask=GetHLineValue("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(enable_entry_medium_slow_cross)
{
if(ma21>ma31 && ma22<=ma32)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,123+ratio);
DrawLine("last_cross_buy_23_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma21<ma31 && ma22>=ma32)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,223+ratio);
DrawLine("last_cross_sell_23_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
}
if(ma11>ma21 && ma12<=ma22 && ma11>=ma31 && ma21>=ma31)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,112+ratio);
DrawLine("last_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma21 && ma12>=ma22 && ma11<=ma31 && ma21<=ma31)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,212+ratio);
DrawLine("last_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
if(ma11>ma31 && ma12<=ma32)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,113+ratio);
DrawLine("last_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma31 && ma12>=ma32)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,213+ratio);
DrawLine("last_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("cross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
if(GetHLineValue("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)>0)
{
int crosstype;
crosstype=GetHLineValue("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
cross_type=crosstype;
double crosspricebuy=GetHLineValue("cross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricesell=GetHLineValue("cross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(crosstype==113 && GetHLineValue("last_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(10);
}
}
else if(crosstype==213 && GetHLineValue("last_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(20);
}
}
else if(crosstype==112 && GetHLineValue("last_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(10);
}
}
else if(crosstype==212 && GetHLineValue("last_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(20);
}
}
if(enable_entry_medium_slow_cross)
{
if(crosstype==123 && GetHLineValue("last_cross_buy_23_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(10);
}
}
else if(crosstype==223 && GetHLineValue("last_cross_sell_23_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(20);
}
}
}
}
return(30);
}
int signal_close_fast()
{
double ma11,ma12;
double ma21,ma22;
double ma31,ma32;
ma11=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar);
ma12=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar+1);
ma21=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar);
ma22=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar+1);
ma31=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar);
ma32=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar+1);
double lastbid,lastask;
lastbid=GetHLineValue("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
lastask=GetHLineValue("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(CountOpenOrders(OP_BUY,"Fast")+CountOpenOrders(OP_SELL,"Fast")>0)
{
if(ma11>ma21 && ma12<=ma22)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,112+ratio);
DrawLine("xlast_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma21 && ma12>=ma22)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,212+ratio);
DrawLine("xlast_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
if(GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)>0)
{
int crosstype;
crosstype=GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricebuy=GetHLineValue("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricesell=GetHLineValue("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(crosstype==112)// && GetHLineValue("xlast_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(11);
}
}
else if(crosstype==212)// && GetHLineValue("xlast_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(21);
}
}
}
}
}
int signal_close_medium()
{
double ma11,ma12;
double ma21,ma22;
double ma31,ma32;
ma11=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar);
ma12=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar+1);
ma21=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar);
ma22=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar+1);
ma31=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar);
ma32=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar+1);
double lastbid,lastask;
lastbid=GetHLineValue("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
lastask=GetHLineValue("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(CountOpenOrders(OP_BUY,"Med")+CountOpenOrders(OP_SELL,"Med")>0)
{
if(ma11>ma31 && ma12<=ma32)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,113+ratio);
DrawLine("xlast_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma31 && ma12>=ma32)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,213+ratio);
DrawLine("xlast_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
if(GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)>0)
{
int crosstype;
crosstype=GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricebuy=GetHLineValue("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricesell=GetHLineValue("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(crosstype==113)// && GetHLineValue("xlast_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(12);
}
}
else if(crosstype==213)// && GetHLineValue("xlast_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(22);
}
}
}
}
}
double sum_all_profit()
{
double total;
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==magic_number && OrderProfit()>0)
{
total=total+OrderProfit();
}
}
}
/*
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==True)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==magic_number && OrderProfit()>0)
{
total=total+OrderProfit();
}
}
}
*/
return(total);
}
double sum_all_loss()
{
double total;
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==magic_number && OrderProfit()<0)
{
total=total+OrderProfit();
}
}
}
/*
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==True)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==magic_number && OrderProfit()<0)
{
total=total+OrderProfit();
}
}
}
*/
return(total);
}
double sum_profit()
{
double total;
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==magic_number)
{
total=total+OrderProfit();
}
}
}
return(total);
}
double last_close_time()
{
int i;
datetime closetime=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==True)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic_number)
{
if(closetime==0 || closetime<OrderCloseTime())
{
closetime=OrderCloseTime();
}
}
}
}
return(closetime);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double sl,tp;
int openticket1;
int openticket2;
double openprice1;
double openprice2;
double stop;
int i;
int x;
int status;
int signalclosefast;
int signalclosemed;
if(signal_bar>=0)
{
signal=signal();
signalclosefast=signal_close_fast();
if(enable_exit_fast_slow_cross) signalclosemed=signal_close_medium();
}
if(CountOpenOrders(OP_BUY,TradeCode)+CountOpenOrders(OP_SELL,TradeCode)>0)
{
double total_profit=sum_profit();
if((total_profit*100/AccountEquity()<=0-equity_stop_loss_percent && equity_stop_loss_percent>0) || (total_profit*100/AccountEquity()>=equity_take_profit_percent && equity_take_profit_percent))
{
CloseTrades(OP_SELL,TradeCode,0);
CloseTrades(OP_BUY,TradeCode,0);
}
if(signalclosefast==11) CloseTrades(OP_SELL,"Fast",11);
if(signalclosefast==21) CloseTrades(OP_BUY,"Fast",21);
if(enable_exit_fast_slow_cross)
{
if(signalclosemed==12) CloseTrades(OP_SELL,"Med",12);
if(signalclosemed==22) CloseTrades(OP_BUY,"Med",22);
}
}
bool enableopen = true;
if(!istradinghours(start_trading_hour,end_trading_hour,start_trading_minute,end_trading_minute)) enableopen=false;
if(signal!=30)
{
datetime lastclosetime=last_close_time();
if(iBarShift(Symbol(),timeframe,lastclosetime)==0 && lastclosetime>0) enableopen=false;
}
if(enableopen)
if(TradeBarTime!=Time[0])
if(signal!=30 )
if(CountOpenOrders(OP_BUY,TradeCode)+CountOpenOrders(OP_SELL,TradeCode)<max_trades)
{
my_lots=order_lot;
string strType;
if(cross_type==112 || cross_type==212) strType="FastMedCross||";
if(cross_type==113 || cross_type==213) strType="FastSlowCross||";
if(cross_type==123 || cross_type==223) strType="MedSlowCross||";
if(money_management)
{
double my_lots2;
double money2 = (AccountBalance() * AccountLeverage() * risk_percent * 0.01);
my_lots2 =money2/MarketInfo(Symbol(), MODE_LOTSIZE);
//my_lots2=(AccountBalance()*risk_percent*0.01)/(MarketInfo(Symbol(),MODE_MARGINREQUIRED));
my_lots=NormalizeDouble(my_lots2,digit_lot);
}
if(my_lots>MarketInfo(Symbol(),MODE_MAXLOT)) my_lots=MarketInfo(Symbol(),MODE_MAXLOT);
if(my_lots<MarketInfo(Symbol(),MODE_MINLOT)) my_lots=MarketInfo(Symbol(),MODE_MINLOT);
if(signal==10)
{
openprice1=Ask;
if (stop_loss==0) sl=0;
if (stop_loss>0) sl=openprice1-(stop_loss*myPoint);
if (take_profit==0) tp=0;
if (take_profit>0) tp=openprice1+(take_profit*myPoint);
openticket1=Open_Trade(Symbol(),OP_BUY,openprice1, my_lots,sl, tp, strType+TradeCode);
if(openticket1>0)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,0);
Alert("Buy Alert "+ Symbol()+ " " + strtf(Period()) + " Date & Time: " + TimeToStr(TimeCurrent(),TIME_DATE)+" "+TimeToStr(TimeCurrent(),TIME_MINUTES) + " - " + WindowExpertName());
}
}
if(signal==20)
{
openprice2=Bid;
if (stop_loss==0) sl=0;
if (stop_loss>0) sl=openprice2+(stop_loss*myPoint);
if (take_profit==0) tp=0;
if (take_profit>0) tp=openprice2-(take_profit*myPoint);
openticket2=Open_Trade(Symbol(),OP_SELL,openprice2, my_lots,sl, tp, strType+TradeCode);
if(openticket2>0)
{
DrawLine("last_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,0);
Alert("Sell Alert "+ Symbol()+ " " + strtf(Period()) + " Date & Time: " + TimeToStr(TimeCurrent(),TIME_DATE)+" "+TimeToStr(TimeCurrent(),TIME_MINUTES) + " - " + WindowExpertName());
}
}
}
DrawLine("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,Bid+ratio);
DrawLine("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,Ask+ratio);
double totalprofit=sum_all_profit();
double totalloss=sum_all_loss();
double grossprofit=totalprofit-totalloss;
string strcomment;
string lnfeed="\n";
strcomment=strcomment+WindowExpertName()+lnfeed;
strcomment=strcomment+lnfeed;
strcomment=strcomment+"Licence type: Unlimited MT4"+lnfeed;
strcomment=strcomment+lnfeed;
strcomment=strcomment+"Copyrighted by www.sbginer.com | www.tfxkenya.com"+lnfeed;
strcomment=strcomment+"Risk % : "+ DoubleToStr(risk_percent,2)+lnfeed;
strcomment=strcomment+"Number of trades : " + (CountOpenOrders(OP_BUY,TradeCode)+CountOpenOrders(OP_SELL,TradeCode))+lnfeed;
strcomment=strcomment+"Profits : "+ DoubleToStr(totalprofit,2) + " $ "+ lnfeed;
strcomment=strcomment+"Loss : "+DoubleToStr(totalloss,2) + " $ "+lnfeed;
strcomment=strcomment+"Gross Profit : "+ DoubleToStr(grossprofit,2)+ " $ "+lnfeed;
strcomment=strcomment+"Fast MA : " + fast_ma_period + " | Medium MA : " + medium_ma_period + " | Slow MA : " + slow_ma_period +lnfeed;
strcomment=strcomment+"Equity SL % : " + DoubleToStr(equity_stop_loss_percent,2) + " | Equity TP % : " + DoubleToStr(equity_take_profit_percent,2) +lnfeed;
strcomment=strcomment+"Balance : " + DoubleToStr(AccountBalance(),2) + " $ "+lnfeed;
strcomment=strcomment+"Equity : " + DoubleToStr(AccountEquity(),2)+ " $ "+lnfeed;
int j;
for (j=0;j<=30;j++)
{
drawFixedLbl("bg"+j+"_"+TradeCode, "gggggggggggggggggggggggggggggggggggg", 0, 1, j*6, 5, "Webdings", DeepSkyBlue, true);
}
Comment(strcomment);
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+-------------------------General Functions------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void SetPoint()
{
myPoint = MarketInfo(Symbol(),MODE_POINT);
mySpread = MarketInfo(Symbol(),MODE_SPREAD);
myDigits = MarketInfo(Symbol(),MODE_DIGITS);
myStopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
myTickValue = MarketInfo(Symbol(),MODE_TICKVALUE);
myTickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
myLotValue = myTickValue/myTickSize;
if(
myDigits==3 ||
myDigits==5
)
{
myPoint = myPoint * 10;
mySpread = mySpread / 10;
myStopLevel = myStopLevel / 10;
myDigits = myDigits -1;
}
}
//+------------------------------------------------------------------+
//+----------------------Trading Hours-------------------------------+
bool istradinghours(int starthour, int endhour, int startminute=0, int endminute=0, int shift = 0)
{
int nowtime = (Hour()+shift)*60 + Minute();
if (nowtime < 0)
nowtime += 1440;
if (nowtime >= 1440)
nowtime -= 1440;
int starttime = starthour*60 + startminute;
int endtime = endhour*60 + endminute;
if (starttime <= endtime)
{
if ((nowtime < starttime) || (nowtime >= endtime))
return(false);
}
else
{
if ((nowtime < starttime) && (nowtime >= endtime))
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
//+------------------Count Number of Open Orders---------------------+
int CountOpenOrders(int direction, string strtype)
{
int i,j;
j = 0;
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
{
if( OrderType() == direction &&
OrderSymbol() == Symbol() &&
OrderMagicNumber() == magic_number &&
StringFind(OrderComment(),strtype)!=-1
)
j++;
}
else
Print("Could not SELECT trade");
}
return(j);
}
//+------------------------------------------------------------------+
//+-------------------Close Trades by Symbol()-------------------------+
int CloseTrades(int direction, string strtype,int signal)
{
int j;
//double ClosePrice;
j = 0;
int x;
int status;
if(direction==-1)
return;
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==True)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic_number && StringFind(OrderComment(),strtype)!=-1)
if(OrderType()==direction)
{
if(OrderType()==OP_BUY)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderClose(OrderTicket(),OrderLots(),Bid,0);
if (status == 1) { Print(strtype + " Close by signal " + signal); j++; break; }
}
}
else
if(OrderType()==OP_BUYLIMIT)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderDelete(OrderTicket());
if (status == 1) { j++; break; }
}
}
else
if(OrderType()==OP_BUYSTOP)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderDelete(OrderTicket());
if (status == 1) { j++; break; }
}
}
if(OrderType()==OP_SELL)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderClose(OrderTicket(),OrderLots(),Ask,0);
if (status == 1) { Print(strtype + " Close by signal " + signal); j++; break; }
}
}
else
if(OrderType()==OP_SELLLIMIT)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderDelete(OrderTicket());
if (status == 1) { j++; break; }
}
}
else
if(OrderType()==OP_SELLSTOP)
{
for (x = 5; x!= 0; x--)
{
while (IsTradeContextBusy() || !IsTradeAllowed()) Sleep(5000);
status = OrderDelete(OrderTicket());
if (status == 1) { j++; break; }
}
}
}
}
}
return(j);
}
//+------------------------------------------------------------------+
//+----------------Modify Profit Target and Stop Loss----------------+
bool ModifyProfitTarget(int myTicket, double ProfitTarget, double StopLoss)
{
int try;
if(OrderSelect(myTicket,SELECT_BY_TICKET,MODE_TRADES)==False)
return(false);
if(
(
MathRound(ProfitTarget/myPoint) != MathRound(OrderTakeProfit()/myPoint)
||
MathRound(StopLoss/myPoint) != MathRound(OrderStopLoss()/myPoint)
)
)
{
//RefreshRates();
for(try=1;try<=5;try++)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StopLoss,Digits),NormalizeDouble(ProfitTarget,Digits),OrderExpiration()))
return(true);
//else{
// err=GetLastError();
// Print("OrderModify Error # " + err + " : ",ErrorDescription(err));
//}
}
}
return(false);
}
//+------------------------------------------------------------------+
//+----------------------OPEN TRADE----------------------------------+
int Open_Trade(string curr,int cmd,double price, double lot,double sl, double tp, string comm)
{
int ticket,retry;
color colour;
sl=NormalizeDouble(sl,Digits);
tp=NormalizeDouble(tp,Digits);
price=NormalizeDouble(price,Digits);
if(cmd==0) colour=Blue;
if(cmd==1) colour=Red;
if(Digits==3 || Digits==5)
{
for(retry=1;retry<=number_retry_open_trade;retry++)
{
RefreshRates();
ticket=OrderSend(curr,cmd,lot,price,slippage,0,0,comm,magic_number,0,colour);
if(ticket>0) break;
//else {
// err=GetLastError();
// Print("OrderSend Error # " + err + " : ",ErrorDescription(err));
//}
}
}
else
{
for(retry=1;retry<=number_retry_open_trade;retry++)
{
RefreshRates();
ticket=OrderSend(curr,cmd,lot,price,slippage,sl,tp,comm,magic_number,0,colour);
if(ticket>0) break;
//else {
// err=GetLastError();
// Print("OrderSend Error # " + err + " : ",ErrorDescription(err));
//}
}
}
if(ticket>0)
{
if(Digits==3 || Digits==5)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
for(retry=1;retry<=number_retry_open_trade;retry++)
{
if(ModifyProfitTarget(ticket, tp, sl))
break;
}
}
TradeBarTime=Time[0];
return(ticket);
}
}
/*
bool isNewCandle()
{
bool res=false;
if (myBars!=Bars)
{
myBars=Bars;
res=true;
}
return(res);
}
*/
string strtf(int tf)
{
switch(tf)
{
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN1");
default:return("Unknown timeframe");
}
}
//+------------------------------------------------------------------+
//+-----------------------------Draw Line----------------------------+
void DrawLine(string sName, double dPrice,color cLineClr=CLR_NONE)
{
int iWidth=1;
string sObjName = sName;
if(ObjectFind(sObjName) == -1){
// create object
ObjectCreate(sObjName,OBJ_HLINE, 0, 0,0);
}
ObjectSet(sObjName,OBJPROP_PRICE1,dPrice);
ObjectSet(sObjName, OBJPROP_COLOR, cLineClr);
ObjectSet(sObjName, OBJPROP_WIDTH, iWidth);
}
//+------------------------------------------------------------------+
//+---------------------------Get Line Price-------------------------+
double GetHLineValue(string name)
{
if (ObjectFind(name) == -1)
return(-1);
else
return(ObjectGet(name,OBJPROP_PRICE1));
}
void drawFixedLbl(string objname, string s, int Corner, int DX, int DY, int FSize, string Font, color c, bool bg)
{
if (ObjectFind(objname) < 0) {ObjectCreate(objname, OBJ_LABEL, 0, 0, 0);}
ObjectSet(objname, OBJPROP_CORNER, Corner);
ObjectSet(objname, OBJPROP_XDISTANCE, DX);
ObjectSet(objname, OBJPROP_YDISTANCE, DY);
ObjectSet(objname,OBJPROP_BACK, bg);
ObjectSetText(objname, s, FSize, Font, c);
}
/*
int signal_close()
{
double ma11,ma12;
double ma21,ma22;
double ma31,ma32;
ma11=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar);
ma12=iMA(Symbol(),0,fast_ma_period,fast_ma_shift,fast_ma_method,fast_ma_apply_price,bar+1);
ma21=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar);
ma22=iMA(Symbol(),0,medium_ma_period,medium_ma_shift,medium_ma_method,medium_ma_apply_price,bar+1);
ma31=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar);
ma32=iMA(Symbol(),0,slow_ma_period,slow_ma_shift,slow_ma_method,slow_ma_apply_price,bar+1);
double lastbid,lastask;
lastbid=GetHLineValue("last_bid_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
lastask=GetHLineValue("last_ask_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(enable_exit_fast_slow_cross)
{
if(ma11>ma31 && ma12<=ma32)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,113+ratio);
DrawLine("xlast_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma31 && ma12>=ma32)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,213+ratio);
DrawLine("xlast_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
}
if(ma11>ma21 && ma12<=ma22)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,112+ratio);
DrawLine("xlast_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
else if(ma11<ma21 && ma12>=ma22)
{
DrawLine("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,212+ratio);
DrawLine("xlast_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iTime(Symbol(),timeframe,bar));
DrawLine("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number,iClose(Symbol(),timeframe,bar)+ratio);
}
if(GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)>0)
{
int crosstype;
crosstype=GetHLineValue("xlast_cross_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricebuy=GetHLineValue("xcross_price_buy_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
double crosspricesell=GetHLineValue("xcross_price_sell_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)-ratio;
if(crosstype==112)// && GetHLineValue("xlast_cross_buy_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(11);
}
}
else if(crosstype==212)// && GetHLineValue("xlast_cross_sell_12_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(21);
}
}
if(enable_exit_fast_slow_cross)
{
if(crosstype==113)// && GetHLineValue("xlast_cross_buy_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((Bid-crosspricebuy)/myPoint>=range_gap_pips && (lastbid-crosspricebuy)/myPoint<=range_gap_pips)
{
return(12);
}
}
else if(crosstype==213)// && GetHLineValue("xlast_cross_sell_13_"+TradeCode+"_"+Symbol()+strtf(Period())+"_"+magic_number)!=iTime(Symbol(),timeframe,bar))
{
if((crosspricesell-Bid)/myPoint>=range_gap_pips && (crosspricesell-lastbid)/myPoint<=range_gap_pips)
{
return(22);
}
}
}
}
return(30);
}
*/
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
---