Vix Fix Linear Regression Bottom Fishing chiến lược

Tác giả:ChaoZhang, Ngày: 2024-01-30 16:56:39
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là kết hợp chỉ số Vix Fix và hồi quy tuyến tính của nó để nắm bắt chính xác đáy thị trường.

Chiến lược logic

  1. Tính toán chỉ số Vix Fix, tốt để đánh giá đáy thị trường
  2. Khi màu histogram hồi quy tuyến tính chuyển sang màu xanh lá cây, điều đó có nghĩa là hồi quy tuyến tính Vix Fix bắt đầu tăng, tín hiệu mua có thể được kích hoạt
  3. Kết hợp với các cột màu xanh lá cây của chỉ số Vix Fix để xác nhận thêm thời gian ghi
  4. Khi màu histogram hồi quy tuyến tính chuyển sang màu đỏ, nó có nghĩa là Vix Fix hồi quy tuyến tính bắt đầu giảm, một tín hiệu bán được kích hoạt

Quá trình trên sử dụng hồi quy tuyến tính để cải thiện độ chính xác và tính kịp thời của các tín hiệu Vix Fix, lọc ra một số tín hiệu sai, và do đó nắm bắt chính xác đáy.

Phân tích lợi thế

  1. Chiến lược sử dụng hồi quy tuyến tính để lọc ra một số tín hiệu sai của chỉ số Vix Fix, làm cho tín hiệu mua / bán chính xác và đáng tin cậy hơn
  2. Phục hồi tuyến tính cải thiện độ nhạy và tính kịp thời của tín hiệu và có thể nhanh chóng nắm bắt các thời điểm chuyển đổi thị trường
  3. Logic chiến lược là đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp với giao dịch định lượng
  4. Có nhiều thông số có thể cấu hình có thể được điều chỉnh linh hoạt để thích nghi với những thay đổi của thị trường

Rủi ro và giải pháp

  1. Chiến lược này chủ yếu được sử dụng để xác định đáy thị trường tổng thể, không phù hợp với các cổ phiếu riêng lẻ
  2. Phục hồi tuyến tính không thể lọc hoàn toàn các tín hiệu sai.
  3. Cần phải điều chỉnh các thông số một cách thích hợp để thích nghi với những thay đổi trên thị trường và tránh thất bại
  4. Nó được khuyến cáo kết hợp với các chỉ số khác để xác nhận thêm các tín hiệu

Hướng dẫn tối ưu hóa

  1. Xem xét kết hợp với các chỉ số biến động hoặc các chỉ số khối lượng trên bảng cân đối để lọc các tín hiệu thêm
  2. Nghiên cứu các phương pháp tối ưu hóa thích ứng tham số để làm cho chiến lược thông minh hơn
  3. Khám phá các phương pháp học máy để dự đoán xu hướng Vix Fix với các mô hình phức tạp hơn
  4. Cố gắng áp dụng các phương pháp tương tự cho từng cổ phiếu để nghiên cứu cách lọc các tín hiệu sai

Kết luận

Chiến lược này sử dụng chỉ số Vix Fix để đánh giá đáy trong khi giới thiệu hồi quy tuyến tính để cải thiện chất lượng tín hiệu, do đó nắm bắt hiệu quả đáy thị trường. Chiến lược này đơn giản, thực tế và mang lại kết quả tốt. Rủi ro chính nằm ở các tín hiệu sai mà không thể lọc hoàn toàn. Chúng ta vẫn cần tối ưu hóa cài đặt tham số và xem xét giới thiệu các phương tiện khác để xác nhận thêm tín hiệu để làm cho chiến lược mạnh mẽ hơn. Nhìn chung, chiến lược này cung cấp một cách hiệu quả mới để xác định đáy thị trường và đáng nghiên cứu thêm.


/*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)

Thêm nữa