La stratégie de rupture d'hier

Auteur:ChaoZhang est là., Date: 2023-11-06 10h49 et 57 min
Les étiquettes:

img

Résumé

La stratégie Breakout High d'hier est un système de suivi de tendance qui va long lorsque le prix dépasse le haut d'hier, même si la rupture se produit plusieurs fois dans la journée.

Principe

La stratégie utilise plusieurs indicateurs techniques pour les signaux d'entrée et de sortie:

  • Filtre ROC - La stratégie n'est activée que lorsque la clôture d'aujourd'hui présente un changement de prix en pourcentage supérieur à un seuil par rapport à la clôture de la journée précédente.

  • Point de déclenchement - Les prix record d'aujourd'hui sont les hauts, les bas et les prix ouverts.

  • Conditions d'entrée et de sortie - Après l'entrée, les pourcentages d'arrêt des pertes et de prise de profit sont définis. L'arrêt de suivi peut être activé pour verrouiller les bénéfices. Sortie conditionnelle lorsque le prix tombe en dessous d'une EMA de référence.

  • Configuration - pourcentage d'écart pour anticiper ou retarder l'entrée. Pourcentages de stop loss, de profit et de retard personnalisables.

Plus précisément, il suit le prix élevé d'aujourd'hui pour le signal d'entrée. Entrée longue lorsque le prix dépasse le haut d'aujourd'hui. Ensuite, les sorties stop loss et take profit sont définies, avec le stop trailing activé. Sortie alternative lorsque le prix dépasse la EMA donnée. Optimisation en définissant le pourcentage d'écart, en ajustant les ratios stop loss et take profit pour contrôler le risque, permettant au stop trailing de verrouiller le profit.

Analyse des avantages

Les avantages de cette stratégie:

  • Suivre la tendance, capturer le profit des mouvements de tendance.

  • La stratégie de rupture donne des signaux d'entrée clairs.

  • Considère le prix élevé d'aujourd'hui, évite les entrées consécutives.

  • Arrêter les pertes et prendre des bénéfices aide à contrôler les risques.

  • Le trail stop est un gain.

  • Le calendrier d'entrée peut être réglé avec l'optimisation des paramètres pour contrôler le risque.

  • Simple et intuitif, facile à comprendre et à mettre en œuvre.

  • Applicable aux opérations longues et courtes.

Analyse des risques

Les risques à prendre en considération:

  • Les stratégies de rupture sont sujettes à des fléchettes.

  • Effectif uniquement pour les marchés en tendance, sous-performe dans des conditions variables.

  • Un pourcentage raisonnable d'arrêt de perte est nécessaire, trop large peut augmenter la perte.

  • Un pourcentage raisonnable d'écart nécessaire, trop agressif peut augmenter les pertes.

  • Une fausse fuite peut entraîner des pertes inutiles, un réglage est nécessaire.

  • Le volume doit supporter la suite après la rupture.

  • La cohérence nécessaire entre les paramètres dans les délais.

Directions d'optimisation

Optimisations possibles:

  • Ajoutez d'autres indicateurs comme le volume, la volatilité pour éviter les crises lors de la variation des marchés.

  • Ajoutez des indicateurs d'ajustement de courbe pour qualifier la force de la tendance, éviter les fausses tendances.

  • Optimisation dynamique du déficit d'entrée en fonction de la volatilité du marché.

  • Optimisation dynamique du stop loss et du take profit suivant les conditions du marché.

  • Différents paramètres pour différents symboles et délais.

  • L'apprentissage automatique pour tester l'impact des paramètres sur les performances de la stratégie.

  • Ajoutez la fonctionnalité Options pour optimiser les configurations.

  • Applicabilité à la recherche dans des conditions de marché différentes.

  • Élargir à des stratégies transversales et multi-actifs.

Conclusion

La stratégie offre une performance décente sur les marchés en tendance basée sur la rupture du concept élevé d'hier. Mais il existe des risques de difficultés d'optimisation des paramètres. D'autres optimisations possibles en ajoutant des jugements, un réglage dynamique des paramètres, une expansion vers des stratégies combinées, etc. Dans l'ensemble, elle convient à la tendance à court terme, mais un contrôle des risques et un réglage des paramètres sont nécessaires.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
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/
// Author: © tumiza 999 
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High v.17.07", overlay=true, pyramiding = 1,
         initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10,
         slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
         commission_type=strategy.commission.percent, commission_value=0.075
         )

// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------

// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)

roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")

closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100  > roc_threshold  : true


// -----------------------------------------------------------------------------
// Trigger Point 
// -----------------------------------------------------------------------------

open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60

bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")

first_bar = 0
if open_session
    first_bar := bar_index

var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0

if first_bar
    high_daily1 := max_today
    low_daily1 := min_today
    today_open := open
    max_today := high
    min_today := low


if high >= max_today
    max_today := high

if low < min_today
    min_today := low


same_day  = today_open == today_open[1]

plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')

// -----------------------------------------------------------------------------
// Strategy settings 
// -----------------------------------------------------------------------------

Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100

sl  = input.float(3, "Stop-loss", step= 0.5,  group = "Entry")
tp  = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)

sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100

stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100

mess_buy = "buy"
mess_sell = "sell"

// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------

if close < high_daily1 and roc_filter
    strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)

ts_n  = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)

plot(ma1, title='EMA', color=color.new(color.yellow, 0))

if ts_n == true
    strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
    strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)

if close_ema == true and ta.crossunder(close,ma1)
    strategy.close("Entry",comment = "Close" , alert_message = mess_sell)



Plus de