
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.
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.
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:
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.
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.
La combinaison des deux complète dans une certaine mesure les avantages, compense les lacunes et améliore la qualité du signal.
La combinaison de plusieurs facteurs peut améliorer la stabilité stratégique par rapport à un seul modèle.
Malgré les avantages de l’inversion de dynamique des modèles multifactoriels, les risques suivants existent:
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.
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.
Les modèles sont trop complexes, les paramètres sont nombreux, il n’est pas facile de les ajuster et d’optimiser.
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.
Les stratégies d’inversion de dynamique des modèles multifactoriels peuvent être optimisées dans les domaines suivants:
Adaptation des paramètres de la stratégie de retournement 123 pour rendre le signal de retournement plus précis et plus fiable.
Ajuster les paramètres de l’indicateur de résonance pour que la tendance jugée soit plus proche de la tendance réelle.
L’introduction d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres du jeu.
Ajout d’un module de gestion de position pour rendre les ajustements de position plus quantifiés et systématiques.
Ajout d’un module Stop Loss. Contrôle efficace des pertes individuelles en réglant à l’avance le prix Stop Loss.
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.
/*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 )