
La stratégie est basée sur l’indicateur de super-tendance et l’indicateur de la chaîne de prix, combinés à des signaux de ligne droite. L’idée centrale est d’utiliser la chaîne de prix pour déterminer si le prix actuel est dans un état anormal, la super-tendance pour déterminer la direction de la tendance actuelle et de produire un signal de transaction avec une combinaison de signaux de ligne droite.
Calculer l’indicateur de super-tendance. Les lignes supérieures et inférieures sont respectivement N fois le prix actuel plus/moins l’indicateur ATR. Les prix supérieurs à la ligne supérieure sont en hausse et les prix inférieurs à la ligne inférieure sont en baisse.
Calculer l’indicateur du canal de prix. Dans ce cas, le canal de prix est M fois la différence de N jours entre le prix et la norme. Un prix supérieur ou inférieur au canal de prix est considéré comme un état anormal.
Calculer la moyenne des prix d’ouverture, de clôture et de supertrend.
Les signaux de transaction sont générés:
Signaux d’achat: ligne de tendance supérieure au cours de clôture et supérieure à la ligne moyenne du cours d’ouverture
Signaux de vente: traversée de la ligne de tendance supérieure au cours de clôture et inférieure à la ligne moyenne du cours d’ouverture
Il est possible de mettre en place un canal de prix de stop-loss.
Le système de signalisation est basé sur un ensemble de mesures qui permettent d’éviter les fausses alertes.
Les canaux de prix permettent de détecter les anomalies de prix et de filtrer les points d’entrée non souhaitables.
La ligne de parité est utilisée pour juger de la direction de la tendance et éviter les opérations de contre-courant.
Réglez le périmètre d’arrêt de perte et maîtrisez les risques.
Les paramètres sont trop subjectifs et doivent être optimisés.
La plage d’arrêt des dommages est peut-être trop grande.
Les paramètres du canal de prix peuvent ne pas être adaptés à toutes les variétés et doivent être testés séparément selon les variétés.
Les pertes pourraient être plus importantes si la tendance change radicalement.
Optimiser les paramètres pour trouver la meilleure combinaison de paramètres.
Tester différentes périodes de moyenne et choisir le paramètre optimal.
Les tests sont effectués sur plusieurs variétés et les paramètres sont sélectionnés en fonction de leurs performances.
Optimiser les stratégies de stop loss pour éviter des pertes excessives en une seule fois.
Cette stratégie regroupe plusieurs indicateurs pour déterminer les anomalies de prix et la direction de la tendance. En théorie, il est possible de filtrer certains faux signaux. Cependant, les paramètres sont toujours subjectifs et il y a une certaine marge d’optimisation.
/*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")