La stratégie utilise une combinaison de plusieurs indicateurs techniques pour identifier la direction de la tendance et les zones de survente et de survente pour générer des signaux de transaction.
Les principaux indicateurs sont les suivants:
Indice de direction moyen ((ADX): mesure la force de la tendance
Indicateur relativement faible (RSI): sur-achat et sur-vente
Les moyennes pondérées (SMA): évaluer les tendances à court terme
Indicateur SAR extrême: juger des tendances à court et à long terme
Une percée: une entrée de tendance
Logique de la transaction:
L’ADX estime que la tendance est présente et assez forte
La SAR juge les tendances à court et à long terme cohérentes
Le RSI identifie une zone de survente
Entrée en bourse lorsque le prix dépasse la moyenne SMA
Entrée au cours de la rupture du canal
La validation mutuelle d’indicateurs multiples améliore l’exactitude des jugements et la combinaison de stratégies différentes forme un système de négociation systémique.
Une combinaison de plusieurs indicateurs pour améliorer la qualité du signal
Une combinaison de stratégies et une admission systématique
L’ADX identifie la tendance, le RSI détermine le surachat
Le SAR saisit la tendance, le SMA et le canal font leur entrée
Résolution de paramètres multiples nécessitant des tests répétés et une optimisation
Conditions de combinaison moins fréquentes
Les indicateurs sont difficiles à traiter lorsqu’ils génèrent des signaux de conflit
La stratégie exploite pleinement les avantages de différents types d’indicateurs pour construire un système de négociation robuste. Cependant, il est nécessaire d’optimiser les paramètres pour s’assurer que la fréquence de négociation est raisonnable. Dans l’ensemble, la stratégie intègre la reconnaissance de tendances fortes et une entrée efficace.
/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1)
adxlen = input(7, title="ADX Smoothing")
dilen = input(7, title="DI Length")
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
// The same on Pine Script™
pine_supertrend(factor, atrPeriod) =>
src = hl2
atr = ta.atr(atrPeriod)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20
direction := 1
else if prevSuperTrend == prevUpperBand
direction := close > upperBand ? -1 : 1
else
direction := close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
[superTrend, direction]
[pineSupertrend, pineDirection] = pine_supertrend(3, 10)
upTrend = pineDirection < 0
downTrend = pineDirection > 0
// Define the 20-period SMA
sma20 = ta.sma(close, 20)
a = ta.rsi(close,14)
OB = input(70)
OS = input(30)
os = a > OB
ob = a < OS
if upTrend and close > pineSupertrend and close > sma20 and os
strategy.entry("Buy", strategy.long)
if ta.crossunder(close, sma20) or ob
strategy.close_all()
//define when to breakout of channel
//("ChannelBreakOutStrategy", overlay=true)
length = input.int(title="Length", minval=1, maxval=1000, defval=5)
upBound = ta.highest(high, length)
downBound = ta.lowest(low, length)
if (not na(close[length]))
strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")