Strategi Mengikuti Tren Rata-rata Pergerakan Silang Buka-Tutup


Tanggal Pembuatan: 2024-01-15 14:24:27 Akhirnya memodifikasi: 2024-01-15 14:24:27
menyalin: 0 Jumlah klik: 857
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Rata-rata Pergerakan Silang Buka-Tutup

Ringkasan

Strategi pelacakan tren lintas rata-rata bergerak terbuka adalah strategi pelacakan tren yang didasarkan pada rata-rata bergerak. Strategi ini menilai tren pasar saat ini dengan menghitung rata-rata bergerak dari harga buka dan harga tutup; lakukan lebih banyak ketika melewati rata-rata bergerak dari harga buka di atas rata-rata bergerak dari harga tutup; lakukan kosong ketika melewati rata-rata bergerak dari harga buka di bawah rata-rata bergerak dari harga tutup.

Prinsip Strategi

Logika inti dari strategi ini adalah untuk menilai tren saat ini berdasarkan hubungan antara harga buka dan harga tutup. Harga buka mencerminkan hubungan penawaran dan permintaan di pasar saat ini dan psikologis perdagangan, dan harga tutup mencerminkan hasil perdagangan hari itu. Secara umum, jika harga tutup lebih tinggi dari harga buka, itu berarti tren hari itu kuat, suasana multi arah lebih baik; jika harga tutup lebih rendah dari harga buka, itu berarti tren hari itu lemah, suasana udara lebih berat.

Strategi ini menggunakan logika ini untuk menilai arah tren saat ini dengan menghitung rata-rata bergerak dari harga buka dan harga tutup. Secara khusus, aturan keputusannya adalah sebagai berikut:

  1. Ketika pergerakan harga close out melewati pergerakan harga open out, maka terjadi over. Ini menunjukkan bahwa suasana over sedang meningkat dan bisa masuk ke over.

  2. Ketika harga close out bergerak di bawah harga open out, maka akan ada blank. Ini berarti bahwa suasana kosong saat ini sedang meningkat dan bisa masuk ke dalam blank.

  3. Ketika terjadi sinyal reversal, posisi yang ada di posisi tersebut akan terhenti.

Strategi ini juga mengatur tracking stop loss untuk mengunci keuntungan. Setelah entry, akan dihitung secara real-time selisih poin dari harga masuk ke harga saat ini. Ketika harga berjalan di atas titik stop loss yang ditetapkan, garis stop loss akan naik ke atas untuk mengunci sebagian dari keuntungan.

Secara keseluruhan, strategi ini menilai tren dalam rentang waktu dengan siklus panjang rata-rata bergerak; hanya memegang posisi dalam satu arah pada satu waktu; stop loss pada posisi asli adalah reversal langsung, dan tidak memiliki pengaturan yang mirip dengan stop loss ATR; ada pengaturan tracking stop loss untuk mengunci keuntungan.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Aturan Keputusan yang Jelas dan Sederhana│ Untuk menilai tren berdasarkan hubungan buka dan tutup, mudah dipahami, dan juga mudah untuk mengoptimalkan parameter│

  2. Fleksibilitas dalam memilih jenis moving averageAda lebih dari selusin jenis rata-rata bergerak yang dapat dipilih, yang dapat dikombinasikan secara fleksibel untuk mencari parameter terbaik.

  3. Fleksibel untuk menyesuaikan resolusi yang digunakanUntuk membuat sinyal lebih sensitif dan tepat waktu, resolusi strategi dapat disetel menjadi 3-4 kali grafik.

  4. Ada mekanisme penghentian kerugianStrategi ini memiliki tracking stop loss yang dapat mengontrol kerugian dan penarikan.

  5. Bisa disesuaikan untuk jangka waktu yang berbedaVolatilitas dan periode kepemilikan dapat dikontrol dengan menyesuaikan parameter moving average.

  6. Fleksibilitas untuk menyesuaikan risiko dan keuntunganAnda dapat mengontrol tingkat risiko dengan menyesuaikan stop loss dan deflection.

Analisis risiko

Strategi ini juga memiliki beberapa risiko, yang terkonsentrasi pada beberapa hal:

  1. Kehilangan titik balikStrategi ini mungkin akan memperlambat sinyal keluarnya sedikit dari pembalikan harga, yang menyebabkan tailing. Ini dapat dikurangi dengan mengurangi siklus rata-rata bergerak secara tepat.

  2. Tidak cocok untuk kota gempaDalam situasi yang sangat bergolak, strategi ini akan sering membuka posisi kosong dan membebani biaya. Ini dapat dengan tepat melonggarkan titik stop loss, atau memperpanjang siklus rata-rata bergerak.

  3. Penghakiman Indikator TunggalStrategi ini hanya didasarkan pada satu set indikator yang rentan terhadap kegagalan. Dapat dipertimbangkan untuk memperkenalkan indikator lain seperti MACD, yang memperkaya logika strategi.

  4. Parameter yang mudah dioptimalkanParameter moving average dan parameter stop loss mudah dioptimalkan, dan kinerja yang sebenarnya mungkin lebih lemah dari pengembalian.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Kombinasi Indikator LainnyaAnda dapat mencoba untuk memperkenalkan indikator inkremental, indikator volatilitas, dan lain-lain untuk memperkaya logika strategi dan meningkatkan stabilitas.

  2. Periodikasi penyesuaian parameter。 dapat menggabungkan jenis pasar, secara dinamis menyesuaikan parameter rata-rata bergerak, memperpanjang siklus dalam tren, dan mempersingkat siklus dalam gerakan getaran。

  3. Perubahan dinamika metrik risikoStop loss point dan deflection dapat disesuaikan secara dinamis berdasarkan fluktuasi aktual dalam periode terakhir.

  4. Peningkatan Stop Loss LogicStop loss yang ada hanya didasarkan pada harga dan poin, dan dapat mempertimbangkan untuk memperkenalkan stop loss yang lebih kaya seperti ATR.

Meringkaskan

Strategi pelacakan tren lintas rata-rata bergerak terbuka adalah strategi yang lebih khas untuk menentukan arah tren berdasarkan hubungan perdagangan terbuka dan menutup. Ini memiliki keuntungan seperti aturan keputusan yang sederhana dan jelas, fleksibilitas yang dapat disesuaikan, risiko yang dapat dikontrol, dan juga masalah seperti titik balik yang salah, tidak cocok untuk getaran yang kuat. Strategi ini dapat dioptimalkan dari segi kaya dasar indikator, penyesuaian parameter dinamis, dan meningkatkan logika stop loss, sehingga dapat lebih baik menangkap peluang tren, menanggapi perubahan pasar.

Kode Sumber Strategi
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===