
Strategi ini menggunakan persimpangan dua indeks moving average (EMA) sebagai sinyal jual beli. Ketika EMA periode lebih pendek melintasi EMA periode lebih panjang dari bawah ke atas, menghasilkan sinyal beli; sebaliknya, ketika EMA periode lebih pendek melintasi EMA periode lebih panjang dari atas ke bawah, menghasilkan sinyal jual. Strategi ini juga menilai apakah titik persimpangan adalah harga tertinggi atau terendah dalam 10 siklus perdagangan terakhir, untuk mengkonfirmasi kekuatan tren. Jika titik persimpangan adalah tertinggi, harga akan ditampilkan dalam warna hijau di latar belakang; jika harga terendah, akan ditampilkan dalam warna merah.
Strategi ini menggunakan crossover rata-rata bergerak indeks sebagai logika inti, sekaligus menggabungkan posisi relatif harga titik persimpangan dalam jangka pendek, untuk menilai kekuatan tren. Secara keseluruhan, logika strategi jelas, keunggulan jelas, tetapi ada juga keterbatasan dan risiko tertentu. Dengan memperkenalkan lebih banyak indikator penilaian tambahan, mengatur langkah-langkah pengendalian risiko yang masuk akal, 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")