Strategi Crossover Rata-rata Pergerakan Mengikuti Tren


Tanggal Pembuatan: 2024-01-29 16:52:46 Akhirnya memodifikasi: 2024-01-29 16:52:46
menyalin: 3 Jumlah klik: 596
1
fokus pada
1617
Pengikut

Strategi Crossover Rata-rata Pergerakan Mengikuti Tren

Ringkasan

Strategi ini didasarkan pada strategi sederhana moving average yang dapat memberikan hasil yang baik pada pasangan mata uang yang berbeda. Ini memetakan rata-rata buka dan rata-rata tutup, memutuskan untuk membangun atau keluar dari posisi multihead ketika dua garis bersilang. Prinsipnya adalah untuk membangun posisi ketika harga tutup rata-rata naik, yang mungkin menandakan kenaikan harga di masa depan.

Prinsip Strategi

Strategi ini dimulai dengan memilih jenis rata-rata bergerak berdasarkan setelan, termasuk EMA, SMA, RMA, WMA, dan VWMA. Kemudian mengatur siklus untuk menghitung rata-rata bergerak, biasanya 10 hingga 250 garis K. Memilih jenis rata-rata bergerak yang berbeda dan jumlah siklus dapat menghasilkan efek yang sama sekali berbeda berdasarkan pasangan mata uang yang berbeda.

Logika transaksi spesifik dari strategi ini adalah:

  1. Menghitung rata-rata bergerak dari harga pembukaan dan harga penutupan;
  2. Bandingkan nilai rata-rata harga penutupan dengan rata-rata harga pembukaan;
  3. Jika harga tutup melewati harga buka rata-rata, maka posisi overhead akan dibuat;
  4. Jika harga tutup berada di bawah rata-rata harga bukaan, maka posisi overhead dihapus.

Ketika posisi didirikan dianggap sebagai pertanda kenaikan harga, ketika posisi ditutup dianggap sebagai pertanda penurunan harga.

Analisis Keunggulan Strategi

Strategi ini memiliki beberapa keuntungan utama:

  1. Pengaturan parameter yang fleksibel, dapat memilih parameter optimal berdasarkan pasangan mata uang yang berbeda, sehingga sangat terfokus;
  2. Logika sederhana, mudah dipahami dan diterapkan;
  3. Dalam beberapa pasangan mata uang, Anda bisa mendapatkan tingkat pengembalian yang sangat tinggi, dan secara keseluruhan stabilitas yang lebih baik.
  4. Indikator yang berbeda dapat ditampilkan sesuai dengan kebutuhan dan tingkat kustomisasi yang tinggi.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Dalam beberapa pasangan mata uang dan parameter, tingkat pengembalian dan stabilitas tidak tinggi;
  2. Tidak dapat merespon perubahan harga jangka pendek secara efektif dan tidak efektif terhadap mata uang yang sangat fluktuatif;
  3. Periode rata-rata bergerak yang dipilih tidak cukup ilmiah dan bersifat subjektif.

Cara mengatasi dan mengoptimalkannya:

  1. Memilih periode waktu yang panjang, seperti 12 jam dan 1 hari, dapat mengurangi transaksi yang tidak perlu dan meningkatkan stabilitas;
  2. Menambahkan fungsi optimasi parameter, secara otomatis menguji kombinasi parameter yang berbeda untuk menemukan parameter yang optimal;
  3. Menambahkan fungsi untuk memilih periode rata-rata bergerak secara otomatis, sehingga sistem dapat secara otomatis menentukan periode yang optimal.

Meringkaskan

Strategi ini secara keseluruhan logis sederhana, menggunakan indikator moving average untuk menentukan tren harga dan titik balik. Hal ini dapat mencapai efek yang sangat baik dengan penyesuaian parameter, merupakan strategi pelacakan tren yang efektif, layak untuk lebih disempurnakan dan diterapkan.

Kode Sumber Strategi
/*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)