Cette stratégie utilise trois principaux indicateurs techniques: la moyenne mobile EMA, l'indice de force relative RSI et l'indice de canal de matières premières CCI pour identifier la dynamique des prix à travers les croisements EMA et d'autres entrées confirmées par des lectures de survente/surachat du RSI et du CCI. Cette stratégie de négociation à moyen terme vise à capturer les inversions de dynamique.
Utiliser des croisements entre l' EMA à 4 et 8 périodes pour déterminer la dynamique des prix
Lorsque les EMA tournent à la hausse, c'est-à-dire lorsque l'EMA à quatre périodes franchit l'EMA à huit périodes, vérifiez que le RSI (supérieur à 65) et le CCI (supérieur à 0) ne sont pas surachetés pour donner un signal long;
Lorsque les EMA tournent à la baisse, c'est-à-dire lorsque l'EMA à quatre périodes traverse l'EMA à huit périodes, vérifiez que le RSI (inférieur à 35) et l'ICC (inférieur à 0) sont survendus pour donner un signal court;
Définissez les prix stop loss et take profit en fonction des distances d'entrée une fois que les signaux de trading sont déclenchés.
En résumé, cette stratégie considère la tendance à moyen terme et les niveaux de surachat/survente à court terme comme des signaux relativement stables, tout en limitant efficacement les pertes par transaction.
Les indicateurs multiples atténuent les faux signaux émis par les oscillateurs individuels;
Les EMA déterminent la tendance principale tandis que les RSI et les CCI évitent les zones surchauffées pour améliorer le taux de réussite;
L'arrêt automatique des pertes et la prise de profit limitent les pertes lors de mouvements extrêmes;
La nature purement technique rend cette stratégie facilement implémentable dans n'importe quel délai.
Les grandes nouvelles fondamentales peuvent passer avant les niveaux techniques;
Le stop loss peut être effectué par des appels à des stops plus larges en raison d'une forte volatilité;
Les transactions fréquentes entraînent des coûts de transaction plus élevés, il est donc préférable de les laisser aux algorithmes à haute fréquence.
Incorporer des modèles d'apprentissage automatique pour ajuster automatiquement les paramètres en fonction des fondamentaux;
Construire des arrêts adaptatifs qui réagissent à la volatilité plutôt qu'à des distances fixes.
Cette stratégie à multiples facettes peut générer des profits constants à moyen terme dans des paramètres optimisés, ce qui en fait un système technique accessible.
/*backtest start: 2023-11-19 00:00:00 end: 2023-11-26 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true) len4 = input(4, minval=1, title="Length_MA4") src4 = input(close, title="Source") offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out4 = ema(src4, len4) plot(out4, title="EMA", color=color.blue, offset=offset4) len8 = input(8, minval=1, title="Length_MA8") src8 = input(close, title="Source") offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out8 = ema(src8, len8) plot(out8, title="EMA", color=color.blue, offset=offset8) //rsioma src = close, len = input(14, minval=1, title="Length") up = rma(max(change(ema(src, len)), 0), len) down = rma(-min(change(ema(src, len)), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) //plot(rsi, color=color.blue) //band1 = hline(80) //band0 = hline(20) //fill(band1, band0, color=color.purple, transp=90) //hline(50, color=color.gray, linestyle=plot.style_line) sig = ema(rsi, 21) //plot(sig, color=color.purple) //woodie cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14) cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20) source = close cciTurbo = cci(source, cciTurboLength) cci14 = cci(source, cci14Length) last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0 last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0 histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red // Exit Condition // Exit Condition a = input(12)*10 b = input(15)*10 c = a*syminfo.mintick d = b*syminfo.mintick longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0) shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0) long_stop_level = float(na) long_profit_level1 = float(na) long_profit_level2 = float(na) long_even_level = float(na) short_stop_level = float(na) short_profit_level1 = float(na) short_profit_level2 = float(na) short_even_level = float(na) long_stop_level := longCondition ? close - c : long_stop_level [1] long_profit_level1 := longCondition ? close + d : long_profit_level1 [1] //long_profit_level2 := longCondition ? close + d : long_profit_level2 [1] //long_even_level := longCondition ? close + 0 : long_even_level [1] short_stop_level := shortCondition ? close + c : short_stop_level [1] short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1] //short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1] //short_even_level := shortCondition ? close + 0 : short_even_level [1] //ha // === Input === //ma1_len = input(1, title="MA 01") //ma2_len = input(40, title="MA 02") // === MA 01 Filter === //o=ema(open,ma1_len) //cc=ema(close,ma1_len) //h=ema(high,ma1_len) //l=ema(low,ma1_len) // === HA calculator === //ha_t = heikinashi(syminfo.tickerid) //ha_o = security(ha_t, timeframe.period, o) //ha_c = security(ha_t, timeframe.period, cc) //ha_h = security(ha_t, timeframe.period, h) //ha_l = security(ha_t, timeframe.period, l) // === MA 02 Filter === //o2=ema(ha_o, ma2_len) //c2=ema(ha_c, ma2_len) //h2=ema(ha_h, ma2_len) //l2=ema(ha_l, ma2_len) // === Color def === //ha_col=o2>c2 ? color.red : color.lime // === PLOTITING=== //plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col) tp=input(120) sl=input(96) strategy.entry("long", strategy.long, when = longCondition) //strategy.close("long", when = o2>c2 , comment="ha_long") strategy.entry("short", strategy.short , when =shortCondition ) //strategy.close("short", when = o2<=c2 , comment = "ha_short" ) //strategy.close("long",when=long_profit_level1 or long_stop_level , comment="tp/sl") //strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl") strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2) strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)