//| Copyright © 2006, Alejandro Galindo | //| http://elCactus.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Alejandro Galindo" #property link "http://elCactus.com" extern int MaxTrades = 4; extern int Pips = 5; extern double TakeProfit = 40; extern double TrailingStop = 20; extern double InitialStop = 110; extern string Note1 = "Valid TimeFrames: 1, 5, 15, 30, 60, 240, 1440, 10080, 43200"; extern int MACDTimeFrame = 0; int SecureProfit = 10; int AccountProtection = 1; int OrdersToProtect = 3; int ReverseCondition = 0; extern double FirstOrderLots=0.1; int OrdersOpened = 0; int cnt = 0; double lots = 0.1; int slippage = 5; double stoploss = 0; double takeprofit = 0; double bprice = 0; double sprice = 0; double lotsi = 0; int type = 0; int state = 0; bool EnableTrading = true; double openprice = 0; int PreviousOrders = 0; double Profit = 0; int LastTicket = 0; int LastType = 0; double LastClosePrice = 0; double LastLots = 0; double PipValue = 0; string text2 = ""; string text = ""; double lotstmp; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ int start() { lotsi = FirstOrderLots; if (lotsi > 100.0) lotsi = 100; if (lotsi<0.01) lotsi=0.1; OrdersOpened = 0; for (cnt = 0; cnt < OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol()) OrdersOpened++; } PipValue=MarketInfo(Symbol(),MODE_TICKVALUE); if (PipValue == 0.0) PipValue = 5; if (PreviousOrders > OrdersOpened) { for (cnt = OrdersTotal(); cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); type = OrderType(); if (OrderSymbol() == Symbol()) { if (type == OP_BUY) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); if (type == OP_SELL) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red); //return(0); } } } PreviousOrders = OrdersOpened; if (OrdersOpened >= MaxTrades) EnableTrading = false; else EnableTrading = true; if (openprice == 0.0) { for (cnt = 0; cnt < OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); type = OrderType(); if (OrderSymbol() == Symbol()) { openprice = OrderOpenPrice(); if (type == OP_BUY) state = 2; if (type == OP_SELL) state = 1; } } } if (OrdersOpened < 1) { state = 3; if (iMACD(NULL,MACDTimeFrame,14,26,9,PRICE_CLOSE,MODE_MAIN,0) > iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,1)) state = 2; if (iMACD(NULL,MACDTimeFrame,14,26,9,PRICE_CLOSE,MODE_MAIN,0) < iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,1)) state = 1; if (ReverseCondition == 1) { if (state == 1) { state = 2; } else { if (state == 2) { state = 1; } } } } for (cnt = OrdersTotal(); cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderType() == OP_SELL) { if (TrailingStop > 0.0) { if (OrderOpenPrice() - Ask >= (TrailingStop + Pips) * Point) { if (OrderStopLoss() > Ask + Point * TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask + Point * TrailingStop,OrderClosePrice() - TakeProfit * Point - TrailingStop * Point,800,Purple); return(0); } } } } if (OrderType() == OP_BUY) { if (TrailingStop > 0.0) { if (Bid - OrderOpenPrice() >= (TrailingStop + Pips) * Point) { if (OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid - Point * TrailingStop,OrderClosePrice() + TakeProfit * Point + TrailingStop * Point,800,Yellow); return(0); } } } } } } Profit = 0; LastTicket = 0; LastType = 0; LastClosePrice = 0; LastLots = 0; for (cnt = 0; cnt < OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol()) { LastTicket = OrderTicket(); if (OrderType() == OP_BUY) LastType = 0; if (OrderType() == OP_SELL) LastType = 1; LastClosePrice = OrderClosePrice(); LastLots = OrderLots(); if (LastType == 0) { if (OrderClosePrice() < OrderOpenPrice()) Profit -= (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point; if (OrderClosePrice() > OrderOpenPrice()) Profit += (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point; } if (LastType == 1) { if (OrderClosePrice() > OrderOpenPrice()) Profit -= (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point; if (OrderClosePrice() < OrderOpenPrice()) Profit += (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point; } } } Profit = Profit * PipValue; text = "Profit: $" + DoubleToStr(Profit,2) + " +/-"; if ((OrdersOpened >= MaxTrades - OrdersToProtect) && (AccountProtection == 1)) { if (Profit >= SecureProfit) { OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow); EnableTrading = false; return(0); } } if (!IsTesting()) { if (state == 3) text2 = "No conditions to open trades"; else text2 = " "; } if ((state == 1) && EnableTrading) { if ((Bid - openprice >= Pips * Point) || (OrdersOpened < 1)) { sprice = Bid; openprice = 0; if (TakeProfit == 0.0) takeprofit = 0; else takeprofit = sprice - TakeProfit * Point; if (InitialStop == 0.0) stoploss = 0; else stoploss = sprice + InitialStop * Point; if (OrdersOpened != 0) { lots = lotsi; for (cnt = 1; cnt <= OrdersOpened; cnt++) { if (MaxTrades>12) { lots=NormalizeDouble(lots*1.5,2); } else { lots=NormalizeDouble(lots*2,2); } } } else { lots = lotsi; } if (lots > 100.0) lots = 100; OrderSend(Symbol(),OP_SELL,lots,sprice,slippage,stoploss,takeprofit,0,0,0,Red); return(0); } } if ((state == 2) && EnableTrading) { if ((openprice - Ask >= Pips * Point) || (OrdersOpened < 1)) { bprice = Ask; openprice = 0; if (TakeProfit == 0.0) takeprofit = 0; else takeprofit = bprice + TakeProfit * Point; if (InitialStop == 0.0) stoploss = 0; else stoploss = bprice - InitialStop * Point; if (OrdersOpened != 0) { lots = lotsi; for (cnt = 1; cnt <= OrdersOpened; cnt++) { if (MaxTrades>12) { lots=NormalizeDouble(lots*1.5,2); } else { lots=NormalizeDouble(lots*2,2); } } } else { lots = lotsi; } if (lots > 100.0) lots = 100; OrderSend(Symbol(),OP_BUY,lots,bprice,slippage,stoploss,takeprofit,0,0,0,Blue); return(0); } } return(0); }