Band Volatiliti dan VWAP Multi-Timeframe Stock Trend Trading Strategy

Penulis:ChaoZhang, Tarikh: 2024-01-17 16:34:23
Tag:

img

Strategi ini mengira turun naik harga ATR dan menggabungkan VWAP tempoh yang berbeza untuk menetapkan syarat masuk dan keluar panjang untuk perdagangan trend saham.

Ringkasan Strategi

Strategi ini digunakan terutamanya untuk mengesan trend produk saham. Dengan mengira turun naik ATR dan menggabungkan harga VWAP dari tempoh yang berbeza, ia menetapkan keadaan beli dan jual untuk menilai dan mengesan trend. Strategi ini cukup fleksibel untuk beralih antara jangka panjang dan jangka pendek, sesuai untuk menangkap trend jangka menengah dan panjang.

Logika Strategi

Strategi ini menggunakan penunjuk ATR untuk mengira turun naik harga dan menilai arah trend berdasarkan sama ada harga memecahkan saluran turun naik. Pada masa yang sama, ia memperkenalkan harga VWAP dari kitaran yang berbeza untuk menentukan konsistensi trend jangka panjang dan jangka pendek. Logik khusus adalah sebagai berikut:

  1. Mengira saluran turun naik harga ATR
  2. Menghakimi jika harga menembusi saluran turun naik
    1. Menembusi landasan atas menunjukkan trend menaik
    2. Menembusi landasan bawah menunjukkan trend menurun
  3. Memperkenalkan harga VWAP mingguan dan harian
    1. Apabila harga memecahkan landasan turun naik atas, jika kedua-dua VWAP harian dan mingguan berada di atas harga, isyarat panjang dihasilkan
    2. Apabila harga memecahkan landasan turun naik yang lebih rendah, jika kedua-dua VWAP harian dan mingguan berada di bawah harga, isyarat pendek dihasilkan

Ini adalah logik teras strategi. Volatiliti ATR menilai trend jangka pendek dan harga VWAP menilai trend jangka panjang. Kedua-duanya digabungkan untuk menentukan konsistensi trend dan dengan itu menghasilkan isyarat perdagangan.

Kelebihan Strategi

  • Gunakan gabungan ATR dan VWAP untuk menilai trend, lebih dipercayai
  • Parameter tempoh ATR yang boleh disesuaikan untuk menyesuaikan kepekaan strategi
  • Memperkenalkan VWAP pelbagai jangka masa untuk menentukan konsistensi trend jangka panjang dan jangka pendek
  • Fleksibel untuk beralih antara jangka panjang dan jangka pendek
  • Sesuai untuk mengesan trend saham jangka sederhana dan panjang

Risiko dan Pengoptimuman

  • Sebagai trend mengikuti strategi, ia boleh menjana lebih banyak perdagangan semasa penyatuan, membawa risiko slippage
  • Tetapan parameter ATR dan VWAP memberi kesan kepada prestasi strategi, memerlukan ujian yang teliti terhadap produk yang berbeza
  • Pertimbangkan untuk menambah stop loss untuk mengawal kerugian perdagangan tunggal
  • Boleh digabungkan dengan MA dan penunjuk lain untuk menapis isyarat kemasukan dan mengurangkan perdagangan yang tidak perlu

Ringkasan

Strategi ini merealisasikan pengesanan trend saham melalui pengesahan ganda mengenai turun naik ATR dan VWAP. Terdapat ruang yang cukup untuk pengoptimuman dengan menyesuaikan parameter atau menggabungkan penunjuk teknikal lain. Secara keseluruhan, logik strategi jelas dan kukuh untuk mengesan trend jangka menengah hingga panjang.


/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99

//@version=4
strategy(title="VWAP MTF STOCK STRATEGY", overlay=true )

// high^2 / 2 - low^2 -2

h=pow(high,2) / 2
l=pow(low,2) / 2

o=pow(open,2) /2
c=pow(close,2) /2


x=(h+l+o+c) / 4
y= sqrt(x)

source = y
useTrueRange = false
length = input(27, minval=1)
mult = input(0, step=0.1)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

longOnly = true

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

srcX = input(ohlc4)
t = time("W")
start = na(t[1]) or t > t[1]

sumSrc = srcX * volume
sumVol = volume
sumSrc := start ? sumSrc : sumSrc + sumSrc[1]
sumVol := start ? sumVol : sumVol + sumVol[1]

vwapW= sumSrc / sumVol

 
//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
shortCondition = close < vwap and time_cond and (close < vwapW)
longCondition = close > vwap and time_cond and (close > vwapW)

 


if(longOnly and time_cond)
    if (crossLower and close < vwapW )
        strategy.close("long")
    if (crossUpper and close>vwapW)
        strategy.entry("long", strategy.long, stop=bprice)


Lebih lanjut