La tendance à la hausse de l'éclatement d'hier suit la stratégie

Auteur:ChaoZhang est là., Date: 2023-10-08 14:06:55 Je vous en prie.
Les étiquettes:

Résumé

Cette stratégie fonctionne sur la base du sommet du jour de négociation précédent, en suivant la tendance.

La logique de la stratégie

  1. Utilisez la fonction LucF pour éviter le biais de l'observateur dans le backtesting.

  2. Identifier si une nouvelle journée de négociation est ouverte.

  3. Comparez le maximum actuel avec max_today, mettez à jour max_today si dépassé.

  4. Comparer le niveau le plus bas actuel avec min_today, mettre à jour min_today en cas de violation.

  5. Tracez les niveaux hauts et bas des journées de négociation précédentes.

  6. Définir le point d'entrée à la rupture du sommet de la journée précédente, le GAP peut être ajouté pour avancer ou retarder l'entrée.

  7. Définissez le pourcentage stop loss sl et le pourcentage profit tp.

  8. Allez long lorsque le prix dépasse le sommet du jour de négociation précédent.

  9. Fixez le prix stop-loss et le prix profit.

  10. Optionnellement, activer le stop-loss de suivi, avec niveau d'activation et distance de décalage.

  11. Optionnellement clôturer une transaction basée sur le croisement EMA.

Analyse des avantages

Cette stratégie simple de suivi des tendances présente les avantages suivants:

  1. Génération de signaux claire et simple, facile à mettre en œuvre.

  2. Une rupture avec le sommet de la journée précédente confirme la tendance, réduisant les baisses.

  3. Le paramètre GAP permet de régler la sensibilité d'entrée.

  4. Le risque global est contrôlé avec un stop loss clair.

  5. Le trailing stop peut être utilisé pour obtenir plus de profits.

  6. Le croisement des EMA évite d'être pris au piège des tendances à la baisse.

Analyse des risques

Il y a quelques risques à noter:

  1. Une évasion ratée peut entraîner des pertes.

  2. Il faut des tendances de marché, des coups de fouet dans des conditions variées.

  3. Un arrêt de traîneau inapproprié peut être arrêté prématurément.

  4. Un mauvais choix de paramètres de l'EMA peut le rendre trop sensible ou retardé.

  5. Plusieurs variables doivent être réglées comme le GAP, le stop loss, le trailing stop, etc.

Des possibilités d'amélioration

Quelques moyens d'optimiser davantage la stratégie:

  1. Utiliser un stop loss dynamique basé sur l'ATR ou la tendance.

  2. Ajouter un filtre pour une rupture valide en utilisant l'écart type.

  3. Ajoutez des conditions de volatilité pour éviter une fausse rupture sur les marchés instables.

  4. Optimisez le paramètre EMA pour un signal plus robuste.

  5. Ajustez les paramètres d'arrêt pour correspondre à la volatilité du marché.

  6. La robustesse des paramètres doit être testée sur différents instruments.

  7. Ajouter un mécanisme de dimensionnement dynamique de la position.

Conclusion

La stratégie est simple et pratique comme un système typique de suivi de tendance basé sur la rupture élevée des jours précédents. La gestion des risques dépend principalement du stop loss. Avec un réglage approprié des paramètres, elle peut bien fonctionner dans des conditions de tendance. Mais un stop loss et des filtres appropriés sont nécessaires pour éviter les coupes de fouet. Le cadre peut être encore amélioré comme base pour les stratégies de suivi de tendance.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High", 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