Distanzbasierte Trailing-Stop-Loss-Quantitative-Strategie


Erstellungsdatum: 2023-11-15 11:24:16 zuletzt geändert: 2023-11-15 11:24:16
Kopie: 0 Klicks: 682
1
konzentrieren Sie sich auf
1617
Anhänger

Distanzbasierte Trailing-Stop-Loss-Quantitative-Strategie

Überblick

Die Strategie basiert auf der Idee von Moving Stops und nutzt Distance Close Bars (DCB) als Indikator, um die Kursentwicklung zu bestimmen, in Kombination mit dem schnellen RSI als Filter, um Moving Stops und Tracking Stops zu ermöglichen. Die Strategie verwendet auch die Martinegger-Positionserhöhung, die für den Handel mit mittleren langen Trends geeignet ist.

Grundsätze

  1. Berechnen Sie lastg und lastr, die den Schlusskurs der letzten aufsteigenden K-Linie und den Schlusskurs der letzten fallenden K-Linie darstellen.

  2. Dist ist die Preisunterschied zwischen lastg und lastr.

  3. Berechnen Sie einen einfachen Moving Average von 30 Perioden von adist zu dist.

  4. Geben Sie ein Transaktionssignal aus, wenn dist doppelt so groß ist wie adist.

  5. In Kombination mit einem schnellen RSI-Indikator filtern Sie die Signale, um falsche Durchbrüche zu vermeiden.

  6. Wenn ein Signal vorliegt und keine Position gehalten wird, wird die Position mit einem festen Prozentsatz eröffnet.

  7. Das ist die Martingale-Prinzip, nach dem Verlust zu investieren.

  8. Der Preis löst eine Stop-Loss- oder Stop-Flat-Position aus.

Vorteile

  1. Die DCB-Indikatoren werden verwendet, um die Richtung der Trends zu bestimmen und die mittleren und langen Trends effektiv zu erfassen.

  2. Schnelle RSI-Filterung verhindert, dass ein False-Breakout zu einem Verlust führt.

  3. Der mobile Stop-Loss-Stop-Mechanismus kann die Gewinne sperren und die Risiken wirksam kontrollieren.

  4. Die Martingale-Prinzipien ermöglichen es, nach einem Verlust die Position zu erhöhen, um einen höheren Gewinn zu erzielen.

  5. Die Strategieparameter sind für verschiedene Marktumgebungen geeignet.

Die Gefahr

  1. Die DCB-Anzeige kann ein falsches Signal geben und muss in Kombination mit anderen Anzeigen gefiltert werden.

  2. Die Marginal-Hochschulden erhöhen die Verluste und erfordern eine strenge Finanzverwaltung.

  3. Unvernünftige Stop-Loss-Einstellungen können zu größeren Verlusten führen als erwartet.

  4. Es ist notwendig, die Anzahl der Positionen streng zu kontrollieren, um zu vermeiden, dass die finanzielle Tragfähigkeit überschritten wird.

  5. Die falsche Einstellung eines Handelsvertrags kann in extremen Fällen zu erheblichen Verlusten führen.

Optimierung

  1. Optimierung der DCB-Parameter und Suche nach der optimalen Kombination der Parameter.

  2. Versuchen Sie, den RSI durch andere Indikatoren zu filtern.

  3. Optimierung der Stop-Loss-Stopp-Parameter und Erhöhung der Strategie-Gewinnrate.

  4. Optimierung der Martingale-Parameter zur Verringerung des Risikos von Verlagerungen.

  5. Versuchen Sie, verschiedene Handelsarten zu testen und die beste Arbitrage zu wählen.

  6. Strategieparameter zur dynamischen Optimierung von Technologien in Kombination mit maschinellem Lernen.

Zusammenfassen

Die Strategie Overall ist eine eher erfahrene Trend-Tracking-Strategie. Die Verwendung von DCB Trends zu bestimmen, schnelle RSI Filtersignale zu vermeiden, falsche Position zu eröffnen. Gleichzeitig Stop-Loss-Stopp-Mechanismus kann die Einzelschäden wirksam zu kontrollieren. Aber die Strategie ist auch ein gewisses Risiko, die weitere Optimierung der Parameter zur Verringerung des Risikos, Steigerung der Stabilität.

Strategiequellcode
/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi = input(true, defval = true, title = "Use RSI-Filter")
periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Distance
bar = close > open ? 1 : close < open ? -1 : 0
lastg = bar == 1 ? close : lastg[1]
lastr = bar == -1 ? close : lastr[1]
dist = lastg - lastr
adist = sma(dist, 30)
plot(lastg, linewidth = 3, color = lime)
plot(lastr, linewidth = 3, color = red)
up = bar == -1 and dist > adist * 2
dn = bar == 1 and dist > adist * 2

//RSI Filter
rsidn = fastrsi < limitrsi or usersi == false
rsiup = fastrsi > 100 - limitrsi or usersi == false

//Signals
up1 = up and rsidn
dn1 = dn and rsiup
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open))

//Arrows
plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue)
plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

signalup = up1
if signalup
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

signaldn = dn1
if signaldn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()