Die gestrige Strategie für einen hohen Ausbruch

Schriftsteller:ChaoZhang, Datum: 2023-11-06 10:49:57
Tags:

img

Übersicht

Die High Breakout-Strategie von Yesterday ist ein Trend-folgende System, das lange dauert, wenn der Preis über das High von Yesterday bricht, auch wenn der Breakout mehrmals am Tag auftritt.

Grundsätze

Die Strategie verwendet mehrere technische Indikatoren für Ein- und Ausstiegssignale:

  • ROC-Filter - Die Strategie wird nur aktiviert, wenn der Preisänderungsprozentsatz des heutigen Schlusskurses gegenüber dem Schlusskurs des vorherigen Tages einen Schwellenwert übersteigt.

  • Trigger Point - Rekordhoch, niedrig und offener Kurs.

  • Ein- und Ausstiegsbedingungen - Nach dem Eintritt werden Stop-Loss- und Take-Profit-Prozentsätze festgelegt. Der Trailing-Stop kann aktiviert werden, um den Gewinn zu sperren. Bedingter Ausstieg, wenn der Preis unter eine Referenz-EMA fällt.

  • Konfiguration - Gap-Prozentsatz, um den Einstieg zu antizipieren oder zu verzögern.

Speziell verfolgt es den heutigen hohen Preis für das Einstiegssignal. Long-Entry, wenn der Preis über den heutigen Höchststand bricht. Dann werden Stop-Loss- und Take-Profit-Ausgänge eingestellt, wobei der Trailing-Stop aktiviert ist. Alternativer Ausgang, wenn der Preis unterhalb der gegebenen EMA überschreitet. Optimierung durch Einstellung des Gap-Prozentsatzes, Anpassung der Stop-Loss- und Take-Profit-Verhältnisse zur Kontrolle des Risikos, so dass der Trailing-Stop den Gewinn sperren kann.

Analyse der Vorteile

Die Vorteile dieser Strategie:

  • Der Trend folgt, profitiert von den Trends.

  • Die Ausbruchstrategie gibt klare Eintrittssignale.

  • Betrachtet den heutigen hohen Preis, vermeidet aufeinanderfolgende Einträge.

  • Stop Loss und Take Profit hilft bei der Risikokontrolle.

  • Der Trailing Stop schließt den Gewinn ein.

  • Die Eintrittszeit kann mit Parameteroptimierung abgestimmt werden, um das Risiko zu kontrollieren.

  • Einfach und intuitiv, leicht zu verstehen und umzusetzen.

  • Anwendbar für lange und kurze Trades.

Risikoanalyse

Die zu berücksichtigenden Risiken:

  • Ausbruchstrategien, die anfällig für Whipsaws sind.

  • Wirksam nur bei Trendmärkten, unterdurchschnittlich unter Umständen.

  • Ein angemessener Stop-Loss-Prozentsatz ist erforderlich, zu breit kann den Verlust erhöhen.

  • Ein angemessener Abstand ist erforderlich, zu aggressiv kann den Verlust erhöhen.

  • Ein falscher Ausbruch kann unnötige Verluste verursachen.

  • Das Volumen muss nach dem Ausbruch weiter steigen.

  • Konsistenz zwischen den Parametern über Zeiträume hinweg.

Optimierungsrichtlinien

Mögliche Optimierungen:

  • Fügen Sie andere Indikatoren wie Volumen, Volatilität hinzu, um Whipsaws während der Wechselkurse zu vermeiden.

  • Hinzufügen von Kurvenanpassungsindikatoren, um die Trendstärke zu bestimmen und falsche Trends zu vermeiden.

  • Dynamische Optimierung der Eintrittslücke auf der Grundlage der Marktvolatilität.

  • Dynamische Optimierung von Stop-Loss und Take-Profit nach Marktbedingungen.

  • Verschiedene Parameter für verschiedene Symbole und Zeitrahmen.

  • Maschinelles Lernen für TEST-Parameterwirkung auf die Strategieleistung.

  • Hinzufügen von Optionen Funktionalität, um die Konfiguration zu optimieren.

  • Anwendbarkeit der Forschung unter unterschiedlichen Marktbedingungen.

  • Erweitern Sie Ihre Strategie auf Zeiträume und Multi-Asset-Strategien.

Schlussfolgerung

Die Strategie bietet anständige Performance während der Trendmärkte basierend auf dem Ausbruch des gestrigen hohen Konzepts. Aber Risiken von Whipsaw und Parameteroptimierungsschwierigkeiten bestehen. Weitere Optimierungen sind durch Hinzufügen von Urteilen, dynamischem Parameter-Tuning, Erweiterung auf kombinierte Strategien usw. möglich. Insgesamt eignet sie sich für den kurzfristigen Trend, aber Risikokontrolle und Parameter-Tuning sind erforderlich.


/*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)



Mehr