Strategi perdagangan silang harga tinggi braket terbuka


Tanggal Pembuatan: 2023-10-18 11:22:57 Akhirnya memodifikasi: 2023-10-18 11:22:57
menyalin: 1 Jumlah klik: 633
1
fokus pada
1617
Pengikut

Strategi perdagangan silang harga tinggi braket terbuka

Ringkasan

Strategi ini didasarkan pada persilangan antara harga mulai dan harga tinggi untuk menentukan sinyal perdagangan. Lakukan lebih banyak ketika harga mulai naik, dan kosong ketika harga mulai turun. Gunakan moving average untuk meluruskan data harga, mengurangi kebisingan perdagangan.

Prinsip Strategi

  1. Putuskan apakah menggunakan resolusi siklus alternatif berdasarkan parameter masukan ((useRes) 。 Jika digunakan, atur siklus berdasarkan stratRes。

  2. Jika digunakan, pilih jenis rata-rata bergerak berdasarkan basisType, dan basisLen mengatur panjang periode.

  3. Dapatkan seri data dari harga buka (open) dan harga tutup (close). Jika menggunakan moving average, gunakan jenis moving average dan parameter yang dipilih untuk pengolahan halus.

  4. Bandingkan harga mulai saat ini x dengan harga mulai seri openSeries. Jika x lebih besar dari openSeries, maka trendState adalah multihead, jika tidak, maka kosong.

  5. Ketika harga di atas melewati harga bergerak rata-rata menghasilkan sinyal longCond, dan ketika harga di bawah melewati harga bergerak rata-rata menghasilkan sinyal shortCond.

  6. Masukkan posisi multihead atau kosong sesuai dengan sinyal make over. Jika stop loss tracking diaktifkan, atur titik stop loss dan jarak deflection.

Keunggulan Strategis

  1. Perhitungan sinyal perdagangan menggunakan dua seri yang berbeda dari harga mulai dan harga tinggi, menghindari keterbatasan satu seri data.

  2. Aplikasi teknologi moving average dapat menyaring kebisingan pasar jangka pendek dan mengunci tren utama.

  3. Fleksibel mengkonfigurasi jenis moving average, menyesuaikan parameter untuk efek yang optimal.

  4. Anda dapat memilih untuk menggunakan tracking stop loss untuk mengontrol risiko dan mengunci keuntungan.

  5. Ada banyak ruang untuk mengoptimalkan strategi, yang dapat disesuaikan dengan varietas dan lingkungan pasar.

Risiko Strategis

  1. Sumber sinyal transaksi tunggal, sinyal jarang, mudah kehilangan.

  2. Ada masalah dengan rata-rata bergerak yang tertinggal dan kemungkinan kehilangan peluang jangka pendek.

  3. Tracking stop loss setting yang tidak tepat dapat menyebabkan stop loss yang terlalu cepat atau terlalu besar.

  4. Parameter yang tidak tepat dapat menyebabkan transaksi virtual yang terlalu sering dan mempengaruhi kinerja hard disk.

  5. Parameter harus disesuaikan dengan varietas dan lingkungan pasar yang berbeda, sehingga sulit untuk dioptimalkan.

  6. Anda dapat memperkaya sumber sinyal dengan menambahkan penilaian indikator lain atau memperkenalkan model pembelajaran mesin. Anda dapat menyesuaikan jenis dan parameter rata-rata bergerak untuk mendapatkan efek smoothing yang optimal. Anda dapat dengan hati-hati mengatur stop loss, dengan pelepasan yang tepat untuk mendapatkan lebih banyak keuntungan. Anda dapat melakukan pengembalian yang memadai untuk memastikan parameter yang dapat diandalkan.

Arah optimasi strategi

  1. Menambahkan penilaian indikator teknis lainnya, seperti Brinband, KD, dan lain-lain, untuk memperkaya sinyal perdagangan.

  2. Menggunakan model pembelajaran mesin untuk memproses penilaian sinyal.

  3. Optimalkan parameter moving average untuk menemukan kombinasi parameter optimal.

  4. Mengoptimalkan parameter tracking stop loss, menyeimbangkan stop loss amplitudo dan profit capture.

  5. Tambahkan fungsi optimasi parameter untuk mencari parameter optimal secara otomatis.

  6. Templat parameter khusus untuk berbagai varietas dikembangkan.

  7. Pengembangan kerangka pengukuran kuantitatif, strategi iterasi cepat.

Meringkaskan

Strategi ini didasarkan pada persilangan harga dan harga tinggi untuk menilai sinyal perdagangan, menggunakan teknologi moving average untuk memfilter kebisingan. Parameter dapat dikonfigurasi secara fleksibel, mencapai berbagai efek. Memiliki beberapa keuntungan, tetapi juga memiliki beberapa masalah, seperti sedikit sinyal, lag, dll.

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

//@version=2

//strategy(title = "Open Close Cross Strategy", shorttitle = "OCC Strategy", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)

// 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 )")
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 )")
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
    v7 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    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) => use ? request.security(syminfo.tickerid, res, exp) : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
//closeSeries = useMA ? reso(variant(basisType, close, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(close, useRes, stratRes)
openSeries  = useMA ? reso(variant(basisType, open, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(open, useRes, stratRes)
x = openSeries[1]
trendState  = x > openSeries ? true : x < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color = x > openSeries ? #006600 : #990000, title = "Bar Colours")
// channel outline
closePlot   = plot(x, title = "Close Line", color = #009900, linewidth = 2, style = line, transp = 90)
openPlot    = plot(openSeries, title = "Open Line", color = #CC0000, linewidth = 2, style = line, transp = 90)
// channel fill
closePlotU  = plot(trendState ? x : na, transp = 100, editable = false)
openPlotU   = plot(trendState ? openSeries : na, transp = 100, editable = false)
closePlotD  = plot(trendState ? na : x, 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(openSeries, x)
shortCond   = crossunder(openSeries, x)
// entries and base exit
strategy.entry("long", true, when = longCond)
strategy.entry("short", false, 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 ===