Vier Indikatoren für die Strategie zur Umkehrung der Dynamik

Schriftsteller:ChaoZhang, Datum: 2023-11-27 15:51:01
Tags:

img

Übersicht

Diese Strategie nutzt drei Haupttechnische Indikatoren: den gleitenden Durchschnitt EMA, den Relative Strength Index RSI und den Commodity Channel Index CCI, um durch EMA-Crossovers und weitere Einträge, die durch Überverkauf/Überkauf von RSI und CCI bestätigt werden, die Preisdynamik zu ermitteln.

Strategie Logik

  1. Verwenden Sie Kreuzungen zwischen 4-Perioden- und 8-Perioden-EMA, um die Kursdynamik zu bestimmen die schnellere 4-Perioden-EMA, um schnell zu reagieren, und die langsamere 8-Perioden-EMA, um zu bestätigen;

  2. Wenn die EMAs nach oben drehen, d. h. die 4-Perioden-EMA über die 8-Perioden-EMA überschreitet, überprüfen Sie, ob der RSI (über 65) und der CCI (über 0) nicht überkauft sind, um ein Long-Signal zu geben;

  3. Wenn sich die EMA nach unten drehen, d. h. die 4-Perioden-EMA unterhalb der 8-Perioden-EMA überschreitet, prüfen Sie, ob der RSI (unter 35) und der CCI (unter 0) überverkauft sind, um ein Kurzsignal zu geben;

  4. Setzen Sie Stop-Loss- und Take-Profit-Preise basierend auf den Eingabeabständen, sobald die Handelssignale ausgelöst werden.

Zusammenfassend betrachtet diese Strategie den mittelfristigen Trend und die kurzfristigen Überkauf-/Überverkaufswerte als relativ stabile Signale, während Stop-Loss und Take-Profit die Verluste pro Handel effektiv begrenzen.

Analyse der Vorteile

  1. Mehrfache Indikatoren lindern falsche Signale einzelner Oszillatoren;

  2. Die EMAs bestimmen den Haupttrend, während RSI und CCI überhitzte Bereiche vermeiden, um die Gewinnrate zu verbessern;

  3. Automatische Stop-Loss- und Take-Profit-Einstellungen begrenzen Verluste bei extremen Bewegungen;

  4. Die rein technische Natur macht diese Strategie für jeden Zeitraum leicht umsetzbar.

Risikoanalyse

  1. Wichtige grundlegende Neuigkeiten können technische Ebenen überschreiten;

  2. Stop-Loss kann durch hohe Volatilitätsrisiken für breitere Stops ausgeschaltet werden;

  3. Häufiger Handel führt zu höheren Transaktionskosten, weshalb es am besten für Hochfrequenzalgorithmen bleibt.

Möglichkeiten zur Verbesserung

  1. Einbeziehung von maschinellen Lernmodellen zur automatischen Anpassung von Parametern auf Basis von Grundlagen;

  2. Bauen Sie adaptive Stopps, die auf Volatilität reagieren, anstatt auf feste Entfernungen.

Schlussfolgerung

Diese vielseitige Strategie kann unter optimierten Parametern durchgängige mittelfristige Gewinne erzielen und macht es zu einem zugänglichen technischen System.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4


strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true)


len4 = input(4, minval=1, title="Length_MA4")
src4 = input(close, title="Source")
offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out4 = ema(src4, len4)
plot(out4, title="EMA", color=color.blue, offset=offset4)

len8 = input(8, minval=1, title="Length_MA8")
src8 = input(close, title="Source")
offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out8 = ema(src8, len8)
plot(out8, title="EMA", color=color.blue, offset=offset8)


//rsioma
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(ema(src, len)), 0), len)
down = rma(-min(change(ema(src, len)), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//plot(rsi, color=color.blue)
//band1 = hline(80)
//band0 = hline(20)
//fill(band1, band0, color=color.purple, transp=90)
//hline(50, color=color.gray, linestyle=plot.style_line)
sig = ema(rsi, 21)
//plot(sig, color=color.purple)

//woodie
cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14)
cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20)

source = close

cciTurbo = cci(source, cciTurboLength)
cci14 = cci(source, cci14Length)

last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0
last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0
histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red


// Exit Condition
// Exit Condition
a = input(12)*10
b = input(15)*10
c = a*syminfo.mintick
d = b*syminfo.mintick


longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0)
shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0)


long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + d : long_profit_level1  [1]
//long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
//long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1]
//short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
//short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 


//ha
// === Input ===
//ma1_len = input(1, title="MA 01")
//ma2_len = input(40, title="MA 02")

// === MA 01 Filter ===
//o=ema(open,ma1_len)
//cc=ema(close,ma1_len)
//h=ema(high,ma1_len)
//l=ema(low,ma1_len)

// === HA calculator ===
//ha_t = heikinashi(syminfo.tickerid)
//ha_o = security(ha_t, timeframe.period, o)
//ha_c = security(ha_t, timeframe.period, cc)
//ha_h = security(ha_t, timeframe.period, h)
//ha_l = security(ha_t, timeframe.period, l)

// === MA 02 Filter ===
//o2=ema(ha_o, ma2_len)
//c2=ema(ha_c, ma2_len)
//h2=ema(ha_h, ma2_len)
//l2=ema(ha_l, ma2_len)

// === Color def ===
//ha_col=o2>c2 ? color.red : color.lime

// ===  PLOTITING===
//plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col)

tp=input(120)
sl=input(96)
    
strategy.entry("long", strategy.long, when = longCondition)
//strategy.close("long", when = o2>c2 , comment="ha_long")
strategy.entry("short", strategy.short , when =shortCondition )
//strategy.close("short", when = o2<=c2 , comment = "ha_short" )

//strategy.close("long",when=long_profit_level1 or long_stop_level  , comment="tp/sl")
//strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl")

strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2)
strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)



Mehr