Stratégie d'inversion de la dynamique du modèle multifactoriel


Date de création: 2023-12-21 16:26:10 Dernière modification: 2023-12-21 16:26:10
Copier: 0 Nombre de clics: 663
1
Suivre
1623
Abonnés

Stratégie d’inversion de la dynamique du modèle multifactoriel

Aperçu

La stratégie d’inversion de dynamique du modèle multifacteur permet d’obtenir des rendements plus stables et plus élevés en combinant le modèle multifacteur et la stratégie d’inversion de dynamique. La stratégie utilise les indicateurs 123 inversion et résonance comme deux signaux indépendants et crée une position en ouvrant la position lorsque les signaux sont identiques.

Principe de stratégie

La stratégie d’inversion de la dynamique du modèle multifonctionnel est composée de deux sous-stratégies: la stratégie d’inversion 123 et la stratégie de l’indicateur de résonance.

La stratégie inverse est basée sur la hausse ou la baisse des prix sur 2 jours consécutifs et est combinée avec l’indicateur STOCH pour déterminer si le marché est trop froid ou trop chaud pour générer un signal de transaction. Plus précisément, lorsque les prix sont élevés pendant 2 jours consécutifs et que la courbe STOCH est inférieure à 50 le 9e jour, le bullish est à la hausse; lorsque les prix sont baissés pendant 2 jours consécutifs et que la courbe STOCH est supérieure à 50 le 9e jour, le bullish est à la hausse.

La stratégie de l’indicateur de synchronisation utilise la superposition de différentes moyennes périodiques et d’indicateurs de choc pour déterminer la direction et la force de la tendance. Elle comprend des méthodes telles que la pondération linéaire, la synchronisation et la combinaison pour déterminer l’état de la polyvalence. L’indicateur est classé par ordre de grandeur et renvoie 1 à 9 pour le polyvalent fort et 1 à 9 pour le polyvalent fort.

Enfin, la stratégie choisit de créer une position à plusieurs têtes ou à vide lorsque les signaux sont identiques.

Analyse des avantages

La stratégie d’inversion de la dynamique du modèle multifonctionnel combine le facteur d’inversion et le facteur d’impulsion, permettant de capturer les opportunités d’inversion en même temps afin d’éviter les faux-battements, et donc d’avoir un taux de victoire plus élevé. Les avantages de la stratégie se traduisent par:

  1. Les stratégies d’inversion sont utilisées comme source de signaux d’inversion et permettent d’attraper des inversions à court terme pour générer des gains supplémentaires.

  2. L’indicateur de résonance permet de déterminer la direction et la force de la tendance et d’éviter les risques de pertes causés par une trop grande marge de réversion.

  3. La combinaison des deux complète dans une certaine mesure les avantages, compense les lacunes et améliore la qualité du signal.

  4. La combinaison de plusieurs facteurs peut améliorer la stabilité stratégique par rapport à un seul modèle.

Analyse des risques

Malgré les avantages de l’inversion de dynamique des modèles multifactoriels, les risques suivants existent:

  1. Les pertes causées par le renversement ne sont pas terminées et le prix est redirigé vers le bas. La protection contre les pertes peut être adaptée de manière appropriée.

  2. Si les signaux sont incohérents, la direction ne peut pas être déterminée. La correspondance peut être augmentée en ajustant les paramètres.

  3. Les modèles sont trop complexes, les paramètres sont nombreux, il n’est pas facile de les ajuster et d’optimiser.

  4. Il est nécessaire de se concentrer sur plusieurs sous-modèles en même temps, la difficulté de l’opération sur le terrain et la pression psychologique sont plus élevées. Certains éléments de transaction automatique peuvent être introduits pour réduire la charge d’opération.

Direction d’optimisation

Les stratégies d’inversion de dynamique des modèles multifactoriels peuvent être optimisées dans les domaines suivants:

  1. Adaptation des paramètres de la stratégie de retournement 123 pour rendre le signal de retournement plus précis et plus fiable.

  2. Ajuster les paramètres de l’indicateur de résonance pour que la tendance jugée soit plus proche de la tendance réelle.

  3. L’introduction d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres du jeu.

  4. Ajout d’un module de gestion de position pour rendre les ajustements de position plus quantifiés et systématiques.

  5. Ajout d’un module Stop Loss. Contrôle efficace des pertes individuelles en réglant à l’avance le prix Stop Loss.

Résumer

La stratégie d’inversion de la dynamique du modèle multifonctionnel utilise le facteur d’inversion et le facteur de dynamique, ce qui permet d’obtenir un taux de victoire plus élevé grâce à la superposition de plusieurs facteurs, en garantissant une qualité de signal plus élevée. Cette stratégie a le double avantage de capturer les opportunités d’inversion et de suivre le rythme.

Code source de la stratégie
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 11/11/2019
// 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
// This is modified version of Dale Legan's "Confluence" indicator written by Gary Fritz.
// ================================================================
// Here is Gary`s commentary:
// Since the Confluence indicator returned several "states" (bull, bear, grey, and zero), 
// he modified the return value a bit:
// -9 to -1 = Bearish
// -0.9 to 0.9 = "grey" (and zero)
// 1 to 9 = Bullish
// The "grey" range corresponds to the "grey" values plotted by Dale's indicator, but 
// they're divided by 10.
//
// 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

Confluence(Harmonic, BuyBand, SellBand) =>
    pos = 0.0
    Price = close
    STL = round((Harmonic * 2) - 1 - 0.5)
    ITL = round((STL * 2) - 1 - 0.5)
    LTL = round((ITL * 2) - 1 - 0.5)
    HOFF = round(Harmonic / 2 - 0.5)
    SOFF = round(STL / 2 - 0.5)
    IOFF = round(ITL / 2 - 0.5)
    xHavg = sma(Price, Harmonic)
    xSavg = sma(Price, STL)
    xIavg = sma(Price, ITL)
    xLavg = sma(Price, LTL)
    xvalue2 = xSavg - xHavg[HOFF]
    xvalue3 = xIavg - xSavg[SOFF]
    xvalue12 = xLavg - xIavg[IOFF]
    xmomsig = xvalue2 + xvalue3 + xvalue12
    xLavgOHLC = sma(ohlc4, LTL - 1)
    xH2 = sma(Price, Harmonic - 1)
    xS2 = sma(Price, STL - 1)
    xI2 = sma(Price, ITL - 1)
    xL2 = sma(Price, LTL - 1)
    DerivH = (xHavg * 2) - xHavg[1]
    DerivS = (xSavg * 2) - xSavg[1]
    DerivI = (xIavg * 2) - xIavg[1]
    DerivL = (xLavg * 2) - xLavg[1]
    SumDH = Harmonic * DerivH
    SumDS = STL * DerivS
    SumDI = ITL * DerivI
    SumDL = LTL * DerivL
    LengH = Harmonic - 1
    LengS = STL - 1
    LengI = ITL - 1
    LengL = LTL - 1
    N1H = xH2 * LengH
    N1S = xS2 * LengS
    N1I = xI2 * LengI
    N1L = xL2 * LengL
    DRH = SumDH - N1H
    DRS = SumDS - N1S
    DRI = SumDI - N1I
    DRL = SumDL - N1L
    SumH = xH2 * (Harmonic - 1)
    SumS = xS2 * (STL - 1)
    SumI = xI2 * (ITL - 1)
    SumL = xLavgOHLC * (LTL - 1)
    xvalue5 = (SumH + DRH) / Harmonic
    xvalue6 = (SumS + DRS) / STL
    xvalue7 = (SumI + DRI) / ITL
    xvalue13 = (SumL + DRL) / LTL
    value9 = xvalue6 - xvalue5[HOFF]
    value10 = xvalue7 - xvalue6[SOFF]
    value14 = xvalue13 - xvalue7[IOFF]
    xmom = value9 + value10 + value14
    HT = sin(xvalue5 * 2 * 3.14 / 360) + cos(xvalue5 * 2 * 3.14 / 360)
    HTA = sin(xHavg * 2 * 3.14 / 360) + cos(xHavg * 2 * 3.14 / 360)
    ST = sin(xvalue6 * 2 * 3.14 / 360) + cos(xvalue6 * 2 * 3.14 / 360)
    STA = sin(xSavg * 2 * 3.14 / 360) + cos(xSavg * 2 * 3.14 / 360)
    IT = sin(xvalue7 * 2 * 3.14 / 360) + cos(xvalue7 * 2 * 3.14 / 360)
    ITA = sin(xIavg * 2 * 3.14 / 360) + cos(xIavg * 2 * 3.14 / 360)
    xSum = HT + ST + IT
    xErr = HTA + STA + ITA
    Condition2 = (((xSum > xSum[SOFF]) and (xHavg < xHavg[SOFF])) or ((xSum < xSum[SOFF]) and (xHavg > xHavg[SOFF])))
    Phase = iff(Condition2 , -1 , 1)
    xErrSum = (xSum - xErr) * Phase
    xErrSig = sma(xErrSum, SOFF)
    xvalue70 = xvalue5 - xvalue13
    xvalue71 = sma(xvalue70, Harmonic)
    ErrNum = iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, 1,
                  iff (xErrSum > 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, 2, 
                     iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, 2,
                         iff (xErrSum > 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, 3,
                          iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum > xErrSig, -1,
                             iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum > xErrSig, -2,
                              iff (xErrSum < 0 and xErrSum > xErrSum[1] and xErrSum < xErrSig, -2,
                                 iff (xErrSum < 0 and xErrSum < xErrSum[1] and xErrSum < xErrSig, -3, 0))))))))

    momNum = iff (xmom > 0 and xmom < xmom[1] and xmom < xmomsig , 1,
              iff (xmom > 0 and xmom < xmom[1] and xmom > xmomsig, 2,
               iff (xmom > 0 and xmom > xmom[1] and xmom < xmomsig, 2,
                 iff (xmom > 0 and xmom > xmom[1] and xmom > xmomsig, 3,
                  iff (xmom < 0 and xmom > xmom[1] and xmom > xmomsig, -1,
                   iff (xmom < 0 and xmom < xmom[1] and xmom > xmomsig, -2,
                     iff (xmom < 0 and xmom > xmom[1] and xmom < xmomsig, -2,
                      iff (xmom < 0 and xmom < xmom[1] and xmom < xmomsig, -3, 0))))))))
    
    TCNum =  iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, 1,
              iff (xvalue70 > 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, 2,
               iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, 2,
                 iff (xvalue70 > 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, 3,
                  iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 > xvalue71, -1,
                   iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 > xvalue71, -2,
                     iff (xvalue70 < 0 and xvalue70 > xvalue70[1] and xvalue70 < xvalue71, -2,
                      iff (xvalue70 < 0 and xvalue70 < xvalue70[1] and xvalue70 < xvalue71, -3,0))))))))
    
    value42 = ErrNum + momNum + TCNum
    Confluence = iff (value42 > 0 and xvalue70 > 0, value42,
                  iff (value42 < 0 and xvalue70 < 0, value42,
                   iff ((value42 > 0 and xvalue70 < 0) or (value42 < 0 and xvalue70 > 0), value42 / 10, 0)))
    Res1 = iff (Confluence >= 1, Confluence, 0)
    Res2 = iff (Confluence <= -1, Confluence, 0)
    Res3 = iff (Confluence == 0, 0, iff (Confluence > -1 and Confluence < 1, 10 * Confluence, 0))
    pos := iff(Res2 >= SellBand and Res2 != 0, -1,
	         iff(Res1 <= BuyBand and Res1 != 0, 1, 
    	      iff(Res3 != 0, 2, nz(pos[1], 0))))
    pos

strategy(title="Combo Backtest 123 Reversal & Confluence", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Harmonic = input(10, minval=1)
BuyBand = input(9)
SellBand = input(-9)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posConfluence = Confluence(Harmonic, BuyBand, SellBand)
pos = iff(posReversal123 == 1 and posConfluence == 1 , 1,
	   iff(posReversal123 == -1 and posConfluence == -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 )