//+------------------------------------------------------------------+ //| Candle_NoTrade.mq4 | //| Vixen Girl | //| vixenme@gmail.com | //+------------------------------------------------------------------+ #property copyright "Vixen Girl" #property link "vixenme@gmail.com" extern string workPeriod ="D1"; extern int SLlevel = 38; extern int MagicNo = 222222222; extern double TakeProfit = 180.0; extern double Lots = 0.1; extern double TrailingStop = 38.0; extern string OrdComment = "BarByBar ^_+"; extern color OpenBuy_Sig_Color = DarkGoldenrod; extern color CloseBuy_Sig_Color = Black; extern color OpenSell_Sig_Color = Crimson; extern color CloseSell_Sig_Color = Black; extern color Modified_Sig_Color = DarkViolet; extern bool Enable_Sound = true; extern string Sound_OrderOpen_FileName = "feelgood.wav"; extern string Sound_OrderClose_FileName = "jaildoorclose.wav"; extern string Sound_OrderModify_FileName = "kiss.wav"; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNo) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //---------------------------------------------------------------- int Txt2Period(string text) { if (text=="M1" || text=="m1")int Prd =1 ; else if (text=="M5" || text=="m5") Prd =5 ; else if (text=="M15" || text=="m15") Prd =15 ; else if (text=="M30" || text=="m30") Prd =30 ; else if (text=="H1" || text=="h1") Prd =60 ; else if (text=="H4" || text=="h4") Prd =240 ; else if (text=="D1" || text=="d1") Prd =1440 ; else if (text=="W1" || text=="w1") Prd =10080 ; else if (text=="MN" || text=="mn") Prd =43200 ; else /*text==**/ Prd = 0; return(Prd); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //---- Defind up-down PART int wrkPeriod =Txt2Period(workPeriod); double high = iHigh(NULL,wrkPeriod,0); double low = iLow(NULL,wrkPeriod,0); double close = iClose(NULL,wrkPeriod,0); double open = iOpen(NULL,wrkPeriod,0); ////////////////////////////////////////////////////////////////// // // // YOUR OPEN BUY-SELL CONDITION COULD BE HERE // // // ////////////////////////////////////////////////////////////////// //---- Start Trade int cnt, ticket, total; int spread = MathRound((Ask-Bid)/Point); bool openenable = true; for(cnt=0;cnt<HistoryTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY); if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNo) { int lastclosetime = OrderCloseTime(); if(lastclosetime>iTime(Symbol(),wrkPeriod,0)) openenable = false; else openenable = true; } } //+------------------------------------------------------------------+ //| Don't Trade If Bars<50 & TakeProfit<5 & No Avilable Margin Left | //+------------------------------------------------------------------+ if(Bars<50)Comment("bars less than ",50); else if(TakeProfit<5)Comment("TakeProfit less than ",5); else if(AccountFreeMargin()<(1000*Lots)) { Comment("You have no money. Free Margin = ", AccountFreeMargin()); Print("No money left. Free Margin = ", AccountFreeMargin()); } //+------------------------------------------------------------------+ else { //---- Start Trading //+--------//Check for opened order in the same symbol//-------------+ if(CalculateCurrentOrders(Symbol())==0) { if(openenable) { if(YOUR BUY CONDITION) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,spread,Ask-SLlevel*Point,Ask+TakeProfit*Point,OrdComment+":"+wrkPeriodTxt,MagicNo,0,OpenBuy_Sig_Color); } if(YOUR SELL CONDITION) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,spread,Bid+SLlevel*Point,Bid-TakeProfit*Point,OrdComment+":"+wrkPeriodTxt,MagicNo,0,OpenSell_Sig_Color); } } else ticket=-1; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { if (Enable_Sound) PlaySound(Sound_OrderOpen_FileName); Comment("\nAlert : ", TimeToStr(LocalTime(),TIME_MINUTES),"O\'clock", "\nOrder Opened : ",OrderOpenPrice()); Print("Order opened : ",OrderOpenPrice()); return(0); }//end OrderSelect return(0); }//end ticket>0 return(0); }//end of CalculateCurrentOrders() //+----------------------------------------------------------------+ }//end else (trading) //+--------//Check for closing and modifying condition//-----------+ total = OrdersTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNo) { if(OrderType()==OP_BUY) // long position is opening { // should it be closed? if(YOUR CLOSE BUY CONDITION) { OrderClose(OrderTicket(),OrderLots(),Bid,spread,CloseBuy_Sig_Color); // close position if (Enable_Sound) PlaySound(Sound_OrderClose_FileName); Comment("\nLong Order Closed : ",OrderComment(), "\nAt : ",OrderClosePrice(), "\nProfit : ",OrderProfit(), "\nTime : ", TimeToStr(LocalTime(),TIME_MINUTES)); return(0); // exit }//end closebuy || closebrkbuy // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Modified_Sig_Color); if (Enable_Sound) PlaySound(Sound_OrderModify_FileName); Comment("\nOrder Modify Alert : ",TimeToStr(LocalTime(),TIME_MINUTES), "\nNew Stop Loss : ",OrderStopLoss(), "\nNew Target Profit : ",OrderTakeProfit()); return(0); }//end OrderStopLoss()<Bid-Point*TrailingStop }//end Bid-OrderOpenPrice()>Point*TrailingStop }//end TrailingStop>0 }//end OrderType()==OP_BUY else // go to short position { // should it be closed? if(YOUR CLOSE SELL CONDITION) { // should it be closed? OrderClose(OrderTicket(),OrderLots(),Ask,spread,CloseSell_Sig_Color); // close position if (Enable_Sound) PlaySound(Sound_OrderClose_FileName); Comment("\nShort Order Closed : ",OrderComment(), "\nAt : ",OrderClosePrice(), "\nProfit : ",OrderProfit(), "\nTime : ", TimeToStr(LocalTime(),TIME_MINUTES)); return(0); // exit }//end closesell || closebrksell // check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Modified_Sig_Color); if (Enable_Sound) PlaySound(Sound_OrderModify_FileName); Comment("\nOrder Modify Alert : ",TimeToStr(LocalTime(),TIME_MINUTES), "\nNew Stop Loss : ",OrderStopLoss(), "\nNew Target Profit : ",OrderTakeProfit()); return(0); }//end OrderStopLoss() }//end OrderOpenPrice()-Ask >(Point*TrailingStop) }//end TrailingStop>0 }//end else }//end OrderType()<=OP_SELL && OrderSymbol()==Symbol() }//end for //+----------------------------------------------------------------END //+------------------------------------------------------------------+ return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts