Stratégie d'inversion et d'indice de masse combinée à deux facteurs

Auteur:ChaoZhang est là., Date: le 26-12-2023 à 12h20:57
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading combinée basée sur un modèle à deux facteurs. Elle intègre le modèle de renversement 123 et les facteurs de l'indice de masse pour obtenir un effet cumulatif pour les signaux de stratégie.

La logique de la stratégie

123 Facteur d'inversion

Ce facteur fonctionne sur la base du modèle de prix 123. Lorsque la relation de prix de clôture au cours des deux derniers jours est basse-haute et que l'indicateur Stoch est inférieur à 50, il indique un renversement inférieur et va long. Lorsque la relation de prix de clôture est haute-basse et que Stoch est supérieure à 50, il indique un renversement supérieur et va court.

Facteur d'indice de masse

Ce facteur juge les renversements de tendance en fonction de l'expansion ou de la contraction de la fourchette de fluctuation des prix.

La stratégie n'ouvre des positions que lorsque les deux facteurs émettent des signaux dans la même direction, ce qui permet d'obtenir des transactions rentables tout en évitant de faux signaux d'un seul facteur.

Analyse des avantages

  • Le modèle à double facteur combine un modèle de prix et un indicateur de volatilité pour une meilleure précision du signal
  • 123 modèle capte les extrêmes locaux, l'indice de masse capte les points d'inversion de tendance mondiale, les forces complémentaires
  • La prise de signaux uniquement lorsque deux facteurs sont d'accord évite de faux signaux et améliore la stabilité

Analyse des risques

  • Il est probable que les deux facteurs émettent simultanément des signaux erronés, provoquant des pertes
  • Le taux d'échec des renversements existe, besoin de régler le stop loss pour contrôler la baisse
  • Un réglage inapproprié des paramètres peut entraîner un surajustement

Les risques peuvent être réduits en élargissant l'ensemble de formation, en appliquant un stop-loss strict, en filtrant plusieurs facteurs, etc.

Directions d'optimisation

  • Tester plus de combinaisons d'indicateurs de prix et de volatilité
  • Ajouter le modèle ML pour juger de la qualité du signal et des positions de taille dynamique
  • Incorporer le volume, les bandes de Bollinger, etc. pour découvrir plus d'alpha
  • Utilisez l'optimisation de marche vers l'avant pour la robustesse

Conclusion

Cette stratégie combine deux facteurs, le modèle de prix et l'indicateur de volatilité, pour ne prendre des signaux que lorsqu'ils sont d'accord, en évitant les faux signaux d'un seul facteur et en améliorant la stabilité.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/02/2021
// 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 Mass Index was designed to identify trend reversals by measuring 
// the narrowing and widening of the range between the high and low prices. 
// As this range widens, the Mass Index increases; as the range narrows 
// the Mass Index decreases.
// The Mass Index was developed by Donald Dorsey. 
//
// 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


MASS(Length1,Length2,Trigger) =>
    pos = 0.0
    xPrice = high - low
    xEMA = ema(xPrice, Length1)
    xSmoothXAvg = ema(xEMA, Length1)
    nRes = sum(iff(xSmoothXAvg != 0, xEMA / xSmoothXAvg, 0), Length2)
    pos := iff(nRes > Trigger, -1,
	         iff(nRes < Trigger, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & MASS Index", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- MASS Index ----")
Length1 = input(9, minval=1)
Length2 = input(25, minval=1)
Trigger = input(26.5, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posMASS = MASS(Length1,Length2,Trigger)
pos = iff(posReversal123 == 1 and posMASS == 1 , 1,
	   iff(posReversal123 == -1 and posMASS == -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