Swing-Trading-Strategie basierend auf dem doppelten gleitenden Durchschnitt


Erstellungsdatum: 2024-01-08 16:29:21 zuletzt geändert: 2024-01-08 16:29:21
Kopie: 0 Klicks: 716
1
konzentrieren Sie sich auf
1617
Anhänger

Swing-Trading-Strategie basierend auf dem doppelten gleitenden Durchschnitt

Überblick

Die Strategie ist eine Schwankungs-Handelsstrategie, die auf zwei Gleichungen basiert. Sie verwendet die Kreuzung von schnellen und langsamen Moving Averages als Kauf- und Verkaufssignale. Sie erzeugt ein Kaufsignal, wenn der schnelle Moving Average den langsamen Moving Average von unten durchdringt; sie erzeugt ein Verkaufsignal, wenn der schnelle Moving Average den langsamen Moving Average von oben durchdringt.

Strategieprinzip

Die Strategie verwendet eine RMA mit einer Länge von 6 als schnellen Moving Average und eine HMA mit einer Länge von 4 als langsamen Moving Average. Die Strategie beurteilt die Preisentwicklung und erzeugt Handelssignale durch die Kreuzung von schnellen und langsamen Linien.

Wenn die schnelle Linie von unten die langsame Linie durchquert, bedeutet dies, dass der Preis in kurzer Zeit von unten nach unten umgedreht wird und zu dem Zeitpunkt gehört, zu dem die Chip-Umstellung erfolgt, so dass die Strategie zu diesem Zeitpunkt ein Kaufsignal erzeugt. Wenn die schnelle Linie von oben unter der langsamen Linie durchquert, bedeutet dies, dass der Preis in kurzer Zeit von unten nach unten umgedreht wird und zu dem Zeitpunkt gehört, zu dem die Chip-Umstellung erfolgt, so dass die Strategie zu diesem Zeitpunkt ein Verkaufsignal erzeugt.

Die Strategie erkennt auch langfristige Trendurteile, um einen Gegenhandel zu vermeiden. Ein tatsächliches Kauf- und Verkaufssignal wird nur erzeugt, wenn die langfristigen Trendurteile zugleich für das Signal stimmen.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung von doppelter Gleichlinien-Kreuzung kann eine effektive Identifizierung von kurzfristigen Preiswendepunkten ermöglichen.
  2. Eine vernünftige Kombination aus schnellen und langsamen Linien ermöglicht ein genaueres Handelssignal.
  3. In Kombination mit langfristigen und kurzfristigen Trends können die meisten von den lauten Handelssignalen herausgefiltert werden.
  4. Es gibt eine Stop-Stop-Loss-Logik, mit der Risiken aktiv vermieden werden können.
  5. Es ist einfach zu verstehen und zu implementieren und eignet sich für Anfänger, die mit Quantifizierung handeln.

Risiken und Lösungen

Die Strategie birgt auch einige Risiken:

  1. Eine doppelte Einheitslinie-Strategie kann leicht zu mehreren kleinen Gewinnen führen, aber zu einem großen Verlust. Die Lösung besteht darin, die Stop-Loss-Ebene entsprechend anzupassen.

  2. In einem wackligen Umfeld sind Handelssignale häufig, was zu Überhändlungen führen kann. Die Lösung ist eine angemessene Lockerung der Handelsbedingungen und eine Verringerung der Transaktionen.

  3. Strategieparameter können leicht überoptimiert werden, was zu schlechten Effekten führen kann. Die Lösung ist Parameter-Stabilitätstests.

  4. Die Strategie funktioniert nicht gut im Trend. Die Lösung besteht darin, ein Trendbeurteilungsmodul hinzuzufügen oder in Kombination mit einer Trendstrategie zu verwenden.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Aktualisieren Sie den Mittelwert, verwenden Sie Kalman und andere Adaptive Filter.

  2. Die Einführung eines Moduls für maschinelles Lernen, das die Ausbildung der KI nutzt, um die Kauf- und Verkaufspunkte zu bestimmen.

  3. Die Einführung eines Moduls für die Vermögensverwaltung, um die Risikokontrolle zu automatisieren.

  4. In Kombination mit dem Hochfrequenzfaktor wird ein stärkeres Handelssignal gefunden.

  5. Mehrfache Arbitrage über die Märkte.

Zusammenfassen

Die Doppel-Linien-Schock-Strategie ist insgesamt eine typische und praktische Quantifizierungsstrategie. Sie ist stark anpassungsfähig und bietet Anfängern viel Wissen über die Entwicklung von Strategien. Gleichzeitig gibt es viel Raum für Verbesserungen, die mit mehr Quantifizierungsmethoden weiter optimiert werden können, um bessere Strategieergebnisse zu erzielen.

Strategiequellcode
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 3m
basePeriod: 1m
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/
// © dc_analytics
// https://datacryptoanalytics.com/


//@version=5
strategy("Scalping Trading", overlay=true)

//  INPUTS  //
bar_color       = input(true, title='Bar Color', group='⚙ Settings',tooltip='Color chart bars.', inline = "1")
mostrar         = input(true, 'Show Alerts', group='⚙ Settings', inline = "1")
tempo           = input.timeframe('60', group='⚙ Settings', title='🕗 Timeframe', options=['1', '5', '15', '30', '60', '120', '240', '360', '720', 'D', 'W'])

i_position      = input.string("Bottom Center", title = "⚙ D-Panel Location", 
 options = ["Top Right", "Bottom Center", "Bottom Right"], group='⚙ D-Panel Settings️',
 tooltip='Choose the location of the information table on the chart.(D-Panel) ')

position        = i_position == "Top Right" ? position.top_right : i_position == "Bottom Center" ? position.bottom_center : position.bottom_right

i_tam           = input.string('Big', title = '⚙ D-Painel Size', 
 options = ["Tiny", "Small", "Big"], group='⚙ D-Panel Settings️',tooltip='Choose the size of the information panel (D-Panel).')

tamanho         = i_tam == "Tiny" ? size.tiny : i_tam == "Small" ? size.small : size.normal

show_tp_sl      = input(true, title='Show Take Profit/Stop Loss', group='⚙ Settings',tooltip='Show Take Profit/Stop Loss.')
TP              = input.float(defval=4500, title='Take Profit:',group='⚙ Risk Management',tooltip='Choose amount of profit')
SL              = input.float(defval=2500, title='Stop Loss:', group='⚙ Risk Management',tooltip='Choose amount of loss') 
//  END INPUTS  //


//  DECLARATIONS  //
t_up    = '📈'
t_down  = '📉'

c_buy   = 'Long ⇡'
c_sell  = 'Short ⇣'

// _DECLARATION TREND
t_sma       = ta.hma(close, 200)
tend_sma    = ta.sma(close, 12)

tendencia   = request.security(syminfo.tickerid, timeframe.period, t_sma, barmerge.gaps_off, barmerge.lookahead_off)
tend_tabela = request.security(syminfo.tickerid, timeframe.period, tend_sma, barmerge.gaps_off, barmerge.lookahead_off)
// _END DECLARATION TREND

circle = plot.style_circles
//  END DECLARATIONS  //


//  COLORS  //
color gray   = color.gray
color red    = color.new(#ff8c05, 0)
color orange = color.new(#ff8c05, 0)
color silver = color.silver
color up_vol = color.new(color.green, 0)
color dn_vol = color.new(color.purple, 0)

color orange_tranp  = color.new(#ff8c05, 95)
// END COLORS //

//  SCANNER MARKET MAKERS  //
periodo  = input.int(20, 'Period Volume', group='⚙️ Scanner Market Makers Settings')
fator    = input.float(1.85, 'Proportion to the mean: (1.25 = 125% of the mean)', minval=0, group='⚙️ Scanner Market Makers Settings')
vol_up   = close > open
vol_down = open > close
vol      = volume
pesado   = volume > ta.ema(volume, periodo) * fator

palette  = pesado and vol_up ? gray : pesado and vol_down ? orange : vol_up ? silver : gray
//  END SCANNER MARKET MAKERS  //


//  LOGIC ONE  //
s = ta.rma(close, 6)
v = ta.hma(close, 4)

//  TREND  
t_baixa     = tendencia > tendencia[1]
t_alta      = tendencia < tendencia[1]

te_d        = tend_tabela > tend_tabela[1]
trend       = te_d ? t_up : t_down
//  END TREND  

a = request.security(syminfo.tickerid, tempo, s)
b = request.security(syminfo.tickerid, tempo, ohlc4)

c_dn   = a > b and a[1] < b[1]
c_up   = b > a and b[1] < a[1]

compra = mostrar and c_up ? a : na
venda  = mostrar and c_dn ? a : na

s_sell = venda and t_alta
s_buy  = compra and t_baixa
c_vela = b > a and te_d ? gray : orange

s_up = false
s_dw = false

b_sinal = not s_up and s_buy
s_sinal = not s_dw and s_sell

if b_sinal
    s_dw := false
    s_up := true
    s_up

if s_sinal
    s_dw := true
    s_up := false
    s_up

// END LOGIC ONE //


//  DATA TABLE  //
c = b > a ? orange : gray 
c_sinal = b > a ? c_buy : c_sell
//  END DATA TABLE  //


//  PLOT/BARCOLOR  //
c_barcolor = pesado and vol_up ? up_vol : pesado and vol_down ? dn_vol : vol_up ? c : c

barcolor(bar_color ? c_barcolor : na)
plot(a, color=orange_tranp, style=circle)
//  END PLOT/BARCOLOR  //


//  TABLE  //
var dash = table.new(position=position, columns=2, rows=3, border_width=1)
if barstate.islast
    table.cell(table_id=dash, column=1, row=2, text='Scalping DCA', bgcolor=orange)
    table.cell(table_id=dash, column=1, row=0, text='Trade: ' + c_sinal)
    table.cell(table_id=dash, column=1, row=1, text='Trend: ' + trend)
//  END TABLE  //


//  SETTINGS STRATEGY  //
exitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)

// OPEN ORDER
if (b_sinal)
    strategy.order("Long", strategy.long , comment = "Entry: " + str.tostring(close, "#.####"))
//    strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####"))
//    strategy.entry("long", strategy.long)

if (s_sinal)
    strategy.order("Short", strategy.short , comment = "Entry: " + str.tostring(close, "#.####"))
//    strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####"))
//    strategy.entry("short", strategy.short)

//  TP/SL ORDERS
if strategy.position_size > 0
    strategy.exit('Long_Close', 'Long',profit = TP , loss=SL, qty_percent=100, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####"))
//if  strategy.position_size > 0
//    strategy.exit("Long", "Long", stop = longSL, limit = longTP, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####"))
    
if strategy.position_size < 0
    strategy.exit('Short_Close', 'Short',profit = TP, loss=SL, qty_percent=100, comment_profit = "Profit Short: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####"))
//if strategy.position_size < 0
//    strategy.exit("Short", "Short", stop = shortSL, limit = shortTP, comment_profit = "Profit Short: "+ str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####")) 

//  END SETTINGS STRATEGY  //

// LOGS 
// if strategy.opentrades > 10
//     log.warning("{0} positions opened in the same direction in a row. Try adjusting `bracketTickSizeInput`", strategy.opentrades)

// last10Perc = strategy.initial_capital / 10 > strategy.equity
// if (last10Perc and not last10Perc[1])
//     log.error("The strategy has lost 90% of the initial capital!")