Der gestrige hohe Ausbruchstrend folgt der Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-08 14:06:55
Tags:

Übersicht

Diese Strategie arbeitet auf der Grundlage der Höchstwerte des vorherigen Handelstages und arbeitet in einem Trendfolge-Modus.

Strategie Logik

  1. Verwenden Sie die LucF-Funktion, um eine Aussichtsverzerrung beim Backtesting zu vermeiden.

  2. Identifizieren Sie, ob ein neuer Handelstag geöffnet ist.

  3. Vergleichen Sie das aktuelle Hoch mit max_today, aktualisieren Sie max_today, wenn es überschritten wird.

  4. Vergleichen Sie das aktuelle Tief mit min_today, aktualisieren Sie min_today, wenn es verletzt wird.

  5. Sie werden die Höchst- und Tiefstwerte der vorherigen Handelstage erfassen.

  6. Eintrittspunkt beim Ausbruch des Vortagshöchststands festlegen, GAP kann hinzugefügt werden, um den Eintritt vor- oder nachzuhalten.

  7. Setzen Sie Stop-Loss-Prozentsatz sl und Gewinn-Prozentsatz tp.

  8. Gehen Sie lang, wenn der Preis den Vortagshoch überschreitet.

  9. Setzen Sie den Stop-Loss-Preis und nehmen Sie den Gewinnpreis.

  10. Optional aktivieren Sie den Hinterhaltverlust mit Aktivierungsstufe und Verschiebungsabstand.

  11. Optional geschlossener Handel auf der Grundlage der EMA-Crossover.

Analyse der Vorteile

Diese einfache Trendfolgestrategie hat folgende Vorteile:

  1. Klar und unkompliziert, einfach umzusetzen.

  2. Ein Durchbruch des Vortagshöchststands bestätigt den Trend und verringert die Whipsaws.

  3. Der GAP-Parameter erlaubt die Anpassung der Eingangsempfindlichkeit.

  4. Das Gesamtrisiko wird mit einem klaren Stop-Loss kontrolliert.

  5. Ein Trailing-Stop kann verwendet werden, um mehr Gewinne zu erzielen.

  6. EMA-Crossover verhindert, in Abwärtstrends gefangen zu werden.

Risikoanalyse

Es gibt einige Risiken, die zu beachten sind:

  1. Ein fehlgeschlagener Ausbruch kann Verluste verursachen.

  2. Erfordert einen Trendmarkt, wahrscheinlich Whipsaws unter unterschiedlichen Bedingungen.

  3. Eine falsche Fahrt kann vorzeitig gestoppt werden.

  4. Eine schlechte Auswahl der EMA-Parameter kann sie zu empfindlich oder verzögert machen.

  5. Mehrere Variablen müssen angepasst werden, wie GAP, Stop Loss, Trailing Stop usw.

Möglichkeiten zur Verbesserung

Einige Möglichkeiten zur weiteren Optimierung der Strategie:

  1. Verwenden Sie dynamischen Stop-Loss basierend auf ATR oder Trend.

  2. Fügen Sie einen Filter für einen gültigen Ausbruch mit Standardabweichung hinzu.

  3. Hinzufügen von Volatilitätsbedingungen, um einen falschen Ausbruch in unruhigen Märkten zu vermeiden.

  4. Optimieren Sie den EMA-Parameter für ein robusteres Signal.

  5. Fein abgestimmte Trailing-Stop-Parameter, die der Marktvolatilität entsprechen.

  6. Versuche die Robustheit der Parameter auf verschiedenen Instrumenten.

  7. Hinzufügen eines dynamischen Positionsgrößenmechanismus.

Schlussfolgerung

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)



Mehr