
이 전략은 슈퍼 트렌드 지표와 가격 채널 지표에 기반하여 평선 신호와 결합하여 거래한다. 그것의 핵심 아이디어는 가격 채널을 사용하여 현재 가격이 비정상적인 상태인지 판단하고, 슈퍼 트렌드는 현재 트렌드 방향을 판단하고, 평선 신호와 조합하여 거래 신호를 생성하는 것이다.
슈퍼 트렌드 지표를 계산한다. 상반선과 하반선은 각각 현재 가격과 ATR 지표의 N배이다. 상반선보다 높을 때 부진이고, 하반선보다 낮을 때 하락한다.
가격 통로 지표를 계산한다. 가격 통로선은 가격의 N일 표준 차이의 M배이다. 가격보다 높거나 낮은 것은 비정상적인 상태이다.
평균선을 계산한다. 개시 가격, 종료 가격, 슈퍼 트렌드의 평균값을 다.
트레이딩 신호를 생성합니다.
구매 신호: 종결 가격 상의 슈퍼 트렌드 라인을 뚫고 개시 가격 평균선보다 높습니다.
판매 신호: 종결 가격 아래에서 슈퍼 트렌드 라인을 통과하고 개시 가격 평균선 아래
스톱 손실 스톱 가격 통로를 설정하십시오.
여러 지표를 조합하여 잘못된 신호를 피하십시오.
가격 통로를 사용하여 가격의 비정상적인 상태를 판단하여 바람직하지 않은 입시 지점을 필터링 할 수 있습니다.
평행선은 추세 방향을 판단하고 역동적인 동작을 피한다.
스탠드피드 범위를 설정하고, 위험을 통제한다.
변수 설정이 너무 주관적이어서 최적화가 필요합니다.
손해 차단 범위가 너무 크거나 너무 작을 수 있습니다.
가격 통로 파라미터는 모든 품종에 적합하지 않을 수 있으며, 다른 품종에 따라 개별적으로 테스트해야 합니다.
동향이 급격히 변할 경우, 큰 손실이 발생할 수 있습니다.
매개 변수를 테스트 최적화하여 최적의 매개 변수 조합을 찾습니다.
다른 평균선 주기들을 테스트하여 최적의 변수를 선택한다.
여러 품종에 대한 재검토를 실시하고, 성능에 따라 각각 매개 변수를 선택한다.
한 번에 너무 많은 손실을 방지하기 위해 손실을 중지하는 전략을 최적화하십시오.
이 전략은 여러 가지 지표들을 종합하여 가격의 비정상과 트렌드 방향을 판단하여 이론적으로 특정 가짜 신호를 필터링 할 수 있다. 그러나 파라미터 설정은 여전히 상대적으로 주관적이며, 약간의 최적화 공간이 있다. 또한 특정 실장에서는 수수료, 슬라이 포인트 등의 거래 비용의 영향을 고려할 필요가 있다.
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Vol ST VM", overlay=true)
source = close
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28
v_len = 14
price_spread = stdev(high-low, window_len)
v = spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread
out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ?
tf / timeframe.multiplier * 7 :
timeframe.isintraday and timeframe.multiplier < 60 ?
60 / timeframe.multiplier * 24 * 7 : 7
c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=col, linewidth=2, transp=80)
fill(m1, m2, color=col, transp=70)
//
vpt=ema(out,len)
// INPUTS //
st_mult = input(1, title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period', minval = 1)
// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))
up_trend = 0.0
up_trend := close[1] > up_trend[1] ? max(up_lev, up_trend[1]) : up_lev
down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev
// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)
// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend
// Plotting
plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0) //plot for buy icon
plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0) //plot for sell icon
//
multiplier = input(title="TP", type=input.float, defval=2, minval=1)
src5 = close
len5 = input(title="TP length", defval=150, minval=1)
offset = 0
calcSlope(src5, len5) =>
sumX = 0.0
sumY = 0.0
sumXSqr = 0.0
sumXY = 0.0
for i = 1 to len5
val = src5[len5-i]
per = i + 1.0
sumX := sumX + per
sumY := sumY + val
sumXSqr := sumXSqr + per * per
sumXY := sumXY + val * per
slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
average = sumY / len5
intercept = average - slope * sumX / len5 + slope
[slope, average, intercept]
var float tmp = na
[s, a, i] = calcSlope(src5, len5)
vwap1=(i + s * (len5 - offset))
sdev = stdev(close, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev
//
z1 = vwap1 + dev
x1 = vwap1 - dev
low1 = crossover(close, x1)
high1 = crossunder(close, z1)
plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0) //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0) //plot for sell icon
strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1)
strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1)
/////// Alerts /////
alertcondition(buy,title="buy")
alertcondition(sell,title="sell")
alertcondition(low1,title="sell tp")
alertcondition(high1,title="buy tp")