Stratégie de suivi de l'inversion moyenne en deux facteurs

Auteur:ChaoZhang est là., Date: 2023-12-19 11h09 et 20 min
Les étiquettes:

img

Résumé

Cette stratégie appartient à la double stratégie de suivi de la réversion de la moyenne des facteurs dans le domaine du trading quantitatif. Elle intègre la stratégie d'inversion 123 et la stratégie de canal Keltner avec deux facteurs, visant à découvrir les signaux d'inversion et à réaliser l'idée de trading d'acheter bas et de vendre haut.

Principe

La stratégie se compose de deux sous-stratégies. La première sous-stratégie est la stratégie d'inversion 123. Elle juge si le marché est à un point d'inversion en calculant la variation des prix de clôture au cours des deux derniers jours de négociation et en combinant l'indicateur stochastique. Plus précisément, lorsque le prix de clôture augmente pendant deux jours consécutifs et que l'indicateur stochastique est inférieur à 50, un signal d'achat est émis; lorsque le prix de clôture tombe pendant deux jours consécutifs et que l'indicateur stochastique est supérieur à 50, un signal de vente est émis.

La deuxième sous-stratégie est la stratégie de canal de Keltner. Cette stratégie calcule la moyenne mobile typique des prix et la fourchette de volatilité sur les n derniers jours de négociation. Lorsque le prix approche les rails supérieurs ou inférieurs, des signaux de négociation inversés sont émis. Lorsque le prix est en dessous du rail inférieur, allez court; quand il est au-dessus du rail supérieur, allez long.

Enfin, en jugeant les directions des signaux des deux sous-stratégies, la stratégie calcule le signal de position final.

Analyse des avantages

Le plus grand avantage de cette stratégie de suivi de la réversion moyenne à deux facteurs est qu'elle peut saisir les opportunités à temps lorsque le marché inverse et réaliser l'idée de trading d'acheter bas et de vendre haut.

Plus précisément, le paramètre de réglage de l'indicateur stochastique dans la stratégie d'inversion 123 est relativement conservateur, ce qui peut filtrer efficacement les faux retours dans les marchés oscillants.

Analyse des risques

Le principal risque de cette stratégie est que le moment des signaux d'inversion est crucial. Si des faux retours continus se produisent ou si le moment des signaux d'inversion est mal choisi, cela entraînera l'échec de la tenue d'une tendance complète, affectant ainsi le rendement final.

En outre, les stratégies à deux facteurs ont plus de difficulté à sélectionner et à optimiser les paramètres que les stratégies à facteur unique.

Enfin, le reverse trading lui-même présente un rapport risque-rendement disproportionné. Des conditions de marché anormales peuvent facilement conduire à une liquidation. Cela doit être évité par un stop loss strict.

Directions d'optimisation

D'après l'analyse de risque ci-dessus, la stratégie peut être optimisée dans les aspects suivants:

  1. Tester différents paramètres des indicateurs d'inversion pour trouver des combinaisons avec une tolérance à la défaillance plus élevée et moins de faux signaux
  2. Essayez des valeurs de paramètres de différentes longueurs de cycle pour trouver des valeurs qui capturent les inversions plus précisément
  3. Ajouter un module stop-loss pour contrôler strictement la perte maximale par transaction
  4. Tester les effets de différentes périodes de détention pour trouver des points de sortie qui correspondent mieux à la logique de la stratégie
  5. Augmenter le nombre de positions ouvertes ou ajouter des modules de contrôle des positions pour rendre le ratio risque/rendement plus raisonnable

Résumé

En tant que stratégie typique de suivi du double facteur de la moyenne de réversion, en intégrant les sous-stratégies 123 de réversion et de canal Keltner, cette stratégie vise à saisir plus précisément le moment d'achat bas et de vente élevé aux points d'inversion du marché. Avec une optimisation appropriée des paramètres et un contrôle des risques, une telle stratégie peut obtenir un alpha relativement considérable.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Keltner Channel, a classic indicator 
// of technical analysis developed by Chester Keltner in 1960. 
// The indicator is a bit like Bollinger Bands and Envelopes.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KeltnerChn(nPeriod) =>
    pos = 0.0
    xPrice = sma(hlc3, nPeriod)
    xMove = sma(high - low, nPeriod)
    reverse = input(false, title="Trade reverse")
    xUpper = xPrice + xMove
    xLower = xPrice - xMove
    pos := iff(close < xLower, -1,
             iff(close > xUpper, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Keltner Channel", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nPeriod = input(title="Period", defval=10, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKeltnerChn = KeltnerChn(nPeriod)
pos = iff(posReversal123 == 1 and posKeltnerChn == 1 , 1,
	   iff(posReversal123 == -1 and posKeltnerChn == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Plus de