
Strategi ini adalah sistem pengesanan trend yang menggabungkan purata bergerak berkala dan analisis kuantiti transaksi. Strategi ini mengesahkan trend keseluruhan melalui tiga garis rata EMA9, WMA20 dan WMA200 dalam kitaran sunset, sambil memperkenalkan indikator OBV ((On Balance Volume) dan EMA untuk mengesahkan jumlah transaksi, untuk mencapai perdagangan yang lebih stabil.
Strategi ini berfungsi berdasarkan dua syarat utama:
Strategi ini, dengan menggabungkan analisis trend pelbagai kitaran dan pengesahan kuantiti transaksi, membina sistem pengesanan trend yang agak lengkap. Logik strategi jelas, kawalan risiko masuk akal, tetapi masih ada ruang untuk pengoptimuman.
/*backtest
start: 2024-09-01 00:00:00
end: 2025-02-18 08:00:00
period: 5d
basePeriod: 5d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Strategy: Daily MAs + OBV", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1)
//=== Daily Moving Averages Calculation =========================
// Get daily timeframe values using request.security.
dailyEMA9 = request.security(syminfo.tickerid, "D", ta.ema(close, 9))
dailyWMA20 = request.security(syminfo.tickerid, "D", ta.wma(close, 20))
dailyWMA200 = request.security(syminfo.tickerid, "D", ta.wma(close, 200))
// Check if each moving average is trending upward (current > previous).
ema9_up = dailyEMA9 > nz(dailyEMA9[1])
wma20_up = dailyWMA20 > nz(dailyWMA20[1])
wma200_up = dailyWMA200 > nz(dailyWMA200[1])
trend_condition = ema9_up and wma20_up and wma200_up
//=== OBV and its 13-period EMA Calculation ================================
// Calculate OBV manually using a cumulative sum.
obv_val = ta.cum(close > close[1] ? volume : (close < close[1] ? -volume : 0))
// 13-period EMA of the OBV.
ema13_obv = ta.ema(obv_val, 13)
// Condition: 13-period EMA of OBV must be above the OBV value.
obv_condition = ema13_obv > obv_val
//=== Entry Condition ===================================================
// Both trend and OBV conditions must be met.
buy_condition = trend_condition and obv_condition
//=== Entry and Exit Orders =============================================
// Enter a long position when the buy condition is met and no position is open.
if buy_condition and strategy.position_size <= 0
strategy.entry("Long", strategy.long)
// Exit the position when the condition is no longer met.
if not buy_condition and strategy.position_size > 0
strategy.close("Long")
//=== Explicit Entry and Exit Markers ====================================
// Determine the exact bar where entry and exit occur.
entry_signal = (strategy.position_size > 0 and (strategy.position_size[1] <= 0))
exit_signal = (strategy.position_size == 0 and (strategy.position_size[1] > 0))
plotshape(entry_signal, title="Entry Signal", location=location.belowbar, style=shape.labelup, text="BUY", color=color.new(color.green, 0), size=size.normal)
plotshape(exit_signal, title="Exit Signal", location=location.abovebar, style=shape.labeldown, text="SELL", color=color.new(color.red, 0), size=size.normal)
//=== Plots for Visualization ===============================================
// Plot daily moving averages.
plot(dailyEMA9, color=color.blue, title="Daily EMA 9")
plot(dailyWMA20, color=color.orange, title="Daily WMA 20")
plot(dailyWMA200, color=color.red, title="Daily WMA 200")
// Plot OBV and its 13-period EMA using color.new() to specify transparency.
plot(obv_val, color=color.new(color.gray, 30), title="OBV")
plot(ema13_obv, color=color.new(color.green, 0), title="13-Period EMA OBV")