Idea teras strategi ini adalah untuk menggabungkan penunjuk Vix Fix dan regresi linearnya untuk menangkap bahagian bawah pasaran dengan tepat.
Proses di atas menggunakan regresi linear untuk meningkatkan ketepatan dan ketepatan masa isyarat Vix Fix, menapis beberapa isyarat palsu, dan dengan itu dengan tepat menangkap bahagian bawah.
Strategi ini menggunakan penunjuk Vix Fix untuk menilai bahagian bawah sambil memperkenalkan regresi linear untuk meningkatkan kualiti isyarat, dengan itu menangkap bahagian bawah pasaran dengan berkesan. Strategi ini mudah, praktikal dan menghasilkan hasil yang baik. Risiko utama terletak pada isyarat palsu yang gagal disaring sepenuhnya. Kita masih perlu mengoptimumkan tetapan parameter dan mempertimbangkan pengenalan cara lain untuk mengesahkan isyarat lebih lanjut untuk menjadikan strategi lebih mantap. Secara keseluruhan, strategi ini menyediakan cara yang baru dan berkesan untuk menentukan bahagian bawah pasaran, dan bernilai penyelidikan lanjut.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HeWhoMustNotBeNamed //@version=4 strategy("VixFixLinReg-Strategy", shorttitle="VixFixLinReg - Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01) pd = input(22, title="LookBack Period Standard Deviation High") bbl = input(20, title="Bolinger Band Length") mult = input(2.0 , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up") lb = input(50 , title="Look Back Period Percentile High") ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%") pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%") hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?") sd = input(false, title="Show Standard Deviation Line?") i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time) i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time) inDateRange = true considerVIXFixClose = input(false) lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") atrLen = input(22) atrMult = input(5) initialStopBar = input(5) waitForCloseBeforeStop = input(true) f_getStop(atrLen, atrMult)=> stop = strategy.position_size > 0 ? close - (atrMult * atr(atrLen)) : lowest(initialStopBar) stop := strategy.position_size > 0 ? max(stop,nz(stop[1], stop)) : lowest(initialStopBar) stop wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100 sDev = mult * stdev(wvf, bbl) midLine = sma(wvf, bbl) lowerBand = midLine - sDev upperBand = midLine + sDev rangeHigh = (highest(wvf, lb)) * ph rangeLow = (lowest(wvf, lb)) * pl col = wvf >= upperBand or wvf >= rangeHigh ? color.lime : color.gray val = linreg(wvf, pd, 0) absVal = abs(val) linRegColor = val>val[1]? (val > 0 ? color.green : color.orange): (val > 0 ? color.lime : color.red) plot(hp and rangeHigh ? rangeHigh : na, title="Range High Percentile", style=plot.style_line, linewidth=4, color=color.orange) plot(hp and rangeLow ? rangeLow : na, title="Range High Percentile", style=plot.style_line, linewidth=4, color=color.orange) plot(wvf, title="Williams Vix Fix", style=plot.style_histogram, linewidth = 4, color=col) plot(sd and upperBand ? upperBand : na, title="Upper Band", style=plot.style_line, linewidth = 3, color=color.aqua) plot(-absVal, title="Linear Regression", style=plot.style_histogram, linewidth=4, color=linRegColor) vixFixState = (col == color.lime) ? 1: 0 vixFixState := strategy.position_size == 0? max(vixFixState, nz(vixFixState[1],0)) : vixFixState longCondition = (vixFixState == 1 and linRegColor == color.lime) and inDateRange exitLongCondition = (linRegColor == color.orange or linRegColor == color.red) and considerVIXFixClose stop = f_getStop(atrLen, atrMult) label_x = time+(60*60*24*1000*20) myLabel = label.new(x=label_x, y=0, text="Stop : "+tostring(stop), xloc=xloc.bar_time, style=label.style_none, textcolor=color.black, size=size.normal) label.delete(myLabel[1]) strategy.entry("Long", strategy.long, when=longCondition, oca_name="oca_buy") strategy.close("Long", when=exitLongCondition or (close < stop and waitForCloseBeforeStop and linRegColor == color.green)) strategy.exit("ExitLong", "Long", stop = stop, when=not waitForCloseBeforeStop and linRegColor == color.green)