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.
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.
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.
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.
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.
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)