Diese Strategie verwendet die Überschneidung von zwei exponentiellen gleitenden Durchschnitten (EMA) als Kauf- und Verkaufssignale. Wenn die kurzfristige EMA über die längerfristige EMA von unten kreuzt, erzeugt sie ein Kaufsignal; umgekehrt, wenn die kurzfristige EMA unter die längerfristige EMA von oben kreuzt, erzeugt sie ein Verkaufssignal. Darüber hinaus bestimmt die Strategie, ob der Crossover-Punkt der höchste oder niedrigste Preis innerhalb der letzten 10 Handelsperioden ist, um die Stärke des Trends zu bestätigen. Wenn der Crossover-Punkt der höchste Preis ist, wird der Hintergrund grün gefärbt; wenn es der niedrigste Preis ist, wird er rot gefärbt. Außerdem zeigt die Strategie den Preis des Crossover-Punkts auf dem Chart an.
Diese Strategie verwendet exponentielle gleitende Durchschnitts-Kreuzungen als Kernlogik und berücksichtigt gleichzeitig die relative Position des Kreuzungspunktpreises in der jüngsten Periode, um die Trendstärke zu bestimmen. Insgesamt ist die Strategie-Logik klar, und die Vorteile sind offensichtlich, aber sie hat auch bestimmte Einschränkungen und Risiken. Durch die Einführung von mehr Hilfsbeurteilungsindikatoren, die Festlegung angemessener Risikokontrollmaßnahmen und die Optimierung der Schlüsselparameter können die Stabilität und Rentabilität dieser Strategie weiter verbessert werden.
/*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")