Strategi Kuantiti VIP

Penulis:ChaoZhang, Tarikh: 2023-12-19 13:54:05
Tag:

img

Ringkasan

Strategi ini dipanggil The Solid as a Rock VIP Quant Strategy. Ia menggabungkan penunjuk WMA yang diubahsuai dan penunjuk Saluran SSL untuk membina kerangka perdagangan kuantitatif yang stabil dan boleh dipercayai.

Prinsip

Strategi ini menggabungkan dua penunjuk. Satu adalah penunjuk WMA yang diubah suai, yang mengira harga purata setiap candlestick dan kemudian menggunakan kaedah purata bergerak eksponensial untuk menentukan arah trend. Yang lain adalah penunjuk Saluran SSL, yang menggunakan purata bergerak harga tertinggi dan terendah untuk menentukan saluran harga dan menilai status trend semasa.

Apabila penunjuk WMA yang diubah suai menghasilkan isyarat beli, iaitu, salib emas, kami menggabungkan penunjuk Saluran SSL untuk menentukan sama ada harga dalam saluran itu sesuai.

Kelebihan

  1. Menggabungkan dua penunjuk menjadikan isyarat beli lebih boleh dipercayai untuk mengelakkan pecah palsu.
  2. Penunjuk WMA yang diubahsuai dapat menentukan titik perubahan dengan lebih tepat.
  3. Saluran SSL dengan jelas menilai saluran harga untuk mengelakkan membeli pada tahap yang tinggi.
  4. Menggunakan kaedah purata bergerak eksponensial lebih kondusif untuk menentukan trend jangka panjang.

Risiko dan Penyelesaian

  1. Titik stop loss boleh dengan mudah diaktifkan di pasaran yang tidak menentu.
  2. Sistem purata bergerak sensitif terhadap bunyi pasaran jangka pendek, yang boleh menghasilkan isyarat yang salah.
  3. Tetapan parameter yang tidak betul juga boleh menjejaskan prestasi strategi. Kita boleh mengoptimumkan parameter melalui backtesting untuk mencari kombinasi parameter terbaik.

Arahan pengoptimuman

  1. Kita boleh menguji pelbagai jenis purata bergerak, seperti EMA dan VWMA, untuk mencari penunjuk garis purata yang paling sesuai.
  2. Kita boleh menambah penunjuk kelantangan untuk mengelakkan isyarat di kawasan kelantangan rendah.
  3. Kita boleh mencuba kaedah lain untuk melukis saluran, seperti Saluran Donchian, untuk menjadikan sempadan saluran lebih boleh dipercayai.
  4. Kita boleh menambah penunjuk tambahan lain, seperti MACD dan RSI, untuk mengesahkan masa kemasukan.

Ringkasan

Melalui gabungan yang bijak dari penunjuk WMA yang diubah suai dan penunjuk Saluran SSL, strategi ini membina kerangka perdagangan kuantitatif yang stabil dan boleh dipercayai. Ia mempunyai keupayaan yang kuat untuk menapis bunyi pasaran sambil mengelakkan risiko membeli pada tahap yang tinggi. Dengan tetapan parameter yang betul dan pengoptimuman tertentu, ia akan menjadi strategi yang sangat unggul.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 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/
// © Darshana_Alwis

//@version=5
strategy("VIP", overlay=true, initial_capital=1000,currency=currency.USD,default_qty_type=strategy.percent_of_equity,default_qty_value=100,pyramiding=0)
//SSS = Sultan+Saud Strategy

//The original idea of the code belonges to saudALThaidy
//The strategy code is basically made out of two other indicators, edited and combined by me.
// 1- NSDT HAMA Candles => https://www.tradingview.com/script/k7nrF2oI-NSDT-HAMA-Candles/
// 2- SSL Channel => https://www.tradingview.com/script/6y9SkpnV-SSL-Channel/


//MA INFO
WickColor = input.color(color.rgb(80, 80, 80, 100), title='Wick Color', tooltip='Suggest Full Transparency.')
LengthMA = input.int(100, minval=1, title='MA Line Length', inline='MA Info')
TakeProfit = input.float(1, minval=0, title='Take Profit Percentage', step=1)
UseStopLose = input.bool(false, title='Use Stop Percentage')
StopLose = input.float(1, minval=0, title='StopLose Percentage', step=1)

MASource = close

ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :
     type == "EMA" ? ta.ema(source, length) :
     type == "SMMA (RMA)" ? ta.rma(source, length) :
     type == "WMA" ? ta.wma(source, length) :
     type == "VWMA" ? ta.vwma(source, length) :
     na

ma1_color  = color.rgb(230, 172, 0)
ma1 = ma(high, 200, "SMA")

ma2_color  = color.red
ma2 = ma(low, 200, "SMA")

Hlv1 = float(na)
Hlv1 := close > ma1 ? 1 : close < ma2 ? -1 : Hlv1[1]
sslUp1   = Hlv1 < 0 ? ma2 : ma1
sslDown1 = Hlv1 < 0 ? ma1 : ma2

Color1 = Hlv1 == 1 ? ma1_color : ma2_color
fillColor1 = color.new(Color1, 90)

highLine1 = plot(sslUp1, title="UP", linewidth=2, color = Color1)
lowLine1 = plot(sslDown1, title="DOWN", linewidth=2, color = Color1)

OpenLength = 25
HighLength = 20
LowLength = 20
CloseLength = 20


     
SourceOpen = (open[1] + close[1]) / 2
SourceHigh = math.max(high, close)
SourceLow = math.min(low, close)
SourceClose = (open + high + low + close) / 4

funcCalcMA1(src1, len1) => ta.ema(src1, len1)
funcCalcOpen(SourceOpen, OpenLength) => ta.ema(SourceOpen, OpenLength)
funcCalcHigh(SourceHigh, HighLength) => ta.ema(SourceHigh, HighLength)
funcCalcLow(SourceLow, LowLength) => ta.ema(SourceLow, LowLength)
funcCalcClose(SourceClose, CloseLength) => ta.ema(SourceClose, CloseLength)

MA_1 = funcCalcMA1(MASource, LengthMA)

CandleOpen = funcCalcOpen(SourceOpen, OpenLength)
CandleHigh = funcCalcHigh(SourceHigh, HighLength)
CandleLow = funcCalcLow(SourceLow, LowLength)
CandleClose = funcCalcClose(SourceClose, CloseLength)

//PLOT CANDLES
//-------------------------------NSDT HAMA Candels
BodyColor = CandleOpen > CandleOpen[1] ? color.rgb(230, 172, 0) : color.red
barcolor(BodyColor)
plotcandle(CandleOpen, CandleHigh, CandleLow, CandleClose, color=BodyColor, title='HAMA Candles', wickcolor=WickColor, bordercolor=na)
plot(MA_1, title='MA Line', color=BodyColor, style=plot.style_line, linewidth=2)

//------------------------------SSL Channel


plot_buy = false
avg = ((high-low)/2)+low
LongCondition = (Hlv1 == 1 and Hlv1[1] == -1) and (BodyColor == color.rgb(230, 172, 0)) and (MA_1 < avg) and (CandleHigh < avg) and (strategy.opentrades == 0)
if LongCondition
    strategy.entry("BUY with VIP", strategy.long)
    plot_buy := true

base = strategy.opentrades.entry_price(0)
baseProfit = (base+((base/100)*TakeProfit))
baseLose = (base-((base/100)*StopLose))

strategy.exit("SELL with VIP","BUY with VIP",limit = baseProfit)
if UseStopLose and (close < MA_1)
    strategy.exit("SELL with VIP","BUY with VIP",stop = baseLose)
if not UseStopLose and (close < MA_1)
    strategy.exit("SELL with VIP","BUY with VIP", stop = close)
    
plotshape(plot_buy, title="Buy Label", text="Buy", location=location.belowbar, style=shape.labelup, size=size.tiny, color=Color1, textcolor=color.white)

fill(highLine1, lowLine1, color = fillColor1)


Lebih lanjut