//+------------------------------------------------------------------+ //| 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((ADXP < ADXC) && (ADXDIPP < ADXP) && (ADXDIPC > ADXC)) { 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((ADXP < ADXC) && (ADXDIMP < ADXP) && (ADXDIMC > ADXC)) { 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; cnt < total; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType() == OP_BUY) // long position is opened { if(ADXP > ADXC && ADXDIPP > ADXP && ADXDIPC < ADXC) { OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // close position return(0); // exit } if(TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point*TrailingStop) { if(OrderStopLoss() < Bid - Point*TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point*TrailingStop, OrderTakeProfit(), 0, Green); return(0); } } } } else { if(ADXP > ADXC && ADXDIMP > ADXP && ADXDIMC < ADXC) { OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // close position return(0); // exit } if(TrailingStop > 0) { 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); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Movement directional index
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features: