Tren Pelacakan Rata-rata Gerak Strategi Crossover

Penulis:ChaoZhang, Tanggal: 2024-01-29 16:52:46
Tag:

img

Gambaran umum

Ini adalah strategi berbasis rata-rata bergerak sederhana yang bekerja dengan baik dengan pasangan koin yang berbeda. Ini memetakan harga pembukaan dan harga penutupan rata-rata bergerak, dan memutuskan untuk memasuki posisi panjang atau keluar berdasarkan apakah kedua garis telah saling melintasi. Idenya adalah bahwa ia memasuki posisi ketika harga penutupan rata-rata meningkat, yang mungkin menunjukkan momentum naik dalam harga. Kemudian ia keluar dari posisi ketika harga penutupan rata-rata menurun, yang mungkin menunjukkan momentum menurun. Ini spekulatif, tetapi kadang-kadang dapat memprediksi tindakan harga dengan sangat baik.

Logika Strategi

Strategi ini pertama-tama memilih jenis rata-rata bergerak, termasuk EMA, SMA, RMA, WMA dan VWMA. Kemudian menetapkan periode lookback untuk rata-rata bergerak, biasanya antara 10 dan 250 bar.

Logika perdagangan khusus adalah:

  1. Menghitung rata-rata bergerak dari harga buka dan harga tutup;
  2. Bandingkan nilai rata-rata bergerak antara harga tutup dan harga buka;
  3. Masukkan posisi panjang jika rata-rata pergerakan harga tutup melintasi di atas rata-rata pergerakan harga terbuka;
  4. Tutup posisi panjang jika rata-rata pergerakan harga dekat melintasi di bawah rata-rata pergerakan harga terbuka.

Memasuki posisi menganggapnya sebagai tanda pergerakan harga ke atas, sementara keluar menganggap pergerakan harga ke bawah.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Pengaturan parameter yang fleksibel yang dapat dioptimalkan untuk pasangan koin yang berbeda untuk spesifisitas yang lebih baik;
  2. Logika sederhana yang mudah dimengerti dan diimplementasikan;
  3. Pengembalian yang sangat tinggi dapat dicapai untuk beberapa pasangan mata uang, stabilitas umumnya baik;
  4. Kemampuan penyesuaian yang tinggi dalam menampilkan indikator yang berbeda.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Untuk beberapa pasangan koin dan parameter, pengembalian dan stabilitas bisa rendah;
  2. Tidak dapat merespon baik terhadap fluktuasi harga jangka pendek, kinerja yang buruk untuk koin yang sangat fluktuatif;
  3. Pemilihan rata-rata bergerak periode melihat kembali tidak cukup ilmiah, agak subjektif.

Solusi dan optimasi:

  1. Menggunakan kerangka waktu yang lebih lama seperti 12H, 1D untuk mengurangi perdagangan yang tidak perlu dan meningkatkan stabilitas;
  2. Tambahkan fungsi optimasi parameter untuk secara otomatis menguji kombinasi parameter yang berbeda untuk parameter terbaik;
  3. Tambahkan pilihan adaptif dari periode lookback rata-rata bergerak untuk membiarkan sistem secara otomatis memutuskan periode optimal.

Kesimpulan

Singkatnya, ini adalah strategi sederhana yang menggunakan indikator rata-rata bergerak untuk menentukan tren harga dan titik infleksi. Ini dapat mencapai hasil yang sangat baik dengan menyesuaikan parameter, dan merupakan strategi pelacakan tren yang efektif yang layak ditingkatkan dan diterapkan lebih lanjut.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Lebih banyak