Stratégie de moyenne mobile adaptative à combinaison multifactorielle


Date de création: 2023-12-15 11:30:09 Dernière modification: 2023-12-15 11:30:09
Copier: 0 Nombre de clics: 622
1
Suivre
1621
Abonnés

Stratégie de moyenne mobile adaptative à combinaison multifactorielle

Une vue d’ensemble de la stratégie

La stratégie de la moyenne mobile auto-adaptative de composition multifonctionnelle est une stratégie combinée qui utilise simultanément la ligne intraday, la moyenne mobile, la croix d’agrégation et la ligne moyenne HA. Cette stratégie vise à explorer plus d’opportunités de négociation et à obtenir des rendements cumulés plus élevés dans un marché haussier.

2. Principes de la stratégie

La logique centrale de cette stratégie est de noter les signaux d’achat et de vente en combinant l’utilisation de plusieurs indicateurs techniques, donnant des signaux de négociation de différentes intensités en fonction des résultats de la correspondance de différents facteurs.

Plus précisément, les quatre principaux indicateurs techniques utilisés dans la stratégie sont:

  1. Ligne de couleur de la ligne de couleur est utilisée pour déterminer la tendance des prix. Deux entités vertes consécutives (HA) sont des signaux d’achat, deux entités rouges consécutives (HA) sont des signaux de tête vide.

  2. Les moyennes mobiles. Les stratégies utilisent simultanément des moyennes mobiles avec trois paramètres différents: rapide, lente et filtrée. Quand une ligne rapide traverse une ligne lente et une ligne lente traverse une ligne lente, c’est un signal d’achat.

  3. L’indicateur stochastique. Cet indicateur détermine le moment de la croix polygonale. Lorsque la ligne %K franchit la ligne %D de bas en haut, c’est un signal d’achat; quand elle franchit la ligne %D de haut en bas, c’est un signal de vente.

  4. Le système de notation de la correspondance. Selon la correspondance de plusieurs facteurs ci-dessus, la stratégie adopte un système de notation. Plus il y a de facteurs de correspondance, plus le signal correspondant est fort.

Grâce à un jugement composé de plusieurs facteurs, la stratégie peut capturer plus de micro-opportunités de trading à court et moyen terme, ce qui permet d’obtenir des gains supplémentaires dans un marché haussier.

Troisièmement, les avantages stratégiques.

Le plus grand avantage de la stratégie d’adaptation de la combinaison de facteurs multiples aux moyennes mobiles est l’amélioration de la fiabilité du signal. Un seul indicateur technique est susceptible d’erreur, tandis que cette stratégie, combinée à l’utilisation de plusieurs indicateurs de couplage, peut réduire efficacement l’interférence des faux signaux.

En outre, une combinaison de plusieurs facteurs peut améliorer le taux de réussite des transactions par rapport à un seul indicateur. Dans un marché haussier, la stratégie peut générer des gains cumulés plus élevés.

Quatrièmement, le risque stratégique

Le principal risque de cette stratégie est que la combinaison de plusieurs facteurs augmente la complexité de la stratégie. Il faut prendre en compte simultanément les paramètres de plusieurs indicateurs, les ajustements fréquents, etc.

En outre, dans un marché baissier, la stratégie peut être trop longue. Même avec un stop loss, il est difficile d’éviter de grandes pertes.

En outre, les indicateurs techniques tels que les indicateurs stochastiques et les lignes de moyenne HA sont vulnérables aux événements soudains, ce qui peut générer de faux signaux et entraîner des pertes inutiles.

Cinquièmement, améliorer la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres de chaque indicateur pour trouver la combinaison optimale de paramètres.

  2. Ajout de modules d’adaptation pour l’entraînement des modèles et des paramètres, et optimisation en temps réel des paramètres.

  3. Augmenter les stratégies de stop loss et réduire les stratégies de maximum retrait.

  4. Ajout d’un module de contrôle de position pour ajuster dynamiquement les positions en fonction des conditions du marché.

  5. Un modèle de réseau neuronal de notation multifonctionnelle combiné à un algorithme d’apprentissage automatique.

VI. Conclusion

La combinaison de facteurs multiples s’adapte à la stratégie de moyenne mobile qui utilise les avantages de plusieurs indicateurs techniques. La stratégie peut augmenter efficacement la qualité du signal et obtenir des gains supplémentaires dans un marché haussier. Mais elle augmente également la complexité de la stratégie, nécessitant des tests et des optimisations supplémentaires.

Code source de la stratégie
/*backtest
start: 2022-12-08 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © cyrule
//@version=4
strategy("2nd Grade Strategy", overlay=true, shorttitle="2GTS", max_lines_count = 500, max_labels_count = 500, calc_on_every_tick = true, calc_on_order_fills = true, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)

source = input(close, title = "Source")

// **********************
// * Heikin-Ahshi       *
// * kudos to garethyeo *
// **********************
showHA   = input(true, title = "Show Heikin Ashi?", group = "Heikin Ashi")
ha_open  = security(heikinashi(syminfo.tickerid), timeframe.period, open)
ha_high  = security(heikinashi(syminfo.tickerid), timeframe.period, high)
ha_low   = security(heikinashi(syminfo.tickerid), timeframe.period, low)
ha_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)

bgcolor(iff(showHA and ha_open < ha_close , color.new(#53b987, transp = 92.5), na), title = 'Green HA')
bgcolor(iff(showHA and ha_open >= ha_close, color.new(#eb4d5c, transp = 92.5), na), title = 'Red HA'  )


// ******************
// * Moving Average *
// ******************
// MA Settings
showMA         = input(true, title = "Show Moving Averages?", group = "Moving Averages")
fastMALength   = input(title = "Fast MA Length", minval = 1, step = 1, defval = 20, group = "Moving Averages")
slowMALength   = input(title = "Slow MA Length", minval = 1, step = 1, defval = 50, group = "Moving Averages")
maType         = input(title = "Moving Average Type", defval = "SMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")
filterMALength = input(title = "Filter MA Length", minval = 1, step = 1, defval = 200, group = "Moving Averages")
filterMAType   = input(title = "Filter MA Type", defval = "EMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")

// Calculate MA
var float maFast   = na
var float maSlow   = na
var float maFilter = na

if (maType   == "SMA")
    maFast   := sma(source, fastMALength)
    maSlow   := sma(source, slowMALength)
if (maType   == "EMA")
    maFast   := ema(source, fastMALength)
    maSlow   := ema(source, slowMALength)
if (maType   == "RMA")
    maFast   := rma(source, fastMALength)
    maSlow   := rma(source, slowMALength)
    maFilter := rma(source, filterMALength)
if (maType   == "WMA")
    maFast   := wma(source, fastMALength)
    maSlow   := wma(source, slowMALength)
if (maType   == "VWMA")
    maFast   := vwma(source, fastMALength)
    maSlow   := vwma(source, slowMALength)

if (filterMAType == "SMA")
    maFilter     := sma(source, filterMALength)
if (filterMAType == "EMA")
    maFilter     := ema(source, filterMALength)
if (filterMAType == "RMA")
    maFilter     := rma(source, filterMALength)
if (filterMAType == "WMA")
    maFilter     := wma(source, filterMALength)
if (filterMAType == "VWMA")
    maFilter     := vwma(source, filterMALength)

BiruAtasMerah = (maFast >= maSlow) and (maSlow >= maFilter)
MerahAtasBiru = (maFast <= maSlow) and (maSlow <= maFilter)

// Lukis MA
plot(series = showMA ? maFast   : na, color = color.blue, title = "MA Fast")
plot(series = showMA ? maSlow   : na, color = color.red,  title = "MA Slow")
plot(series = showMA ? maFilter : na, color = #FFCC00,    title = "MA Filter")


// **************
// * Stochastic *
// **************
// Stochastic Settings
showSSC = input(true, title = "Show Stochastic Crossovers?", group = "Stochastic")
Length = input (10, minval = 1, title = "%K Length", group = "Stochastic")
SmoothK = input (3, minval = 1, title = "%K Smoothing", group = "Stochastic")
SmoothD = input (3, minval = 1, title = "%D Smoothing", group = "Stochastic")

// Calculate Stochastic
var float K = na
var float D = na

if (maType ==  "SMA")
	K      := sma(stoch(source, high, low, Length), SmoothK)
	D      := sma(K, SmoothD)
if (maType ==  "EMA")
	K      := ema(stoch(source, high, low, Length), SmoothK)
	D      := ema(K, SmoothD)
if (maType ==  "RMA")
	K      := rma(stoch(source, high, low, Length), SmoothK)
	D      := rma(K, SmoothD)
if (maType ==  "WMA")
	K      := wma(stoch(source, high, low, Length), SmoothK)
	D      := wma(K, SmoothD)
if (maType ==  "VWMA")
	K      := vwma(stoch(source, high, low, Length), SmoothK)
	D      := vwma(K, SmoothD)

StochasticCrossOver  = crossover(K, D)
StochasticCrossUnder = crossunder(K, D)

// Lukis SS
plotshape(showSSC and StochasticCrossOver  and K <=  20            ? K : na, text = "Golden\nCrossover",  color = color.new(color.green, transp = 25), location = location.belowbar, size = size.tiny, title = "Golden Crossover" )
plotshape(showSSC and StochasticCrossUnder and K >=  80            ? D : na, text = "Deadly\nCrossover",  color = color.new(color.red, transp = 25),   location = location.belowbar, size = size.tiny, title = "Deadly Crossover" )
plotshape(showSSC and StochasticCrossOver  and K <=  80 and K > 20 ? K : na, text = "Bullish\nCrossover", color = color.new(color.green, transp = 50), location = location.belowbar, size = size.tiny, title = "Bullish Crossover")
plotshape(showSSC and StochasticCrossUnder and K >=  20 and K < 80 ? D : na, text = "Bearish\nCrossover", color = color.new(color.red, transp = 50),   location = location.belowbar, size = size.tiny, title = "Bearish Crossover")

showBull = input(true, title = "Show Bullish Signal?", group = "Signal")
showBear = input(false, title = "Show Bearish Signal?", group = "Signal")

bullishCriteria = 0
if (ha_open < ha_close) and (ha_open[1] < ha_close[1]) and (ha_open[2] >= ha_close[2])
    bullishCriteria := bullishCriteria + 1
if (maFast > maSlow) and (maSlow > maFilter)
    bullishCriteria := bullishCriteria + 1
if (K > D) and (K > K[1]) and (D > D[1])
    bullishCriteria := bullishCriteria + 1

bearishCriteria = 0
if (ha_open >= ha_close) and (ha_open[1] >= ha_close[1]) and (ha_open[2] < ha_close[2])
    bearishCriteria := bearishCriteria + 1
if (maFast < maSlow) and (maSlow < maFilter)
    bearishCriteria := bearishCriteria + 1
if (K < D) and (K < K[1]) and (D < D[1])
    bearishCriteria := bearishCriteria + 1

signal = color.new(color.white, transp = 0)
if bearishCriteria == 2
    signal := color.new(color.orange, transp = 50)
if bearishCriteria == 3
    signal := color.new(color.red, transp = 50)
if bullishCriteria == 2
    signal := color.new(color.aqua, transp = 50)
if bullishCriteria == 3
    signal := color.new(color.green, transp = 50)

bullishCriteria := showBull ? bullishCriteria : 0
bearishCriteria := showBear ? bearishCriteria : 0

bgcolor(iff(bullishCriteria > 1, signal, na), title = 'Bullish Signal')
bgcolor(iff(bearishCriteria > 1, signal, na), title = 'Bearish Signal')

longTPPerc  = input(title = "Take Profit Threshold (%)"            , minval = 0.0, step = 0.5, defval = 2.5, group = "Trading") / 100
profitRatio = input(title = "Profit-to-Loss ratio (risk tolerance)", minval = 1.0, step = 0.1, defval = 1.4, group = "Trading")
longSLPerc  = longTPPerc / profitRatio
takeProfit  = strategy.position_avg_price * (1 + longTPPerc)
stopLoss    = strategy.position_avg_price * (1 - longSLPerc)
strategy.initial_capital = 50000
strategy.entry("Long" , strategy.long , floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bullishCriteria > 1)
strategy.entry("Short", strategy.short, floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bearishCriteria > 1)
strategy.close("Long" , when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))
strategy.close("Short", when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))

plotshape(bullishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))
plotshape(bearishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))