Stratégie de combinaison d'indices à moyenne mobile alignée et à faible indice cumulé élevé

Auteur:ChaoZhang est là., Date: 2023-11-21 15:19:35 Je suis désolé.
Les étiquettes:

img

Résumé

Cette stratégie combine principalement l'indice bas élevé, l'indice moyen mobile et l'indice super tendance pour déterminer l'évolution du marché et les positions ouvertes.

La logique de la stratégie

  1. L'indice High Low juge si le dernier prix au cours d'une certaine période a fait un nouveau sommet ou un nouveau bas, et accumule le score.

  2. L'indice de moyenne mobile juge si le prix est dans une tendance à la hausse en forme d'échelle ou une tendance à la baisse en forme d'échelle.

  3. Combinez les jugements de l'indice bas élevé et de l'indice moyen mobile pour déterminer la tendance du marché, puis trouvez des opportunités de trading combinées avec la direction de l'indice de tendance super. Plus précisément, lorsque l'indice bas élevé et l'indice moyen mobile montrent des forces haussières renforcées et que la direction de l'indice de tendance super est à la baisse, ouvrez des positions longues. Lorsque les deux indices montrent des forces baissières renforcées et que la direction de l'indice de tendance super est à la hausse, ouvrez des positions courtes.

Les avantages

  1. L'indice High Low peut juger efficacement du mouvement des prix et des changements de dynamique. L'indice Motion Average peut déterminer efficacement la tendance des prix. La combinaison des deux peut déterminer plus précisément la direction du marché.

  2. L'ouverture de positions combinée à l'indice Super Trend peut éviter une ouverture prématurée ou tardive de positions.

  3. Plusieurs indicateurs se vérifient et réduisent les faux signaux.

Les risques

  1. Les signaux erronés de l'indice High Low et de l'indice des moyennes mobiles peuvent entraîner des positions à perte.

  2. Une participation insuffisante et des paramètres incorrects de l'indice Super Trend peuvent générer des signaux incorrects.

  3. Des renversements rapides de tendance et des paramètres de stop loss inappropriés peuvent entraîner des pertes importantes.

  4. Les risques peuvent être réduits en optimisant les paramètres de l'indicateur, en ajustant les niveaux de prix de stop loss, etc.

Optimisation

  1. Testez différents types d'indicateurs de moyenne mobile pour trouver la combinaison optimale de paramètres.

  2. Optimiser les paramètres de l'indice bas élevé et de l'indice moyen mobile pour rendre les signaux plus stables et fiables.

  3. Incorporer d'autres indicateurs de vérification, tels que MACD, KD, etc., afin de réduire les faux signaux.

  4. Incorporer des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres et les poids du signal.

  5. Incorporer une analyse du sentiment pour éviter de négocier des produits moins populaires.

Conclusion

Cette stratégie détermine les tendances et l'élan du marché à travers l'indice bas élevé et l'indice de moyenne mobile, puis filtre les signaux à l'aide de l'indice de tendance super, ouvrant des positions lorsque les forces haussières et baissières s'affrontent et que l'indice de tendance super s'inverse.


/*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)


Plus de