Sumber dimuat naik... memuat...

Strategi Perdagangan Osilator Siklus Delta Perbezaan Volume

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

img

Ringkasan

Strategi ini menilai penukaran kitaran lembu dan lembu dengan mengira kadar perubahan perubahan jumlah, yang tergolong dalam strategi perbezaan harga-volume. Ia menggabungkan penunjuk momentum jumlah dan Bollinger Band harga untuk menentukan kesan utama perubahan jumlah pada harga dan menangkap titik perubahan trend.

Logik Perdagangan

  1. Mengira kadar perubahan perubahan jumlah (tingkat perubahan Indikator Perbezaan Volume), untuk mendapatkan hasil penunjuk berdasarkan momentum jumlah.

  2. Mengira Bollinger Bands hasil untuk mendapatkan bbr yang mewakili penyimpangan standard momentum jumlah.

  3. Mengira Bollinger Bands harga dekat untuk mendapatkan bbr1 mewakili deviasi standard harga.

  4. Hitung perbezaan hist antara kedua-dua, yang merupakan penyimpangan standard momentum jumlah dikurangkan penyimpangan standard harga, sebagai penunjuk akhir.

  5. Apabila hist melintasi di atas 0, ia adalah isyarat masuk pendek, dan apabila melintasi di bawah 0, ia adalah isyarat masuk panjang.

Dengan mengira kadar perubahan perubahan jumlah, kesan utama perubahan jumlah pada harga diperkuat. Apabila jumlah berbalik sementara harga belum berbalik, hist akan melintasi di atas atau di bawah 0, menghasilkan isyarat perdagangan. Ia boleh meramalkan titik perubahan trend harga terlebih dahulu.

Kelebihan

  1. Strategi ini adalah strategi perbezaan jumlah harga berdasarkan kadar perubahan jumlah, yang boleh mencerminkan titik perubahan trend harga terlebih dahulu.

  2. Pengiraan kadar perubahan perubahan jumlah memperkuat kesan utama perubahan jumlah pada harga, yang mengakibatkan prestasi perdagangan yang lebih baik.

  3. Menggabungkan penunjuk momentum jumlah dengan Bollinger Bands harga menjadikan isyarat perdagangan lebih boleh dipercayai.

  4. Menggunakan penghalusan eksponensial tiga pada data Hist membuat isyarat lebih tepat dan lancar.

  5. Menetapkan baris overbought/oversold dan panjang/pendek stop loss/take profit membantu mengawal risiko dengan berkesan.

  6. Banyak parameter yang boleh disesuaikan seperti panjang Bollinger Bands, pengganda penyimpangan standard dan faktor pelemahan Hist membolehkan pengoptimuman strategi.

Risiko

  1. Data jumlah mungkin tidak benar-benar mencerminkan perdagangan pasaran dan boleh dimanipulasi.

  2. Perbezaan harga-volume mungkin tidak berterusan, dan harga mungkin pecah tanpa berbalik.

  3. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau isyarat yang tidak tepat.

  4. Berhati-hati dengan isyarat palsu dari data jumlah yang tidak normal.

  5. Isyarat pembalikan harus dielakkan apabila trendnya kuat.

Risiko boleh dikurangkan dengan mengoptimumkan parameter, menambah penapis lain, dan menetapkan stop loss / mengambil keuntungan.

Peluang Peningkatan

  1. Mengoptimumkan parameter Bollinger Bands untuk isyarat yang lebih stabil.

  2. Tambah penapis trend untuk mengelakkan perdagangan terhadap trend.

  3. Masukkan penunjuk lain seperti MACD untuk pengesahan isyarat.

  4. Gunakan AI untuk mengoptimumkan parameter secara automatik.

  5. Tambahkan stop loss / mengambil keuntungan dinamik untuk mengoptimumkan pengurusan risiko.

  6. Menggunakan pembelajaran mesin untuk menentukan kadar kejayaan perbezaan jumlah-harga untuk kualiti isyarat yang lebih tinggi.

Kesimpulan

Strategi ini memperkuat kesan utama perubahan jumlah pada harga dengan mengira kadar perubahan perubahan jumlah, yang membolehkan pengesanan awal titik perubahan trend. Berbanding dengan penunjuk jumlah tunggal, ia mempunyai kebolehpercayaan dan ketepatan yang lebih tinggi. Tetapi risiko seperti manipulasi jumlah dan penembusan perbezaan harus dijaga melalui pengoptimuman parameter, penapis indikator dll. Pada masa akan datang, AI boleh dimanfaatkan untuk pengoptimuman parameter adaptif untuk meningkatkan lagi kestabilan dan keuntungan 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 lanjut