/*[[ Name := TDSGlobal Author := Copyright © 2005 Bob O'Brien / Barcode Link := Notes := Based on Alexander Elder's Triple Screen system. To be run only on a Weekly chart. Lots := 1 Stop Loss := 0 Take Profit := 100 Trailing Stop := 60 ]]*/ //+------------------------------------------------------------------+ //| External Variables | //+------------------------------------------------------------------+ extern double Lots = 1.0; extern double TakeProfit = 100; extern double Stoploss = 0; extern double TrailingStop = 60; extern double Slippage=5; // Slippage extern double StopYear=2005; extern double MM=0,Leverage=1,AcctSize=10000; int BuyEntryOrderTicket=0,SellEntryOrderTicket=0; double MacdCurrent=0, MacdPrevious=0, MacdPrevious2=0 ,Direction=0; string PosNeg="",GlobalName=""; double newbar=0,PrevDay=0,PrevMonth=0,PrevYear=0,PrevCurtime=0; double PriceOpen=0; // Price Open double I=0; // Misc Counter double NewBar=0; bool First=True; double LotMM=0,LotSize=10000,LotMax=50; double TradesThisSymbol=0; double ForcePos=0, ForceNeg=0, NewPrice=0; double StartMinute1=0,EndMinute1=0,StartMinute2=0,EndMinute2=0,StartMinute3=0,EndMinute3=0; double StartMinute4=0,EndMinute4=0,StartMinute5=0,EndMinute5=0,StartMinute6=0,EndMinute6=0; double StartMinute7=0,EndMinute7=0,DummyField=0; int start() { if (newbar != Time[0]) { newbar = Time[0]; MacdCurrent = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,1); MacdPrevious2 = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,2); if (MacdPrevious > MacdPrevious2) Direction = 1; if (MacdPrevious < MacdPrevious2) Direction = -1; if (MacdPrevious == MacdPrevious2) Direction = 0; Comment("Weekly MACD Direction is ",Direction, "\n","MacdPrevious = ",MacdPrevious," MacdPrevious2 = ",MacdPrevious2); int total,cnt; total=OrdersTotal(); for(cnt=0;cnt= StartMinute1 && Minute() <= EndMinute1) || (Minute() >= StartMinute2 && Minute() <= EndMinute2) || (Minute() >= StartMinute3 && Minute() <= EndMinute3) || (Minute() >= StartMinute4 && Minute() <= EndMinute4) || (Minute() >= StartMinute5 && Minute() <= EndMinute5) || (Minute() >= StartMinute6 && Minute() <= EndMinute6) || (Minute() >= StartMinute7 && Minute() <= EndMinute7) ) { DummyField = 0; // dummy statement because MT will not allow me to use a continue statement } else return(0); if(TradesThisSymbol < 1) { ForcePos = iForce(NULL,1440,2,MODE_EMA,PRICE_CLOSE,1) > 0; ForceNeg = iForce(NULL,1440,2,MODE_EMA,PRICE_CLOSE,1) < 0; if(Direction == 1 && ForceNeg) { PriceOpen = High[1] + 1 * Point; // Buy 1 point above high of previous candle if(PriceOpen > (Ask + 16 * Point)) // Check if buy price is a least 16 points > Ask { BuyEntryOrderTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,PriceOpen,Slippage,Low[1] - 1 * Point,PriceOpen + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green); return(0); } else { NewPrice = Ask + 16 * Point; BuyEntryOrderTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,NewPrice,Slippage,Low[1] - 1 * Point,NewPrice + TakeProfit * Point,"Buy Entry Order placed at "+CurTime(),0,0,Green); return(0); } } if(Direction == -1 && ForcePos) { PriceOpen = Low[1] - 1 * Point; if(PriceOpen < (Bid - 16 * Point)) // Check if buy price is a least 16 points < Bid { SellEntryOrderTicket=OrderSend(Symbol(),OP_SELLSTOP,Lots,PriceOpen,Slippage,High[1] + 1 * Point,PriceOpen - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green); return(0); } else { NewPrice = Bid - 16 * Point; SellEntryOrderTicket=OrderSend(Symbol(),OP_SELLSTOP,Lots,NewPrice,Slippage,High[1] + 1 * Point,NewPrice - TakeProfit * Point,"Sell Entry Order placed at "+CurTime(),0,0,Green); return(0); } } } ///////////////////////////////////////////////// // Pending Order Management ///////////////////////////////////////////////// if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) { OrderDelete(OrderTicket()); } } // Close of symbol check } if(TradesThisSymbol > 0) { total=OrdersTotal(); for(cnt=0;cnt (Ask + 16 * Point)) { OrderModify(OrderTicket(),High[1] + 1 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } else { OrderModify(OrderTicket(),Ask + 16 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } } } if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP) { if(Low[1] > Low[2]) { if(Low[1] < (Bid - 16 * Point)) { OrderModify(OrderTicket(),Low[1] - 1 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } else { OrderModify(OrderTicket(),Bid - 16 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } } } } ///////////////////////////////////////////////// // Stop Loss Management ///////////////////////////////////////////////// if(TradesThisSymbol > 0) { total=OrdersTotal(); for(cnt=0;cnt (TrailingStop * Point)) { if(OrderStopLoss() < (Ask - TrailingStop * Point)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask - TrailingStop * Point,Ask + TakeProfit * Point,0,Cyan); return(0); } } } if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) { if(OrderOpenPrice() - Bid > (TrailingStop * Point)) { if(OrderStopLoss() > (Bid + TrailingStop * Point)) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid + TrailingStop * Point,Bid - TakeProfit * Point,0,Cyan); return(0); } } } } } } Comment("Weekly MACD Direction is ",Direction, "\n","MacdPrevious = ",MacdPrevious," MacdPrevious2 = ",MacdPrevious2); return(0); }