Bullische und bearische Strategien für Kryptowährungen basierend auf dem Wall Street Mouse Halo-Indikator


Erstellungsdatum: 2023-11-01 11:27:20 zuletzt geändert: 2023-11-01 11:27:20
Kopie: 0 Klicks: 681
1
konzentrieren Sie sich auf
1617
Anhänger

Bullische und bearische Strategien für Kryptowährungen basierend auf dem Wall Street Mouse Halo-Indikator

Überblick

Die Strategie basiert auf dem Wall Street Catch-the-Mouse-Sphere-Index und ermöglicht eine automatische Trading-Strategie, bei der die bullish-bullish-Operationen für die Ziel-Kryptowährungen durchgeführt werden. Die Strategie ermöglicht die Verfolgung von Transaktionen für mehrere Kryptowährungen, die auf die Parameter des Support-Index basieren, der für verschiedene Kryptowährungen eingestellt ist.

Strategieprinzip

  1. Berechnen Sie die mittlere Linie des Wall Street Rattenfänger-Sphären-Index für die Basis-Kryptowährung mit einer mittleren Linie mit einer Länge von 200 Zyklen.

  2. Beurteilen Sie den fallenden Zustand der Durchschnittslinie: Wenn die Durchschnittslinie steigt, wird eine Beobachtungsoperation durchgeführt. Wenn die Durchschnittslinie sinkt, wird eine Beobachtungsoperation durchgeführt.

  3. Strategie, die automatische Eröffnung und Befreiung von Positionen basierend auf dem Kurs-Wachstums-Zustand der Durchschnittslinie und der aktuellen Position ermöglicht:

    • Wenn die Durchschnittslinie hoch ist und es keine Position gibt, wird der Strategie-Marktpreis automatisch erhöht.

    • Strategie-Marktpreise, die automatisch eine Short-Position einnehmen, wenn der Durchschnittswert sinkt und keine Position vorhanden ist;

    • Der Strategie-Marktpreis gleicht sich automatisch aus, wenn die Gewinne aus den Mehrarten die eingestellte Stop-Loss-Rate erreichen.

    • Der Strategie-Marktpreis gleicht automatisch den Short-Option aus, wenn die Gewinne aus den Short-Positions die eingestellte Stop-Loss-Ratio erreichen.

    • Der Strategie-Marktpreis gleicht sich automatisch aus, wenn die Verluste aus einer Überschreitung die eingestellte Stop-Loss-Ratio erreichen.

    • Wenn der Verlust der Short-Position die eingestellte Stop-Loss-Ratio erreicht, wird der Strategie-Marktpreis automatisch auf den Short-Position ausgeglichen.

  4. Die Strategie basiert auf der Benchmark-Kryptowährung und aktualisiert den Stop-Loss-Preis in Echtzeit.

Analyse der Stärken

  1. Die Strategie ist sehr anpassungsfähig und kann verschiedene Parameter für verschiedene Kryptowährungen einstellen, um Transaktionen für mehrere Kryptowährungen zu verfolgen.

  2. Der Wall Street Rattenring-Indikator wird verwendet, um Markttrends zu beurteilen und falsche Geschäfte zu vermeiden, die durch Geräusche verursacht werden. Der Indikator hat eine gewisse Verzögerung beim Auf- und Abbruch und kann den Verlust durch falsche Durchbrüche verringern.

  3. Die Strategie beinhaltet einen Stop-Loss-Mechanismus, der den Trend erfasst und den Rückgang verhindert und den Einzelschaden kontrolliert.

  4. Die Strategie ist vollständig automatisiert, ohne menschliche Intervention, und kann 24 Stunden lang betrieben werden.

Risikoanalyse

  1. Es besteht die Möglichkeit, dass sich die Preise bestimmter Kryptowährungen von den Basis-Kryptowährungen abheben, was zu einem Risiko führt, dass die Strategie nicht normal handeln kann. Es kann optimiert werden, um die relevanten Faktoren für die Berechnung mehrerer Basis-Kryptowährungen zu verwenden und die am stärksten relevanten Basis-Kryptowährung auszuwählen.

  2. Es besteht die Gefahr, dass die Stop-Loss-Rate aufgrund ungewöhnlicher Marktschwankungen überschritten wird. Die Stop-Loss-Rate kann entsprechend angepasst oder der Stop-Loss-Tracking hinzugefügt werden.

  3. Es besteht die Gefahr, dass die Stop-Ratio-Einstellungen zu klein sind, was dazu führt, dass nicht genügend Trendgewinne erfasst werden können. Trend-Tracking oder Dynamische Stopps können hinzugefügt werden.

  4. Es besteht die Gefahr, dass ein falscher Durchbruch zu einem Stillstand führt. Die Kennzahlenparameter, Identifikations-Einstellungen oder die Aufnahme eines Wiedereintrittsmechanismus können entsprechend angepasst werden.

Optimierungsrichtung

  1. Die Auswahl von mehreren Benchmark-Kryptowährungen mit Hilfe von Relevanzanalyse, die Kombination der berechneten Kennzahlen und die Verringerung des Risikos einer einzigen Benchmarkwährung.

  2. Ein zusätzlicher Trend-Tracking-Mechanismus, der die Stop-Loss-Regelung an die Dynamik der Volatilität anpasst.

  3. Erhöhen Sie den Stop-Loss, um zu verhindern, dass der Stop-Loss von Extremen durchbrochen wird.

  4. Die Einführung eines Wiedereintrittsmechanismus, um Verluste zu vermeiden, die nach dem Stillstand verpasst werden.

  5. Optimierung der Kennzahlen, Identifikations-Einstellungen und Verbesserung der Kennzahlenwirkung.

  6. Optimierung der Parameter für verschiedene Kryptowährungen, um die Anpassungsfähigkeit der Strategie zu verbessern.

  7. Optimierung der Positionsverwaltung und dynamische Anpassung der Positionen an die Größe des Kapitals.

Zusammenfassen

Die Strategie als Ganzes ist eine typische Trend-Tracking-Strategie. Die zentrale Idee ist, die Trendrichtung der Basis-Kryptowährung anhand der Wall Street Rattenfänger-Sphäre-Indikatoren zu beurteilen, um die Handelsrichtung der Ziel-Kryptowährung zu bestimmen. Die Strategie hat einige Vorteile, aber es gibt auch einige Risiken, die zu beachten sind.

Strategiequellcode
/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
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/
// © levieux

//@version=5
strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

supportLength = input.int(200, minval=1, title='Support Length')
supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol')
supportSource = input(hlc3, title='Price Source')
takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01)
takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01)
stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01)
stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01)
start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time")
end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time")

supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off)  //input(close, title="Source")
supportLine = ta.wma(supportTicker, supportLength)

window() => true

if not window()
    strategy.cancel_all()

supportLongPrice = close
supportShortPrice = close

if strategy.position_size > 0
    supportLongPrice := supportLongPrice[1]
if strategy.position_size < 0
    supportShortPrice := supportShortPrice[1]

longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0
shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0
takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong)
stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong)
takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort)
stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort)

if longCondition
    strategy.entry('Long', strategy.long)
    supportLongPrice := supportTicker

if shortCondition
    strategy.entry('Short', strategy.short)
    supportShortPrice := supportTicker

if takeprofitLongCondition
    strategy.close('Long')
if stoplossLongCondition
    strategy.close('Long')
if takeprofitShortCondition
    strategy.close('Short')
if stoplossShortCondition
    strategy.close('Short')

///////////////////
// MONTHLY TABLE //

new_month = month(time) != month(time[1])
new_year  = year(time)  != year(time[1])

eq = strategy.equity

bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]

cur_month_pnl = 0.0
cur_year_pnl  = 0.0
cur_month_bh = 0.0
cur_year_bh  = 0.0

// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 : 
                 (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
cur_month_bh := new_month ? 0.0 : 
                 (1 + cur_month_bh[1]) * (1 + bar_bh) - 1

// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 : 
                 (1 + cur_year_bh[1]) * (1 + bar_bh) - 1

// Arrays to store Yearly and Monthly P&Ls
var month_pnl  = array.new_float(0)
var month_time = array.new_int(0)
var month_bh  = array.new_float(0)

var year_pnl  = array.new_float(0)
var year_time = array.new_int(0)
var year_bh  = array.new_float(0)

end_time = false

end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory

if (not na(cur_month_pnl[1]) and (new_month or end_time))
    if (end_time[1])
        array.pop(month_pnl)
        array.pop(month_time)
        
    array.push(month_pnl , cur_month_pnl[1])
    array.push(month_time, time[1])
    array.push(month_bh , cur_month_bh[1])

if (not na(cur_year_pnl[1]) and (new_year or end_time))
    if (end_time[1])
        array.pop(year_pnl)
        array.pop(year_time)
        
    array.push(year_pnl , cur_year_pnl[1])
    array.push(year_time, time[1])
    array.push(year_bh , cur_year_bh[1])

// Monthly P&L Table    
var monthly_table = table(na)

getCellColor(pnl, bh)  => 
    if pnl > 0
        if bh < 0 or pnl > 2 * bh
            color.new(color.green, transp = 20)
        else if pnl > bh
            color.new(color.green, transp = 50)
        else
            color.new(color.green, transp = 80)
    else
        if bh > 0 or pnl < 2 * bh
            color.new(color.red, transp = 20)
        else if pnl < bh
            color.new(color.red, transp = 50)
        else
            color.new(color.red, transp = 80)

if end_time
    monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)

    table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
    table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
    table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
    table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
    table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
    table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
    table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
    table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
    table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
    table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
    table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
    table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
    table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
    table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)


    for yi = 0 to array.size(year_pnl) - 1
        table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
        
        y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
        table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
        
    for mi = 0 to array.size(month_time) - 1
        m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
        m_col   = month(array.get(month_time, mi)) 
        m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
        
        table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)