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.
La stratégie repose principalement sur les indicateurs suivants:
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.
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.
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.
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:
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.
Signal baissier: EMA rapide se décompose en EMA lente avec une ligne Yin-K-line, position longue aplatie.
Sortie de stop-loss: sortie de stop-loss à la position actuelle lorsque le signal de retour apparaît.
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.
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) ///////////////////////////////////////////////////////////////////////////////////////////