//+------------------------------------------------------------------+ //| ADX_System.mq4 | //| System | //| work_a@ukr.net | //+------------------------------------------------------------------+ #property copyright "System" #property link "work_a@ukr.net" extern double TakeProfit = 100; extern double Lots =1; extern double TrailingStop = 0; extern double StopLoss = 30; int start() { double ADXP,ADXC,ADXDIPP; double ADXDIPC,ADXDIMP,ADXDIMC; int cnt, ticket, total; if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } ADXP=iADX(NULL,0,14,PRICE_CLOSE,MODE_MAIN,2); ADXC=iADX(NULL,0,14,PRICE_CLOSE,MODE_MAIN,1); ADXDIPP=iADX(NULL,0,14,PRICE_CLOSE,MODE_PLUSDI,2); ADXDIPC=iADX(NULL,0,14,PRICE_CLOSE,MODE_PLUSDI,1); ADXDIMP=iADX(NULL,0,14,PRICE_CLOSE,MODE_MINUSDI,2); ADXDIMC=iADX(NULL,0,14,PRICE_CLOSE,MODE_MINUSDI,1); total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if((ADXPADXC)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"adx sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // check for short position (SELL) possibility if((ADXPADXC)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"adx sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } for(cnt=0;cntADXC && ADXDIPP>ADXP && ADXDIPC0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()ADXC && ADXDIMP>ADXP && ADXDIMC0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); }