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.
Mengira kadar perubahan perubahan jumlah (tingkat perubahan Indikator Perbezaan Volume), untuk mendapatkan hasil penunjuk berdasarkan momentum jumlah.
Mengira Bollinger Bands hasil untuk mendapatkan bbr yang mewakili penyimpangan standard momentum jumlah.
Mengira Bollinger Bands harga dekat untuk mendapatkan bbr1 mewakili deviasi standard harga.
Hitung perbezaan hist antara kedua-dua, yang merupakan penyimpangan standard momentum jumlah dikurangkan penyimpangan standard harga, sebagai penunjuk akhir.
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.
Strategi ini adalah strategi perbezaan jumlah harga berdasarkan kadar perubahan jumlah, yang boleh mencerminkan titik perubahan trend harga terlebih dahulu.
Pengiraan kadar perubahan perubahan jumlah memperkuat kesan utama perubahan jumlah pada harga, yang mengakibatkan prestasi perdagangan yang lebih baik.
Menggabungkan penunjuk momentum jumlah dengan Bollinger Bands harga menjadikan isyarat perdagangan lebih boleh dipercayai.
Menggunakan penghalusan eksponensial tiga pada data Hist membuat isyarat lebih tepat dan lancar.
Menetapkan baris overbought/oversold dan panjang/pendek stop loss/take profit membantu mengawal risiko dengan berkesan.
Banyak parameter yang boleh disesuaikan seperti panjang Bollinger Bands, pengganda penyimpangan standard dan faktor pelemahan Hist membolehkan pengoptimuman strategi.
Data jumlah mungkin tidak benar-benar mencerminkan perdagangan pasaran dan boleh dimanipulasi.
Perbezaan harga-volume mungkin tidak berterusan, dan harga mungkin pecah tanpa berbalik.
Tetapan parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau isyarat yang tidak tepat.
Berhati-hati dengan isyarat palsu dari data jumlah yang tidak normal.
Isyarat pembalikan harus dielakkan apabila trendnya kuat.
Risiko boleh dikurangkan dengan mengoptimumkan parameter, menambah penapis lain, dan menetapkan stop loss / mengambil keuntungan.
Mengoptimumkan parameter Bollinger Bands untuk isyarat yang lebih stabil.
Tambah penapis trend untuk mengelakkan perdagangan terhadap trend.
Masukkan penunjuk lain seperti MACD untuk pengesahan isyarat.
Gunakan AI untuk mengoptimumkan parameter secara automatik.
Tambahkan stop loss / mengambil keuntungan dinamik untuk mengoptimumkan pengurusan risiko.
Menggunakan pembelajaran mesin untuk menentukan kadar kejayaan perbezaan jumlah-harga untuk kualiti isyarat yang lebih tinggi.
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)