Cette stratégie utilise le croisement de deux moyennes mobiles exponentielles (EMA) comme signaux d'achat et de vente. Lorsque l'EMA à courte période traverse au-dessus de l'EMA à plus longue période depuis le bas, elle génère un signal d'achat; inversement, lorsque l'EMA à courte période traverse au-dessous de l'EMA à plus longue période depuis le haut, elle génère un signal de vente. De plus, la stratégie détermine si le point de croisement est le prix le plus élevé ou le plus bas au cours des 10 dernières périodes de négociation pour confirmer la force de la tendance. Si le point de croisement est le prix le plus élevé, l'arrière-plan sera de couleur verte; s'il s'agit du prix le plus bas, il sera de couleur rouge. De plus, la stratégie affiche le prix du point de croisement sur le graphique.
Cette stratégie utilise des croisements de moyennes mobiles exponentielles comme logique de base, tout en tenant compte de la position relative du prix du point de croisement au cours de la dernière période pour déterminer la force de la tendance. Dans l'ensemble, la logique de la stratégie est claire et les avantages sont évidents, mais elle présente également certaines limitations et risques. En introduisant plus d'indicateurs de jugement auxiliaires, en définissant des mesures raisonnables de contrôle des risques et en optimisant les paramètres clés, la stabilité et la rentabilité de cette stratégie peuvent être encore améliorées.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m 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/ // © ZenAndTheArtOfTrading // @version=5 strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Get user input emaLength1 = input.int(title="EMA #1 Length", defval=5) emaLength2 = input.int(title="EMA #2 Length", defval=10) // Get MAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) // Draw MAs plot(ema1, color=color.blue, title="EMA 1") plot(ema2, color=color.red, title="EMA 2") // Detect crossovers bool crossOver = ta.crossover(ema1, ema2) bool crossUnder = ta.crossunder(ema1, ema2) bool cross = crossOver or crossUnder //float crossPrice = ta.valuewhen(cross, close, 0) float crossPrice = cross ? close : na // Check if the crossover price is the highest price over the past 10 bars bool highestPrice = crossOver for i = 1 to 10 if crossPrice <= close[i] highestPrice := false break // Check if the crossover price is the lowest price over the past 10 bars bool lowestPrice = crossUnder for i = 1 to 10 if crossPrice >= close[i] lowestPrice := false break // Flag the bar if it is a high/low close bgcolor(highestPrice ? color.new(color.green, 50) : na) bgcolor(lowestPrice ? color.new(color.red, 50) : na) // Display crossover price if cross highestEmaPrice = ema1 > ema2 ? ema1 : ema2 label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white) if highestPrice and strategy.position_size == 0 strategy.entry(id="Buy", direction=strategy.long) if lowestPrice and strategy.position_size == 0 strategy.entry(id="Sell", direction=strategy.short) // Exit trades when short-term EMA is breached if strategy.position_size > 0 and crossUnder strategy.close("Buy") if strategy.position_size < 0 and crossOver strategy.close("Sell")