Automatisierte Handelsstrategie mit Dual-Channel-Algorithmus


Erstellungsdatum: 2023-10-10 15:25:53 zuletzt geändert: 2023-10-10 15:25:53
Kopie: 0 Klicks: 639
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Diese Strategie verwendet die beiden Indikatoren Supertrend und StochRSI, um Preistrends und Überkauf-Überverkäufe in verschiedenen Zeiträumen zu analysieren, um potenzielle Kauf- und Verkaufssignale zu erkennen. Die Strategie zielt darauf ab, die Hauptrend-Richtung zu verfolgen und die Hauptrend-Richtung der Preise auf der Mittel- und Langleine zu erfassen.

Strategieprinzip

Die Strategie nutzt die Supertrend-Indikatoren für die Zeiträume 1 und 4 Stunden, um die Richtung der Preisentwicklung zu bestimmen. Wenn die beiden Zeiträume in derselben Richtung sind, kann ein stärkerer Preisentwicklung betrachtet werden.

Die Strategie nutzt außerdem den StochRSI, um zu beurteilen, ob ein Überkauf vorhanden ist. Der StochRSI kombiniert die Vorzüge von RSI und Stochastic Oscillator. Wenn der StochRSI eine Überkauflinie überschreitet, bedeutet dies, dass ein Überkauf möglich ist.

Die Strategie setzt auch eine Rücklaufphase ein, die eine bestimmte Anzahl von K-Linien zurückführt, nachdem der StochRSI ein Überkauf-Überverkaufsignal angezeigt hat. Wenn die Kursentwicklung während dieser Zeit das Signal des StochRSI bestätigt, wird ein Kauf oder Verkauf ausgelöst.

Insgesamt nutzt die Strategie die Supertrend-Methode für die Ermittlung großer Trends in zwei Zeitfenstern und die StochRSI-Methode für die Ermittlung lokaler Anpassungen, um Trend-Tracking-Handlungen auf mittleren und langen Linien durchzuführen.

Strategische Vorteile

  • Mit Hilfe von Mehrzeit-Zyklus-Indikatoren können Fehlsignale effektiv gefiltert werden.
  • Die Vorteile des kombinierten Supertrend- und StochRSI-Indikators für Trendbeurteilungen und Überkauf-Überverkauf
  • Setzen Sie eine Rücklaufzeit für die Signalprüfung, um unnötige Transaktionen zu vermeiden
  • Mit mittlerer und längerer Linie kann der Verlust von Slippoints durch zu häufige Transaktionen verringert werden.
  • Einfach zu verständliche Kombination aus zwei Indikatoren mit flexiblen Parameteranpassungen

Strategisches Risiko

  • In einer Börsenwanderung ist der mittlere und längere Trend nicht sichtbar und es könnten mehr falsche Signale auftreten.
  • Zu lange Rücklaufzeiten, möglicherweise verpasste bessere Kauf-/Verkaufsmöglichkeiten
  • StochRSI-Parameter sind falsch eingestellt, was zu falschen Überkauf-Überverkaufssignalen führen kann
  • Die Supertrend-Parameter sind falsch eingestellt und können die falsche Richtung bestimmen
  • Indikatoren werden automatisch verfolgt, so dass wichtige Fundamentaldaten leicht übersehen werden können.

Optimierungsmethoden:

  • Optimierung der Parameterkombinationen von StochRSI und Supertrend
  • Anpassung der Rücklaufdauer für verschiedene CD-Umgebungen
  • Verifizierung in Verbindung mit Kennzahlen wie Transaktionsvolumen
  • Aufmerksamkeit für wichtige Basisinformationen und aktive Intervention, wenn nötig

Richtung der Strategieoptimierung

  • Mehr Supertrend-Indikatoren für verschiedene Zeiträume hinzugefügt, um eine mehrstufige Filterung zu erzeugen
  • Ersetzen des StochRSI durch andere Überkauf-Überverkauf-Typen wie KD, RSI usw.
  • Erhöhung der mobilen Stop-Loss-Strategie, um mehr Gewinne zu erzielen
  • Zusammen mit wichtigen Durchschnittsindikatoren wie dem 30-Zyklus-Durchschnittswert, um einen großen Trend zu beurteilen
  • Entwicklung von automatischen Parameteroptimierungsprogrammen, um Strategien robuster zu gestalten

Zusammenfassen

Die Zwei-Kanal-Küchenkuchen-Strategie nutzt die Methode von Supertrend, um die großen Trends zu beurteilen, und die Methode von StochRSI, um die lokalen Anpassungen zu beurteilen, um eine zuverlässige Trendverfolgungsstrategie zu realisieren. Die Strategie basiert auf mittlerer Long-Wire-Operation und kann die Ertragsverluste durch zu häufige Transaktionen wirksam vermeiden. Durch die Optimierung von Parametern und die Bestätigung von Kombinationsindikatoren kann die Strategie einen stabilen positiven Ertrag erzielen.

Strategiequellcode
/*backtest
start: 2023-09-09 00:00:00
end: 2023-10-09 00:00:00
period: 4h
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/
// © Baby_whale_to_moon

//@version=5
strategy('Kitchen [ilovealgotrading]', overlay=true, format=format.price, initial_capital = 1000)

// BACKTEST DATE
Start_Time = input(defval=timestamp('01 January 2017 13:30 +0000'), title='Start_Time', group = " ################# BACKTEST DATE ################ " )
End_Time = input(defval=timestamp('30 April 2024 19:30 +0000'), title='End_Time', group = " ################# BACKTEST DATE ################ " )

// supertrend 
atrPeriod = input(10, 'ATR Length', group = " #################  Supertrend  ################ ")
factor = input(3, 'Factor', group = " #################  Supertrend  ################ ")

time1 = input.string(title='Short Time Period', defval='07 1h', options=['01 1m','02 3m','03 5m',  '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our short-time supertrend indicator")
time2 = input.string(title='Long Time Period', defval='10 4h', options=[ '01 1m','02 3m','03 5m', '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our long-time supertrend indicator")


res(Resolution) =>
    if Resolution == '00 Current'
        timeframe.period
    else
        if Resolution == '01 1m'
            '1'
        else
            if Resolution == '02 3m'
                '3'
            else
                if Resolution == '03 5m'
                    '5'
                else
                    if Resolution == '04 15m'
                        '15'
                    else
                        if Resolution == '05 30m'
                            '30'
                        else
                            if Resolution == '06 45m'
                                '45'
                            else
                                if Resolution == '07 1h'
                                    '60'
                                else
                                    if Resolution == '08 2h'
                                        '120'
                                    else
                                        if Resolution == '09 3h'
                                            '180'
                                        else
                                            if Resolution == '10 4h'
                                                '240'
                                            else
                                                if Resolution == '11 1D'
                                                    '1D'
                                                else
                                                    if Resolution == '12 1W'
                                                        '1W'
                                                    else
                                                        if Resolution == '13 1M'
                                                            '1M'


// supertrend Long time period 
[supertrend2, direction2] = request.security(syminfo.tickerid, res(time2), ta.supertrend(factor, atrPeriod))
bodyMiddle4 = plot((open + close) / 2, display=display.none)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr, linewidth=2)
downTrend2 = plot(direction2 < 0 ? na : supertrend2, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr, linewidth=2)

// supertrend short time period 
[supertrend1, direction1] = request.security(syminfo.tickerid, res(time1), ta.supertrend(factor, atrPeriod))
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction1 < 0 ? supertrend1 : na, 'Up Trend', color=color.new(color.yellow, 0), style=plot.style_linebr)
downTrend = plot(direction1 < 0 ? na : supertrend1, 'Down Trend', color=color.new(color.orange, 0), style=plot.style_linebr)


// Stochastic RSI
low_limit_stoch_rsi = input.float(title = 'Stoch Rsi Low Limit', step=0.5, defval=15, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossover Low Limit value we get Long")
up_limit_stoch_rsi = input.float(title = 'Stoch Rsi Up Limit', step=0.5, defval=85, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossunder Up Limit value we get Short")
stocrsi_back_length = input.int(20, 'Stoch Rsi retroactive length', minval=1, group = " #################  Stoch RSI   ################ ", tooltip = "How many candles are left behind, even if there is a buy or sell signal, it will be valid now")
smoothK = input.int(3, 'Stochastic RSI K', minval=1, group = " #################  Stoch RSI   ################ ")
lengthRSI = input.int(14, 'RSI Length', minval=1, group = " #################  Stoch RSI   ################ ")
lengthStoch = input.int(14, 'Stochastic Length', minval=1, group = " #################  Stoch RSI   ################ ")
src_rsi = input(close, title='RSI Source', group = " #################  Stoch RSI   ################ ")
rsi1 = request.security(syminfo.tickerid, '240', ta.rsi(src_rsi, lengthRSI))
k = request.security(syminfo.tickerid, '240', ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK))

// Strategy settings 
dollar = input.float(title='Dollar Cost Per Position ', defval=20000, group = " #################  Strategy Settings  ################ ")
trade_direction = input.string(title='Trade_direction', group = " #################  Strategy Settings  ################ ", options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
Long_message_open = input('Long Open', title = "Long Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Open Message ")
Short_message_open = input('Short Open', title = "Short Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Open Message ")
Long_message_close = input('Long Close', title = "Long Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Close Message ")
Short_message_close = input('Short Close', title = "Short Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Close Message ")

Time_interval = true
bgcolor(Time_interval ? color.rgb(255, 235, 59, 95) : na)

back_long = 0
back_short = 0

for i = 1 to stocrsi_back_length by 1
    if ta.crossover(k, low_limit_stoch_rsi)[i] == true 
        back_long += i
        back_long
    if ta.crossunder(k, up_limit_stoch_rsi)[i] == true 
        back_short += i
        back_short

// bgcolor(back_long>0?color.rgb(153, 246, 164, 54):na)
// bgcolor(back_short>0?color.rgb(246, 153, 153, 54):na)

buy_signal = false
sell_signal = false

if direction2 < 0 and direction1 < 0 and back_long > 0
    buy_signal := true
    buy_signal

if direction2 > 0 and direction1 > 0 and back_short > 0
    sell_signal := true
    sell_signal


//bgcolor(buy_signal  ? color.new(color.lime,90) : na ,title="BUY bgcolor")
plotshape( buy_signal[1] == false and  strategy.opentrades == 0 and Time_interval and buy_signal  ? supertrend2 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)

//bgcolor(sell_signal  ? color.new(color.red,90) : na ,title="SELL bgcolor")
plotshape(sell_signal[1] == false and strategy.opentrades == 0 and Time_interval and sell_signal  ? supertrend2 : na , title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)


// Strategy entries 
if strategy.opentrades == 0 and Time_interval and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_Open', strategy.long, qty=dollar / close, alert_message=Long_message_open)

if strategy.opentrades == 0 and Time_interval and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_Open', strategy.short, qty=dollar / close, alert_message=Short_message_open)


// Strategy Close
if close < supertrend1 and strategy.position_size > 0 
    strategy.exit('Long_Close',from_entry = "Long_Open", stop=close, qty_percent=100, alert_message=Long_message_close)

if close > supertrend1 and strategy.position_size < 0 
    strategy.exit('Short_Close',from_entry = "Short_Open", stop=close, qty_percent=100, alert_message=Short_message_close)