Quantitative Swing-Trading-Strategie basierend auf mehreren Zeitrahmen


Erstellungsdatum: 2023-12-01 13:50:02 zuletzt geändert: 2023-12-01 13:50:02
Kopie: 0 Klicks: 767
1
konzentrieren Sie sich auf
1619
Anhänger

Quantitative Swing-Trading-Strategie basierend auf mehreren Zeitrahmen

Überblick

Die Strategie ermöglicht die Identifizierung von Bitcoin-Preissegmenten durch die Kombination von quantitativen Kennzahlen in verschiedenen Zeitrahmen, um den Handel zu verfolgen. Die Strategie verwendet einen 5-Minuten-Zeitrahmen und hält die Bandbreite langfristig.

Strategieprinzip

  1. Der RSI basiert auf dem Sun-Line-Zeitrahmen, wobei die Transaktionsmenge zur Gewichtung verwendet wird, um falsche Durchbrüche zu filtern.
  2. Die EMA-Gleichbehandlung des Sunline-RSI-Indikators erzeugt eine quantitative Bandbreite.
  3. Der 5-Minuten-Zeitrahmen verwendet die lineare Regression und den HMA-Indikator, um ein Handelssignal zu erstellen.
  4. Die Strategie erlaubt die Kombination von Mess- und Handelssignalen, die zwischen verschiedenen Zeitrahmen kombiniert werden können, um die mittleren und langen Phasen des Preises zu identifizieren.

Analyse der Stärken

  1. Der RSI-Indikator mit Gewichtung der Transaktionsmenge identifiziert effektiv die wahren Bandbreiten und filtert die falschen Durchbrüche.
  2. Der HMA-Indikator ist empfindlicher auf Preisänderungen und kann Umschläge zeitnah erfassen.
  3. In Kombination mit mehreren Zeitrahmen ist die Identifizierung von mittleren und langen Wellenbändern genauer.
  4. Derzeit werden die meisten Transaktionen innerhalb eines Zeitrahmens von 5 Minuten durchgeführt.
  5. Bandbreite-Tracking-Strategie, keine genaue Auswahl, längere Haltbarkeit.

Risikoanalyse

  1. Es ist empfehlenswert, die Quantifizierung mit der Fundamentalanalyse zu kombinieren.
  2. Die Bandbreite kann sich auf halbem Weg umkehren, ein Stop-Loss-Exit-Mechanismus sollte eingerichtet werden.
  3. Das Handelssignal ist verspätet und könnte den besten Einstiegspunkt verpassen.
  4. Die Ertragsströme erfordern eine längere Haltedauer und einen gewissen finanziellen Druck.

Optimierungsrichtung

  1. Testen Sie die Wirksamkeit des RSI-Indikators für verschiedene Parameter.
  2. Versuchen Sie, andere Hilfsbandindikatoren einzuführen.
  3. Optimierung der Längenparameter des HMA-Indikators.
  4. Das ist eine neue Strategie, die den Verlust und die Verzögerung verringert.
  5. Anpassung der Haltungszyklen für Frequenzbandtransaktionen.

Zusammenfassen

Die Strategie ermöglicht die effektive Erfassung von Long-Line-Trends in Bitcoin durch Multi-Time-Frame-Combination und Band-Tracking. Im Vergleich zu Short-Line-Trading ist der Rückzug in den Medium-Lang-Line-Band-Trading geringer und die Gewinnspanne größer. Im nächsten Schritt wird die Ertragsrate und Stabilität der Strategie durch die Anpassung der Parameter und die Hinzufügung von Risikomanagementstrategien weiter verbessert.

Strategiequellcode
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)