Quantitative Handelsstrategie auf der Grundlage des RSI-Indikators und des gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-12-25 11:40:36
Tags:

img

Übersicht

Die Strategie heißt Quantitative Trading Strategy Based on RSI Indicator and Moving Average. Sie nutzt den RSI-Indikator und gleitende Durchschnitte als Handelssignale, um eine quantitative Handelsstrategie umzusetzen, die Umkehroperationen im Trendhintergrund durchführt.

Strategieprinzip

Die Strategie verwendet hauptsächlich den RSI-Indikator und schnelle/langsame gleitende Durchschnitte, um Preistrends und Umkehrzeitpunkte zu bestimmen. Insbesondere berechnet sie zunächst den schnellen gleitenden Durchschnitt (SMA) und den langsamen gleitenden Durchschnitt. Wenn der schnelle SMA den langsamen SMA überschreitet, wird ein Kaufsignal generiert. Wenn der schnelle SMA unter den langsamen SMA überschreitet, wird ein Verkaufssignal generiert. Dies zeigt, dass sich der Trend des Preises ändert.

Gleichzeitig berechnet diese Strategie den RSI-Indikator, um festzustellen, ob sich der Preis in einem überkauften oder überverkauften Zustand befindet. Bevor Positionen eröffnet werden, wird beurteilt, ob der RSI-Indikator normal ist. Wenn der RSI den festgelegten Schwellenwert überschreitet, wird er die Eröffnungspositionen aussetzen und darauf warten, dass der RSI vor der Eröffnung von Positionen zurückfällt. Dies kann verhindern, dass Positionen zu ungünstigen überkauften und überverkauften Zeiten eingerichtet werden. Auf der anderen Seite, nachdem Positionen eingegangen sind, wird der RSI Positionen schließen, um Gewinne zu erzielen, wenn der RSI die festgelegte Gewinnschwelle überschreitet. Dies kann Handelsgewinne sperren.

Durch die Zusammenarbeit des RSI-Indikators mit gleitenden Durchschnitten können Positionen eröffnet werden, wenn Preisumkehrsignale auftreten.

Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Verwendung des gleitenden Durchschnitts Goldenkreuzes als Kaufsignal und des Todenkreuzes als Verkaufssignal kann die Chancen für eine Umkehr des Kurstrends genau erfassen.

  2. Vermeiden Sie ungünstige Zeitpunkte für die Eröffnung von Positionen. Durch das Beurteilen von Überkauf- und Überverkaufszuständen über den RSI-Indikator kann effektiv verhindert werden, dass Positionen eingerichtet werden, wenn der Preis kurzfristig übermäßig schwankt und unnötige schwebende Verluste vermieden werden.

  3. Die Risiken können gut kontrolliert werden. RSI Take Profit kann Positionen innerhalb eines angemessenen Gewinnbereichs halten und Handelsrisiken effektiv kontrollieren.

  4. Einfache Optimierung der Parameter. SMA-Perioden, RSI-Parameter usw. können flexibel angepasst werden, um sich an verschiedene Marktumgebungen anzupassen.

  5. Hohe Effizienz der Kapitalnutzung: Häufige Handelsgeschäfte können während der Trendkonsolidierung und der Schockphasen durchgeführt werden, wodurch das Kapital effizient genutzt wird.

Risikoanalyse

Die Strategie birgt außerdem folgende Risiken:

  1. Bewegliche Durchschnittswerte als Trendbeurteilungsindikatoren weisen gewisse Verzögerungen auf, die zu ungenauen Zeitpunkten der Eröffnung von Positionen führen können.

  2. Häufiges Handelsrisiko: In schwankenden Märkten kann es zu übermäßig häufigen Eröffnungen und Schließungen von Positionen führen.

  3. Bei der Anpassung an die Märkte müssen die SMA-Perioden und die RSI-Parameter wiederholt getestet und angepasst werden.

  4. Unzulängliche RSI-Verlustrisiken können auch zu einem vorzeitigen Ausstieg aus Positionen oder zu einem anhaltenden Anstieg nach dem Ausstieg aus dem Profit führen.

Optimierungsrichtlinien

Die Optimierungsrichtungen sind wie folgt:

  1. Versuchen Sie, MACD, Bollinger Bands und andere Indikatoren in Kombination mit RSI zu verwenden, um die Signale genauer und zuverlässiger zu machen.

  2. Erhöhen Sie die Maschinellen Lernalgorithmen, um die Parameter automatisch anhand historischer Daten anzupassen, wodurch die Risiken bei der Einstellung von Parametern verringert werden.

  3. Erhöhung der Optimierungsmechanismen für Gewinnstrategien, um Gewinnstrategien intelligenter und anpassungsfähiger an Marktveränderungen zu machen.

  4. Optimierung der Positionsmanagementstrategien durch dynamische Anpassung der Positionsgrößen zur Verringerung der Risiken einzelner Trades.

  5. Kombination von Hochfrequenzdaten und Verwendung von Echtzeitdaten auf Tick-Ebene für Hochfrequenzhandel zur Verbesserung der Strategiefrequenz.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass diese Strategie Handelssignale, die durch den RSI-Indikator und gleitende Durchschnitte erzeugt werden, verwendet, um eine quantitative Strategie umzusetzen, die Umkehroperationen während der Trendläufe durchführt. Im Vergleich zu gleitenden Durchschnitten allein, kann diese Strategie durch Hinzufügen von RSI-Indikatorurteilen ungünstige Eröffnungspositionszeitungen effektiv verhindern und Handelsrisiken durch RSI-Nutzen kontrollieren. Bis zu einem gewissen Grad verbessert sie die Stabilität der Strategie. Natürlich gibt es noch Raum für Verbesserungen für diese Strategie. In Zukunft kann sie in Aspekten wie mehr Indikatorkombinationen, automatische Parameteroptimierung, Positionsmanagement usw. optimiert werden, um die Leistungsstrategie noch besser zu machen.


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//1. 做多
//    a. RSI在超买区间时不开单,直到RSI回落一点再开单
//    b. 已经有多仓,如果RSI超买,则平多获利,当RSI回落一点之后,再次开多,直到有交叉信号反转做空

//2. 做空
//    a. RSI在超卖区间时不开单,直到RSI回落一点之后再开多单
//    b. 已经有空仓,如果RSI超卖,则平空获利,当RSI回落一点之后,再开空单,直到有交叉信号反转做多

//@version=4
strategy("策略_RSI+移动揉搓线_", overlay=true)

// 输入
fastLength = input(11, minval=1)
slowLength = input(82,minval=1)
length = input(title="长度", type=input.integer, defval=14, minval=1, maxval=100)
hight_rsi = input(title="rsi超过上轨平多获利", type=input.integer, defval=80, minval=1, maxval=100)
low_rsi = input(title="rsi超过下轨平空获利", type=input.integer, defval=20, minval=1, maxval=100)

open_long_rsi_threshold = input(title="rsi低于该阈值时才开多", type=input.integer, defval=75, minval=1, maxval=100)
open_short_rsi_threshold = input(title="rsi高于该阈值时才开空仓", type=input.integer, defval=25, minval=1, maxval=100)

// 均线
sma_fast = sma(close, fastLength)
sma_slow = sma(close, slowLength)
// RSI
rsi = rsi(close, length)

//**********变量*start*******//
var long_f = false // 标记是否是均线交叉多头
var short_f = false // 标记是否是均线交叉空头
var long_open_pending = false // 标记开仓时rsi是否处于超买状态
var short_open_pending = false // 标记开仓时rsi是否处于超卖
var long_rsi_over_buy = false // 标记 多仓时 是否发生超买平多获利
var short_rsi_over_sell = false // 标记 空仓时 是否发生超卖平空获利

//**********逻辑*start*******//

// 买入
longCondition = crossover(sma_fast, sma_slow)
if (longCondition)
    short_rsi_over_sell := false // 清空该标记,防止再次开空仓
    long_f := true
	short_f := false
	if (rsi < hight_rsi)
	    // 并且没有超买
	    strategy.entry("多", long=strategy.long)
    if (rsi > hight_rsi)
        // 开仓时发生超买,等待rsi小于hight_rsi
	    long_open_pending := true

// 卖出
shortCondition = crossunder(sma_fast, sma_slow)
if (shortCondition)
    long_rsi_over_buy := false //清空该标记,防止再次开多仓
    long_f := false
    short_f := true
    if (rsi > low_rsi)
        strategy.entry("空", long=strategy.short)
	if (rsi < low_rsi)
	    // 开仓时发生超卖,等待rsi大于low_rsi
	    short_open_pending := true
	    

// 等待RSI合理,买入开仓
if (long_f and long_open_pending and strategy.position_size == 0 and rsi < open_long_rsi_threshold)
    strategy.entry("多", long=strategy.long)
	long_open_pending := false
// 等待RSI合理,卖出开仓
if (short_f and short_open_pending and strategy.position_size == 0 and rsi > open_short_rsi_threshold)
    strategy.entry("空", long=strategy.short)
	short_open_pending := false


	
//RSI止盈(RSI超买平多)
if (strategy.position_size > 0 and long_f and rsi > hight_rsi)
	strategy.close_all()
	long_rsi_over_buy := true
//RSI止盈(RSI超卖平空)
if (strategy.position_size < 0 and short_f and rsi < low_rsi)
	strategy.close_all()
	short_rsi_over_sell := true
	
	
//RSI止盈之后,再次开多
if (long_f and long_rsi_over_buy and strategy.position_size == 0 and rsi < hight_rsi)
    long_rsi_over_buy := false
    strategy.entry("多", long=strategy.long)
//RSI止盈之后,再次开空
if (short_f and short_rsi_over_sell and strategy.position_size == 0 and rsi > low_rsi)
    short_rsi_over_sell := false
    strategy.entry("空", long=strategy.short)


//**********绘图*start*******//

p1 = plot(sma_fast, linewidth=2, color=color.green)
p2 = plot(sma_slow, linewidth=2, color=color.red)
fill(p1, p2, color=color.green)
plot(cross(sma_fast, sma_slow) ? sma_fast : na, style = plot.style_circles, linewidth = 4)

// 绘制rsi线
//plot(rsi, color=color.green, editable=true, style=plot.style_circles, linewidth=2)

// 绘制上下轨
//high_ = hline(80, title="上轨")
//low_ = hline(20, title="下轨")
//fill(high_, low_, transp=80, editable=true, title="背景")
    
    
    
    
    
    
    

Mehr