VWMA dan ATR Trend Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-07 16:39:47
Tag:

img

Ringkasan

Strategi ini menggunakan VWMA untuk menentukan arah trend dan menetapkan stop loss dengan ATR untuk mengikuti trend.

Logika Strategi

  1. Gunakan VWMA untuk menentukan arah trend. pergi panjang apabila harga di atas VWMA, pergi pendek apabila harga di bawah VWMA.

  2. Tambah penapis pengayun RSI untuk mengelakkan isyarat pecah palsu. Hanya mengambil isyarat panjang apabila RSI melebihi 30.

  3. Gunakan ATR untuk mengira garis stop loss. panjang ATR ditetapkan sama dengan VWMA, pengganda adalah 3.5. kemas kini baris stop loss dalam masa nyata.

  4. Pengganda ATR mengawal ketegangan garis stop loss. Pengganda yang lebih besar bermakna kemas kini yang kurang kerap, yang lebih baik untuk mengikuti trend.

  5. Saiz kedudukan dikira berdasarkan ekuiti akaun dan peratusan stop loss.

  6. Keluar dari kedudukan panjang apabila harga pecah di bawah garis stop loss.

Kelebihan

  1. Menggunakan VWMA untuk menentukan trend menangkap peluang trend secara berterusan.

  2. Penapis RSI mengelakkan beberapa isyarat palsu.

  3. Hentian trailing ATR mengikuti trend dan mengelakkan dihentikan oleh pembalikan.

  4. Ukuran kedudukan berdasarkan ekuiti akaun dan stop loss memihak kepada pengurusan risiko.

Risiko

  1. Potensi kerugian pada titik perubahan trend.

  2. Tetapan parameter ATR yang tidak betul membawa kepada garis stop loss yang terlalu ketat atau longgar.

  3. Pembalikan trend yang cepat boleh menyebabkan kemas kini stop loss terlambat, meningkatkan kerugian.

  4. Dalam persekitaran turun naik yang rendah, mengurangkan saiz kedudukan dan meningkatkan kekerapan kemas kini stop loss.

Peningkatan

  1. Uji kombinasi parameter VWMA yang berbeza untuk mencari parameter isyarat yang optimum.

  2. Uji tetapan RSI lain seperti garis overbought/oversold.

  3. Uji pengganda ATR untuk mencari keseimbangan optimum antara pengambilan dan keupayaan pengesanan.

  4. Tambah penapis lain seperti MACD, KD untuk meningkatkan kualiti isyarat.

  5. Mengoptimumkan saiz kedudukan dan peratusan stop loss berdasarkan turun naik pasaran.

Ringkasan

Strategi ini mempunyai kecenderungan trend keseluruhan dan menangkap trend harga yang jelas dengan baik. Ia mempunyai kelebihan dalam penentuan trend, penapisan isyarat, penarikan stop loss dan lain-lain. Ia juga mempunyai risiko dalam pembalikan trend. Parameter penyesuaian halus dan saiz kedudukan boleh membawa kepada prestasi yang lebih baik.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-10-13 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/
// © mohanee

//@version=4
//strategy("", overlay=true)
strategy(title="VWMA_withATRstops_strategy V2", overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

float xATRTrailingStop=na
int pos=na

vwmalength = input(33, title="VWMA Length", minval=1, maxval=365)
//vwmalength2 = input(9, title="VWAM Short Term Length", minval=1, maxval=365)
nATRPeriod = input(33, title="ATR length", minval=1, maxval=365)
nATRMultip = input(3.5, title="ATR Multiplier")

rsiofVwmaLength=input(14, title="RSI of VWMA Length")

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)

vwmaVal=vwma(close, vwmalength)
//vwmaVal2=vwma(close, vwmalength2)
//maVal=sma(close, vwmalength)

plot(vwmaVal, color=color.orange, linewidth=2,  title="VWMA")
//plot(vwmaVal2, color=color.blue, title="VWMA Short Term")
//plot(maVal, color=color.blue, title="MA")

//rsi of vwma Longterm
rsiofVwmaVal=rsi(vwmaVal,rsiofVwmaLength)

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop:= iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos:=	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 	    iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

color1 = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

//plot(xATRTrailingStop, color=color1, title="ATR Trailing Stop")

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


//Long Entry
//strategy.entry(id="VWMA LE", long=true, qty=qty1, when= close >vwmaVal and open>vwmaVal and close>open and close > xATRTrailingStop and xATRTrailingStop>  vwmaVal)

strategy.entry(id="VWMA LE", long=true, qty=qty1, when= rsiofVwmaVal>=30 and  close>open and close>vwmaVal and pos == 1 )    ///pos == 1 means ATRStop line is green    
//vwmaVal2>vwmaVal and

plot(strategy.position_size>=1  ? xATRTrailingStop : na, color=color1, style=plot.style_linebr, title="ATR Trailing Stop")
bgcolor(strategy.position_size>=1 ? color.blue : na )

//Exit
strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and crossunder(close, xATRTrailingStop)  )
//strategy.close(id="VWMA LE",  when= strategy.position_size>=1 and close<vwmaVal and open<vwmaVal and close<open )

Lebih lanjut