Trend Crossover Purata Bergerak Zhukov Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-12-12 12:24:11
Tag:

img

Ringkasan

Strategi ini menggunakan persilangan purata bergerak dan penunjuk ATR untuk melaksanakan trend automatik selepas perdagangan. Ia pergi panjang apabila EMA cepat melintasi di atas EMA perlahan, dan pergi pendek apabila EMA cepat melintasi di bawah EMA perlahan. Pada masa yang sama, ia menggunakan penunjuk ATR untuk menilai arah trend dan hanya menghantar isyarat perdagangan apabila ATR menunjukkan bahawa trend hadir.

Logika Strategi

Strategi ini terutamanya berdasarkan dua penunjuk teknikal:

  1. Garis EMA: Ia menggunakan dua garis EMA dengan parameter yang berbeza, pantas dan perlahan. Apabila EMA pantas melintasi di atas EMA perlahan, ia dianggap isyarat panjang. Apabila EMA pantas melintasi di bawah EMA perlahan, ia dianggap isyarat pendek.

  2. Indikator ATR: Indikator ATR mengukur besar dan kekuatan turun naik harga untuk menilai kecenderungan pergerakan semasa. Nilai ATR kecil menunjukkan penyatuan manakala nilai ATR menaik besar menunjukkan trend menaik, dan nilai ATR menurun besar menunjukkan trend menurun.

Dengan menggabungkan persilangan EMA untuk mengenal pasti peluang perdagangan dan penapis ATR untuk mengelakkan rejim trend rendah, strategi ini bertujuan untuk mengelakkan tersingkir semasa pasaran bergelora.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Hanya berdagang apabila ATR mengenal pasti trend, yang membantu mengelakkan ditipu semasa rejim bukan arah.

  2. Menggunakan logik silang EMA cepat vs perlahan yang mudah untuk mengenal pasti isyarat perdagangan.

  3. Sensitiviti dan kelancaran EMA yang boleh disesuaikan melalui penyesuaian parameter.

  4. Sistem perdagangan automatik lengkap dibina dengan hanya dua penunjuk mudah, mudah dilaksanakan dalam Pine editor.

  5. Keperluan minimum untuk penyuntingan parameter yang berterusan, pendekatan set and forget.

Analisis Risiko

Beberapa risiko yang perlu diperhatikan termasuk:

  1. Persalinan EMA boleh menghasilkan isyarat palsu, yang membawa kepada kerugian yang tidak perlu. Parameter EMA yang lebih lancar boleh membantu.

  2. Penghakiman trend ATR juga boleh terdedah kepada kesilapan, kehilangan peluang perdagangan.

  3. Tiada pertimbangan asas jangka masa yang lebih tinggi. peristiwa berita utama boleh mencetuskan pembalikan yang crossover EMA pantas mungkin terlepas, memerlukan campur tangan manual.

Risiko ini boleh dikurangkan melalui pengoptimuman.

Arahan pengoptimuman

Arah pengoptimuman utama termasuk:

  1. Menambah penunjuk lain untuk mewujudkan sistem gabungan dan meningkatkan ketepatan isyarat. Contoh - mengintegrasikan RSI untuk mengelakkan risiko overbought / oversold.

  2. Memilih parameter EMA dan ATR yang lebih sesuai dengan pasaran tertentu berdasarkan simbol dan jangka masa yang didagangkan.

  3. Melaksanakan pengoptimuman parameter dinamik melalui pembelajaran mesin untuk menyesuaikan penunjuk berdasarkan keadaan pasaran semasa dan bukannya menggunakan nilai statik tetap.

Kesimpulan

Secara keseluruhan ini adalah trend yang sangat praktikal mengikuti strategi. Dengan hanya gabungan dua penunjuk yang mudah, ia membina sistem perdagangan yang agak lengkap. Melalui penyesuaian parameter, ia boleh disesuaikan dengan peniaga dengan pilihan dan gaya yang berbeza. Pada masa yang sama, pengembangan dan pengoptimuman lanjut dapat menjadikan prestasi strategi lebih baik. Logik perdagangan yang mudah namun berkesan ditambah dengan potensi pengoptimuman yang kuat menjadikan ini strategi kuantitatif yang berbaloi untuk diteliti dan digunakan dalam jangka panjang.


/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This strategy has been created for GMT trade 4h by Zhukov


//@version=5
strategy('ZhukovTrade', 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=100, minval=1, maxval=9999)
emaSlow = input.int(title='Slow EMA', defval=200, 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 2023 23:59'))


// 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) 
shortCondition = ta.crossunder(fastEMA, slowEMA) 
// ORDERS:
// Set take profit and stop loss percentages
take_profit_percent = input(0, title="Take Profit Percent")
stop_loss_percent = input(0, title="Stop Loss Percent")
// Submit entry (or reverse) orders


atrPeriod = input(12, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if longCondition and inDateRange 
    if longOK and direction<0

        strategy.entry(id='long', direction=strategy.long, alert_message = "LONG")
if shortCondition and inDateRange 
    if shortOK and direction>0
        strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT")

// Submit exit orders in the cases where we trade only long or only short

if strategy.position_size > 0 and take_profit_percent
    strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent)
if strategy.position_size > 0 and stop_loss_percent
    strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent)

if strategy.position_size < 0 and stop_loss_percent
    strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent)
if strategy.position_size < 0 and take_profit_percent
    strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)


Lebih lanjut