Strategi Mengikuti Trend Purata Pergerakan Crossover Buka-Tutup


Tarikh penciptaan: 2024-01-15 14:24:27 Akhirnya diubah suai: 2024-01-15 14:24:27
Salin: 0 Bilangan klik: 857
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Purata Pergerakan Crossover Buka-Tutup

Gambaran keseluruhan

Strategi penelusuran trend pergerakan rata-rata bergerak bersalin adalah strategi penelusuran trend berdasarkan purata bergerak. Strategi ini menilai tren pasaran semasa dengan mengira purata bergerak harga pembukaan dan harga penutupan; melakukan lebih banyak apabila bergerak rata-rata harga pembukaan di atas purata bergerak harga penutupan; melakukan kosong apabila bergerak rata-rata harga pembukaan di bawah purata bergerak harga penutupan.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan hubungan antara harga pembukaan dan harga penutupan untuk menilai trend semasa. Harga pembukaan mencerminkan hubungan penawaran dan permintaan dan psikologi perdagangan di pasaran semasa, dan harga penutupan mencerminkan hasil dagangan pada hari itu.

Strategi ini menggunakan logik ini untuk menilai arah trend semasa dengan mengira purata bergerak harga pembukaan dan harga penutupan. Secara khusus, peraturan keputusannya adalah seperti berikut:

  1. Apabila pergerakan harga penutupan bergerak di atas purata pergerakan harga pembukaan, lakukan lebih banyak. Ini menunjukkan bahawa suasana berbilang kepala sedang meningkat dan boleh masuk ke dalam pelbagai pilihan.

  2. Apabila pergerakan harga penutupan bergerak di bawah purata pergerakan harga pembukaan, kosong. Ini menunjukkan bahawa suasana kosong sedang meningkat dan boleh masuk ke dalam tiket kosong.

  3. Apabila isyarat pembalikan berlaku, kedudukan yang sedia ada berhenti kehilangan.

Strategi ini juga menetapkan tracking stop loss untuk mengunci keuntungan. Setelah masuk, perbezaan titik harga masuk dengan harga semasa akan dikira secara langsung. Apabila harga berjalan melebihi jumlah titik stop loss yang ditetapkan, garis stop loss akan naik ke atas untuk mengunci sebahagian keuntungan.

Secara umum, strategi ini menilai trend pada jangka masa yang berpusat pada jangka masa purata bergerak; hanya memegang kedudukan dalam satu arah pada satu-satu masa; Hentikan kedudukan asalnya adalah kaedah terbalik langsung, dan tidak mempunyai tetapan yang serupa dengan Hentikan ATR; Terdapat tetapan penjejakan hentikan untuk mengunci keuntungan.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Peraturan membuat keputusan yang jelas dan mudah│ Untuk menilai trend berdasarkan hubungan pembukaan dan penutupan, mudah difahami, dan juga mudah untuk mengoptimumkan parameter │

  2. Fleksibiliti untuk memilih jenis purata bergerakTerdapat lebih daripada satu dozen purata bergerak yang boleh dipilih, yang boleh digabungkan secara fleksibel untuk mencari parameter terbaik.

  3. Resolusi yang boleh disesuaikanUntuk membuat isyarat lebih sensitif dan tepat pada masanya, anda boleh menetapkan resolusi strategi 3-4 kali ganda daripada carta.

  4. Mekanisme penghadamanStrategi ini mempunyai tracking stop loss yang dapat mengawal kerugian tunggal dan penarikan balik secara berkesan.

  5. Tempoh pegangan yang boleh disesuaikan◦ Mengendalikan turun naik dan tempoh pegangan dengan menyesuaikan parameter purata bergerak.

  6. Pendapatan risiko yang boleh disesuaikan secara fleksibelAnda boleh mengawal tahap risiko anda dengan menyesuaikan nilai stop loss dan deflection.

Analisis risiko

Strategi ini juga mempunyai beberapa risiko, yang tertumpu kepada beberapa aspek:

  1. Kegagalan untuk mencapai titik balikIsyarat keluar dari strategi ini mungkin sedikit lewat daripada pembalikan harga, yang menyebabkan tail set. Ini dapat dikurangkan dengan memendekkan tempoh purata bergerak dengan sewajarnya.

  2. Tidak sesuai untuk bandar yang bergolak❚ Dalam keadaan yang sangat goncang, strategi ini akan sering membuka kedudukan kosong dan membebankan kos. ❚ Dalam hal ini, titik-titik berhenti boleh dikurangkan atau kitaran purata bergerak dapat diperpanjang.

  3. Penghakiman Indeks TunggalStrategi ini hanya berdasarkan satu set petunjuk dan mudah terjejas oleh kegagalan. Anda boleh mempertimbangkan untuk memperkenalkan petunjuk lain seperti MACD untuk memperkayakan logik strategi.

  4. Parameter mudah dioptimumkanParameter purata bergerak dan parameter berhenti mudah dioptimumkan, prestasi sebenar mungkin lebih lemah daripada pengulangan. Pilihan parameter harus berhati-hati.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Gabungan Indeks Lain│ boleh cuba memperkenalkan penunjuk peningkatan, penunjuk kadar turun naik, dan sebagainya, untuk memperkaya logik strategi, meningkatkan kestabilan│

  2. Parameter yang disesuaikan secara berkala。 dapat menggabungkan jenis pasaran, menyesuaikan parameter purata bergerak secara dinamik, memanjangkan kitaran dalam keadaan trend, memendekkan kitaran dalam keadaan goyah 。

  3. Pembaikan dinamik metrik risiko│ dapat secara dinamik menyesuaikan Stop Loss Points dan bias berdasarkan kepada pergerakan sebenar dalam tempoh baru-baru ini.│

  4. Peningkatan logik stop loss│Stop loss yang sedia ada hanya berdasarkan harga dan nombor mata, boleh dipertimbangkan untuk memperkenalkan cara stop loss yang lebih kaya seperti ATR.│

ringkaskan

Strategi pengesanan trend lintas rata-rata bergerak terbuka adalah strategi yang lebih tipikal untuk menentukan arah trend berdasarkan hubungan penutupan dan penutupan terbuka. Ia mempunyai kelebihan seperti peraturan membuat keputusan yang mudah dan jelas, fleksibiliti yang boleh disesuaikan, risiko yang boleh dikawal, dan juga terdapat masalah seperti titik balik yang salah, tidak sesuai dengan guncangan yang kuat.

Kod 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 ===