Stratégie de trading à court terme basée sur la rupture de session


Date de création: 2023-09-20 17:00:16 Dernière modification: 2023-09-20 17:00:16
Copier: 1 Nombre de clics: 724
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est combinée à un tableau de bord multi-espace de plusieurs périodes de temps pour capturer des ruptures de courte ligne et effectuer des transactions de diffusion dans la période de session.

Principe de stratégie

  1. Les trajectoires multi-aériennes journalières et courtes sont calculées, formant une brèche dans les deux périodes.

  2. Les transactions sont effectuées uniquement pendant les périodes de négociation personnalisées. Les périodes commencent à la rupture et se terminent à la liquidation.

  3. Le prix est calculé en termes d’EMA en temps réel comme prix d’entrée. Un prix supérieur à la moyenne génère un signal de rupture.

  4. La ligne d’arrêt est définie à l’extérieur de la porte de rupture.

  5. Lorsque le prix revient à la zone de la trajectoire moyenne, confirmer l’échec de la rupture et se plaindre.

Analyse des avantages

  1. La combinaison de plusieurs périodes permet de filtrer efficacement les fausses percées.

  2. Les échanges limités permettent d’éviter les événements majeurs.

  3. Les prix suivis par l’EMA peuvent être suivis au fur et à mesure, en temps opportun.

  4. La mise en place d’une ligne de stop-loss aide à contrôler les risques.

  5. Le placement obligatoire des positions sur une période donnée peut éviter le risque d’une nuit blanche.

Analyse des risques

  1. Les cas où la rupture de la ligne courte peut être déclenchée par un arrêt de la panne.

  2. Certaines percées pourraient ne pas être rentables avant la fin de la période.

  3. Le mauvais réglage de l’heure peut aussi vous faire manquer une opportunité de trading.

  4. Il n’y a aucune garantie que chaque percée atteindra les bénéfices attendus.

  5. Les paramètres d’optimisation peuvent avoir des problèmes de compatibilité.

Direction d’optimisation

  1. Tester différents paramètres de percée pour trouver la combinaison optimale

  2. Évaluer d’autres indicateurs pour améliorer la précision de l’admission.

  3. Optimiser le moment de la transaction pour trouver un équilibre entre le profit et le risque.

  4. Il a également étudié la manière dont les stratégies d’arrêt de l’usure peuvent être combinées pour bloquer les bénéfices.

  5. Tester la différence entre les paramètres des différentes variétés.

  6. Paramètres d’optimisation dynamique utilisant un algorithme d’apprentissage automatique.

Résumer

Cette stratégie tente de faire des échanges de diffusion de courte ligne par des échanges de session limitée. Elle peut être améliorée en tant que stratégie de négociation de courte ligne pragmatique et efficace en optimisant les aspects de la fausse rupture et de la gestion des risques.

Code source de la stratégie
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Breakout Scalper", overlay=true)

// -------------------------------------------------------------------------------------------------
// INPUTS
// -------------------------------------------------------------------------------------------------
// Period of the "fast" donchian channel
fast_window = input(title="Fast Window",  defval=13, minval=1)
// Used for the volatility (atr) period
slow_window = input(title="Slow Window",  defval=52, minval=1)
// Period of EMA used as the current price
instant_period = input(title="Instant Period",  defval=3, minval=1)
// Minimum ratio of cloud width to ATR in order for trade to be active
cloud_min_percent = input(title="Minimum Cloud ATR Multiplier", type=float, defval=1.0, minval=0)
// Session where we allow trades to be active
trading_sesh = input(title="Trading Session",  defval='1000-1500')
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// SESSION TIMING
// -------------------------------------------------------------------------------------------------
is_newbar(t) =>
    na(t[1]) and not na(t) or t[1] < t

day_time = time("D")
sess_time = time(timeframe.period, trading_sesh)
day_open_bar = is_newbar(day_time)
sess_open_bar = is_newbar(sess_time)
sess_close_bar = na(sess_time) and not na(sess_time[1])
sess_is_open = false
sess_is_open := sess_open_bar ? true : (sess_close_bar ? false : sess_is_open[1])
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// DONCHIANS
// -------------------------------------------------------------------------------------------------
slow_high = na
slow_high := day_open_bar ? high : (high > slow_high[1] ? high : slow_high[1])
slow_low = na
slow_low := day_open_bar ? low : (low < slow_low[1] ? low : slow_low[1])
slow_mid = (slow_high + slow_low) / 2

fast_low = max(slow_low, lowest(fast_window))
fast_high = min(slow_high, highest(fast_window))
fast_mid = (fast_low + fast_high) / 2
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// TREND CLOUD
// -------------------------------------------------------------------------------------------------
cloud_width = fast_mid - slow_mid
slow_atr = atr(slow_window)
cloud_percent = cloud_width / slow_atr
cloud_color = cloud_percent > cloud_min_percent ? green : (cloud_percent < -cloud_min_percent ? red : gray)

fp = plot(fast_mid, title="Fast MidR", color=green)
sp = plot(slow_mid, title="Slow MidR", color=red)
fill(fp, sp, color=cloud_color)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// INSTANT PRICE
// -------------------------------------------------------------------------------------------------
instant_price = ema(close, instant_period)
plot(instant_price, title="Instant Price", color=black, transp=50)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// ENTRY SIGNALS & STOPS
// -------------------------------------------------------------------------------------------------
buy_entry_signal = sess_is_open and (instant_price > fast_mid) and (cloud_percent > cloud_min_percent)
sell_entry_signal = sess_is_open and (instant_price < fast_mid) and (cloud_percent < -cloud_min_percent)
buy_close_signal = sess_close_bar or (cloud_percent < 0)
sell_close_signal = sess_close_bar or (cloud_percent > 0)

entry_buy_stop = slow_high
entry_sell_stop = slow_low
exit_buy_stop = max(slow_low, fast_low)
exit_sell_stop = min(slow_high, fast_high)

entry_buy_stop_color = (strategy.position_size == 0) ? (buy_entry_signal ? green : na) : na
plotshape(entry_buy_stop, location=location.absolute, color=entry_buy_stop_color, style=shape.circle)
entry_sell_stop_color = (strategy.position_size == 0) ? (sell_entry_signal ? red : na) : na
plotshape(entry_sell_stop, location=location.absolute, color=entry_sell_stop_color, style=shape.circle)
exit_buy_stop_color = (strategy.position_size > 0) ? red : na
plotshape(exit_buy_stop, location=location.absolute, color=exit_buy_stop_color, style=shape.xcross)
exit_sell_stop_color = (strategy.position_size < 0) ? green : na
plotshape(exit_sell_stop, location=location.absolute, color=exit_sell_stop_color, style=shape.xcross)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// STRATEGY EXECUTION
// -------------------------------------------------------------------------------------------------
strategy.entry("long", strategy.long, stop=entry_buy_stop, when=buy_entry_signal)
strategy.cancel("long", when=not buy_entry_signal)
strategy.exit("stop", "long", stop=exit_buy_stop)
strategy.entry("short", strategy.short, stop=entry_sell_stop, when=sell_entry_signal)
strategy.cancel("short", when=not sell_entry_signal)
strategy.exit("stop", "short", stop=exit_sell_stop)
strategy.close("long", when=buy_close_signal)
strategy.close("short", when=sell_close_signal)
// -------------------------------------------------------------------------------------------------