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")