Stratégie d'indicateur haut-bas et d'indicateur de moyenne mobile


Date de création: 2023-11-21 15:19:35 Dernière modification: 2023-11-21 15:19:35
Copier: 2 Nombre de clics: 648
1
Suivre
1617
Abonnés

Stratégie d’indicateur haut-bas et d’indicateur de moyenne mobile

Aperçu

La stratégie consiste à combiner les indicateurs de hauts et bas, les indicateurs de moyenne et les indicateurs de tendance supérieure pour déterminer la tendance du marché.

Principe de stratégie

  1. Il permet de déterminer si le cours a atteint un nouveau sommet ou une nouvelle basse au cours d’une période donnée et d’accumuler des scores. Lorsque le score augmente, il représente une augmentation de la force de multiples; lorsque le score diminue, il représente une augmentation de la force de zéro.

  2. L’indicateur de la ligne moyenne permet de déterminer si le prix est dans une tendance ascendante ascendante ou descendante ascendante. Lorsque la ligne moyenne est ascendante, elle représente une augmentation des forces à plusieurs niveaux; lorsque la ligne moyenne est descendante, elle représente une augmentation des forces aériennes.

  3. En combinant les indicateurs de hauts et bas et les indicateurs de moyenne ligne, pour déterminer la tendance du marché; puis en combinant la direction de l’indicateur de tendance supérieure, pour rechercher des opportunités de création de position. Plus précisément, lorsque l’indicateur de hauts et bas et l’indicateur de moyenne ligne montrent une augmentation de la force de plusieurs têtes, et que l’indicateur de tendance supérieure est à la baisse, une position longue est créée. Lorsque l’indicateur de hauts et bas et l’indicateur de moyenne ligne montrent une augmentation de la force aérienne et que l’indicateur de tendance supérieure est à la hausse, une position vide est créée.

Avantages stratégiques

  1. L’indicateur des hauts et des bas permet d’évaluer efficacement les mouvements de prix et les variations de force, l’indicateur de la ligne de parité permet d’évaluer efficacement la tendance des prix, et la combinaison de ces deux éléments permet de déterminer plus précisément la direction du marché.

  2. La construction d’un portefeuille en combinaison avec un indicateur de super-tendance permet d’éviter la construction de portefeuille trop tôt ou trop tard. L’indicateur de super-tendance permet d’identifier efficacement les points de retournement des prix.

  3. Plusieurs indicateurs se vérifient mutuellement pour réduire les faux signaux.

Risque stratégique

  1. Si l’indicateur de hauteur, de basse et de moyenne émet des signaux erronés, cela peut entraîner des pertes de position.

  2. Si la participation n’est pas élevée, les paramètres de l’indicateur de super-tendance peuvent être mal configurés et émettre un mauvais signal.

  3. Si la tendance est inversée trop rapidement et que le stop loss n’est pas correctement réglé, cela peut entraîner de lourdes pertes.

  4. Le risque peut être réduit par l’optimisation des paramètres de l’indicateur, l’ajustement des points de rupture, etc.

Optimisation de la stratégie

  1. Il est possible de tester différents types d’indicateurs de la moyenne pour trouver la meilleure combinaison de paramètres.

  2. Les paramètres des indicateurs de hauteur, de basse et de moyenne peuvent être optimisés pour rendre le signal plus stable et plus fiable.

  3. Il peut être combiné avec d’autres indicateurs de vérification, tels que MACD, KD, etc., pour réduire les faux signaux.

  4. L’optimisation automatique des paramètres et du poids du signal peut être combinée à des algorithmes d’apprentissage automatique.

  5. Les variétés moins chaudes peuvent être combinées avec des analyses d’émotions pour évaluer la chaleur du marché et éviter les variétés moins chaudes.

Résumer

Cette stratégie permet de juger la tendance et la force du marché à l’aide d’indicateurs de hauts et de bas et d’indicateurs de ligne moyenne, puis de combiner des signaux de filtrage d’indicateurs de super-trend pour établir des positions lors de la confrontation de forces extérieures et de l’inversion de l’indicateur de super-trend, pour réaliser des transactions à faible risque. L’avantage de la stratégie réside dans la vérification de plusieurs indicateurs et la construction de positions en temps opportun, permettant de contrôler efficacement les risques.

Code source de la stratégie
/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)

supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    
f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0

f_getHighLowValue(HighLowPeriod)=>
    currentHigh = highest(high,HighLowPeriod) == high
    currentLow = lowest(low,HighLowPeriod) == low
    currentHigh?1:currentLow?-1:0

inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)

maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection

highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)

hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection

[superTrend, dir] = supertrend(supertrendMult, supertrendLength)

buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)

barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)

// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)

strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)