Chiến lược số lượng của Solid as a Rock

Tác giả:ChaoZhang, Ngày: 2023-12-19 13:54:05
Tags:

img

Tổng quan

Chiến lược này được gọi là The Solid as a Rock VIP Quant Strategy. Nó kết hợp chỉ số WMA được sửa đổi và chỉ số SSL Channel để xây dựng một khung giao dịch định lượng ổn định và đáng tin cậy.

Nguyên tắc

Chiến lược này kết hợp hai chỉ số. Một là chỉ số WMA sửa đổi, tính toán giá trung bình của mỗi ngọn nến và sau đó áp dụng phương pháp trung bình động theo cấp số nhân để xác định hướng xu hướng. Một là chỉ số SSL Channel, sử dụng trung bình động của giá cao nhất và thấp nhất để xác định kênh giá và đánh giá tình trạng xu hướng hiện tại.

Khi chỉ số WMA sửa đổi tạo ra tín hiệu mua, tức là thập giá vàng, chúng tôi kết hợp chỉ số SSL Channel để xác định xem giá trong kênh có phù hợp hay không. Nếu thân nến hoàn toàn dưới giới hạn dưới của kênh, chúng tôi sẽ đặt lệnh mua.

Ưu điểm

  1. Kết hợp hai chỉ số làm cho tín hiệu mua đáng tin cậy hơn để tránh phá vỡ sai.
  2. Chỉ số WMA được sửa đổi có thể xác định các bước ngoặt chính xác hơn.
  3. Kênh SSL đánh giá rõ ràng kênh giá để tránh mua ở mức cao.
  4. Sử dụng phương pháp trung bình động theo cấp số nhân là thuận lợi hơn để xác định xu hướng dài hạn.

Rủi ro và giải pháp

  1. Các điểm dừng lỗ có thể dễ dàng được kích hoạt trong thị trường biến động.
  2. Hệ thống trung bình động nhạy cảm với tiếng ồn thị trường ngắn hạn, có thể tạo ra tín hiệu không chính xác.
  3. Các thiết lập tham số không chính xác cũng có thể ảnh hưởng đến hiệu suất chiến lược. Chúng ta có thể tối ưu hóa các tham số thông qua backtesting để tìm kết hợp tham số tốt nhất.

Hướng dẫn tối ưu hóa

  1. Chúng ta có thể kiểm tra các loại trung bình động khác nhau, chẳng hạn như EMA và VWMA, để tìm chỉ số đường trung bình phù hợp nhất.
  2. Chúng ta có thể thêm các chỉ số âm lượng để tránh tín hiệu ở các khu vực có âm lượng thấp.
  3. Chúng ta có thể thử các phương pháp vẽ kênh khác nhau, chẳng hạn như kênh Donchian, để làm cho ranh giới kênh đáng tin cậy hơn.
  4. Chúng ta có thể thêm các chỉ số phụ khác, chẳng hạn như MACD và RSI, để xác nhận thêm thời gian nhập cảnh.

Tóm lại

Thông qua sự kết hợp khéo léo của chỉ số WMA sửa đổi và chỉ số kênh SSL, chiến lược này xây dựng một khuôn khổ giao dịch định lượng ổn định và đáng tin cậy. Nó có khả năng lọc tiếng ồn thị trường mạnh mẽ trong khi tránh rủi ro mua ở mức cao. Với các thiết lập tham số thích hợp và tối ưu hóa nhất định, nó sẽ là một chiến lược có hiệu suất cao hơn.


/*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)


Thêm nữa