
슈퍼 트렌드 V 전략은 이동 평균과 표준 격차를 기반으로 한 짧은 라인 거래 전략입니다. 그것은 이동 평균이 형성 된 지원과 저항과 결합하여 진입하기 위해 가격의 경향 방향을 판단하는 슈퍼 트렌드 지표를 사용합니다. 동시에, 그것은 표준 격차 통로를 사용하여 가격의 잠재적인 지원과 저항 지역을 예측하고, 손실을 막는 가격 구간을 설정하여 추세를 따라가고 효율적으로 빠져 나가는 짧은 라인 거래 전략입니다.
이 전략은 먼저 슈퍼 트렌드 지표를 계산합니다. 슈퍼 트렌드 지표는 ATR과 가격의 관계를 사용하여 트렌드의 방향을 판단합니다. 가격이 상승 추세보다 높을 때 부진하고, 가격이 하락 추세보다 낮을 때 하락합니다.
그리고 가격의 이동 평균 EMA와 오픈 가격의 이동 평균 EMA를 계산합니다. 가격의 위쪽이 이동 평균을 통과하고 오픈 가격 평균선보다 높을 때 구매 신호로, 가격의 아래쪽이 이동 평균을 통과하고 오픈 가격 평균선보다 낮을 때 판매 신호로 사용합니다.
다음으로 표준차이를 사용하여 가격 통로의 오르락 내리락을 계산하고, 평평하게 처리합니다. 가격이 표준차이를 돌파 할 때 정지 신호가 발생하고, 가격이 표준차이를 돌파 할 때 정지 신호가 발생합니다.
마지막으로, 다른 시간 주기 이동 평균을 결합하여 트렌드 방향을 판단하고, 슈퍼 트렌드 지표와 결합하여 안정적인 트렌드 판단을 형성한다.
위험 해결 방법:
초트렌드 V 전략은 트렌드, 평균선, 표준 격차 통로와 같은 지표의 장점을 통합하여 트렌드 방향을 안정적으로 판단하고, 적절한 출장 시기를 선택하고, 가격 영역의 중지 손실 스톱을 설정하는 짧은 라인 거래 전략을 구현합니다. 매개 변수 최적화, 지표 최적화, 중지 손실 스톱 최적화 등의 측면에서 개선하면 전략의 안정성과 수익성을 향상시킬 수 있습니다. 탄탄한 논리와 엄격한 사고 방식은 학습하고 연구 할 가치가 있습니다.
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © theCrypster 2020
//@version=4
strategy(title = "Super trend V Strategy version", overlay = true, pyramiding=1,initial_capital = 1000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
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", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0) //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0) //plot for sell icon
//
multiplier = input(title="TP VWAP Deviation", type=input.float, defval=2, minval=1)
src5 = vwap
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(vwap, 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
//
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
l = buy
s1 = sell
if l and testPeriod()
strategy.entry("buy", strategy.long)
if s1 and testPeriod()
strategy.entry("sell", strategy.short)