Vix Fix 선형 회귀 하위 낚시 전략

저자:차오장, 날짜: 2024-01-30 16:56:39
태그:

img

전반적인 설명

이 전략의 핵심 아이디어는 시장 바닥을 정확하게 포착하기 위해 Vix Fix 지표와 선형 회귀를 결합하는 것입니다. 이 전략은 Fix Regression Bottom Fishing Strategy라고 불립니다.

전략 논리

  1. 시장 바닥을 판단하는 데 좋은 Vix Fix 지표를 계산하십시오.
  2. Vix Fix에 선형 회귀를 적용합니다. 선형 회귀 히스토그램 색이 녹색으로 변하면 Vix Fix 선형 회귀가 상승하기 시작한다는 것을 의미합니다. 구매 신호가 유발 될 수 있습니다.
  3. 입력 시기를 추가로 확인하기 위해 Vix Fix 지표의 녹색 열과 결합
  4. 선형 회귀 히스토그램의 색이 빨간색으로 변하면, 이는 Vix Fix 선형 회귀가 감소하기 시작한다는 것을 의미합니다. 판매 신호가 발동됩니다.

위의 프로세스는 Vix Fix 신호의 정확성과 시기성을 향상시키기 위해 선형 회귀를 사용하여 일부 잘못된 신호를 필터링하여 바닥을 정확하게 캡처합니다.

이점 분석

  1. 전략은 선형 회귀를 사용하여 Vix Fix 지표의 일부 잘못된 신호를 필터링하여 구매 / 판매 신호를 더 정확하고 신뢰할 수 있습니다.
  2. 선형 회귀는 신호의 민감도와 시기를 향상시키고 시장 전환점을 빠르게 파악 할 수 있습니다.
  3. 전략 논리는 간단하고 명확하고, 이해하기 쉽고 실행하기 쉽고, 양적 거래에 적합한
  4. 시장 변화에 적응하기 위해 유연하게 조정 할 수있는 많은 구성 가능한 매개 변수가 있습니다.

위험 과 해결책

  1. 이 전략은 주로 전체 시장 바닥을 결정하는 데 사용됩니다. 개별 주식에 적합하지 않습니다.
  2. 선형 회귀는 거짓 신호를 완전히 필터링 할 수 없습니다. Vix Fix 표시기와 결합하면 위험을 줄일 수 있습니다.
  3. 시장 변화에 적응하고 실패를 피하기 위해 매개 변수를 적절히 조정해야 합니다.
  4. 신호를 추가로 확인하기 위해 다른 지표와 결합하는 것이 좋습니다.

최적화 방향

  1. 변동성 지표 또는 균형 부피 지표와 결합하여 신호를 추가로 필터링하는 것을 고려하십시오.
  2. 연구 매개 변수 적응 최적화 방법 전략을 더 똑똑하게 만들기
  3. 더 복잡한 모델로 Vix Fix 트렌드를 예측하기 위해 기계 학습 방법을 탐구합니다.
  4. 잘못된 신호를 필터링하는 방법을 연구하기 위해 개별 주식에 유사한 방법을 적용하려고 노력하십시오.

결론

이 전략은 시그널 품질을 향상시키기 위해 선형 회귀를 도입하면서 바닥을 판단하기 위해 Vix Fix 지표를 활용하며, 이를 통해 시장 바닥을 효과적으로 포착합니다. 전략은 간단하고 실용적이며 괜찮은 결과를 제공합니다. 주요 위험은 완전히 필터링되지 않는 잘못된 신호에 있습니다. 우리는 여전히 매개 변수 설정을 최적화하고 전략을 더 견고하게 만들기 위해 신호를 추가 확인하는 다른 방법을 도입하는 것을 고려해야합니다. 전반적으로이 전략은 시장 바닥을 결정하는 새로운 효과적인 방법을 제공하며 추가 연구가 가치가 있습니다.


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

더 많은