Perdagangan kuantitatif: strategi yang didorong oleh volume


Tanggal Pembuatan: 2024-01-04 15:38:54 Akhirnya memodifikasi: 2024-01-04 15:38:54
menyalin: 1 Jumlah klik: 612
1
fokus pada
1621
Pengikut

Perdagangan kuantitatif: strategi yang didorong oleh volume

Ringkasan

Strategi yang didorong oleh kuantitas menganalisis perubahan volume transaksi untuk menilai perubahan volatilitas dalam sentimen peserta pasar. Ini membagi volume transaksi menjadi volume transaksi beruntun dan volume transaksi beruntun, menghitung rata-rata bergerak tertimbang mereka, menghasilkan sinyal beruntun ketika volume transaksi beruntun menguntungkan, menghasilkan sinyal beruntun ketika volume transaksi beruntun menguntungkan.

Prinsip Strategi

Strategi ini pertama-tama membagi volume transaksi untuk setiap baris K menjadi volume transaksi bertopeng dan volume transaksi bertopeng kosong berdasarkan hubungan antara harga penutupan dan harga pembukaan. Jika harga penutupan lebih besar dari harga pembukaan, maka volume transaksi seluruh baris K adalah volume transaksi bertopeng; Jika harga penutupan lebih kecil dari harga pembukaan, maka volume transaksi bertopeng baris K dihitung berdasarkan rasio ((harga tertinggi-harga pembukaan) / ((harga tertinggi-harga terendah), sisanya adalah volume transaksi bertopeng kosong).

Kemudian menghitung rata-rata bergerak berbobot dari jumlah transaksi multihead dan jumlah transaksi kosong pada garis n-root K terakhir. Jika rata-rata bergerak dari jumlah transaksi multihead lebih besar dari rata-rata bergerak dari jumlah transaksi kosong, dan perbedaan antara keduanya merupakan proporsi dari jumlah transaksi multihead yang lebih besar dari ambang batas yang ditetapkan, maka sinyal multihead dihasilkan. Aturan pembuatan sinyal kosong mirip.

Ada juga setelan volume transaksi rata-rata untuk mengidentifikasi area perhitungan. Jika volume transaksi kosong tidak ada perbedaan yang jelas, akan memberi tahu Anda bahwa Anda saat ini berada dalam keadaan perhitungan.

Analisis Keunggulan

  • Menggunakan informasi volume perdagangan untuk menilai sentimen peserta pasar, sinyal yang dihasilkan memiliki dasar teori
  • Mengidentifikasi area perhitungan secara otomatis untuk menghindari kehilangan sinyal penting
  • Parameter yang dapat disesuaikan untuk berbagai jenis transaksi dan periode waktu
  • Dapat menilai sinyal multihead dan kosong secara terpisah, atau hanya dapat mengikuti sinyal satu sisi

Analisis risiko

  • Data volume transaksi dapat dimanipulasi
  • Parameter default mungkin tidak cocok untuk semua varietas dan perlu dioptimalkan
  • Salah menyusun parameter identifikasi mungkin kehilangan sinyal
  • Mungkin ada kesalahan sinyal dalam jangka pendek

Risiko dapat dikurangi dengan mengoptimalkan parameter, menggabungkan indikator lain, dan sebagainya.

Arah optimasi

  • Uji coba metode yang berbeda untuk menghitung volume transaksi
  • Cobalah berbagai jenis moving average, seperti EMA, SMMA, dan lain-lain.
  • Optimalkan parameter periodik untuk menghitung rata-rata
  • Mengoptimalkan identifikasi parameter perbedaan volume transaksi yang disusun
  • Sinyal penyaringan yang dikombinasikan dengan indikator teknis lainnya

Meringkaskan

Strategi yang didorong oleh kuantitas dapat digunakan secara mandiri atau dalam kombinasi dengan strategi lain. Pengoptimalan parameter dan kombinasi indikator dapat meningkatkan stabilitas dan profitabilitas strategi.

Kode Sumber Strategi
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © Shuttle_Club
//@version=5

strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)

direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')

/////   CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low)  //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low)  //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma)  //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma)  //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2  //determine average value for calculation flat-filter

/////   SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100  //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100  //determine dn zones

if bull
    up += 1, dn := 0
    dn
if bear
    dn += 1, up := 0
    up
if not bull and not bear and all_signal_show
    up := 0, dn := 0
    dn

/////   PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))

strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)

if bull and up==1
    alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
    alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)