Strategi Penggerak Tenaga Volume

Penulis:ChaoZhang, Tarikh: 2024-01-04 15:38:54
Tag:

img

Ringkasan

Strategi yang didorong oleh tenaga jumlah menilai perubahan sentimen peserta pasaran dengan menganalisis perubahan jumlah dagangan. Ia membahagikan jumlah dagangan menjadi jumlah kenaikan dan jumlah penurunan, mengira purata bergerak tertimbang mereka, menghasilkan isyarat kenaikan apabila jumlah kenaikan mendominasi, dan menghasilkan isyarat penurunan apabila jumlah penurunan mendominasi.

Logika Strategi

Strategi pertama membahagikan jumlah dagangan setiap lilin kepada jumlah kenaikan dan jumlah penurunan berdasarkan hubungan antara harga penutupan dan harga pembukaan. Jika harga penutupan lebih besar daripada harga pembukaan, keseluruhan jumlah dagangan lilin adalah jumlah kenaikan. Jika harga penutupan kurang daripada harga pembukaan, jumlah kenaikan dikira mengikut nisbah (harga tertinggi - harga pembukaan) / (harga tertinggi - harga terendah), dan selebihnya adalah jumlah penurunan.

Kemudian ia mengira purata bergerak tertimbang jumlah bullish dan bearish dari n candlestick terakhir masing-masing. Jika purata bergerak jumlah bullish lebih besar daripada jumlah bearish, dan perbezaannya dibahagikan dengan jumlah bullish lebih besar daripada ambang yang telah ditetapkan, isyarat bullish dihasilkan. Peraturan untuk menghasilkan isyarat bearish adalah sama.

Ia juga menetapkan garis asas dengan jumlah dagangan purata untuk mengenal pasti zon penyatuan. Jika tidak ada perbezaan yang ketara antara jumlah kenaikan dan penurunan, ia menunjukkan bahawa pasaran sedang dalam penyatuan.

Analisis Kelebihan

  • Menggunakan maklumat jumlah untuk menilai sentimen peserta pasaran dengan asas teori
  • Mengenali zon penyatuan secara automatik untuk mengelakkan kehilangan isyarat penting
  • Parameter yang boleh disesuaikan menyesuaikan diri dengan produk perdagangan dan jangka masa yang berbeza
  • Boleh mengenal pasti isyarat menaik dan menurun secara berasingan atau mengikuti satu sisi sahaja

Analisis Risiko

  • Data jumlah dagangan boleh dimanipulasi
  • Parameter lalai mungkin tidak sesuai dengan semua produk, pengoptimuman diperlukan
  • Parameter pengenalan konsolidasi yang tidak betul mungkin terlepas isyarat
  • Isyarat palsu boleh berlaku dalam tempoh yang singkat

Kaedah seperti pengoptimuman parameter dan menggabungkan dengan penunjuk lain boleh membantu mengurangkan risiko.

Arahan pengoptimuman

  • Uji kaedah yang berbeza untuk mengira jumlah dagangan
  • Cuba pelbagai jenis purata bergerak, seperti EMA, SMMA dll
  • Mengoptimumkan tempoh pengiraan jumlah purata
  • Mengoptimumkan parameter untuk mengenal pasti penyatuan
  • Gabungkan dengan penunjuk teknikal lain untuk menapis isyarat

Ringkasan

Strategi yang didorong oleh tenaga jumlah dengan bijak menilai pengedaran jumlah dagangan bullish dan bearish untuk menentukan sentimen pasaran dan perubahan trend. Ia boleh digunakan secara bersendirian atau digabungkan dengan strategi lain. Penambahbaikan lebih lanjut terhadap kestabilan dan keuntungan dapat dicapai melalui pengoptimuman parameter dan kombinasi penunjuk.


/*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)
    

Lebih lanjut