Stratégie de négociation en réversion de variance

Auteur:ChaoZhang est là., Date: le 31 octobre 2023 à 14h42
Les étiquettes:

img

Résumé

La stratégie de trading de renversement de variance génère des signaux de trading en calculant le ratio entre les options d'achat et de vente, également connu sous le nom de ratio d'achat. Lorsque le ratio s'inverse, il déclenche des transactions combinées à de simples règles de gestion de l'argent pour réaliser des bénéfices. Il convient aux périodes de 30 minutes de NDX et SPX.

La logique de la stratégie

Les principales mesures de cette stratégie sont la moyenne mobile et l'écart type du ratio call/put. Elle calcule d'abord la moyenne mobile de 20 jours du ratio call/put, puis calcule l'écart type de 30 jours du ratio. Un signal long est déclenché lorsque le ratio dépasse la moyenne mobile plus 1,5 écart type. Un signal court est déclenché lorsque le ratio tombe en dessous de la moyenne mobile moins 1,5 écart type.

Après avoir passé long, si le ratio rebondit au-dessus de la moyenne mobile, fermez la position courte. Le stop loss est fixé à 1% sous le prix d'entrée. Le profit est fixé à 3 fois la distance de stop loss par rapport au prix d'entrée.

Analyse des avantages

Le plus grand avantage de cette stratégie est de capturer les points d'inversion du sentiment lorsque le marché devient trop pessimiste ou haussier, provoquant des anomalies dans le ratio call/put.

Analyse des risques

Le risque majeur provient d'un réglage inapproprié des paramètres. Les signaux trop fréquents ne parviennent pas à capturer des inversions significatives. Les signaux d'inversion peuvent également être falsifiés par de fausses ruptures, causant des pertes. Les paramètres doivent être optimisés pour des signaux plus fiables.

Optimisation

Il est également possible d'ajouter des filtres pour confirmer les signaux d'inversion et éviter les fausses ruptures. Par exemple, ne considérez que les signaux lorsque le volume s'amplifie. Les filtres de tendance pourraient également éviter les transactions contre-tendance. Les paramètres optimaux varient probablement selon les marchés et les délais. L'intégration de plus de facteurs rendra la stratégie plus robuste.

Conclusion

Cette stratégie vise à capturer les points d'inversion du marché en utilisant le ratio call/put avec des règles de base de gestion de l'argent. Elle peut tirer profit des inversions locales mais fait face à de faux risques de rupture. L'optimisation des paramètres, l'ajout de filtres et l'intégration de plus de facteurs peuvent améliorer sa stabilité et sa rentabilité.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
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/
// © I11L

//@version=5
strategy("I11L Long Put/Call Ratio Inversion", overlay=false, pyramiding=1, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash)

SL = input.float(0.01,step=0.01)
CRV = input.float(3)
TP = SL * CRV

len = input.int(30,"Lookback period in Days",step=10)
ratio_sma_lookback_len = input.int(20,step=10)
mult = input.float(1.5,"Standard Deviation Multiple")

ratio_sma = ta.sma(request.security("USI:PCC","D",close),ratio_sma_lookback_len)

median = ta.sma(ratio_sma,len)
standartDeviation = ta.stdev(ratio_sma,len)
upperDeviation = median + mult*standartDeviation
lowerDeviation = median - mult*standartDeviation


isBuy = ta.crossunder(ratio_sma, upperDeviation)// and close < buyZone
isCloseShort = (ratio_sma > median and strategy.position_size < 0)
isSL = (strategy.position_avg_price * (1.0 - SL) > low and strategy.position_size > 0) or (strategy.position_avg_price * (1.0 + SL) < high and strategy.position_size < 0)
isSell = ta.crossover(ratio_sma,lowerDeviation) 
isTP = strategy.position_avg_price * (1 + TP) < high

if(isBuy)
    strategy.entry("Long", strategy.long)

if(isCloseShort)
    strategy.exit("Close Short",limit=close)

if(isSL)
    strategy.exit("SL",limit=close)

if(isTP)
    strategy.exit("TP",limit=close)
    
plot(ratio_sma,color=color.white)
plot(median,color=color.gray)
plot(upperDeviation,color=color.rgb(0,255,0,0))
plot(lowerDeviation,color=color.rgb(255,0,0,0))

bgcolor(isBuy?color.rgb(0,255,0,90):na)
bgcolor(isSell?color.rgb(255,0,0,90):na)


Plus de