/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ //============================================================================= // ADX_System.mq4 // work_a@ukr.net // // 24 Nov 06: Modified by Derk Wehler // Formatted code to make readable //============================================================================= #property copyright "System" #property link "work_a@ukr.net" extern double TakeProfit = 100; extern double TrailingStop = 35; extern double StopLoss = 45; int start() { double ADXP,ADXC,ADXDIPP; double ADXDIPC,ADXDIMP,ADXDIMC; double Lots; int cnt, ticket, total; int li; if (Bars < 100) { Print("bars less than 100"); return(0); } if (TakeProfit < 10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } li = 60; Lots = 0.1; if (AccountBalance() > 700) Lots = 0.2; if (AccountBalance() > 3000) Lots = 1; if (AccountBalance() > 6000) Lots = 1; if (AccountBalance() > 9000) Lots = 1; if (AccountBalance() > 10000) Lots = 1; if (AccountBalance() > 100000) Lots = 10; ADXP = iADX(NULL, li, 14, PRICE_CLOSE, MODE_MAIN, 2); ADXC = iADX(NULL, li, 14, PRICE_CLOSE, MODE_MAIN, 1); ADXDIPP = iADX(NULL, li, 14, PRICE_CLOSE, MODE_PLUSDI, 2); ADXDIPC = iADX(NULL, li, 14, PRICE_CLOSE, MODE_PLUSDI, 1); ADXDIMP = iADX(NULL, li, 14, PRICE_CLOSE, MODE_MINUSDI, 2); ADXDIMC = iADX(NULL, li, 14, PRICE_CLOSE, MODE_MINUSDI, 1); // 24Nov06 - Derk: Commented out because this prevents the EA from taking BUYs // if (MathAbs(ADXDIPC - ADXC) < 10) // return(0); 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 // TRANSLATION: // If main ADX is heading up, and the plusdi line has // just crossed the main line, heading upward 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 // TRANSLATION: // If main ADX is heading up, and the minusdi line has // just crossed the main line, heading upward 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 && OrderSymbol() == Symbol()) // // check for opened position & 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: