
Strategi ini ialah sistem penjejakan arah aliran dinamik berdasarkan saluran purata bergerak dwi, digabungkan dengan mekanisme pengurusan risiko. Strategi ini menggunakan dua purata bergerak mudah (SMA) untuk membina saluran dagangan, di mana rel atas menggunakan purata bergerak yang dikira oleh harga tertinggi, dan rel bawah menggunakan purata bergerak yang dikira oleh harga terendah. Sistem ini menggunakan lima harga penutupan K-line berturut-turut menembusi landasan atas sebagai isyarat masuk, dan menggunakan lima harga penutupan K-line berturut-turut jatuh di bawah landasan bawah atau berundur 25% dari titik tertinggi sebagai isyarat keluar, merealisasikan arah aliran dinamik pengesanan dan kawalan risiko.
Prinsip teras strategi adalah untuk menangkap arah aliran harga melalui saluran purata bergerak berganda dan mewujudkan mekanisme masuk dan keluar yang ketat:
Strategi ini membina sistem perdagangan penjejakan arah aliran yang lengkap melalui saluran purata bergerak berganda, digabungkan dengan pengesahan kemasukan yang ketat dan mekanisme keluar berganda, untuk mencapai penjejakan arah aliran yang berkesan dan kawalan risiko yang berkesan. Kelebihan strategi ini ialah logik pelaksanaan yang jelas dan kawalan risiko yang sempurna, tetapi ia masih memerlukan pengoptimuman parameter untuk persekitaran pasaran yang berbeza, dan boleh dipertingkatkan lagi dengan menambahkan penapisan persekitaran pasaran, pengesahan tempoh berbilang masa, dsb. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif dengan struktur lengkap dan logik yang ketat, yang sesuai untuk aplikasi dalam persekitaran pasaran dengan arah aliran yang jelas.
/*backtest
start: 2025-01-02 00:00:00
end: 2025-01-09 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parameters for Moving Averages
upperMALength = input.int(10, title="Upper MA Length")
lowerMALength = input.int(8, title="Lower MA Length")
stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100
// Calculate Moving Averages
upperMA = ta.sma(high, upperMALength)
lowerMA = ta.sma(low, lowerMALength)
// Plot Moving Averages
plot(upperMA, color=color.red, title="Upper Moving Average")
plot(lowerMA, color=color.green, title="Lower Moving Average")
// Initialize variables
var int upperCounter = 0
var int lowerCounter = 0
var float entryPrice = na
var float highestPrice = na
// Update counters based on conditions
if (low <= upperMA)
upperCounter := 0
else
upperCounter += 1
if (high >= lowerMA)
lowerCounter := 0
else
lowerCounter += 1
// Entry condition: 5 consecutive bars above the Upper MA
if (upperCounter == 5 and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
highestPrice := high // Initialize highest price
// Update the highest price after entry
if (strategy.position_size > 0)
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Exit condition: 5 consecutive bars below the Lower MA
if (lowerCounter == 5 and strategy.position_size > 0)
strategy.close("Long", comment="Exit: 5 bars below Lower MA")
// Stop-loss condition: Exit if market closes below 25% of the highest price since entry
stopLossCondition = low < highestPrice * (1 - stopLossPercent)
if (stopLossCondition and strategy.position_size > 0)
strategy.close("Long", comment="Exit: Stop Loss")