Diese Strategie arbeitet auf der Grundlage der Höchstwerte des vorherigen Handelstages und arbeitet in einem Trendfolge-Modus.
Verwenden Sie die LucF-Funktion, um eine Aussichtsverzerrung beim Backtesting zu vermeiden.
Identifizieren Sie, ob ein neuer Handelstag geöffnet ist.
Vergleichen Sie das aktuelle Hoch mit max_today, aktualisieren Sie max_today, wenn es überschritten wird.
Vergleichen Sie das aktuelle Tief mit min_today, aktualisieren Sie min_today, wenn es verletzt wird.
Sie werden die Höchst- und Tiefstwerte der vorherigen Handelstage erfassen.
Eintrittspunkt beim Ausbruch des Vortagshöchststands festlegen, GAP kann hinzugefügt werden, um den Eintritt vor- oder nachzuhalten.
Setzen Sie Stop-Loss-Prozentsatz sl und Gewinn-Prozentsatz tp.
Gehen Sie lang, wenn der Preis den Vortagshoch überschreitet.
Setzen Sie den Stop-Loss-Preis und nehmen Sie den Gewinnpreis.
Optional aktivieren Sie den Hinterhaltverlust mit Aktivierungsstufe und Verschiebungsabstand.
Optional geschlossener Handel auf der Grundlage der EMA-Crossover.
Diese einfache Trendfolgestrategie hat folgende Vorteile:
Klar und unkompliziert, einfach umzusetzen.
Ein Durchbruch des Vortagshöchststands bestätigt den Trend und verringert die Whipsaws.
Der GAP-Parameter erlaubt die Anpassung der Eingangsempfindlichkeit.
Das Gesamtrisiko wird mit einem klaren Stop-Loss kontrolliert.
Ein Trailing-Stop kann verwendet werden, um mehr Gewinne zu erzielen.
EMA-Crossover verhindert, in Abwärtstrends gefangen zu werden.
Es gibt einige Risiken, die zu beachten sind:
Ein fehlgeschlagener Ausbruch kann Verluste verursachen.
Erfordert einen Trendmarkt, wahrscheinlich Whipsaws unter unterschiedlichen Bedingungen.
Eine falsche Fahrt kann vorzeitig gestoppt werden.
Eine schlechte Auswahl der EMA-Parameter kann sie zu empfindlich oder verzögert machen.
Mehrere Variablen müssen angepasst werden, wie GAP, Stop Loss, Trailing Stop usw.
Einige Möglichkeiten zur weiteren Optimierung der Strategie:
Verwenden Sie dynamischen Stop-Loss basierend auf ATR oder Trend.
Fügen Sie einen Filter für einen gültigen Ausbruch mit Standardabweichung hinzu.
Hinzufügen von Volatilitätsbedingungen, um einen falschen Ausbruch in unruhigen Märkten zu vermeiden.
Optimieren Sie den EMA-Parameter für ein robusteres Signal.
Fein abgestimmte Trailing-Stop-Parameter, die der Marktvolatilität entsprechen.
Versuche die Robustheit der Parameter auf verschiedenen Instrumenten.
Hinzufügen eines dynamischen Positionsgrößenmechanismus.
Die Strategie ist einfach und praktisch als typisches Trend-Folge-System basierend auf dem hohen Breakout des vorherigen Tages. Das Risikomanagement hängt in erster Linie vom Stop-Loss ab. Mit einer richtigen Parameter-Ausrichtung kann es unter Trendbedingungen gut funktionieren.
/*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)