
Ini adalah strategi perdagangan tren multi-arah yang menggabungkan dua penembusan garis rata-rata dan analisis jumlah transaksi. Strategi ini membuat keputusan perdagangan dengan membandingkan isyarat silang rata-rata bergerak jangka pendek dan jangka panjang, dan menggabungkan indikator transaksi. Apabila garis rata-rata jangka pendek melintasi garis rata-rata jangka panjang ke atas dan jumlah transaksi meningkat dengan ketara, sistem akan mengeluarkan banyak isyarat.
Logik teras strategi adalah berdasarkan elemen utama berikut:
Risiko pasaran yang bergolak: Dalam pasaran yang bergolak, persilangan garis rata yang kerap boleh menyebabkan beberapa pecah palsu. Penyelesaian: Anda boleh menambah indikator pengesahan trend seperti ADX atau indikator kekuatan trend.
Risiko tergelincir: Apabila jumlah transaksi meningkat, anda mungkin menghadapi kerugian tergelincir yang lebih besar. Penyelesaian: Ia adalah disyorkan untuk menetapkan toleransi titik tergelincir yang munasabah dan menggunakan harga had apabila anda membuka kedudukan.
Stop loss triggered risk: Stop loss peratusan tetap mungkin terlalu sensitif apabila turun naik pasaran meningkat. Penyelesaian: Anda boleh mempertimbangkan untuk menggunakan penangguhan dinamik ATR atau penyesuaian kadar turun naik.
Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan trend harga dan perubahan jumlah transaksi. Keunggulan strategi ini adalah mekanisme pengesahan berganda dan kawalan risiko yang baik, tetapi risiko penembusan palsu mungkin berlaku dalam pasaran yang bergolak. Strategi ini mempunyai ruang untuk peningkatan yang lebih besar melalui pengoptimuman parameter dinamik dan pengoptimuman isyarat.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with Volume (Long Only) + Stop Loss", overlay=true)
// Input settings for Moving Averages
shortMaLength = input.int(9, title="Short MA Length", minval=1)
longMaLength = input.int(21, title="Long MA Length", minval=1)
// Input settings for Volume
volumeMaLength = input.int(20, title="Volume MA Length", minval=1)
volumeThresholdMultiplier = input.float(1.5, title="Volume Multiplier (x times the average)", step=0.1)
// Input settings for Stop Loss
stopLossPercent = input.float(2.0, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 // Stop loss in percentage
// Calculating Moving Averages
shortMa = ta.sma(close, shortMaLength)
longMa = ta.sma(close, longMaLength)
// Calculating Volume Metrics
volumeMa = ta.sma(volume, volumeMaLength) // Average volume
isVolumeAboveAverage = volume > (volumeMa * volumeThresholdMultiplier) // Volume above threshold
isVolumeIncreasing = volume > volume[1] // Volume increasing compared to the previous bar
// Plotting Moving Averages
plot(shortMa, color=color.blue, title="Short MA")
plot(longMa, color=color.orange, title="Long MA")
// Buy Condition with Volume
longCondition = ta.crossover(shortMa, longMa) and isVolumeAboveAverage and isVolumeIncreasing
exitCondition = ta.crossunder(shortMa, longMa) // Exit when the MAs cross downward
// Calculate Stop Loss Level
var float entryPrice = na // Variable to store entry price
if (strategy.position_size > 0 and na(entryPrice)) // Update entry price only when entering a new trade
entryPrice := strategy.position_avg_price
stopLossLevel = entryPrice * (1 - stopLossPercent) // Stop-loss level based on entry price
// Strategy Entry (Long Only)
if (longCondition)
strategy.entry("Long", strategy.long)
// Close position on Stop Loss or Exit Condition
if (strategy.position_size > 0)
if (low < stopLossLevel) // If the price drops below the stop-loss level
strategy.close("Long", comment="Stop Loss Hit")
if (exitCondition)
strategy.close("Long", comment="Exit Signal Hit")
// Debugging Plots
plot(volumeMa, color=color.purple, title="Volume MA", style=plot.style_area, transp=80)
hline(0, "Zero Line", color=color.gray)