Strategi ini menggunakan persilangan EMA untuk mengesan trend harga. Ia pergi lama apabila EMA cepat melintasi di atas EMA perlahan, dan menutup kedudukan apabila EMA cepat melintasi di bawah EMA perlahan. Terutamanya sesuai untuk produk dengan trend yang jelas, dengan berkesan mengikuti trend dan memperoleh pulangan yang berlebihan.
Penunjuk teras strategi ini ialah EMA. Rumus EMA adalah:
EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)
Di mana t adalah tik semasa, C ((t) adalah harga penutupan semasa, dan n adalah nilai parameter N. EMA adalah teknik purata bergerak dengan faktor tertimbang, memberikan lebih banyak berat kepada harga baru-baru ini, sehingga bertindak balas lebih cepat terhadap perubahan harga terkini.
Strategi ini membina EMA pantas dan perlahan dan mengambil EMA cepat melintasi di atas EMA perlahan sebagai isyarat beli, dan EMA pantas melintasi di bawah EMA perlahan sebagai isyarat jual.
Kelebihan strategi ini ialah:
Risiko utama ialah:
Untuk mengurangkan risiko di atas, langkah-langkah pengoptimuman berikut boleh diambil:
Strategi ini boleh dioptimumkan dari aspek berikut:
Kesimpulannya, ini adalah strategi trend berikut yang mudah dan praktikal menggunakan EMA untuk menilai trend harga. Logiknya jelas dan mudah dilaksanakan. Kelebihannya terletak pada kesederhanaan untuk menyesuaikan parameter dan mengikuti trend dengan berkesan. Kelemahannya terdedah kepada isyarat palsu dan prestasi sebenar mungkin kurang baik daripada backtest. Langkah seterusnya pengoptimuman boleh memberi tumpuan kepada penambahan penapis, parameter dinamik, pembinaan model untuk menjadikan strategi lebih mantap.
/*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)