Strategi Dagangan Purata Pergerakan Saluran Harga Volatiliti


Tarikh penciptaan: 2023-12-12 11:44:15 Akhirnya diubah suai: 2023-12-12 11:44:15
Salin: 0 Bilangan klik: 552
1
fokus pada
1621
Pengikut

Strategi Dagangan Purata Pergerakan Saluran Harga Volatiliti

Gambaran keseluruhan

Strategi ini didasarkan pada indikator supertrend dan indikator saluran harga, yang digabungkan dengan isyarat garis rata. Gagasan utamanya adalah menggunakan saluran harga untuk menentukan sama ada harga semasa berada dalam keadaan yang tidak normal, supertrend untuk menentukan arah trend semasa, dan menghasilkan isyarat perdagangan dengan kombinasi isyarat garis rata.

Prinsip Strategi

  1. Hitung indikator super trend. Di mana garisan atas dan garisan bawah adalah N kali ganda harga semasa ditambah / dikurangkan dari indikator ATR. Apabila harga lebih tinggi daripada garisan atas, ia adalah bullish, dan apabila harga lebih rendah daripada garisan bawah, ia adalah bearish.

  2. Hitung indikator saluran harga. Di mana garis saluran harga adalah M kali perbezaan standard dalam N hari harga. Harga lebih tinggi / lebih rendah daripada garis saluran dianggap sebagai keadaan luar biasa.

  3. Hitung garis rata-rata. Ia adalah purata harga pembukaan, harga penutupan dan trend super.

  4. Menjana isyarat dagangan:

    • isyarat beli: harga penutupan melintasi garis trend super dan lebih tinggi daripada garis purata harga pembukaan

    • Isyarat menjual: Melewati garis trend super di bawah harga penutupan dan di bawah garis purata harga pembukaan

  5. Setting Stop Loss Stop Stop Channel.

Analisis kelebihan strategi

  1. Menggabungkan pelbagai petunjuk untuk mengelakkan isyarat palsu.

  2. Dengan menggunakan saluran harga untuk menilai keadaan harga yang tidak normal, anda boleh menyaring beberapa titik masuk yang tidak sesuai.

  3. Garis rata menggabungkan arah trend untuk mengelakkan operasi berlawanan.

  4. Tetapkan jangkauan stop loss dan kawalan risiko.

Analisis risiko

  1. Tetapan parameter terlalu subjektif dan perlu dioptimumkan.

  2. Penghalang kerosakan mungkin terlalu besar.

  3. Parameter saluran harga mungkin tidak sesuai untuk semua jenis dan perlu diuji secara berasingan untuk pelbagai jenis.

  4. Ia boleh menyebabkan kerugian yang lebih besar apabila trend berubah secara mendadak.

Arah pengoptimuman

  1. Uji optimasi parameter untuk mencari kombinasi parameter terbaik.

  2. Uji pelbagai kitaran garis purata untuk memilih parameter yang optimum.

  3. Ujian ulang dilakukan pada pelbagai jenis, dengan parameter dipilih mengikut prestasi.

  4. Mengoptimumkan strategi hentikan kerugian untuk mengelakkan kerugian yang terlalu besar.

ringkaskan

Strategi ini mengintegrasikan pelbagai petunjuk untuk menentukan ketidaksamaan harga dan arah trend, secara teori dapat menyaring isyarat palsu tertentu. Tetapi tetapan parameter masih agak subjektif, ada ruang untuk pengoptimuman. Selain itu, dalam pasaran sebenar, anda juga perlu mempertimbangkan kesan kos urus niaga, seperti yuran dan slippage. Secara umum, strategi ini lebih sesuai sebagai strategi penjejakan trend, tetapi perlu menyesuaikan parameter pengoptimuman untuk pelbagai jenis.

Kod sumber strategi
/*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")