견고한 VIP 양적 전략


생성 날짜: 2023-12-19 13:54:05 마지막으로 수정됨: 2023-12-19 13:54:05
복사: 1 클릭수: 665
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

견고한 VIP 양적 전략

개요

이 전략은 “암처럼 단단한 VIP 양적 전략”이라고 불리며, 개선된 윌리엄스 SMA 지표 ((Modified WMA) 와 SSL 채널 지표 ((SSL Channel) 를 결합하여 안정적이고 신뢰할 수 있는 양적 거래 프레임워크를 구축한다.

원칙

이 전략은 두 가지 지표가 결합되어 있는데, 하나는 개선된 윌리엄 SMA 지표로, K선마다의 평균값을 계산한 다음 지수 이동 평균 방법을 적용하여 트렌드 방향을 결정한다. 다른 하나는 SSL 채널 지표로, 최고 가격과 최저 가격의 이동 평균을 사용하여 가격 채널을 결정하고 현재 트렌드 상태를 판단한다.

개선된 윌리엄 SMA 지표가 구매 신호를 발산할 때, 즉 골드 포크를 발산할 때, 우리는 SSL 통로 지표와 결합하여 통로 내의 가격이 적절한지 판단하고, K 라인 엔티티가 통로의 하위 한계 아래에 완전히 있을 때, 우리는 그 지점에서 구매를 개시한다.

장점

  1. 두 지표의 결합으로 구매 신호를 더욱 신뢰하게 하고, 가짜 돌파구를 방지한다.
  2. 개선된 윌리엄 SMA 지표는 트렌드 전환점을 더 정확하게 판단할 수 있다.
  3. SSL 통로 지표는 가격 통로를 명확하게 판단하여 높은 가격 구매를 방지합니다.
  4. 지수 이동 평균 방식을 사용하면 장기적인 추세를 판단하는 것이 더 좋습니다.

위험과 해결

  1. 급격한 상황에서는 스톱피드가 쉽게 작동될 수 있다. 스톱피드 범위를 적절히 느리게 할 수 있다.
  2. 이동 평균 시스템은 단기시장 소음에 민감하여 잘못된 신호를 발생시킬 수 있다. 평균선 변수를 적절히 확대하여 필터링 효과를 높일 수 있다.
  3. 매개 변수 설정이 잘못되면 정책의 성능에도 영향을 미칩니다. 매개 변수를 피드백으로 최적화하여 최적의 매개 변수 조합을 찾을 수 있습니다.

최적화 방향

  1. EMA, VWMA 등과 같은 다양한 유형의 이동 평균을 테스트하여 가장 적합한 평균 지표를 찾을 수 있습니다.
  2. 낮은 양의 지역에서 신호를 발산하지 않도록 매매량 지표에 추가할 수 있다.
  3. 다른 통로 지도 방법을 시도할 수 있습니다. 예를 들어, Donchian 통로와 같은 통로 경계를 더 신뢰할 수 있습니다.
  4. 다른 보조 지표들 (MACD, RSI 등) 을 추가하여 구매 시점을 확정할 수 있다.

요약하다

이 전략은 개선된 윌리엄스 SMA 지표와 SSL 통로 지표의 교묘한 결합을 통해 안정적이고 신뢰할 수 있는 양적 거래 프레임워크를 구축한다. 그것은 시장 소음을 필터링하는 강력한 능력을 가지고 있으며, 또한 높은 수준의 구매의 위험을 피한다.

전략 소스 코드
/*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)