
この戦略は,超トレンド指標と価格チャネル指標に基づいて,均線信号と組み合わせて取引する.その核心思想は,価格チャネルを使用して,現在の価格が異常状態にあるかどうかを判断し,超トレンドは現在のトレンドの方向を判断し,均線信号と組み合わせて取引信号を生成することである.
超トレンド指標を計算する. 上線と下線は,現在の価格加算/減算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")