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.
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.
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.
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.
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.
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)