Strategi Perdagangan Osilator Siklus Delta

Penulis:ChaoZhang, Tanggal: 2023-10-30 11:45:42
Tag:

img

Gambaran umum

Strategi ini menilai konversi siklus bull dan bear dengan menghitung tingkat perubahan perubahan volume, yang merupakan bagian dari strategi divergensi volume-harga.

Logika Perdagangan

  1. Hitung laju perubahan perubahan volume (tingkat perubahan Indikator Perbedaan Volume), untuk mendapatkan hasil indikator berdasarkan momentum volume.

  2. Menghitung Bollinger Bands dari hasil untuk mendapatkan bbr yang mewakili standar deviasi momentum volume.

  3. Hitung Bollinger Bands dari harga dekat untuk mendapatkan bbr1 yang mewakili standar deviasi harga.

  4. Menghitung perbedaan hist antara keduanya, yang merupakan standar deviasi momentum volume dikurangi standar deviasi harga, sebagai indikator akhir.

  5. Ketika hist melintasi di atas 0, itu adalah sinyal masuk pendek, dan ketika melintasi di bawah 0, itu adalah sinyal masuk panjang.

Dengan menghitung tingkat perubahan perubahan volume, efek utama perubahan volume pada harga diperkuat. Ketika volume terbalik sementara harga belum terbalik, hist akan melintasi di atas atau di bawah 0, menghasilkan sinyal perdagangan. Ini dapat memprediksi titik balik tren harga sebelumnya.

Keuntungan

  1. Strategi ini adalah strategi divergensi volume-harga berdasarkan tingkat perubahan volume, yang dapat mencerminkan titik balik tren harga sebelumnya.

  2. Perhitungan tingkat perubahan perubahan volume memperkuat efek utama perubahan volume pada harga, menghasilkan kinerja perdagangan yang lebih baik.

  3. Menggabungkan indikator momentum volume dengan Bollinger Bands harga membuat sinyal perdagangan lebih dapat diandalkan.

  4. Menggunakan triple exponential smoothing pada data Hist membuat sinyal lebih akurat dan halus.

  5. Menetapkan garis overbought/oversold dan long/short stop loss/take profit order membantu mengendalikan risiko secara efektif.

  6. Banyak parameter yang dapat disesuaikan seperti panjang Bollinger Bands, pengganda standar deviasi dan faktor pelemahan Hist memungkinkan optimasi strategi.

Risiko

  1. Data volume mungkin tidak benar-benar mencerminkan perdagangan pasar dan dapat dimanipulasi.

  2. Perbedaan harga volume mungkin tidak bertahan, dan harga mungkin pecah tanpa membalikkan.

  3. Pengaturan parameter yang tidak benar dapat menyebabkan over-trading atau sinyal yang tidak akurat.

  4. Hati-hati dengan sinyal palsu dari data volume abnormal.

  5. Sinyal pembalikan harus dihindari ketika tren kuat.

Risiko dapat dikurangi dengan mengoptimalkan parameter, menambahkan filter lain, dan mengatur stop loss/take profit.

Peluang Peningkatan

  1. Mengoptimalkan Bollinger Bands parameter untuk sinyal yang lebih stabil.

  2. Tambahkan filter tren untuk menghindari perdagangan melawan tren.

  3. Masukkan indikator lain seperti MACD untuk konfirmasi sinyal.

  4. Menggunakan AI untuk mengoptimalkan parameter secara otomatis.

  5. Tambahkan stop loss / take profit dinamis untuk mengoptimalkan manajemen risiko.

  6. Menerapkan pembelajaran mesin untuk menentukan tingkat keberhasilan divergensi volume-harga untuk kualitas sinyal yang lebih tinggi.

Kesimpulan

Strategi ini memperkuat efek utama perubahan volume pada harga dengan menghitung laju perubahan volume, memungkinkan deteksi awal titik balik tren. Dibandingkan dengan indikator volume tunggal, ia memiliki keandalan dan akurasi yang lebih tinggi. Tetapi risiko seperti manipulasi volume dan divergensi harus dijaga melalui optimasi parameter, filter indikator dll. Di masa depan, AI dapat dimanfaatkan untuk optimasi parameter adaptif untuk meningkatkan stabilitas dan profitabilitas strategi.


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

//// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tathal and special thanks to oakwhiz for his porting of my custom volume indicator

//@version=5
strategy('Volume Difference Delta Cycle Oscillator', 'VDDC Osc', default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=5000)

startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startYear = input.int(title='Start Year', defval=2010, minval=1800, maxval=2100)

endDate = input.int(title='End Date', defval=31, minval=1, maxval=31)
endMonth = input.int(title='End Month', defval=12, minval=1, maxval=12)
endYear = input.int(title='End Year', defval=2021, minval=1800, maxval=2100)

// Normalize Function
normalize(_src, _min, _max) =>
    // Normalizes series with unknown min/max using historical min/max.
    // _src      : series to rescale.
    // _min, _min: min/max values of rescaled series.
    var _historicMin = 10e10
    var _historicMax = -10e10
    _historicMin := math.min(nz(_src, _historicMin), _historicMin)
    _historicMax := math.max(nz(_src, _historicMax), _historicMax)
    _min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10)


// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true

// Stop loss & Take Profit Section     
l_sl_inp = input(2.0, title='Long Stop Loss %') / 100
l_tp_inp = input(4.0, title='Long Take Profit %') / 100

l_stop_level = strategy.position_avg_price * (1 - l_sl_inp)
l_take_level = strategy.position_avg_price * (1 + l_tp_inp)

s_sl_inp = input(2.0, title='Short Stop Loss %') / 100
s_tp_inp = input(4.0, title='Short Take Profit %') / 100

s_stop_level = strategy.position_avg_price * (1 + s_sl_inp)
s_take_level = strategy.position_avg_price * (1 - s_tp_inp)

src = close

//  Volume Differnce Indicator Delta

float change_src = ta.change(src)
float i_obv = ta.cum(change_src > 0 ? volume : change_src < 0 ? -volume : 0 * volume)
float i_pvt = ta.pvt

float result = ta.change(i_obv - i_pvt)

float nresult = ta.ema(normalize(result, -1, 1), 20)


// Volume Differnce Indicator Delta %B
length = input.int(20, minval=1, title='Volume Bands Length')
mult = input.float(2.0, minval=0.001, maxval=50, title='Volume Bands StdDev')
basis = ta.ema(nresult, length)
dev = mult * ta.stdev(nresult, length)
upper = basis + dev
lower = basis - dev
bbr = (nresult - lower) / (upper - lower)

// Normal %B, Based on close

l1 = input.int(20, minval=1, title='Bollinger Bands Length')
src2 = close
mult1 = input.float(2.0, minval=0.001, maxval=50, title='Bollinger Bands StdDev')
basis1 = ta.sma(src2, l1)
dev1 = mult1 * ta.stdev(src2, l1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
bbr1 = (src - lower1) / (upper1 - lower1)

/// Final Output Line

hist = ta.ema(ta.ema(ta.ema(bbr1 - bbr, input(2, title='Hist Smoothing Factor #1')), input(2, title='Hist Smoothing Factor #2')), input(2, title='Hist Smoothing Factor #3'))

/// Overbought / Oversold Line Creation
oversold = input(-.1)
overbought = input(.4)
hline(oversold, linewidth=2, color=color.new(#81c784, 62))
hline(overbought, linewidth=2, color=color.new(#c2185b, 38))

/// Long & Short Conditions

short = hist > overbought
long = hist < oversold

/// Colors & Plotting
histColor = hist >= 0 ? hist[1] < hist ? #26A69A : #B2DFDB : hist[1] < hist ? #FFCDD2 : #EF5350
plot(hist, title='Histogram', style=plot.style_columns, color=color.new(histColor, 0))

CrossBgColor = long ? color.new(#81c784, 62) : short ? color.new(#c2185b, 38) : na
bgcolor(color.new(CrossBgColor, 90))

/// Strategy Methodology

if inDateRange
    strategy.entry('long', strategy.long, when=long, stop=l_stop_level, limit=l_take_level)

if inDateRange and strategy.position_size > 0
    strategy.close_all(when=short)

if inDateRange
    strategy.entry('short', strategy.short, when=short, stop=s_stop_level, limit=s_take_level)

if inDateRange and strategy.position_size < 0
    strategy.close_all(when=long)



Lebih banyak