/*[[ 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 int Lots = 1; extern int TakeProfit = 100; extern int Stoploss = 0; extern int TrailingStop = 60; extern int Slippage=5; // Slippage extern int StopYear=2005; extern int MM=0,Leverage=1,AcctSize=10000; int BuyEntryOrderTicket=0,SellEntryOrderTicket=0,cnt=0,total=0; double MacdCurrent=0, MacdPrevious=0, MacdPrevious2=0 ,Direction=0; double newbar=0,PrevDay=0,PrevMonth=0,PrevYear=0,PrevCurtime=0; double PriceOpen=0; // Price Open bool First=True; double TradesThisSymbol=0; double ForcePos=0, ForceNeg=0, Force=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() { Comment("TSD for MT4 ver beta 0.1 - DO NOT USE WITH REAL MONEY YET", "\n", "\n","Weekly MacdPrevious = ",MacdPrevious, "\n","Weekly MacdPrevious2 = ",MacdPrevious2, "\n","Weekly Direction = ",Direction, "\n", "\n","Daily Force = ",Force, "\n","Is Daily Force Bullish = ",ForcePos, "\n","Is Daily Force Bearish = ",ForceNeg, "\n", "\n","Total Orders = ",total, "\n","Trades this Symbol(",Symbol(),") = ",TradesThisSymbol, "\n", "\n","New Bar Time is ",TimeToStr(newbar), "\n", "\n","Daily PriceOpen = ",PriceOpen, "\n","Daily NewPrice = ",NewPrice, "\n", "\n","Daily High[1] = ",High[1], "\n","Daily High[2] = ",High[2], "\n","Daily Low[1] = ",Low[1], "\n","Daily Low[2] = ",Low[2], "\n", "\n","Current Ask Price + 16 pips = ",Ask+(16*Point), "\n","Current Bid Price - 16 pips = ",Bid-(16*Point)); MacdPrevious = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,1); MacdPrevious2 = iMACD(NULL,10080,12,26,9,PRICE_CLOSE,MODE_MAIN,2); Force = iForce(NULL,1440,2,MODE_EMA,PRICE_CLOSE,1); ForcePos = iForce(NULL,1440,2,MODE_EMA,PRICE_CLOSE,1) > 0; ForceNeg = iForce(NULL,1440,2,MODE_EMA,PRICE_CLOSE,1) < 0; if (MacdPrevious > MacdPrevious2) Direction = 1; if (MacdPrevious < MacdPrevious2) Direction = -1; if (MacdPrevious == MacdPrevious2) Direction = 0; 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 } // close for LARGE if statement else return(0); ///////////////////////////////////////////////// // Process the next bar details ///////////////////////////////////////////////// if (newbar != Time[0]) { newbar = Time[0]; if(TradesThisSymbol < 1) { 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); } // close for if(PriceOpen > (Ask + 16 * Point)) 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); } // close for else statement } // close for if(Direction == 1 && ForceNeg) 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); } // close for if(PriceOpen < (Bid - 16 * Point)) 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); } // close for else statement } // close for if(Direction == -1 && ForcePos) } //Close of if(TradesThisSymbol < 1) ///////////////////////////////////////////////// // Pending Order Management ///////////////////////////////////////////////// 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); } //close for if(High[1] > (Ask + 16 * Point)) else { OrderModify(OrderTicket(),Ask + 16 * Point,Low[1] - 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } //close for else statement } //close for if(High[1] < High[2]) } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP) 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); } // close for if(Low[1] < (Bid - 16 * Point)) else { OrderModify(OrderTicket(),Bid - 16 * Point,High[1] + 1 * Point,OrderTakeProfit(),0,Cyan); return(0); } //close for else statement } //close for if(Low[1] > Low[2]) } //close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP) } // close for for(cnt=0;cnt 0) } // close for if (newbar != Time[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); } // close for if(OrderStopLoss() < (Ask - TrailingStop * Point)) } // close for if(Ask-OrderOpenPrice() > (TrailingStop * Point)) } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) 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); } // close for if(OrderStopLoss() > (Bid + TrailingStop * Point)) } // close for if(OrderOpenPrice() - Bid > (TrailingStop * Point)) } // close for if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) } // close for for(cnt=0;cnt 0) //return(0); } // close for start