Stratégie de croisement de la moyenne mobile à double inversion

Auteur:ChaoZhang est là., Date: le 28 décembre 2023 12:00:27
Les étiquettes:

img

Cette stratégie est basée sur la stratégie de trading classique du croisement des moyennes mobiles. Elle utilise des moyennes mobiles doubles, y compris la moyenne mobile simple (SMA), la moyenne mobile exponentielle (EMA), la moyenne mobile pondérée variable (VWMA) et la moyenne mobile Hull (HMA).

Principe: La logique de base de la stratégie est le double croisement de la moyenne mobile. En calculant deux moyennes mobiles avec des paramètres différents, un signal d'achat est généré lorsque la moyenne mobile rapide traverse la moyenne mobile lente, et un signal de vente est généré lorsque la moyenne mobile rapide traverse la moyenne mobile lente.

L'analyse des avantages: Les principaux avantages de la double stratégie de croisement des moyennes mobiles sont la simplicité et la facilité d'exploitation. Avec un seul signal, le jugement de tendance le plus basique peut être obtenu sans trop de sélections et d'ajustements de paramètres, ce qui est très approprié pour les traders novices. En outre, différents types de moyennes mobiles sont testés pour optimiser différentes combinaisons.

L'analyse des risques: Le principal risque de cette stratégie est que les stratégies de croisement de moyennes mobiles communes auront beaucoup de faux signaux, ce qui entraînera de multiples petits profits et des positions stables, ce qui affecte le rendement global.

Directions d'optimisation: 1) Tester différentes périodes pour déterminer la combinaison optimale de croisements de moyennes mobiles; 2) envisager l'introduction d'un deuxième ensemble de paramètres de moyennes mobiles et d'indicateurs RSI pour faciliter le jugement afin de réduire les faux signaux; 3) introduire un jugement de condition basé sur le changement progressif de l'indicateur MA au lieu d'un simple croisement pour obtenir un jugement de croisement plus fiable.

Résumé: Cette stratégie adopte le cadre de la stratégie de croisement de moyenne mobile traditionnelle pour tester les moyennes mobiles doubles afin de trouver la combinaison optimale de périodes de moyenne mobile. En même temps, elle ajoute des jugements de stop-loss basés sur le ROC et le prix de la moyenne mobile. Dans l'ensemble, il s'agit d'une stratégie de moyenne mobile double simple et facile à utiliser qui est conforme à la logique de négociation quantitative. En outre, les riches idées d'optimisation permettent également de développer cette stratégie.


/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



Plus de