Joker verfolgt Gewinnstrategie

Schriftsteller:ChaoZhang, Datum: 23.09.2023
Tags:

Übersicht

Die Joker Trailing Take Profit Strategie ist eine Trend-Folge-Strategie, die auf gleitenden Durchschnitten basiert. Sie kombiniert die Eigenschaften eines Trailing Stop Loss und Trailing Take Profit, um Gewinne zu maximieren, wenn sich der Markt in eine günstige Richtung bewegt, und Verluste zu reduzieren, wenn sich der Trend umkehrt.

Strategie Logik

Die Strategie verwendet schnelle und langsame gleitende Durchschnitte, um den Gesamttrend zu identifizieren.

Die Strategie berechnet zunächst einen anfänglichen Take-Profit-Preis basierend auf dem konfigurierten Prozentsatz nach Eröffnung einer Position.

Wenn die Positionsrichtung mit dem Signal übereinstimmt, wird eine Limit-Order für Take Profit verwendet, wenn Trailing deaktiviert ist.

Analyse der Vorteile

  • Die gleitenden Durchschnitte filtern Marktlärm aus und vermeiden falsche Signale.

  • Der Trailing-Take-Profit-Ansatz regelt die Take-Profit-Level dynamisch anhand der Preisbewegung an. Dies ist flexibler als ein fester Take-Profit-Preis.

  • Der Rückstand bei der Gewinnnahme verringert die Gewinnchancen und verhindert auch, dass mit einem festen Gewinnspielwert zu früh aus dem Geschäft ausgegangen wird.

  • Die Stop-Loss-Funktion erlaubt es der Strategie, frühzeitig auszusteigen, wenn sich der Trend umkehrt.

Risikoanalyse

  • Bewegliche Durchschnittswerte können falsche Signale oder Verzögerungen bei riesigen Kursschwankungen erzeugen. Dies kann zu Verlusten durch falsche Trades führen.

  • Eine zu hohe Take-Profit-Ratio erhöht die Haltedauer und die Abweichung zwischen dem tatsächlichen und dem erwarteten Take-Profit-Preis.

  • Ein zu kleiner Rückschritt führt zu übermäßigen Auftragsaktualisierungen und erhöht Gebühren und Slippage.

  • Der TP-Anstieg tritt nur nach oben und berücksichtigt keine Rückzüge. Dies kann zu einer Abweichung zwischen dem tatsächlichen und dem erwarteten Gewinnpreis führen.

Optimierungsrichtlinien

  • Es wird eine dynamische Anpassung der MA-Parameter anhand der Volatilität berücksichtigt, d. h. größere Perioden, in denen die Volatilität steigt, und kleinere Perioden, in denen die Volatilität sinkt.

  • Forschung Optimale Gewinnquoten für verschiedene Produkte und Märkte, um Abweichungsrisiken zu minimieren.

  • Erforschen Sie den Zwei-Wege-Trailing-Mechanismus, um sowohl nach oben als auch nach unten zu fahren.

  • Einbeziehung von Indikatoren für die Trendstärke zur Verringerung der Gewinnquote bei schwachen Trends und zur Erhöhung der Gewinnquote bei starken Trends.

  • Kombination mit maschinellen Lernmodellen zur dynamischen Festlegung von Gewinnverhältnissen basierend auf prognostizierten Preisschwankungen.

Schlussfolgerung

Die Joker Trailing Take Profit Strategie hat eine klare Struktur und verwendet gleitende Durchschnitte, um die Trendrichtung zu definieren und zu verfolgen, um Gewinne zu erzielen. Sie kombiniert die Vorteile von Trailing Stops und Trailing Take Profits, um Trends reibungslos zu folgen und gleichzeitig Risiken zu kontrollieren. Weitere Verbesserungen können durch Parameteroptimierung und Verbesserung des Take Profit Mechanismus vorgenommen werden, um sich komplexeren Marktumgebungen anzupassen. Insgesamt ist dies eine Strategie, die weitere Forschung und Anwendung wert ist.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Joker Trailing TP Bot', shorttitle='Joker TTP Bot', overlay=true, pyramiding=0, process_orders_on_close=false, close_entries_rule='ANY', calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD) //, max_labels_count=500)

fromDate = input(timestamp('01 Jan 2021 00:00 UTC'), 'From Date')
toDate = input(timestamp('31 Dec 2121 23:59 UTC'), 'To Date')
fastMALen = input.int(23, 'Fast SMA Length')
slowMALen = input.int(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01

float fastMA = ta.sma(close, fastMALen)
float slowMA = ta.sma(close, slowMALen)
bool isWithinPeriod = true
bool openLongPosition = isWithinPeriod and ta.crossover(fastMA, slowMA)
bool openShortPosition = isWithinPeriod and ta.crossunder(fastMA, slowMA)
bool longIsActive = openLongPosition or strategy.position_size > 0
bool shortIsActive = openShortPosition or strategy.position_size < 0

float longTakeProfitPrice = na
longTakeProfitPrice := if longIsActive
    if openLongPosition and not (strategy.position_size > 0)
        close * (1 + longTakeProfitPerc)
    else
        nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
else
    na

float shortTakeProfitPrice = na
shortTakeProfitPrice := if shortIsActive
    if openShortPosition and not (strategy.position_size < 0)
        close * (1 - shortTakeProfitPerc)
    else
        nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPrice))
else
    na

float longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
float shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick

strategy.entry(id = 'Long Entry', direction = strategy.long, when = openLongPosition, alert_message = 'Long(' + syminfo.ticker + '): Started')
strategy.entry(id = 'Short Entry', direction = strategy.short, when = openShortPosition, alert_message = 'Short(' + syminfo.ticker + '): Started')
strategy.exit(id = 'Long Take Profit', from_entry = 'Long Entry', limit = enableTrailing ? na : longTakeProfitPrice, trail_price = enableTrailing ? longTakeProfitPrice : na, trail_offset = enableTrailing ? longTrailingTakeProfitStepTicks : na, when = longIsActive, alert_message = 'Long(' + syminfo.ticker + '): Take Profit activated')
strategy.exit(id = 'Short Take Profit', from_entry = 'Short Entry', limit = enableTrailing ? na : shortTakeProfitPrice, trail_price = enableTrailing ? shortTakeProfitPrice : na, trail_offset = enableTrailing ? shortTrailingTakeProfitStepTicks : na, when = shortIsActive, alert_message = 'Short(' + syminfo.ticker + '): Take Profit activated')

plot(series = fastMA, title='Fast SMA', color = color.blue, linewidth = 1, style = plot.style_line)
plot(series = slowMA, title='Slow SMA', color = color.orange, linewidth = 1, style = plot.style_line)
plot(series = longTakeProfitPrice, title='Long Take Profit', color = color.green, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = shortTakeProfitPrice, title='Short Take Profit', color = color.red, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = strategy.position_avg_price, title='Position', color = color.white, linewidth = 1, style = plot.style_linebr)


Mehr