
Strategi penelusuran tren persilangan rata-rata bergerak adalah strategi perdagangan kuantitatif yang menjejaki trend pasaran. Strategi ini menghasilkan isyarat perdagangan dengan mengira rata-rata bergerak cepat dan rata-rata bergerak perlahan dan menangkap titik-titik perubahan trend pasaran apabila mereka bersilang.
Prinsip utama strategi ini adalah menggunakan parameter yang berbeza untuk menilai trend pasaran melalui EMA. Strategi ini mentakrifkan satu EMA cepat dan satu EMA perlahan. Apabila EMA cepat melintasi EMA perlahan dari bawah, ia menunjukkan trend pasaran bertukar menjadi bull; apabila EMA cepat melintasi EMA perlahan dari atas ke bawah, ia menunjukkan trend pasaran bertukar menjadi bear.
Apabila dipakai, strategi akan membuka lebih banyak kad, dan apabila dipakai, strategi akan membuka kad kosong. Strategi akan terus memegang kedudukan sehingga stop loss stop trigger atau isyarat pembalikan silang berlaku lagi.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Untuk mengurangkan risiko, anda boleh mempertimbangkan untuk menentukan jenis trend dengan menggunakan indikator lain, atau menetapkan nisbah stop loss yang lebih longgar.
Strategi ini juga boleh dioptimumkan dalam beberapa aspek:
Strategi pengesanan tren silang rata-rata bergerak secara keseluruhan adalah strategi perdagangan tren yang mudah dan praktikal. Idea teras strategi ini jelas, mudah dipraktikkan, tetapi terdapat ruang untuk pengoptimuman. Dengan cara menyesuaikan parameter, penghakiman pelbagai kitaran, dan hentian dinamik, anda boleh terus meningkatkan kestabilan dan tahap keuntungan strategi.
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Zhukov trade', overlay=true, calc_on_every_tick=true, currency=currency.USD)
// INPUT:
// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title='Fast EMA', defval=10, minval=1, maxval=9999)
emaSlow = input.int(title='Slow EMA', defval=20, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both')
// Options that configure the backtest date range
startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00'))
endDate = input(title='End Date', defval=timestamp('31 Dec 2030 23:59'))
// Set take profit and stop loss percentages
take_profit_percent = input(1.0, title ="Take Profit Percent") / 100.0
stop_loss_percent = input(1.0, title ="Stop Loss Percent") / 100.0
// CALCULATIONS:
// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
emapos = ta.ema(close, 200)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2)
plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2)
plot(series=emapos, color=color.new(color.red, 0), linewidth=2)
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'
// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA) and inDateRange
shortCondition = ta.crossunder(fastEMA, slowEMA) and inDateRange
// ORDERS:
// Submit entry (or reverse) orders
if longCondition and longOK
strategy.entry(id='long', direction=strategy.long)
if shortCondition and shortOK
strategy.entry(id='short', direction=strategy.short)
// Exit orders
if strategy.position_size > 0 and longOK
strategy.exit(id='exit long', from_entry='long', limit=strategy.position_avg_price * (1 + take_profit_percent), stop=strategy.position_avg_price * (1 - stop_loss_percent))
if strategy.position_size < 0 and shortOK
strategy.exit(id='exit short', from_entry='short', limit=strategy.position_avg_price * (1 - take_profit_percent), stop=strategy.position_avg_price * (1 + stop_loss_percent))