
Die Strategie basiert auf einem Supertrend- und einem Preiskanal-Indikator, der in Kombination mit einem Gleichgewichtssignal gehandelt wird. Die Kernidee besteht darin, den Preiskanal zu nutzen, um zu beurteilen, ob der aktuelle Preis in einem außergewöhnlichen Zustand ist, den Supertrend, um die Richtung des aktuellen Trends zu bestimmen und ein Handelssignal mit einer Kombination von Gleichgewichtssignalen zu erzeugen.
Berechnen Sie einen Supertrend-Indikator. Die Oberbahn und die Unterbahn sind N-fache des aktuellen Preises plus/minus den ATR-Indikator. Wenn der Preis über der Oberbahn liegt, ist er bullish, wenn der Preis unter der Unterbahn liegt, ist er bearish.
Berechnen Sie den Preiskanalindikator. Die Preiskanallinie ist das M-fache der N-Tage-Standarddifferenz des Preises. Preise, die über/unter der Kanallinie liegen, werden als Ausnahmezustand betrachtet.
Berechnen Sie die Durchschnittslinie. Nehmen Sie den Durchschnitt der Eröffnung, der Schließung und des Supertrends.
Das sind die wichtigsten Faktoren, die uns helfen können.
Kaufsignal: Überschreitung der Supertrendlinie am Ende und über der Durchschnittslinie am Anfang
Verkaufssignal: Unterhalb der Supertrendlinie unterhalb des Schlusskurses und unterhalb der Durchschnittslinie des Eröffnungskurses
Setzen Sie einen Stop-Loss-Preiskanal.
Es gibt mehrere Indikatoren, um falsche Signale zu vermeiden.
Die Preiskanäle werden verwendet, um die außergewöhnlichen Preisverhältnisse zu ermitteln und unerwünschte Einstiegspunkte zu filtern.
Die Linie wird in Kombination mit der Trendrichtung beurteilt, um eine Gegenoperation zu vermeiden.
Setzen Sie eine Stop-Loss-Stop-Range, um das Risiko zu kontrollieren.
Die Parameter sind zu subjektiv eingestellt und müssen optimiert werden.
Der Schadensbegrenzungsbereich ist möglicherweise zu klein eingestellt.
Die Preiskanalparameter sind möglicherweise nicht für alle Sorten geeignet und müssen für verschiedene Sorten getestet werden.
Bei einem starken Trendwechsel kann es zu größeren Verlusten kommen.
Testoptimierung der Parameter, um die optimale Parameterkombination zu finden
Verschiedene Durchschnittsphasen werden getestet, um die optimalen Parameter auszuwählen.
Es werden mehrere Sorten getestet, wobei die Parameter je nach Leistung ausgewählt werden.
Optimierung der Stop-Loss-Strategie, um zu vermeiden, dass ein einziger Verlust zu groß ist.
Diese Strategie umfasst verschiedene Indikatoren, die Preisanomalien und Trendrichtung bestimmen. Theoretisch können bestimmte Falschsignale gefiltert werden. Die Parameter-Einstellungen sind jedoch relativ subjektiv und lassen sich optimieren. Darüber hinaus müssen die Auswirkungen von Transaktionskosten wie Gebühren, Gleitpunkte usw. in der konkreten Realität berücksichtigt werden.
/*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")