Dynamische RSI- und CCI-kombinierte vielfältige quantitative Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-27 18:54:34
Tags:

img

Übersicht

Diese Strategie kombiniert dynamischen RSI, CCI und mehrere MA- gleitende Durchschnitte, um eine mehrfaktororientierte quantitative Handelsstrategie umzusetzen.

Strategieprinzip

Technische Indikatoren

  • MA: Berechnet den durchschnittlichen Schlusskurs über einen Zeitraum, um die Kursentwicklung zu ermitteln
  • RSI: Richter überkauft und überverkauft
  • CCI: Status von Richtern, die überkauft und überverkauft sind
  • Stoch KDJ: Abweichung der Stochastik vom Haupttrend

Handelssignale

Kaufsignal: MA12 überschreitet MA26, CCI unter 100 (überverkauft), Stoch KDJ unter 80 (überverkauft)

Verkaufssignal: RSI unterhalb der dynamischen Schwelle, Stoch KDJ über 80 (überkauft)

Vorteile

  1. Mehrfacher, umfassendes Urteilsvermögen, geringere falsche Signale
  2. Dynamische Schwelle für die Erfassung von Verkaufsmöglichkeiten, Echtzeit-Überkauf und -Überverkauf
  3. Kombination von Trend-, Stochastischen und Mainstream-Technischen Indikatoren
  4. Mehrfachparameter-Tuning, hohe Flexibilität

Risiken

  1. Zu komplexe Kombination aus mehreren Faktoren, schwierige Parameter-Ausrichtung
  2. Leistung stark an der Parameterwahl gebunden
  3. Erfordert einen strengen quantitativen Prozess für die Optimierung von Parametern
  4. Hohe Kurvenanpassungsgefahr

Optimierung

  1. Weitere Datensatzprüfungen zur Strategie-Robustheit
  2. Versuche mit mehreren Parameterkombinationen zur Ermittlung des optimalen
  3. Hinzufügen von Stop Loss zur Verringerung des maximalen Drawdowns
  4. Positionsgröße hinzufügen, um Verfolgung und Töten zu vermeiden
  5. Anpassungsfähigkeit an verschiedene Produkte

Schlussfolgerung

Diese Strategie kombiniert mehrere technische Indikatoren und multi-Faktor-gesteuerte Urteile mit Parameter-Tuning und statistische Validierung, um gute Ergebnisse zu erzielen.


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

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)

Mehr