//+------------------------------------------------------------------+ //| Doji Arrows //| //+------------------------------------------------------------------+ #property copyright "" #property link "" #property indicator_buffers 4 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Blue #property indicator_color4 Red extern double TakeProfit = 25; extern double Lots=1; extern double TrailingStop = 10; extern double InitialStop = 20; extern int slip = 0;//exits only extern double lp = 300; extern double sp = 30; datetime BarTime; //---- input parameters //extern int RISK=3; extern double thresholdB=0.0001; extern double thresholdS=-0.0001; extern int SSP=9; extern int CountBars=2000; //---- buffers double val1[]; double val2[]; double val3[]; double val4[]; double red0,red1,red2; double blue0,blue1,blue2; double cci0,cci1,rsi0,dpo0,dpo1; double plusdi,minusdi,main; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line IndicatorBuffers(4); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,234); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,233); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2,253); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,253); SetIndexBuffer(0,val1); SetIndexBuffer(1,val2); SetIndexBuffer(2,val3); SetIndexBuffer(3,val4); //---- return(0); } //+------------------------------------------------------------------+ //| Doji Arrows | //+------------------------------------------------------------------+ int start() { if(BarTime == Time[0]) {return(0);} //new bar, update bartime BarTime = Time[0]; SetIndexDrawBegin(0,Bars-CountBars+SSP+1); SetIndexDrawBegin(1,Bars-CountBars+SSP+1); int i,counted_bars=IndicatorCounted(); int K; bool uptrend,downtrend,ExitBuy,ExitSell,old,old2,old3,old4; //---- if(Bars<=SSP+1) return(0); //---- initial zero if(counted_bars=0) { //dpo1=iCustom(NULL,0,"DPO",7,800,0,i+1); val1[i]=0.0; val2[i]=0.0; val3[i]=0.0; val4[i]=0.0; //////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// //buy signal if ((Close[i+2] == Open[i+2]) && (Close[i+1]>High[i+2]) /*&& (iCCI(NULL,0,14,PRICE_CLOSE,i)>100)*/) uptrend=true; //else uptrend=false; if ((!(Close[i+2] == Open[i+2])) && (!(Close[i+1]>High[i+2]))) uptrend=false; if ((! uptrend==old) && (uptrend==true)) { //PlaySound("alert.wav"); val2[i]=Low[i]-5*Point; //Alert(TimeMonth(CurTime()),"/",TimeDay(CurTime())," at ",TimeHour(CurTime()),":",TimeMinute(CurTime())," - Possible buy on ",Symbol()," ", Period()); } ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// //sell signal if ((Close[i+2] == Open[i+2]) && (Close[i+1]0) { OrderSelect(0, SELECT_BY_POS, MODE_TRADES); if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) && (OrderSymbol()==Symbol())) { if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+Point*TrailingStop)) { OrderModify(OrderTicket(),OrderOpenPrice (),Ask+Point*TrailingStop,OrderTakeProfit(),0,Aqua); return(0); } } } } } } } return(0); //+------------------------------------------------------------------+