Personalisierte Momentum-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-23 15:18:27
Tags:

img

Übersicht

Dies ist eine personalisierte Handelsstrategie, die Dynamikindikatoren und Candlestick Entity Filtering kombiniert. Es verwendet umfassend drei technische Indikatoren - Stochastic Momentum Index, schneller RSI und Candlestick Entity Filtering, um eine Dynamik-Breakthrough-basierte Strategie zu implementieren und gleichzeitig überkaufte und überverkaufte Bedingungen zu berücksichtigen.

Handelslogik

Die Strategie verwendet folgende drei Indikatoren für die Bewertung von Handelssignalen:

  1. Stochastic Momentum Index (SMI): Es kombiniert den Abstand zwischen Kerzen-Einheiten und die relative Position des Schlusskurses, um die Stärke oder Schwäche der Preisdynamik zu beurteilen. Es erzeugt ein Kaufsignal, wenn SMI über die Grenzlinie überschreitet, und ein Verkaufssignal, wenn es unter die Grenzlinie überschreitet.

  2. Fast RSI (7-Tage-Linie): Beurteilt die überkauften und überverkauften Bedingungen der Preise. RSI unter 20 erzeugt ein Kaufsignal als überverkauft, während über 80 ein Verkaufssignal als überkauft erzeugt.

  3. Candlestick Entity Filter: Berechnet die durchschnittliche Candlestick Entity Größe in den letzten 10 Tagen. Aktivieren Sie das Signal nur, wenn die heutige Candlestick Entity ein Drittel dieses Durchschnitts übersteigt, um ungültige Signale zu vermeiden.

Die Strategie beurteilt zunächst die Signale von SMI und RSI. Wenn eine der Indikatorsignalanforderungen erfüllt ist, wird dann der Candlestick Entity-Filter kombiniert, um festzustellen, ob dieses Signal gültig ist und ein Handelssignal erzeugt, wenn es gültig ist.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Beurteilung ist bei Kombination mehrerer Indikatoren genauer und zuverlässiger.

  2. Das Hinzufügen eines Kerzen-Entity-Filters vermeidet ungültige Signale.

  3. Durch die Kombination von Überkauf/Überverkauf ist es einfacher, Signale an Trendumkehrpunkten zu erfassen.

  4. Erhöhung der Gewinnchancen durch zweiseitiges Long/Short-Handel.

  5. Der Handel mit teilweisen Positionen vermeidet übermäßige Einmalverluste.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Indikatoren können falsche Signale erzeugen, die zu Verlusten führen.

  2. Der Teilpositionshandel kann die Trendchancen in jeder Richtung nicht voll ausnutzen.

  3. Als Hauptindikator ist der SMI empfindlich auf Parameter-Einstellungen angewiesen.

  4. Häufiger Handel mit einer zweiseitigen Strategie erhöht die Transaktionskosten.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren der Parameter für SMI und RSI, um die besten Parameterkombinationen zu finden.

  2. Erhöhung der Positionsgröße und Positionsmanagementmechanismen, um höhere Renditen während Trends zu erzielen.

  3. Hinzufügen von Stop-Loss-Strategien zur Verringerung des Einmalverlustrisikos.

  4. Kombination mehrerer Indikatoren zur Beurteilung der Signalzuverlässigkeit und zur Verringerung falscher Signale.

  5. Einführung effizienter Verträge zur Senkung der Transaktionskosten.

Schlussfolgerung

Die Strategie nutzt umfassend die SMI, schnelle RSI und Candlestick Entity Filtering Indikatoren, um eine momentumbasierte, überkaufte/überverkaufte persönliche Handelsstrategie umzusetzen. Sie hat Vorteile wie präzises Urteilen, Identifizierung gültiger Signale, Kombination von überkauften/überverkauften Bedingungen und dual-directional Trading, aber auch Risiken wie Parameterempfindlichkeit, Unfähigkeit, Trends vollständig zu kapitalisieren und häufige Operationen. Durch die kontinuierliche Optimierung von Parametern, Erhöhung der Positionsgröße und Stop-Loss-Management, Verringerung falscher Signale usw. kann die Strategie eine bessere Handelsleistung erzielen.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, 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), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//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]

if up1 or up2
    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)))

if dn1 or dn2
    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()

Mehr