Volatilitas Saluran Harga Strategi Perdagangan Rata-rata Bergerak

Penulis:ChaoZhang, Tanggal: 2023-12-12 11:44:15
Tag:

img

Gambaran umum

Strategi ini didasarkan pada indikator Super Trend dan indikator saluran harga, dikombinasikan dengan sinyal rata-rata bergerak untuk perdagangan.

Logika Strategi

  1. Hitung indikator Super Trend. Rel atas dan bawah adalah harga saat ini ditambah/dikurangi N kali indikator ATR masing-masing. Ketika harga lebih tinggi dari rel atas, itu bullish. Ketika harga lebih rendah dari rel bawah, itu bearish.

  2. Menghitung indikator saluran harga. Garis saluran harga adalah M kali deviasi standar N-hari dari harga. Harga yang lebih tinggi / lebih rendah dari garis saluran dianggap keadaan abnormal.

  3. Menghitung rata-rata bergerak. mengambil garis rata-rata harga terbuka, harga tutup dan Super Trend masing-masing.

  4. Menghasilkan sinyal perdagangan:

    • Sinyal Beli: Harga tutup melintasi di atas garis Super Trend dan lebih tinggi dari rata-rata pergerakan harga terbuka.

    • Sinyal jual: Harga tutup melintasi di bawah garis Super Trend dan lebih rendah dari rata-rata pergerakan harga terbuka.

  5. Atur stop loss dan ambil channel harga profit.

Analisis Keuntungan

  1. Menggabungkan beberapa indikator menghindari sinyal palsu.

  2. Menggunakan saluran harga untuk menilai keadaan harga abnormal dapat menyaring beberapa titik masuk yang tidak diinginkan.

  3. Rata-rata bergerak dikombinasikan dengan menilai arah tren menghindari perdagangan melawan tren.

  4. Menetapkan stop loss dan mengambil profit range mengendalikan risiko.

Analisis Risiko

  1. Pengaturan parameter terlalu subjektif dan perlu optimasi.

  2. Jangkauan stop loss dan take profit dapat diatur terlalu luas atau terlalu sempit.

  3. Parameter saluran harga mungkin tidak cocok untuk semua produk, pengujian terpisah diperlukan.

  4. Kerugian yang signifikan dapat terjadi selama perubahan tren drastis.

Arahan Optimasi

  1. Uji dan optimalkan parameter untuk menemukan kombinasi optimal.

  2. Uji rata-rata bergerak dengan periode yang berbeda untuk memilih parameter optimal.

  3. Backtest pada beberapa produk dan pilih parameter sesuai dengan kinerja masing-masing.

  4. Mengoptimalkan strategi stop loss untuk menghindari kerugian tunggal yang terlalu besar.

Kesimpulan

Strategi ini menggabungkan beberapa indikator untuk menilai kelainan harga dan arah tren, yang secara teoritis dapat menyaring beberapa sinyal palsu. Namun, pengaturan parameter masih relatif subjektif dengan ruang untuk optimasi. Selain itu, biaya perdagangan seperti komisi dan slippage harus dipertimbangkan dalam perdagangan yang sebenarnya. Secara keseluruhan, strategi ini lebih cocok sebagai strategi trend berikut, tetapi parameter perlu dioptimalkan dan disesuaikan untuk produk yang berbeda.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Vol ST VM", overlay=true)

source = close
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

v =  spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   tf / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na,  color=col, linewidth=2, transp=80)

fill(m1, m2,  color=col, transp=70)
//

vpt=ema(out,len)

// INPUTS //
st_mult   = input(1,   title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period',     minval = 1)

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend

// Plotting
plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP", type=input.float, defval=2, minval=1)
src5 = close
len5 = input(title="TP length", defval=150, minval=1)
offset = 0

calcSlope(src5, len5) =>
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 1 to len5
        val = src5[len5-i]
        per = i + 1.0
        sumX := sumX + per
        sumY := sumY + val
        sumXSqr := sumXSqr + per * per
        sumXY := sumXY + val * per
        
        
    slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
    average = sumY / len5
    intercept = average - slope * sumX / len5 + slope
    [slope, average, intercept]

var float tmp = na
[s, a, i] = calcSlope(src5, len5)

vwap1=(i + s * (len5 - offset))
sdev = stdev(close, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev

//
z1 = vwap1 + dev
x1 = vwap1 - dev

low1 = crossover(close, x1)  
high1 = crossunder(close, z1) 

plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon



strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1)
strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1)

/////// Alerts /////
alertcondition(buy,title="buy")
alertcondition(sell,title="sell")
alertcondition(low1,title="sell tp")
alertcondition(high1,title="buy tp")

Lebih banyak