need help for Stochastic every Cross New comment Johnny 2018.03.08 12:10 hi all my new in programmingmake exprit tow Stochastic the first Stochastic with trendthe second Stochastic with price dispersion but i have problem open only one order sell or buy need fix problem every Cross Stochastic open order can anyone help me Thank //+------------------------------------------------------------------+ //| Sto pro.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //#property strict extern bool TrendTrade=true; extern string ATR="------ATR--------"; extern int KperiodATR=5; extern int DperiodATR=3; extern int slowingATR=3; extern int ATRPRATR=14; extern int ATRTMATR=0; extern double ATRLivelATR=0.0016; extern int StochBuyLineATR=20; extern int StochSellLineATR=80; extern int sall_bayATR=1; input int TakeprofitATR=0, StoplossATR=0; extern int TrailingStopATR=0; extern int TrailingProfitATR=0; extern int TrailingStepATR=0; extern int HalfLotsCloseBuyATR=0; extern int HalfLotsCloseSellATR=0; extern int MagicNumberATR=25555; extern string Stochastic="-----------Stochastic1-----------"; extern bool StochTrade=true; extern int Kperiod=5; extern int Dperiod=3; extern int slowing=3; extern int ATRPR=14; extern int ATRTM=0; extern double ATRLivel=0.0016; extern int StochBuyLine=20; extern int StochSellLine=80; extern bool ClaseSignal=false; extern int sall_bay=1; input int Takeprofit=0, Stoploss=0; input double Lots=0.1, RiskPercent=0; extern int TrailingStop=0; extern int TrailingProfit=0; extern int TrailingStep=0; extern int HalfLotsCloseBuy=0; extern int HalfLotsCloseSell=0; extern int MagicNumber=2533; double point; int Q,Lot_Decimal; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1; if(_Digits==5||_Digits==3)Q=10;else Q=1; if(_Digits<4)point=0.01;else point=0.0001; if(!IsExpertEnabled())Alert("Must Enable AutoTrading"); if(!IsTradeAllowed())Alert("Must Enable ALLOW LIVE TRADING"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { HideTestIndicators(TRUE); //---------- double ATRR=iATR(NULL,ATRTM,ATRPR,1); double St1 =iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,0,0,0,1); double St2 =iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,0,0,1,1); double St12 =iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,0,0,0,2); double St22 =iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,0,0,1,2); double ATRRATR=iATR(NULL,ATRTMATR,ATRPRATR,1); double St1ATR =iStochastic(Symbol(),0,KperiodATR,DperiodATR,slowingATR,0,0,0,1); double St2ATR =iStochastic(Symbol(),0,KperiodATR,DperiodATR,slowingATR,0,0,1,1); double St12ATR =iStochastic(Symbol(),0,KperiodATR,DperiodATR,slowingATR,0,0,0,2); double St22ATR =iStochastic(Symbol(),0,KperiodATR,DperiodATR,slowingATR,0,0,1,2); //----------------- if(StochTrade){ if(sall_bay>=1&&ATRR<=ATRLivel&&St1>St2&&St12<=St22&&St1<=StochBuyLine&&Orderscnt(OP_BUY)==0&&CountOrdersTime()==0&&(LastOrder("Type")==OP_SELL)){BuyOrder();} else if(sall_bay<1&&ATRR<=ATRLivel&&St1>St2&&St12<=St22&&St1<=StochBuyLine&&Orderscnt(OP_BUY)==0&&CountOrdersTime()==0){BuyOrder();} if(sall_bay>=1&&ATRR<=ATRLivel&&St1<St2&&St12>=St22&&St1>=StochSellLine&&Orderscnt(OP_SELL)==10&&CountOrdersTime()==0&&(LastOrder("Type")==OP_BUY||LastOrder("Type")==0)){SellOrder();}else if(sall_bay<1&&ATRR<=ATRLivel&&St1<St2&&St12>=St22&&St1>=StochSellLine&&Orderscnt(OP_SELL)==0&&CountOrdersTime()==0){SellOrder();}} //-----------------ATR----------- if(TrendTrade){ if(sall_bayATR>=1&&ATRRATR>=ATRLivelATR&&St1ATR>St2ATR&&St12ATR<=St22ATR&&St1ATR<=StochBuyLineATR&&OrderscntATR(OP_BUY)==0&&CountOrdersTimeATR()==0&&(LastOrderATR("Type")==OP_SELL)){BuyOrderATR();}else if(sall_bayATR<1&&ATRRATR>=ATRLivelATR&&St1ATR>St2ATR&&St12ATR<=St22ATR&&St1ATR<=StochBuyLineATR&&OrderscntATR(OP_BUY)==0&&CountOrdersTimeATR()==0){BuyOrderATR();} if(sall_bayATR>=1&&ATRRATR>=ATRLivelATR&&St1ATR<St2ATR&&St12ATR>=St22ATR&&St1ATR>=StochSellLineATR&&OrderscntATR(OP_SELL)==0&&CountOrdersTimeATR()==0&&(LastOrderATR("Type")==OP_BUY||LastOrderATR("Type")==0)){SellOrderATR();}else if(sall_bayATR<1&&ATRRATR>=ATRLivelATR&&St1ATR<St2ATR&&St12ATR>=St22ATR&&St1ATR>=StochSellLineATR&&OrderscntATR(OP_SELL)==0&&CountOrdersTimeATR()==0){SellOrderATR();}} //--------------------------------------- if(TrailingStop>0){MoveTrailingStop();} if(HalfLotsCloseBuy>0){CloseOrdersH(OP_BUY);} if(HalfLotsCloseSell>0){CloseOrdersH(OP_SELL);} //----------------------------------- if(TrailingStopATR>0){MoveTrailingStopATR();} if(HalfLotsCloseBuyATR>0){CloseOrdersHATR(OP_BUY);} if(HalfLotsCloseSellATR>0){CloseOrdersHATR(OP_SELL);} //--- } //----------------------------------------- int Orderscnt(int type=-1) { int cnt=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumber)) { if(OrderType()==type||type==-1) { cnt++; } } } } return(cnt); } //--------------- int OrderscntATR(int type=-1) { int cnt=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumberATR)) { if(OrderType()==type||type==-1) { cnt++; } } } } return(cnt); } //---------------- double LotManage() { double lot=MathFloor(AccountBalance()*RiskPercent/1000)/100; if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT); if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT); return(NormalizeDouble(lot,Lot_Decimal)); } //----------------- void BuyOrder() { double NewLots,TP,SL; if(RiskPercent>0)NewLots=NormalizeDouble(LotManage(),Lot_Decimal); else NewLots=Lots; if(Stoploss!=0){SL=Ask-Stoploss*point;}else SL=0; if(Takeprofit!=0){TP=Ask+Takeprofit*point;}else TP=0; bool tk=OrderSend(Symbol(),OP_BUY,NewLots,NormalizeDouble(Ask,Digits),5*Q,SL,TP,"Moh",MagicNumber,0,Blue); } //------------------------------ void SellOrder() { double NewLots,TP,SL; if(RiskPercent>0)NewLots=NormalizeDouble(LotManage(),Lot_Decimal); else NewLots=Lots; if(Stoploss!=0){SL=Bid+Stoploss*point;}else SL=0; if(Takeprofit!=0){TP=Bid-Takeprofit*point;}else TP=0; bool tk=OrderSend(Symbol(),OP_SELL,NewLots,NormalizeDouble(Bid,Digits),5*Q,SL,TP,"Moh",MagicNumber,0,Red); } //------------------ void BuyOrderATR() { double NewLots,TP,SL; if(RiskPercent>0)NewLots=NormalizeDouble(LotManage(),Lot_Decimal); else NewLots=Lots; if(Stoploss!=0){SL=Ask-StoplossATR*point;}else SL=0; if(Takeprofit!=0){TP=Ask+TakeprofitATR*point;}else TP=0; bool tk=OrderSend(Symbol(),OP_BUY,NewLots,NormalizeDouble(Ask,Digits),5*Q,SL,TP,"MohATR",MagicNumberATR,0,Blue); } //------------------------------ void SellOrderATR() { double NewLots,TP,SL; if(RiskPercent>0)NewLots=NormalizeDouble(LotManage(),Lot_Decimal); else NewLots=Lots; if(Stoploss!=0){SL=Bid+StoplossATR*point;}else SL=0; if(Takeprofit!=0){TP=Bid-TakeprofitATR*point;}else TP=0; bool tk=OrderSend(Symbol(),OP_SELL,NewLots,NormalizeDouble(Bid,Digits),5*Q,SL,TP,"MohATR",MagicNumberATR,0,Red); } //---------------- double LastOrder(string info,int type=-1) { for(int i=OrdersHistoryTotal()-1;i>=0;i--) { bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); string sy=OrderSymbol(), mm=OrderComment(); int mn=OrderMagicNumber(), ty=OrderType(); double lo=OrderLots(), op=OrderOpenPrice(), cp=OrderClosePrice(), pt=OrderProfit(), tp=OrderTakeProfit(), sl=OrderStopLoss(); datetime om=OrderOpenTime(), cm=OrderCloseTime(); if(sy==Symbol()&&(mn==MagicNumber)) { if(ty==type||type==-1) { if(info=="Lots")return(lo); else if(info=="OpenPrice")return(op); else if(info=="ClosePrice")return(cp); else if(info=="Profit")return(pt); else if(info=="Type")return(ty); else if(info=="TP")return(tp); else if(info=="SL")return(sl); } } } return(0); } //----------------- //---------------- double LastOrderATR(string info,int type=-1) { for(int i=OrdersHistoryTotal()-1;i>=0;i--) { bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); string sy=OrderSymbol(), mm=OrderComment(); int mn=OrderMagicNumber(), ty=OrderType(); double lo=OrderLots(), op=OrderOpenPrice(), cp=OrderClosePrice(), pt=OrderProfit(), tp=OrderTakeProfit(), sl=OrderStopLoss(); datetime om=OrderOpenTime(), cm=OrderCloseTime(); if(sy==Symbol()&&(mn==MagicNumberATR)) { if(ty==type||type==-1) { if(info=="Lots")return(lo); else if(info=="OpenPrice")return(op); else if(info=="ClosePrice")return(cp); else if(info=="Profit")return(pt); else if(info=="Type")return(ty); else if(info=="TP")return(tp); else if(info=="SL")return(sl); } } } return(0); } //-------------- void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumber)) { if(OrderType()==OP_BUY) { if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingProfit*point,Digits)) { if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*point,Digits))||(OrderStopLoss()==0)) { bool t= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,Digits),OrderTakeProfit(),0,Blue); } } } else { if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingProfit*point,Digits)) { if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*point,Digits)))||(OrderStopLoss()==0)) { bool tt=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,Digits),OrderTakeProfit(),0,Red); } } } } } } //--------- int CountOrdersTime() { int cnt=0; for(int i=0;i<OrdersHistoryTotal();i++) { bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) { if(OrderOpenTime()>=Time[0])cnt++; } } return(cnt); } //---------- void CloseOrdersH(int type=-1) { bool select,close; for(int ii=OrdersTotal()-1;ii>=0;ii--) { select=OrderSelect(ii,SELECT_BY_POS,MODE_TRADES); if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumber)&&(OrderLots()== Lots)) { if(OrderType()==type||type==-1) { if(OrderType()==OP_BUY&&(Bid>(OrderOpenPrice()+HalfLotsCloseBuy*point))){close=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Bid,Digits),5);} if(OrderType()==OP_SELL&&(Ask<(OrderOpenPrice()-HalfLotsCloseSell*point))){close=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Ask,Digits),5);} } } } } //------------------ void MoveTrailingStopATR() { int cnt,total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumberATR)) { if(OrderType()==OP_BUY) { if(TrailingStopATR>0&&NormalizeDouble(Ask-TrailingStepATR*point,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingProfitATR*point,Digits)) { if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStopATR*point,Digits))||(OrderStopLoss()==0)) { bool t= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStopATR*point,Digits),OrderTakeProfit(),0,Blue); } } } else { if(TrailingStopATR>0&&NormalizeDouble(Bid+TrailingStepATR*point,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingProfitATR*point,Digits)) { if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStopATR*point,Digits)))||(OrderStopLoss()==0)) { bool tt=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStopATR*point,Digits),OrderTakeProfit(),0,Red); } } } } } } //--------- //--------- int CountOrdersTimeATR() { int cnt=0; for(int i=0;i<OrdersHistoryTotal();i++) { bool select=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumberATR) { if(OrderOpenTime()>=Time[0])cnt++; } } return(cnt); } //---------- //---------- void CloseOrdersHATR(int type=-1) { bool select,close; for(int ii=OrdersTotal()-1;ii>=0;ii--) { select=OrderSelect(ii,SELECT_BY_POS,MODE_TRADES); if(OrdersTotal()>0&&OrderSymbol()==Symbol()&&(OrderMagicNumber()==MagicNumberATR)&&(OrderLots()== Lots)) { if(OrderType()==type||type==-1) { if(OrderType()==OP_BUY&&(Bid>(OrderOpenPrice()+HalfLotsCloseBuyATR*point))){close=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Bid,Digits),5);} if(OrderType()==OP_SELL&&(Ask<(OrderOpenPrice()-HalfLotsCloseSellATR*point))){close=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Ask,Digits),5);} } } } } //------------- double LastOrderCurrent(string info,int type=-1) { for(int i=OrdersTotal()-1;i>=0;i--) { bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); string sy=OrderSymbol(), mm=OrderComment(); int mn=OrderMagicNumber(), ty=OrderType(); double lo=OrderLots(), op=OrderOpenPrice(), pt=OrderProfit(), tp=OrderTakeProfit(), sl=OrderStopLoss(); datetime om=OrderOpenTime(); if(sy==Symbol()&&mn==MagicNumber) { if(ty==type||type==-1) { if(info=="Lots")return(lo); else if(info=="OpenPrice")return(op); else if(info=="Profit")return(pt); else if(info=="Type")return(ty); else if(info=="TP")return(tp); else if(info=="SL")return(sl); // else if(info=="OpenTime")return(om); // else if(info=="Comment")return(mm); } } } return(0); } //--------------- //--------------- need help for Stochastic every Cross Looking for MTF stochastic signal Coding help New comment
hi all
my new in programming
make exprit tow Stochastic the first Stochastic with trend
the second Stochastic with price dispersion
but i have problem open only one order sell or buy need fix problem every Cross Stochastic open order
can anyone help me Thank