
Cette stratégie utilise des indices bi- et tri-indicateurs, combinés à des indices aléatoires, pour former une stratégie de suivi de tendance plus stable et plus fiable. Son idée principale est d’émettre un signal de transaction lorsque l’indicateur aléatoire est jugé comme une fourche ou une fourchette morte. L’indicateur aléatoire est utilisé pour aider à juger des situations de survente et de survente.
La stratégie se compose de quatre éléments principaux:
Indicateur à double équilibre: moyenne mobile indicielle calculée sur 50 cycles et 100 cycles respectivement (EMA), générant un signal d’achat lorsque l’EMA à court terme est traversée par l’EMA à long terme et un signal de vente lorsque l’EMA est traversée.
Trois indices: les moyennes mobiles indicielles de 50 cycles, de 100 cycles et de 200 cycles sont calculées pour déterminer la direction de la tendance du marché. Un marché à plusieurs têtes est un marché à plusieurs têtes lorsque 50EMA> 100EMA> 200EMA et un marché à tête nue lorsque 50EMA < 100EMA < 200EMA.
Indicateur aléatoire: Calcule les valeurs K et D de 6 jours du RSI pour juger si le cours de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur.
Signal de transaction: le marché est conforme à la position de la ligne moyenne à trois têtes ou à la position vide uniquement lorsque l’indicateur de la ligne moyenne à deux têtes génère un signal, et un véritable ordre de transaction n’est émis que lorsque l’indicateur aléatoire n’affiche pas de surachat ou de survente.
Cette stratégie combine les avantages de l’utilisation d’indicateurs linéaires et aléatoires, en tenant compte de la direction de la tendance lors de l’émission de signaux de négociation, ainsi que de l’état de survente du marché, ce qui permet de mieux filtrer le bruit et de suivre une tendance plus claire. En outre, il utilise la ligne de l’indicateur de trois pour juger de la tendance globale, ce qui rend le signal plus fiable. Cette stratégie est simple à comprendre, facile à mettre en œuvre et facile à optimiser.
Le plus grand risque de cette stratégie réside dans le fait qu’elle repose sur le jugement des indicateurs, ce qui peut entraîner des échecs de négociation lorsque les indicateurs émettent des signaux erronés. De plus, l’utilisation d’indicateurs de moyennes périodiques plus longs pour juger de la tendance globale peut également manquer des opportunités à court terme. Les principales contre-mesures de risque sont les suivantes:
Optimiser les paramètres de l’indicateur et ajuster la combinaison périodique des moyennes binaires et triangulaires pour mieux correspondre aux caractéristiques du marché.
Il est possible d’effectuer des opérations de CANCEL en combinaison avec d’autres indicateurs et d’arrêter les transactions en cours en cas de forte volatilité.
L’utilisation de stratégies de négociation à courte échéance pour tirer profit des opportunités à court terme sur les marchés à longue échéance.
Cette stratégie peut être optimisée principalement dans les domaines suivants:
Adapter les paramètres cycliques des moyennes binaires et triangulaires et optimiser les indicateurs en fonction des caractéristiques du marché.
Il est possible d’ajouter des indices tels que le VOLUME et le MACD pour éviter que les anomalies de prix ne génèrent de faux signaux.
Il est préférable d’utiliser le mode bougie pour confirmer la tendance et éviter les signaux erronés après un retrait à court terme.
Étendre à d’autres variétés comme les actions, les devises, etc. pour tester l’adaptabilité des stratégies.
Les indicateurs VIX sont utilisés pour évaluer la volatilité du marché et contrôler la taille des positions.
Cette stratégie utilise des indices bi-médianes pour émettre des signaux de négociation, des indices tri-médianes et des indices aléatoires pour des jugements auxiliaires, afin de construire une stratégie de suivi de tendance plus stable. Elle est simple à comprendre, facile à mettre en œuvre, hautement adaptée aux caractéristiques du marché, les rendements sont plus stables, c’est une stratégie quantitative recommandée.
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)
//**Backtest Date sof
useStartPeriodTime = input.bool(true , 'Start Date & Time' , group='Date Range' , inline='Start Period')
startPeriodTime = input(timestamp('16 Apr 2021') , '' , group='Date Range' , inline='Start Period')
useEndPeriodTime = input.bool(false , 'End Date & Time' , group='Date Range' , inline='End Period')
endPeriodTime = input(timestamp('31 Dec 2222') , '' , group='Date Range' , inline='End Period')
enableHighlight = input.bool(false , 'Highlight' , group='Date Range' , inline='Highlight')
highlightType = input.string('Anchors' , '' , group='Date Range' , inline='Highlight' , options=['Anchors', 'Background'])
highlightColor = input.color(color.white , '' , group='Date Range' , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
// if highlightType == 'Anchors'
// if useStartPeriodTime
// line.set_xy1(startAnchor, startPeriodTime, low)
// line.set_xy2(startAnchor, startPeriodTime, high)
// if useEndPeriodTime
// line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
// line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)
// if highlightType == 'Background'
// useBgcolor := true
// useBgcolor
// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof
src =input(close , 'Source' , group='Support')
showEMA = input(true , 'Show EMA' , group='Support')
//**Stochastic RSI sof
smoothK = input.int(6 , "K" , group='Stochastic RSI' , minval=1)
smoothD = input.int(6 , "D" , group='Stochastic RSI' , minval=1)
lengthRSI = input.int(28 , "RSI Length" , group='Stochastic RSI' , minval=1)
lengthStoch = input.int(28 , "Stoch Length" , group='Stochastic RSI' , minval=1)
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
//**STochastic RSI eof
//** EMA sof
emain01 = input.int(50 , "EMAma Girang" , group='Moving Average Exponential' , minval=1)
emain02 = input.int(100 , "EMAma Muda" , group='Moving Average Exponential' , minval=1)
emain03 = input.int(200 , "EMAma Tua" , group='Moving Average Exponential' , minval=1)
ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang' , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda' , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua' , color = color.new(color.red, 0))
//** EMA eof
//**Condition sof
emaLong = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort = ema01 < ema02 and ema02 < ema03 and high < ema03
longCond = ta.crossover(k,d) and k <= 23 and emaLong
shortCond = ta.crossunder(k,d) and k >= 77 and emaShort
longClose = ta.crossunder(k,d) and k <= 77
shortClose = ta.crossover(k,d) and k >= 23
longCross = ta.crossover(ema01, ema02)
shortCross = ta.crossunder(ema01, ema02)
//**Condition eof
//**Strategy sof
if calcPeriod and longCond
strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')
if calcPeriod and shortCond
strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')
if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
strategy.cancel('long')
strategy.cancel('short')
//**Strategy eof
//**Label sof
entryText = str.tostring(strategy.position_avg_price, '##.###')
longText = 'Long Entry : ' + entryText
shortText = 'Short Entry : ' + entryText
noTrade = 'Sleeping Mode'
LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0
Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade
xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)
// lab_l = label.new(
// xPosition, yPosition, Tekslabel,
// color=labelColor,
// textcolor=textColor,
// style = label.style_label_left,
// textalign=text.align_left,
// xloc=xloc.bar_time, yloc = yloc.price)
// label.delete(lab_l[1])
//**Strategy eof