
Résumé: Cette stratégie est une stratégie de trading classique basée sur le croisement des moyennes. L’indicateur utilise des moyennes binaires, y compris les moyennes mobiles simples (SMA), les moyennes mobiles indicielles (EMA), les moyennes mobiles pondérées linéaires (VWMA) et les moyennes mobiles pondérées oscillatrices (HMA).
Principe: La logique centrale de la stratégie est le croisement de deux moyennes. En calculant les moyennes de deux paramètres différents, un signal d’achat est généré lorsque la moyenne rapide traverse la moyenne lente au-dessus de la moyenne rapide; un signal de vente est généré lorsque la moyenne rapide traverse la moyenne lente au-dessous de la moyenne rapide.
L’analyse des avantages: les avantages de la stratégie de croisement de deux lignes de parité résident principalement dans la simplicité et la facilité d’utilisation, le jugement de la tendance la plus élémentaire peut être obtenu à partir d’un signal, il n’est pas nécessaire de choisir et d’ajuster trop de paramètres, ce qui est très approprié pour les traders novices. De plus, différents types de lignes de parité sont testés et peuvent choisir différentes combinaisons pour optimiser.
Analyse des risques: le risque principal de cette stratégie réside dans le fait que les stratégies de croisement de la moyenne courantes peuvent avoir un grand nombre de faux signaux, ce qui conduit à des problèmes de petites gains en plusieurs positions plates, ce qui affecte les gains globaux. De plus, la fixation de la longueur de la moyenne rapide et lente peut également être invalide sous certains cycles.
L’orientation de l’optimisation est la suivante: 1) essayer différents tests de cycle pour déterminer la meilleure combinaison de cycles de croisement de la moyenne; 2) considérer l’introduction des paramètres du deuxième groupe de moyenne et des jugements auxiliaires de l’indicateur RSI pour réduire les faux signaux; 3) introduire un jugement conditionnel basé sur la variation de l’indicateur MA en incrément plutôt que sur un simple croisement pour obtenir un jugement de croisement plus fiable.
Résumé: La stratégie adopte le cadre de la stratégie classique de croisement de lignes directrices, effectuant des tests bi-directifs pour trouver la meilleure combinaison de cycles de lignes directrices, tout en ajoutant des arrêts de perte basés sur le ROC et le prix de la ligne directrice. Globalement, c’est une stratégie bi-directive simple et facile à utiliser et conforme à la logique de la négociation quantifiée.
/*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")