Diese Strategie verwendet EMA-Crossover, um Preistrends zu verfolgen. Es geht lang, wenn die schnelle EMA über die langsame EMA überschreitet, und schließt die Position, wenn die schnelle EMA unter die langsame EMA überschreitet.
Der Kernindikator dieser Strategie ist der EMA.
EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)
Die EMA ist eine gleitende Durchschnittstechnik mit einem gewichteten Faktor, die den jüngsten Preisen mehr Gewicht verleiht und so schneller auf die jüngsten Kursänderungen reagiert.
Die Strategie konstruiert schnelle und langsame EMAs und nimmt schnelle EMA-Kreuzung über langsame EMA als Kaufsignal und schnelle EMA-Kreuzung unter langsame EMA als Verkaufssignal. Die schnelle EMA-Kreuzung oben zeigt den Beginn einer neuen Runde des Anstiegs an, während schnelle EMA-Kreuzung unten das Ende des Aufwärtstrends und den Beginn eines Rückgangs anzeigt.
Die Vorteile dieser Strategie sind:
Die wichtigsten Risiken sind:
Zur Verringerung der oben genannten Risiken können folgende Optimierungsmaßnahmen ergriffen werden:
Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:
Zusammenfassend ist dies eine einfache und praktische Trendfolgestrategie, bei der die EMA verwendet wird, um Preistrends zu beurteilen. Die Logik ist klar und einfach zu implementieren. Die Vorteile liegen in der Einfachheit, Parameter anzupassen und Trends effektiv zu verfolgen. Die Nachteile sind anfällig für falsche Signale und die tatsächliche Leistung kann unter den Backtests liegen. Die nächsten Schritte der Optimierung können sich auf das Hinzufügen von Filtern, dynamischen Parametern, Modellbau konzentrieren, um die Strategie robuster zu machen.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EMA交叉策略by GPT", format = format.inherit, overlay = true, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, initial_capital = 1000000) // 定義回測交易開始和結束時間的變數 start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000")) end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000")) // 判斷是否在回測交易時間範圍內 in_range = true // Define input variables fast_length = input(title="Fast EMA Length", type=input.integer, defval=5) slow_length = input(title="Slow EMA Length", type=input.integer, defval=20) // Define EMAs fast_ema = ema(close, fast_length) slow_ema = ema(close, slow_length) // Define buy and sell signals buy_signal = crossover(fast_ema, slow_ema) sell_signal = crossunder(fast_ema, slow_ema) // Buy signal if in_range and buy_signal strategy.entry("Buy", strategy.long, when=in_range) // Sell signal if in_range and sell_signal strategy.close("Buy", when=sell_signal)