Strategi ini menggunakan persilangan dua rata-rata bergerak eksponensial (EMA) sebagai sinyal beli dan jual. Ketika EMA periode pendek melintasi di atas EMA periode panjang dari bawah, itu menghasilkan sinyal beli; sebaliknya, ketika EMA periode pendek melintasi di bawah EMA periode panjang dari atas, itu menghasilkan sinyal jual. Selain itu, strategi menentukan apakah titik persilangan adalah harga tertinggi atau terendah dalam 10 periode perdagangan terakhir untuk mengkonfirmasi kekuatan tren. Jika titik persilangan adalah harga tertinggi, latar belakang akan berwarna hijau; jika itu adalah harga terendah, itu akan berwarna merah. Selain itu, strategi menampilkan harga titik persilangan pada grafik.
Strategi ini menggunakan crossover rata-rata bergerak eksponensial sebagai logika utamanya, sementara juga mempertimbangkan posisi relatif harga titik crossover dalam periode terakhir untuk menentukan kekuatan tren. Secara keseluruhan, logika strategi jelas, dan kelebihannya jelas, tetapi juga memiliki keterbatasan dan risiko tertentu. Dengan memperkenalkan lebih banyak indikator penilaian bantu, menetapkan langkah-langkah pengendalian risiko yang wajar, dan mengoptimalkan parameter kunci, stabilitas dan profitabilitas strategi ini dapat ditingkatkan lebih lanjut.
/*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")