Trương Nhật
Active Member
- 665
- 754
cái này mình sử dụng ntn bác, hay test tìm số liệu tối ưu nhất trong hai tháng hả bác.Cuối cùng cũng kết hợp đc 1 con ra hồn, mời anh em cùng test với mình cho vuiLưu ý, dòng 50 sửa EMA hoa thành ema thường nhé
Mã:// BO - Woodies Price's Power - Intraday Backtesting //v11 // © inno14 //@version=4 strategy("BO - Woodies Price's Power - Intraday Backtesting") // === INPUT PERIOD OF TIME === Date = input(true, title = "=== Date Option ===") FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2020, title = "From Year", minval = 2017) ToDay = input(defval = 22, title = "To Day", minval = 1, maxval = 31) ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 2020, title = "To Year", minval = 2017) // === DATE RANGE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // === Trading Time === CTimeDvM = input(true, title = "=== Trading Time ===") Time_zone = input(7,title="Time Zone") FromHourDvM = input(defval = 07, title = "From Hour", minval = 00, maxval = 23) FromMinuteDvM = input(defval = 00, title = "From Minute", minval = 00, maxval = 59) ToHourDvM = input(defval = 16, title = "To Hour", minval = 00, maxval = 23) ToMinuteDvM = input(defval = 00, title = "To Minute", minval = 00, maxval = 59) GMT_FHDvM=FromHourDvM<Time_zone?FromHourDvM-Time_zone+24:FromHourDvM-Time_zone GMT_THDvM=ToHourDvM<Time_zone?ToHourDvM-Time_zone+24:ToHourDvM-Time_zone fhDvM= (GMT_FHDvM<10?"0"+tostring(GMT_FHDvM):tostring(GMT_FHDvM)) fmDvM= (FromMinuteDvM<10?"0"+tostring(FromMinuteDvM):tostring(FromMinuteDvM)) thDvM= (GMT_THDvM<10?"0"+tostring(GMT_THDvM):tostring(GMT_THDvM)) tmDvM= (ToMinuteDvM<10?"0"+tostring(ToMinuteDvM):tostring(ToMinuteDvM)) WorkingHourDvM = fhDvM+fmDvM+"-"+thDvM+tmDvM t0_DvM = time(timeframe.period, WorkingHourDvM) htrtime = input(true,title="Highlight Trading Time") bgcolor(htrtime? t0_DvM? color.white : na:na, title="Trading Time", transp=0) //Price's Power pptt = input(true,title="=== Price's Power ===") cyclePeriod = input(title="Cycle Period", type=input.integer, minval=1, defval=20) //hline0=hline(0,linewidth=3,linestyle=hline.style_solid,color=color.new(color.olive,0)) //0.truncate() truncates a given number to a certain number of decimals truncate(number, decimals) => factor = pow(10, decimals) int(number * factor) / factor //1. EMA midband=ema(close, cyclePeriod) //2.Standard Deviation mlt_std = 1 upper_en_std = midband + stdev(close, cyclePeriod)*mlt_std lower_en_std = midband - stdev(close, cyclePeriod)*mlt_std //3.Power pu=close-upper_en_std pl=close-lower_en_std upb=upper_en_std-midband lob=lower_en_std-midband bull=pu>=0 and pu[1]>=0?(pu+upb)/upb:0 bear=pl<=0 and pl[1]<=0?-((pl+lob)/lob):0 //5.Label value pp_sigtext= bull>0?" * Bull's Power = "+tostring(truncate(bull,2)):na or bear<0?" * Bear's Power = "+tostring(truncate(bear,2)):na //MA trend_tt=input(true,title="=== Trend Filter ===") ma_inpt=input(title="WMA", type=input.integer, defval=100) trend_line=wma(close,ma_inpt) //Woodies CCI cci_ft=input(true,title="=== CCI Signal ===") cciTurboLength = 6 cci14Length = input(title="CCI Length", type=input.integer, defval=14) source = close cciTurbo = cci(source, cciTurboLength) cci14 = cci(source, cci14Length) last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0 last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0 histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.gray : color.gray //Plot Woodies CCI //plot(cci14, title="CCI Histogram", color=histogramColor, style=plot.style_histogram, linewidth=2, transp=40) //plot(0, title="Zero Line", color=cciTurbo>100?color.blue:cciTurbo<-100?color.red:color.navy, style=plot.style_line, linewidth=6, transp=20) hline(200, title="Hundred Line", color=color.black, linestyle=hline.style_dotted) hline(-200, title="Minus Line", color=color.black, linestyle=hline.style_dotted) //Plot lingreg CCI14 linreg_len=input(4,title="Linear Regression Length") linreg_cci14=linreg(cci14, linreg_len, 0) //plot(linreg_cci14, color=color.aqua, linewidth=4) // ext_linreg=input(100,title="Extreme Level") //peak & top peak_cci= linreg_cci14[2]>linreg_cci14[3] and linreg_cci14[1]>linreg_cci14[2] and linreg_cci14[0]<linreg_cci14[1] and linreg_cci14[1]>ext_linreg bott_cci= linreg_cci14[2]<linreg_cci14[3] and linreg_cci14[1]<linreg_cci14[2] and linreg_cci14[0]>linreg_cci14[1] and linreg_cci14[1]<-ext_linreg peak_cci_1= linreg_cci14[2]>linreg_cci14[3] and linreg_cci14[1]>linreg_cci14[2] and linreg_cci14[0]<linreg_cci14[1] bott_cci_1= linreg_cci14[2]<linreg_cci14[3] and linreg_cci14[1]<linreg_cci14[2] and linreg_cci14[0]>linreg_cci14[1] // fil_len=input(6,title="Filter Length") top_ext=highest(linreg_cci14,fil_len) bot_ext=lowest(linreg_cci14,fil_len) //Put signal x1= peak_cci and linreg_cci14[1]==top_ext and close<trend_line and bull==0 and bear==0 //Call signal y1= bott_cci and linreg_cci14[1]==bot_ext and close>trend_line and bull==0 and bear==0 no_orders = not strategy.opentrades //Function xTech= (x1 and no_orders) yTech= (y1 and no_orders) sumtrades=strategy.losstrades[0]+strategy.wintrades[0] losstrades=strategy.losstrades[0] wintrades=strategy.wintrades[0] //Fibonacci Money Management fibo_tt=input(true,title="=== Fibonacci Money Management ===") take_profit=input(300,title="Take profit = wintrades - losstrades =") //Bid level current_bid_lv= losstrades == 0 and wintrades == 0?1: losstrades-wintrades == -1?1: losstrades>0 and (losstrades-wintrades == 0)?2: losstrades-wintrades == 1?3: losstrades-wintrades == 2?5: losstrades-wintrades == 3?8: losstrades-wintrades == 4?13: losstrades-wintrades == 5?21: losstrades-wintrades == 6?34: 1 bid_level=current_bid_lv take_profit_val = wintrades - losstrades //Plot Analyzing Signals //hline1=hline(-1.2*300) hline2=hline(-1.6*300) hline0=hline(0) sigtext= xTech?"Put signal"+ " * Current Bid Level: " + tostring(bid_level):yTech?"Call signal"+ " * Current Bid Level: " + tostring(bid_level): "Backtesting date: "+tostring(FromDay)+"/"+tostring(FromMonth)+"/"+tostring(FromYear) + " * From: "+tostring(FromHourDvM)+":"+tostring(FromMinuteDvM)+" To "+tostring(ToHourDvM)+":"+tostring(ToMinuteDvM) + " * Take profit: " + tostring(wintrades-losstrades)+"/"+tostring(take_profit) + " * Bid Level: " + tostring(bid_level) + " * Linreg Length: " + tostring(linreg_len) + pp_sigtext sig_col=xTech?color.new(color.red,10):yTech?color.new(color.blue,10):color.new(color.navy,10) label_sig_text = label.new(bar_index[0], -1.5*300, text=sigtext, style=label.style_none, textcolor=sig_col, size=size.large) label.delete(label_sig_text[1]) //Plot Color Panel of Finobacci Money Management fib_sigtext= "Color Panel of Finobacci Money Management" fib_sig_col=color.new(color.navy,10) label_fib_sig_text = label.new(bar_index[5], 250, text=fib_sigtext, style=label.style_none, textcolor=fib_sig_col, size=size.large) label.delete(label_fib_sig_text[1]) fib_put=50 fib_col=-150 fib_put_lv1=color.new(color.red,0) plotshape(fib_put, title='Put Lv1', text="Put Lv1", style=shape.circle, location=location.absolute, color=fib_put_lv1, textcolor=color.black, offset=-9, size=size.normal, show_last=2) fib_call_lv1=color.new(color.blue,0) plotshape(fib_col, title='Call Lv1', text="Call Lv1", style=shape.circle, location=location.absolute, color=fib_call_lv1, textcolor=color.black, offset=-9, size=size.normal, show_last=2) fib_put_lv2=color.new(color.red,10) plotshape(fib_put, title='Put Lv2', text="Put Lv2", style=shape.circle, location=location.absolute, color=fib_put_lv2, textcolor=color.black, offset=-8, size=size.normal, show_last=2) fib_call_lv2=color.new(color.blue,10) plotshape(fib_col, title='Call Lv2', text="Call Lv2", style=shape.circle, location=location.absolute, color=fib_call_lv2, textcolor=color.black, offset=-8, size=size.normal, show_last=2) fib_put_lv3=color.new(color.orange,0) plotshape(fib_put, title='Put Lv3', text="Put Lv3", style=shape.circle, location=location.absolute, color=fib_put_lv3, textcolor=color.black, offset=-7, size=size.normal, show_last=2) fib_call_lv3=color.new(color.green,0) plotshape(fib_col, title='Call Lv3', text="Call Lv3", style=shape.circle, location=location.absolute, color=fib_call_lv3, textcolor=color.black, offset=-7, size=size.normal, show_last=2) fib_put_lv5=color.new(color.orange,10) plotshape(fib_put, title='Put Lv5', text="Put Lv5", style=shape.circle, location=location.absolute, color=fib_put_lv5, textcolor=color.black, offset=-6, size=size.normal, show_last=2) fib_call_lv5=color.new(color.green,10) plotshape(fib_col, title='Call Lv5', text="Call Lv5", style=shape.circle, location=location.absolute, color=fib_call_lv5, textcolor=color.black, offset=-6, size=size.normal, show_last=2) fib_put_lv8=color.new(color.maroon,0) plotshape(fib_put, title='Put Lv8', text="Put Lv8", style=shape.circle, location=location.absolute, color=fib_put_lv8, textcolor=color.black, offset=-5, size=size.normal, show_last=2) fib_call_lv8=color.new(color.lime,0) plotshape(fib_col, title='Call Lv8', text="Call Lv8", style=shape.circle, location=location.absolute, color=fib_call_lv8, textcolor=color.black, offset=-5, size=size.normal, show_last=2) fib_put_lv13=color.new(color.maroon,10) plotshape(fib_put, title='Put Lv13', text="Put Lv13", style=shape.circle, location=location.absolute, color=fib_put_lv13, textcolor=color.black, offset=-4, size=size.normal, show_last=2) fib_call_lv13=color.new(color.lime,10) plotshape(fib_col, title='Call Lv13', text="Call Lv13", style=shape.circle, location=location.absolute, color=fib_call_lv13, textcolor=color.black, offset=-4, size=size.normal, show_last=2) fib_put_lv21=color.new(color.olive,0) plotshape(fib_put, title='Put Lv21', text="Put Lv21", style=shape.circle, location=location.absolute, color=fib_put_lv21, textcolor=color.black, offset=-3, size=size.normal, show_last=2) fib_call_lv21=color.new(color.yellow,0) plotshape(fib_col, title='Call Lv21', text="Call Lv21", style=shape.circle, location=location.absolute, color=fib_call_lv21, textcolor=color.black, offset=-3, size=size.normal, show_last=2) fib_put_lv34=color.new(color.olive,10) plotshape(fib_put, title='Put Lv34', text="Put Lv34", style=shape.circle, location=location.absolute, color=fib_put_lv34, textcolor=color.black, offset=-2, size=size.normal, show_last=2) fib_call_lv34=color.new(color.yellow,10) plotshape(fib_col, title='Call Lv34', text="Call Lv34", style=shape.circle, location=location.absolute, color=fib_call_lv34, textcolor=color.black, offset=-2, size=size.normal, show_last=2) //plot Signal PutSignal= xTech and window() and t0_DvM and take_profit_val<take_profit?-1.2*300:na CallSignal= yTech and window() and t0_DvM and take_profit_val<take_profit?-1.2*300:na putcol = PutSignal ? bid_level==1? color.new(color.red,0): bid_level==2? color.new(color.red,10): bid_level==3? color.new(color.orange,0): bid_level==5? color.new(color.orange,10): bid_level==8? color.new(color.maroon,0): bid_level==13? color.new(color.maroon,10): bid_level==21? color.new(color.olive,0): bid_level==34? color.new(color.olive,10): color.new(color.red,0): na callcol = CallSignal ? bid_level==1? color.new(color.blue,0): bid_level==2? color.new(color.blue,10): bid_level==3? color.new(color.green,0): bid_level==5? color.new(color.green,10): bid_level==8? color.new(color.lime,0): bid_level==13? color.new(color.lime,10): bid_level==21? color.new(color.yellow,0): bid_level==34? color.new(color.yellow,10): color.new(color.blue,0): na plotshape(PutSignal, title='Put', text="Put", style=shape.circle, location=location.absolute, color=putcol, textcolor=color.black, offset=1, size=size.large) plotshape(CallSignal, title='Call', text="Call", style=shape.circle, location=location.absolute, color=callcol, textcolor=color.black, offset=1, size=size.large) //Backtesting exp_tt=input(true,"Expiry Option By Bars") exp_val=input(3,"Number of Bars") strategy.entry("Call", strategy.long, when=yTech and window() and t0_DvM and take_profit_val<take_profit) strategy.entry("Put", strategy.short, when=xTech and window() and t0_DvM and take_profit_val<take_profit) strategy.close_all(when=barssince(xTech)==exp_val or barssince(yTech)==exp_val) //EOF
Kết quả mình mò 2 tháng