Stratégie de négociation basée sur la combinaison de la percée EMA et du schéma K-line dans plusieurs délais

Auteur:ChaoZhang est là., Date: 21 février 2024 à 15h06
Les étiquettes:

img

Résumé

Cette stratégie intègre plusieurs indicateurs EMA et des jugements de modèle K-line pour obtenir une capture de signal à long terme et des sorties stop-loss relativement sensibles.

Principe de stratégie

La stratégie repose principalement sur les indicateurs suivants:

  1. EMA: Utilise 2 séries de 13 et 21 cycles d'EMA pour déterminer le signal de négociation lors d'une percée de prix.

  2. Modèle de ligne K: juge la direction de l'entité de ligne K et l'utilise avec l'indicateur EMA pour filtrer les fausses percées.

  3. Résistance de support: construite par les points les plus élevés des 10 derniers cycles pour déterminer si la percée passe cette zone afin d'améliorer la fiabilité du signal.

  4. Ascension dans la division temporelle: 120 cycle de fermeture est au-dessus ouvert à juger comme ascension dans la division temporelle, comme un jugement auxiliaire.

Les règles de génération des signaux de négociation sont les suivantes:

  1. Signal haussier: l'EMA rapide franchit l'EMA lente à la hausse avec une ligne Yang K-line, ferme une position courte et ouvre une position longue.

  2. Signal baissier: EMA rapide se décompose en EMA lente avec une ligne Yin-K-line, position longue aplatie.

  3. Sortie de stop-loss: sortie de stop-loss à la position actuelle lorsque le signal de retour apparaît.

Les avantages

  1. Les indicateurs EMA de plusieurs périodes évaluent la tendance de manière plus fiable et évitent de fausses percées.
  2. Combiné avec la direction de l'entité K-line pour le filtrage afin d'identifier les tendances avec plus de précision.
  3. Augmenter les jugements de division temporelle et soutenir les jugements de résistance pour assurer la qualité du signal.
  4. Utilisez des signaux inversés comme stop loss pour réduire le risque de perte.

Les risques

  1. Les jugements de l'EMA et de l'entité de la ligne K sur plusieurs délais ne peuvent toujours pas éviter complètement l'impact des jugements invalides sur la stratégie.
  2. Risque de sélection inappropriée des paramètres: les réglages inappropriés des cycles EMA, des cycles de jugement de la ligne K entraîneront une diminution de la qualité du signal.
  3. Risque d'échec de la résistance de support. L'échec historique de la résistance de support est courant, ce qui entraînera également un manque de dynamique lorsque des signaux sont générés.
  4. Risque d'échec de la division temporelle: la situation de la division temporelle change et ne peut pas être entièrement utilisée pour le jugement.

Les risques susmentionnés peuvent être atténués par des méthodes telles que l'évitement d'une optimisation excessive, une sélection minutieuse des paramètres, un contrôle strict de la dimension de la position.

Directions d'optimisation

  1. Introduire des modèles d'apprentissage automatique pour faciliter le jugement. Former des modèles de classification pour juger des directions d'entités K-line pour une plus grande précision.
  2. Augmenter le mécanisme d'arrêt de perte adaptatif tel que les arrêts de suivi ou les arrêts basés sur la volatilité.
  3. Combiner l'analyse sentimentale, introduire certains jugements d'opinion des médias pour éviter les effets négatifs majeurs des nouvelles.
  4. Ajouter le module de gestion de la taille des positions.

Conclusion

La stratégie intègre plusieurs jugements d'entité de la EMA et de la ligne K pour des jugements de tendance relativement fiables. Les jugements auxiliaires utilisant la résistance de support et la division du temps assurent la qualité du signal. L'utilisation de signaux inversés pour le stop loss peut contrôler efficacement un seul stop loss. Des optimisations futures peuvent être effectuées en introduisant des modèles d'apprentissage automatique, des arrêts adaptatifs, une analyse sentimentale et des modules de gestion de la taille de la position pour rendre la stratégie plus robuste.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=false

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

///////////////////////////////////////////////////////////////////////////////////////////

Plus de