Vix fixe la stratégie de pêche au fond par régression linéaire

Auteur:ChaoZhang est là., Date: 2024-01-30 16h56: 39
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de combiner l'indicateur Vix Fix et sa régression linéaire pour capturer avec précision les fonds du marché.

La logique de la stratégie

  1. Calculer l'indicateur Vix Fix, qui est bon pour juger des fonds du marché
  2. Appliquer la régression linéaire sur Vix Fix. Lorsque la couleur de l'histogramme de régression linéaire devient verte, cela signifie que la régression linéaire Vix Fix commence à augmenter, un signal d'achat peut être déclenché
  3. Combiner avec les colonnes vertes de l'indicateur Vix Fix pour confirmer davantage le moment des entrées
  4. Lorsque la couleur de l'histogramme de régression linéaire devient rouge, cela signifie que la régression linéaire Vix Fix commence à diminuer, un signal de vente est déclenché

Le processus ci-dessus utilise la régression linéaire pour améliorer la précision et la rapidité des signaux Vix Fix, filtrant certains faux signaux et capturant ainsi avec précision les fonds.

Analyse des avantages

  1. La stratégie utilise la régression linéaire pour filtrer certains faux signaux de l'indicateur Vix Fix, rendant les signaux d'achat/vente plus précis et fiables
  2. La régression linéaire améliore la sensibilité et la rapidité des signaux et peut rapidement capturer les points tournants du marché
  3. La logique de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre, adaptée au trading quantitatif
  4. Il existe de nombreux paramètres configurables qui peuvent être ajustés de manière flexible pour s'adapter aux changements du marché

Risques et solutions

  1. Cette stratégie est principalement utilisée pour déterminer le fond global du marché et ne convient pas aux stocks individuels.
  2. La régression linéaire ne peut pas filtrer complètement les faux signaux.
  3. Besoin d'ajuster correctement les paramètres pour s'adapter aux changements du marché et éviter les échecs
  4. Il est recommandé de combiner avec d'autres indicateurs pour confirmer davantage les signaux

Directions d'optimisation

  1. Envisager de combiner avec des indicateurs de volatilité ou des indicateurs de volume sur le bilan pour filtrer davantage les signaux
  2. Étudier les méthodes d'optimisation adaptative des paramètres pour rendre la stratégie plus intelligente
  3. Explorez des méthodes d'apprentissage automatique pour prédire les tendances de Vix Fix avec des modèles plus complexes
  4. Essayez d'appliquer des méthodes similaires à des stocks individuels pour étudier comment filtrer les faux signaux

Conclusion

Cette stratégie utilise l'indicateur Vix Fix pour juger des fonds tout en introduisant une régression linéaire pour améliorer la qualité du signal, capturant ainsi efficacement les fonds du marché. La stratégie est simple, pratique et donne de bons résultats. Le principal risque réside dans les faux signaux qui ne peuvent pas être complètement filtrés. Nous devons encore optimiser les paramètres et envisager d'introduire d'autres moyens pour confirmer davantage les signaux afin de rendre la stratégie plus robuste.


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

Plus de