Strategi Pemecahan Volum Beli/Jual Dinamik Turun Naik


Tarikh penciptaan: 2023-12-26 11:15:31 Akhirnya diubah suai: 2023-12-26 11:15:31
Salin: 0 Bilangan klik: 634
1
fokus pada
1623
Pengikut

Strategi Pemecahan Volum Beli/Jual Dinamik Turun Naik

Gambaran keseluruhan

Strategi ini membuat penilaian kosong melalui jumlah pembelian dan penjualan yang disesuaikan dalam tempoh masa, digabungkan dengan VWAP lingkaran, penapisan Brin, dan pemantauan trend dengan kebarangkalian tinggi. Ia juga memperkenalkan mekanisme hentian hentian dinamik, yang dapat mengawal risiko unilateral dengan berkesan.

Prinsip Strategi

  1. Mengira Indeks Jualan Beli Dalam Tempoh Masa Sesuai
  • BV: Jumlah pembelian, jumlah yang dihasilkan melalui pembelian titik rendah
  • SV: Jualan, jumlah yang dihasilkan melalui jualan tertinggi
  1. Memproses jumlah yang dibeli dan dijual
  • Menggunakan 20 kitaran EMA untuk meluruskan
  • Pemisahan positif-negatif bagi jumlah pembelian dan penjualan yang telah diuruskan
  1. Mencari arah
  • Penunjuk lebih besar daripada 0 adalah bullish, kurang daripada 0 adalah bearish
  1. Penghakiman Brin dan VWAP Bersama
  • Harga di atas VWAP dan Indeks Peningkatan Tanda-tanda
  • Harga di bawah VWAP dan indeks turun sebagai isyarat shorting
  1. Hentikan Dinamika Hentikan
  • Peratusan Stop Loss Set ATR Per Hari

Kelebihan Strategik

  1. Jumlah beli dan jual dapat mencerminkan kekuatan sebenar pasaran, menangkap tenaga potensi trend
  2. Garis pusingan VWAP menentukan arah trend kitaran besar, tali pinggang Brin menentukan isyarat pecah
  3. ATR dinamik dengan set stop loss untuk mengunci keuntungan maksimum dan mengelakkan overdraft

Risiko Strategik

  1. Terdapat beberapa kesilapan dalam data pembelian dan penjualan yang boleh menyebabkan kesalahan penilaian.
  2. Indikator tunggal yang digabungkan dengan pertimbangan, mudah menyebabkan isyarat salah
  3. Parameter Brin Belt yang tidak betul akan mengurangkan kejayaan penembusan

Arah pengoptimuman strategi

  1. Indeks pembelian dan penjualan jangka masa yang lebih baik
  2. Penapisan untuk penunjuk tambahan seperti peningkatan jumlah dagangan
  3. Secara dinamik menyesuaikan Brin Belt Parameter untuk meningkatkan kecekapan penembusan

ringkaskan

Strategi ini memanfaatkan sepenuhnya kebarangkalian pembelian dan penjualan, ditambah dengan VWAP dan Brin Belt untuk menghasilkan isyarat kebarangkalian tinggi, dengan kawalan risiko yang berkesan melalui hentian hentian dinamik, merupakan strategi perdagangan kuantitatif yang stabil dan cekap. Dengan pengoptimuman berterusan parameter dan peraturan, kesannya dijangka lebih jelas.

Kod sumber strategi
/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 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/
// © original author ceyhun
//@ exlux99 update

//@version=5
strategy('Buying Selling Volume Strategy', format=format.volume, precision=0, overlay=false)

weekly_vwap = request.security(syminfo.tickerid, "W", ta.vwap(hlc3))

vi = false
customTimeframe = input.timeframe("60", group="Entry Settings")

allow_long = input.bool(true, group="Entry Settings")
allow_short = input.bool(false, group="Entry Settings")

xVolume = request.security(syminfo.tickerid, customTimeframe, volume)
xHigh = request.security(syminfo.tickerid, customTimeframe, high)
xLow = request.security(syminfo.tickerid, customTimeframe, low)
xClose = request.security(syminfo.tickerid, customTimeframe, close)

BV = xHigh == xLow ? 0 : xVolume * (xClose - xLow) / (xHigh - xLow)
SV = xHigh == xLow ? 0 : xVolume * (xHigh - xClose) / (xHigh - xLow)

vol = xVolume > 0 ? xVolume : 1
TP = BV + SV
BPV = BV / TP * vol
SPV = SV / TP * vol
TPV = BPV + SPV

tavol20 = request.security(syminfo.tickerid, customTimeframe, ta.ema(vol, 20))
tabv20= request.security(syminfo.tickerid, customTimeframe, ta.ema(BV, 20))
tasv20= request.security(syminfo.tickerid, customTimeframe, ta.ema(SV, 20))
VN = vol / tavol20
BPN = BV / tabv20 * VN * 100
SPN = SV / tasv20 * VN * 100
TPN = BPN + SPN

xbvp = request.security(syminfo.tickerid, customTimeframe,-math.abs(BPV))
xbpn = request.security(syminfo.tickerid, customTimeframe,-math.abs(BPN))
xspv = request.security(syminfo.tickerid, customTimeframe,-math.abs(SPV))
xspn = request.security(syminfo.tickerid, customTimeframe,-math.abs(SPN))

BPc1 = BPV > SPV ? BPV : xbvp
BPc2 = BPN > SPN ? BPN : xbpn
SPc1 = SPV > BPV ? SPV : xspv
SPc2 = SPN > BPN ? SPN : xspn
BPcon = vi ? BPc2 : BPc1
SPcon = vi ? SPc2 : SPc1


minus = BPcon + SPcon
plot(minus, color = BPcon > SPcon  ? color.green : color.red , style=plot.style_columns) 

length = input.int(20, minval=1, group="Volatility Settings")
src = minus//input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev", group="Volatility Settings")
xtasma = request.security(syminfo.tickerid, customTimeframe, ta.sma(src, length))
xstdev = request.security(syminfo.tickerid, customTimeframe, ta.stdev(src, length))
basis = xtasma
dev = mult * xstdev
upper = basis + dev
lower = basis - dev
plot(basis, "Basis", color=#FF6D00, offset = 0)
p1 = plot(upper, "Upper", color=#2962FF, offset = 0)
p2 = plot(lower, "Lower", color=#2962FF, offset = 0)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

// Original a
longOriginal = minus > upper and BPcon > SPcon and close > weekly_vwap
shortOriginal = minus > upper and BPcon < SPcon and close< weekly_vwap



high_daily = request.security(syminfo.tickerid, "D", high)
low_daily  = request.security(syminfo.tickerid, "D", low)
close_daily = request.security(syminfo.tickerid, "D", close)

true_range = math.max(high_daily - low_daily, math.abs(high_daily - close_daily[1]), math.abs(low_daily - close_daily[1]))
atr_range = ta.sma(true_range*100/request.security(syminfo.tickerid, "D", close), 14)

ProfitTarget_Percent_long = input.float(100.0, title='TP Multiplier for Long entries ', step=0.5, step=0.5, group='Dynamic Risk Management')
Profit_Ticks_long = close + (close * (atr_range * ProfitTarget_Percent_long))/100
LossTarget_Percent_long = input.float(1.0, title='SL Multiplier for Long entries', step=0.5, group='Dynamic Risk Management')
Loss_Ticks_long = close - (close * (atr_range * LossTarget_Percent_long ))/100

ProfitTarget_Percent_short = input.float(100.0, title='TP Multiplier for Short entries ', step=0.5, step=0.5, group='Dynamic Risk Management')
Profit_Ticks_short = close - (close * (atr_range*ProfitTarget_Percent_short))/100
LossTarget_Percent_short = input.float(5.0, title='SL Multiplier for Short entries', step=0.5, group='Dynamic Risk Management')
Loss_Ticks_short = close + (close * (atr_range*LossTarget_Percent_short))/100



var longOpened_original = false
var int timeOfBuyLong = na
var float tpLong_long_original = na
var float slLong_long_original = na
long_entryx = longOriginal

longEntry_original = long_entryx and not longOpened_original 


if longEntry_original
    longOpened_original := true
    tpLong_long_original := Profit_Ticks_long
    slLong_long_original := Loss_Ticks_long
    timeOfBuyLong := time
    //lowest_low_var_sl := lowest_low

     
tpLong_trigger = longOpened_original[1] and ((close > tpLong_long_original) or (high > tpLong_long_original)) //or high > lowest_low_var_tp
slLong_Trigger = longOpened_original[1] and ((close < slLong_long_original) or (low < slLong_long_original)) //or low < lowest_low_var_sl

longExitSignal_original =   shortOriginal or tpLong_trigger or slLong_Trigger 


if(longExitSignal_original)
    longOpened_original := false
    tpLong_long_original := na
    slLong_long_original := na


if(allow_long)
    strategy.entry("long", strategy.long, when=longOriginal) 
    strategy.close("long", when= longExitSignal_original) //or shortNew

if(allow_short)
    strategy.entry("short", strategy.short, when=shortOriginal ) 
    strategy.close("short", when= longOriginal) //or shortNew