ScreenComments(); HasBuyLimitOrder = false; HasSellLimitOrder = false; HasBuyOrder = false; HasSellOrder = false; if (useATR_SL==true) { if (stoploss<=1*Percentage_ATR_SL*iATR(NULL,15,14,0)) stoploss= 1*Percentage_ATR_SL*iATR(NULL,15,14,0); // Print("stoploss is "+DoubleToStr(stoploss,4)); } OpenLimitOrder(); if (BuyLimitOrderEntered==true) { BL_openprice = NormalizeDouble(BuyLiMitOpenprice, Digits); HasBuyLimitOrder = true; } if (SellLimitOrderEntered==true) { SL_openprice = NormalizeDouble(SellLiMitOpenprice, Digits); HasSellLimitOrder = true; } MA = iMA(NULL, 0, MA_period, 0, MODE_LWMA, PRICE_TYPICAL, 0); //SMA on close price of current bar on current time frame. Modify_order(); for (int k = OrdersTotal(); k >= 0; k--) { if (OrderSelect(k, SELECT_BY_POS) == true && OrderSymbol() == Symbol()&& (OrderMagicNumber() == MagicBase)) { if (OrderType() == OP_BUY) { HasBuyOrder = true; Close_B(OrderTicket(), OrderLots()); } if (OrderType() == OP_SELL) { HasSellOrder = true; Close_S(OrderTicket(), OrderLots()); } } } if( TradeperBar==true) { if (Avoid_News==true) { if (GetNews()!=true&&New_Bar==1&&AccountEquity()>accoutlimit) OpenMarketOrder();} if (Avoid_News==false) { if (New_Bar==1&&AccountEquity()>accoutlimit) OpenMarketOrder();} } else { if (Avoid_News==true) { if (GetNews()!=true&&AccountEquity()>accoutlimit) OpenMarketOrder();} if (Avoid_News==false) { if (AccountEquity()>accoutlimit) OpenMarketOrder();} } return; } // end of start int CloseOrder(int ticket,double numLots, double price) { int CloseCnt, err; CloseCnt = 0; while (CloseCnt < 3)// try to close 3 Times { if (!OrderClose(ticket,numLots,price,3,Yellow)) { err=GetLastError(); Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err)); if (err > 0) CloseCnt++; } else { CloseCnt = 3; } } } void Close_B(int ticket, double lot) { bool closecondition=false; if (UseTimeCut==true) closecondition=NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= TakeProfit||NormalizeDouble(OrderOpenPrice()-Bid, Digits)>stoplossReal||TimeCurrent() - OrderOpenTime() > 60 * LimitTime_1; else closecondition=NormalizeDouble(Bid - OrderOpenPrice(), Digits) >= TakeProfit||NormalizeDouble(OrderOpenPrice()-Bid, Digits)>stoplossReal; if (closecondition==true) { CloseOrder(ticket, lot, Bid); //OrderClose(ticket, lot, Bid, 1, Yellow); HasBuyOrder = false; } } void Close_S(int ticket, double lot) { bool closecondition=false; if (UseTimeCut==true) closecondition=NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= TakeProfit||NormalizeDouble(Ask-OrderOpenPrice(), Digits)>stoplossReal||TimeCurrent() - OrderOpenTime() > 60 * LimitTime_1; else closecondition=NormalizeDouble(OrderOpenPrice() - Ask, Digits) >= TakeProfit||NormalizeDouble(Ask-OrderOpenPrice(), Digits)>stoplossReal; if (closecondition==true) { CloseOrder(ticket, lot, Ask); //OrderClose(ticket, lot, Ask, 1, Yellow); HasSellOrder = false; } } void Modify_order() { double AveragePrice = 0; if (HasBuyLimitOrder == true) { AveragePrice = MA - MAMinDist; if (MathAbs(BL_openprice - AveragePrice) > Point / 2.0) BuyLiMitOpenprice=AveragePrice; BL_openprice=BuyLiMitOpenprice; // OrderModify(BL_ticket, AveragePrice, AveragePrice - stoploss, AveragePrice + LimitEntryDistance, 0, DeepSkyBlue); } if (HasSellLimitOrder == true) { AveragePrice = MA + Spread + MAMinDist; if (MathAbs(SL_openprice - AveragePrice) > Point / 2.0) SellLiMitOpenprice=AveragePrice; SL_openprice=SellLiMitOpenprice; // OrderModify(SL_ticket, AveragePrice, AveragePrice + stoploss, AveragePrice - LimitEntryDistance, 0, Pink); } } void OpenLimitOrder() { double AveragePrice = 0; double SL = 0; double MA_dis_pips = 0; if (HasBuyOrder == false && HasBuyLimitOrder == false) { AveragePrice = MA - Spread - MAMinDist; SL = AveragePrice - stoploss; MA_dis_pips = AveragePrice + LimitEntryDistance; if (AveragePrice > Ask - MA_dis_pips) AveragePrice = Ask - MA_dis_pips; AveragePrice = NormalizeDouble(AveragePrice, Digits); BuyLimitOrderEntered=true; BuyLiMitOpenprice=AveragePrice; //OrderSend(Symbol(), OP_BUYLIMIT, Lots(), AveragePrice, Slippage, SL, MA_dis_pips, "ISEA_Buy", MagicBase, 0, Blue); HasBuyLimitOrder = true; } if (HasSellOrder == false && HasSellLimitOrder == false) { AveragePrice = MA + Spread + MAMinDist; SL = AveragePrice + stoploss; MA_dis_pips = AveragePrice - LimitEntryDistance; if (AveragePrice < Bid + MA_dis_pips) AveragePrice = Bid + MA_dis_pips; AveragePrice = NormalizeDouble(AveragePrice, Digits); SellLimitOrderEntered=true; SellLiMitOpenprice=AveragePrice; //OrderSend(Symbol(), OP_SELLLIMIT, Lots(), AveragePrice, Slippage, SL, MA_dis_pips, "ISEA_Sell", MagicBase, 0, Red); HasSellLimitOrder = true; } } void OpenBuyOrder() { int err,ticket; int cnt=0; // while (OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slippage,Ask-stoploss,Ask+TakeProfitFaked,"",MagicBase,0,Green)==FALSE&&cnt(SellLiMitOpenprice+brokerworsefill)&&HasSellOrder==false) { OpenSellOrder(); SellLimitOrderEntered=false; SL_openprice=0.0; SellLiMitOpenprice=0.0; } }