// Downloaded From https://www.WiseStockTrader.com //Gen_BRKOUT.AFL #include_once ; pebstime = Hour()*60+Minute(); OptimizerSetEngine("cmae"); Lastticktime = Param("Lastticktime",9999,0,9999,1); //If like in SA there is a closing tick instead of a closing bar, then we execute immediately there instead of the usual delay of 1 bar Firsttradetime = Param("FirstTradeTime",0,0,9999,1); //Never do any trade before this time Lasttradetime = Param("LastTradeTime",9999,0,9999,1); //Never do any trade after this time Firstsignaltime = Param("FirstSignalTime",0,0,9999,1); //do not trade on signals that trigger before this time, remember trade is entered usually 1 bar delay after signal Lastsignaltime = Param("LastSignalTime",9999,0,9999,1); //do not trade on signals that trigger after this time, remember trade is entered usually 1 bar delay after signal ExitatClose = ParamToggle("Exit at Close of Day","No|Yes"); xxxdelay = 1-(pebstime>=Lastticktime)*1; //Ignore the delay when last tick, otherwise that trade will only happen next morning firststoptime = Param("First Stoptime",0,0,9999,1); Laststoptime = Param("Last Stoptime",9999,0,9999,1); TradeSL = Param("Trade stoploss",99999,0,99999,1); TradeSP = Param("Trade stopprofit",99999,0,99999,1); DaySL = Param("Day stoploss",99999,0,99999,1); DaySP = Param("Day stopprofit",99999,0,99999,1); MonthSL = Param("Month stoploss",99999,0,99999,1); MonthSP = Param("Month stopprofit",99999,0,99999,1); n_fn1_par = Param("Channel n",20,1,100,1); n_fn2_par = Param("Channelwidth n",2,1,10,1); n_fn1_opt = ParamToggle("Optimize Channel n","Yes|No"); n_fn2_opt = ParamToggle("Optimize Channelwidth","Yes|No"); if (n_fn1_opt==1){ n_fn1= n_fn1_par; } else { n_fn1 = Optimize("Channel n",n_fn1_par,1,100,1); } if (n_fn2_opt==1){ n_fn2 = n_fn2_par; } else { n_fn2 = Optimize("Channelwidth n",n_fn2_par,1,20,0.25); } fn1 = ParamList("Top BRK","HHV|BOLLINGER|KELTNER|FunctionHigh"); fn2 = ParamList("Bottom BRK","LLV|BOLLINGER|KELTNER|FunctionLow"); target_fn = ParamList("TargetFn","OHLC4|O|H|L|C|ema|sma|brkema|brkema2|brkema3|brkema4|frama|kama|tsf|dema|tema|wilder|hull"); n_targetfn_par = Param("n_TargetFn",20,1,100,1); n_TargetFn_opt = ParamToggle("Optimize n_TargetFn","Yes|No"); if (n_TargetFn_opt==1){ n_targetfn = n_TargetFn_par; } else { n_targetfn = Optimize("n_TargetFn",n_targetFn_par,1,100,1); } Cntxt = ParamList("Context","None|Contextfilter|Contextfilter2"); symbol = ParamStr("Basesymbol",Name()); // trade on next bar open SetTradeDelays( 0, 0, 0, 0 ); BuyPrice = SellPrice = Open; ShortPrice = CoverPrice = Open; //Points only PositionSize = MarginDeposit = 1; SetForeign(symbol); switch (target_fn){ case "OHLC4": xxx = (O+H+L+C)/4; break; case "O": xxx = O; break; case "H": xxx=H; break; case "L": xxx=L; break; case "C": xxx = C; break; case "ema": xxx = EMA(C,n_targetfn); break; case "sma": xxx = MA(C,n_targetfn); break; case "brkema": xxx = brkema(n_targetfn); break; case "brkema2": xxx = brkema2(n_targetfn); break; case "brkema3": xxx = brkema3(n_targetfn); break; case "brkema4": xxx = brkema4(n_targetfn); break; case "frama": xxx = frama(n_targetfn); break; case "kama": xxx = kama(n_targetfn,2,30); break; case "tsf": xxx = TSF(C,n_targetfn); break; case "dema": xxx = DEMA(C,n_targetfn); break; case "tema": xxx = TEMA(C,n_targetfn); break; case "wilder": xxx = Wilders(C,n_targetfn); break; case "hull": xxx = HullMA(C,n_targetfn,0); break; } switch (fn1){ case "HHV": _TRACE("top hhv"); aaa = Ref(HHV(H,n_fn1),-1); break; case "BOLLINGER": _TRACE("top bollinger"); aaa = BBandTop(xxx,n_fn1,n_fn2); break; case "KELTNER": _TRACE("top keltner"); CenterLine = MA( xxx, n_fn1 ); aaa = CenterLine + n_fn2 * ATR( n_fn1 ); break; case "FunctionHigh": _TRACE("functionhigh"); aaa = Ref(HHV(xxx,n_fn1),-1); break; } switch (fn2){ case "LLV": _TRACE("bottom llv"); bbb = Ref(LLV(L,n_fn1),-1); break; case "BOLLINGER": _TRACE("bottom bollinger"); bbb = BBandBot(xxx,n_fn1,n_fn2); break; case "KELTNER": _TRACE("bottom keltner"); CenterLine = MA( xxx, n_fn1 ); bbb = CenterLine - n_fn2 * ATR( n_fn1 ); break; case "FunctionLow": _TRACE("functionlow"); bbb = Ref(LLV(xxx,n_fn1),-1); break; } Buysignal = (xxx>aaa) AND (pebstime>=firstsignaltime) AND (pebstime<=Lastsignaltime); Sellsignal = (xxx=firstsignaltime) AND (pebstime<=Lastsignaltime) OR ((pebstime>=Lastticktime) AND ExitAtClose ); Shortsignal = (xxx=firstsignaltime) AND (pebstime<=Lastsignaltime); Coversignal = (xxx>aaa) AND (pebstime>=firstsignaltime) AND (pebstime<=Lastsignaltime) OR ((pebstime>=Lastticktime) AND ExitAtClose); //is this the best spot to remove the extra signals? i think so because after contextfilters you expect and do not want to remove consecutive buy or short signals Buysignal = ExRem(Buysignal,Shortsignal); Shortsignal = ExRem(Shortsignal,Buysignal); Longstate = Flip(Buysignal,(Sellsignal OR Shortsignal)); Shortstate = Flip(Shortsignal,(Coversignal OR BuySignal)); Totalstate = Longstate*1+Shortstate*(-1); totalstate = Ref(totalstate,-xxxdelay); //apply trade delay before applying contextfilter as contextfilters already have trade delay built in switch (Cntxt){ case "None": break; case "Contextfilter": Totalstate = Contextfilter(Totalstate); break; case "Contextfilter2": Totalstate = Contextfilter2(Totalstate); break; } //apply stops; delay already built in here correctly? still need to adjust for lastticktime 0 delay totalstate = TradeSLSP(totalstate,1,tradeSL,tradeSP,firststoptime,Laststoptime,Lastticktime); totalstate = DaySLSP(totalstate,1,DaySL,DaySP,firststoptime,Laststoptime,Lastticktime); totalstate = MonthSLSP(totalstate,1,MonthSL,MonthSP,firststoptime,Laststoptime,Lastticktime); Buysignal = (totalstate>0) AND (pebstime>=firsttradetime) AND (pebstime<=Lasttradetime); Sellsignal = (totalstate<=0) AND (pebstime>=firsttradetime) AND (pebstime<=Lasttradetime); Shortsignal = (totalstate<0) AND (pebstime>=firsttradetime) AND (pebstime<=Lasttradetime); Coversignal = (totalstate>=0) AND (pebstime>=firsttradetime) AND (pebstime<=Lasttradetime); Buysignal = ExRem(Buysignal,Shortsignal); Shortsignal = ExRem(Shortsignal,Buysignal); RestorePriceArrays(); Buy = Buysignal; Sell = Sellsignal; Short = Shortsignal; Cover = Coversignal; Longstate = Flip(Buysignal,(Sellsignal OR Shortsignal)); Shortstate = Flip(Shortsignal,(Coversignal OR BuySignal)); Totalstate = Longstate*1+Shortstate*(-1); //this totalstate already has the trade delay in PlotOHLC(0,0,Totalstate,Totalstate,_DEFAULT_NAME(),IIf(Totalstate<0,colorRed,colorGreen),styleCloud); //Plot(aaa,"aaa",ParamColor( "Color", colorCycle ), ParamStyle("Style") ); //Plot(bbb,"bbb",ParamColor( "Color", colorCycle ), ParamStyle("Style") ); SetChartBkColor(colorBlack);