La stratégie de négociation des moyennes mobiles de la croix d'or est une stratégie de négociation quantitative classique. Cette stratégie utilise des moyennes mobiles de différentes périodes pour déterminer les tendances du marché pour les positions longues et courtes. Lorsque la moyenne mobile à court terme dépasse la moyenne mobile à long terme, elle est considérée comme un signal d'achat. Lorsque la moyenne mobile à court terme dépasse la moyenne mobile à long terme, elle est considérée comme un signal de vente.
Cette stratégie est basée sur trois moyennes mobiles simples (MMA) de différentes périodes: 50 jours, 100 jours et 200 jours.
Signal d'entrée: lorsque la moyenne mobile de 50 jours dépasse la moyenne mobile de 100 jours, passez long.
Signal de sortie: lorsque la moyenne mobile de 50 jours dépasse la moyenne mobile de 100 jours, position de clôture; ou lorsque le prix de clôture est inférieur à la moyenne mobile de 100 jours, sortie; ou lorsque la moyenne mobile de 100 jours dépasse la moyenne mobile de 200 jours, sortie.
Prendre des bénéfices et arrêter les pertes: fixer un profit de suivi et un stop-loss fixe.
Cette stratégie utilise la capacité des moyennes mobiles pour déterminer efficacement les tendances des prix moyens du marché. Le croisement des moyennes à court terme et à long terme est considéré comme le marché entrant dans une tendance à la hausse ou à la baisse, d'où les signaux longs ou de sortie.
Il suffit de trois moyennes mobiles de différentes périodes.
Les moyennes mobiles ont des capacités de filtrage du bruit qui réduisent l'impact du hasard sur les transactions et rendent les signaux plus fiables.
Les moyennes mobiles reflètent efficacement les variations de la tendance des prix du marché moyen, en utilisant des croisements entre les lignes à court et à long terme pour déterminer les variations de tendance majeures.
Les périodes de moyenne mobile peuvent être ajustées pour différents niveaux de contrôle des risques.
Des croisements fréquents peuvent se produire lorsque les moyennes à court et à long terme sont trop proches, ce qui entraîne des signaux invalides excessifs.
Les moyennes mobiles réagissent lentement aux changements de prix et ne peuvent pas réagir instantanément aux nouvelles du marché et aux événements majeurs.
Le filtrage du bruit signifie également manquer des bénéfices des fluctuations mineures du marché.
Sélection subjective des paramètres: les périodes de moyenne mobile appropriées sont largement subjectives et dépendent du marché spécifique.
Ajouter des filtres pour réduire les faux signaux, tels que des filtres de gamme de prix pour limiter les signaux aux mouvements au-dessus d'une certaine magnitude.
Incorporer d'autres indicateurs pour les stratégies combinées, qui peuvent améliorer la précision du signal, par exemple les indicateurs de volatilité ou de volume.
Ajouter des modules d'optimisation adaptative pour optimiser dynamiquement les périodes moyennes mobiles sur la base d'algorithmes d'apprentissage automatique, ce qui permet une adaptation aux conditions changeantes du marché.
Incorporer des modèles avancés d'apprentissage en profondeur au lieu de moyennes mobiles pour des capacités supérieures d'extraction et de modélisation des caractéristiques.
La stratégie de négociation des moyennes mobiles Golden Cross est une stratégie typique de suivi des tendances. Elle reflète les tendances des prix moyens du marché de manière simple et pratique, adaptée aux débutants. Cependant, elle présente également quelques défauts qui peuvent être améliorés en améliorant la qualité du signal, en la combinant avec d'autres indicateurs techniques, en introduisant des mécanismes adaptatifs, etc. pour s'adapter à des marchés plus complexes.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1m basePeriod: 1m 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/ // © CJDeegan //@version=4 strategy(title = "[LIVE] Golden Cross", overlay=true) // ------------Functions------------ //Percent to Decimal Conversion perToDec(a) => a * 0.01 //Price Difference to Tick diffToTick(a,b) => (a - b) / syminfo.mintick // ------------Strategy Inputs------------ takeProfitInput = input(300, "Take Profit Price (% Gain)") stopLossInput = input(25, "Stop Loss (% Loss)") startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2018, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // ------------Populate Indicators------------ //EMA sma50 = sma(close,50) sma100 = sma(close,100) sma200 = sma(close,200) // ------------Entry Logic------------ //Guards entryGuard = true //Triggers entryTrigger = crossover(sma50,sma100) //Conditions entryCondition = entryGuard and entryTrigger //Calculations //Execution if (inDateRange and entryCondition) strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry") //------------Exit Logic------------ //Guards //Triggers exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200) //Conditions exitCondition = exitTrigger //Calculations //Take Profit takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput)) //Take Profit Ticks takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price) //StopLoss stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput)) //Execution if (inDateRange) strategy.close("Long", when = exitCondition, comment = "Sell Trigger") strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice) //Plots plot(sma50, "SMA 50", color = color.blue) plot(sma100, "SMA 100", color = color.green) plot(sma200, "SMA 200", color = color.yellow) entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr) profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr) stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr) fill(entry,profit, color=color.green) fill(entry,stop, color=color.red)