Cette stratégie optimise la stratégie de croisement de la moyenne mobile conventionnelle en définissant trois moyennes mobiles avec des périodes différentes, en construisant un modèle de croix dorée avec des moyennes mobiles de 9 périodes, 50 périodes et 100 périodes. Elle génère des signaux d'achat lorsque le MA à court terme franchit le niveau de la moyenne moyenne tandis que le MA à long terme est en hausse.
La stratégie utilise trois moyennes mobiles avec des périodes de 9, 50 et 100. La MA à 9 périodes est la MA à court terme, la MA à 50 périodes est la MA à moyen terme et la MA à 100 périodes est la MA à long terme. Les signaux de trading sont générés par le croisement entre la MA à court terme et la MA à moyen terme.
Comparée à la stratégie de croisement des moyennes mobiles doubles classiques, cette stratégie ajoute la condition de juger des tendances à moyen et long terme avant de générer des signaux de trading, ce qui peut filtrer efficacement certains signaux invalides. Lorsque les tendances à long terme ne sont pas claires, la stratégie ne générera pas de signaux, évitant ainsi d'être piégée dans la consolidation.
Lors de la définition des paramètres de cette stratégie, la combinaison des périodes moyennes mobiles doit être ajustée. Différentes combinaisons de périodes auront un impact sur l'efficacité de la stratégie. Si les paramètres de la période ne sont pas correctement définis, il y a un risque de générer trop de faux signaux. En outre, les traders doivent être conscients des risques systémiques potentiels et arrêter les pertes en temps opportun pour atténuer les risques.
Envisager d'intégrer d'autres indicateurs pour aider à juger des tendances du marché, tels que le MACD, le BOLL, etc., et fixer des conditions d'entrée plus strictes, ou intégrer des indicateurs de volatilité pour construire des moyennes mobiles adaptatives afin que les paramètres puissent être ajustés automatiquement en fonction des conditions du marché afin d'optimiser davantage la stratégie.
Cette stratégie est basée sur le croisement de la moyenne mobile double conventionnelle et ajoute des conditions de filtrage et de jugement à long terme, ce qui peut filtrer efficacement les faux signaux et est adapté pour capturer les mouvements de tendance à court et à moyen terme.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) // Input switch1=input(true, title="Enable Bar Color?") switch2=input(false, title="Show Fast Moving Average") switch3=input(true, title="Show Slow Moving Average") //Calculate Moving Averages movingaverage_fast = sma(close, input(9)) movingaverage_slow = sma(close, input(100)) movingaverage_normal= sma(close, input(50)) //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // Calculation bullish_cross = crossover(movingaverage_fast, movingaverage_normal) bearish_cross = crossunder(movingaverage_fast, movingaverage_normal) //Entry and Exit if bullish_cross and window() and movingaverage_slow > movingaverage_normal strategy.entry("long", strategy.long) strategy.close("long", when = bearish_cross and window()) // Colors bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue barcolor(switch1?bartrendcolor:na) // Output plot(movingaverage_fast, color=color.orange, linewidth=2) plot(movingaverage_slow, color=color.purple, linewidth=3) plot(movingaverage_normal, color=color.blue, linewidth=2) bgcolor(color = showDate and window() ? color.gray : na, transp = 90)