
Strategi ini menggunakan persilangan dua purata bergerak indeks ((EMA) sebagai isyarat membeli-belah. Apabila EMA jangka pendek dari bawah ke atas melalui EMA jangka panjang, ia menghasilkan isyarat membeli; sebaliknya, apabila EMA jangka pendek dari atas ke bawah melalui EMA jangka panjang, ia menghasilkan isyarat menjual. Strategi ini juga akan menilai sama ada titik persilangan adalah harga tertinggi atau terendah dalam 10 kitaran perdagangan terakhir, untuk memastikan kekuatan trend.
Strategi ini menggunakan indeks bergerak rata-rata cross sebagai logik teras, dan digabungkan dengan kedudukan harga titik persimpangan dalam jangka masa terdekat untuk menilai kekuatan trend. Secara keseluruhan, logik strategi jelas, kelebihan jelas, tetapi terdapat juga batasan dan risiko tertentu. Dengan memperkenalkan lebih banyak petunjuk penilaian tambahan, menetapkan langkah-langkah kawalan risiko yang munasabah, mengoptimumkan parameter utama, anda dapat meningkatkan lagi kestabilan dan keuntungan strategi ini.
/*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")