Mehrdimensionale, leistungsstarke Eröffnungsindikatorstrategie von quantitativen Experten


Erstellungsdatum: 2024-01-19 14:55:03 zuletzt geändert: 2024-01-19 14:55:03
Kopie: 0 Klicks: 699
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrdimensionale, leistungsstarke Eröffnungsindikatorstrategie von quantitativen Experten

Überblick

Die Strategie kombiniert mehrere Indizern wie Aroon, MA, BB, Williams, %R, ADX, um einen multidimensionalen Indikator für starke Positionen zu bilden, der in der Lage ist, effizient Positionen zu eröffnen, wenn der Trend deutlich ist.

Strategieprinzip

Diese Strategie ermöglicht ein starkes Signal zum Aufschlagen durch eine Kombination aus folgenden Indikatoren:

  1. Aroon-Indikator: Berechnet Höchst- und Tiefstpreise innerhalb eines bestimmten Zeitraums, um einen Schwingungsindikator zu bilden, der die Richtung des Trends durch eine Kombination von Aroon-Indikatoren mit mehreren Zeitrahmen bestimmt.

  2. MA-Meanline: Berechnung der Kreuzung der MA-Meanline zwischen kurzen und langen Perioden, um einen Trendwendepunkt zu ermitteln.

  3. BB Bollinger Bands: Verkaufssignale, wenn die Preise die Bollinger Bands durchbrechen.

  4. Der Williams %R-Indikator: Der Indikator bildet sich abseits von Überkauf- und Überverkaufszonen und dient als Signal für den Einstieg in die Position.

  5. ADX-Durchschnitts-Richtungsbewegungs-Index: Um die Stärke des Trends zu beurteilen, erzeugt ADX ein Positionsöffnungssignal, wenn der ADX über einer bestimmten Position liegt.

Diese mehrere Indikatoren bilden ein mehrdimensionales Urteilssystem, das durch verschiedene Periodength-Parameter erstellt wird. Wenn ein Trend deutlich ist, können mehrere Indikatoren ein starkes Signal für den Start einer Position bilden.

Es gibt nur zwei Möglichkeiten, um das Produkt zu kaufen:

  1. Aroon_1 unter 85
  2. Die MA-Gleichlinie entsteht bei der Goldfalke
  3. Williams %R unter -99
  4. ADX ist höher als 14.
  5. Aroon_2 ist höher als -39

Wenn 3 der 5 oben genannten Kaufbedingungen erfüllt sind, erzeugt dies ein starkes Kaufsignal.

Die Verkaufsbedingungen sind ähnlich, es gibt 5 Verkaufsbedingungen, und wenn 3 davon erfüllt sind, wird ein Verkaufssignal erzeugt.

Die Strategie erzeugt also durch die Kombination verschiedener Indikatoren ein starkes Positionseröffnungssignal mit hoher Gewissheit, wenn ein Trend sichtbar ist.

Analyse der Stärken

Der größte Vorteil dieser Strategie liegt in der multidimensionalen Kombination der Indikatorsignale, die die Wahrscheinlichkeit von Fehlsignalen durch einzelne Indikatoren erheblich reduziert, wodurch ein hochwertiges Signal zur Positioneröffnung bei deutlicheren Trends erzeugt werden kann. Dies ist der größte Vorteil dieser Strategie.

Weitere Vorteile sind:

  1. Durch die Anpassung der Parameter an die Merkmale verschiedener Märkte

  2. Indikatorparameter-Einstellungen sind wissenschaftlich vernünftig und die Parameter sind robust

  3. Mehrfache Zeitspiele kombiniert, um die Genauigkeit zu erhöhen

  4. Klare Code-Struktur, leicht zu verstehen und zu verwenden

Risikoanalyse

Die Strategie birgt auch Risiken:

  1. Eine Kombination aus mehreren Indikatoren erhöht die Qualität der Beurteilung, erhöht aber auch die Komplexität der Strategie und erhöht das Risiko einer Überoptimierung

  2. Die Parameter sind nicht hundertprozentig perfekt und können in bestimmten Märkten nicht funktionieren.

  3. Die Kombination der Indikatoren hat noch Optimierungsmöglichkeiten und die Kombinationslogik kann weiterentwickelt werden.

  4. Kurzfristige Anpassungschancen könnten verpasst werden

Entsprechende Lösungen:

  1. Erhöhung der Robustheit der Probenrückholung und der Prüfparameter

  2. Anpassung einiger Parameter für mehr Märkte

  3. Optimierung der Integration der Indikatoren zur Verbesserung der Urteilsqualität

  4. Anpassung der Parameter für einige Indikatoren, um die kurzfristigen Anpassungen besser zu erfassen

Optimierungsrichtung

Die wichtigsten Optimierungsrichtungen dieser Strategie sind die Optimierung der Integration der Indikatoren, die sich hauptsächlich aus folgenden Bereichen zusammensetzen:

  1. Hinzufügen von mehr verschiedenen Arten von Indikatoren, um einen Indikatorwald zu bilden und die Genauigkeit der Beurteilung weiter zu verbessern

  2. Optimierung der Parameter-Einstellungen der Indikatoren, um sie automatisch an Marktveränderungen anzupassen

  3. Automatische Suche nach optimalen Integrationsmechanismen für Kennzahlen mit Methoden wie maschinellem Lernen

  4. Erhöhung der Stop-Loss-Strategie zur Risikokontrolle

  5. In Kombination mit Emotionsindikatoren, um die Markthitze zu beurteilen, werden dynamische Anpassungsparameter verwendet.

Es gibt noch viel Raum, um die Urteilsqualität und Robustheit dieser Strategie zu verbessern, indem mehr Indikatoren, automatische Optimierungsparameter und Integrationsprogramme integriert werden.

Zusammenfassen

Das größte Highlight dieser Strategie ist die wissenschaftliche Integration von mehreren Indikatoren, die starke Positionsöffnungssignale erzeugen, die bei klaren Trends deutlich wirken. Es gibt noch viel Optimierungsraum für die Integration dieser Strategie. Durch die Einführung von mehr Indikatoren sowie die intelligente Optimierung der Parameter und der Integrationsmethode kann die Strategie zu einer sehr starken Quantifizierungsstrategie werden.

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

//@version=3
strategy(title="Aroon+Williams+MA2+ADX+Aroon Str.", shorttitle="Aroon+Williams+MA2+ADX+Aroon Str.", overlay=true)
//https://cafe.naver.com/watchbot/1945
//<<빙썸 매각 기념>> 바이낸스 이오스 복합지표	

//Aroon_1
length_1 = input(264, minval=1, title="Length Aroon_1")
upper_1 = 100 * (highestbars(high, length_1+1) + length_1)/length_1
lower_1 = 100 * (lowestbars(low, length_1+1) + length_1)/length_1
midp_1 = 0
oscillator_1 = upper_1 - lower_1
//osc_1 = plot(oscillator_1, color=red)

//Aroon_2
length_2 = input(72, minval=1, title="Length Aroon_2")
upper_2 = 100 * (highestbars(high, length_2+1) + length_2)/length_2
lower_2 = 100 * (lowestbars(low, length_2+1) + length_2)/length_2
midp_2 = 0
oscillator_2 = upper_2 - lower_2
//osc_2 = plot(oscillator_2, color=red)

//Aroon_3
length_3 = input(137, minval=1, title="Length Aroon_3")
upper_3 = 100 * (highestbars(high, length_3+1) + length_3)/length_3
lower_3 = 100 * (lowestbars(low, length_3+1) + length_3)/length_3
midp_3 = 0
oscillator_3 = upper_3 - lower_3
//osc_3 = plot(oscillator_3, color=red)

//Aroon_4
length_4 = input(62, minval=1, title="Length Aroon_4")
upper_4 = 100 * (highestbars(high, length_4+1) + length_4)/length_4
lower_4 = 100 * (lowestbars(low, length_4+1) + length_4)/length_4
midp_4 = 0
oscillator_4 = upper_4 - lower_4
//osc_4 = plot(oscillator_4, color=red)

//Ma double
short_ma_1 = sma(close, 9)
long_ma_1 = sma(close, 21)
// plot(short_ma_1, color = red)
// plot(long_ma_1, color = green)
// plot(cross(short_ma_1, long_ma_1) ? short_ma_1 : na, style = cross, linewidth = 4)

short_ma_2 = sma(close, 9)
long_ma_2 = sma(close, 21)
// plot(short_ma_2, color = red)
// plot(long_ma_2, color = green)
plot(cross(short_ma_2, long_ma_2) ? short_ma_2 : na, transp= 100, title = "ma cross_2", style = cross, linewidth = 4)

//BB
length_bb = input(270, minval=1, title="BB length")
src_bb = input(close, title="Source")
mult_bb = input(2.0, minval=0.001, maxval=50, title="BB mult")
basis_bb = sma(src_bb, length_bb)
dev_bb = mult_bb * stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb
// plot(basis_bb, color=red)
// p1 = plot(upper_bb, color=blue)
// p2 = plot(lower_bb, color=blue)
// fill(p1, p2)

//Williams
length_wil = input(130, minval=1, title="Length Williams %R")
upper_wil = highest(length_wil)
lower_wil = lowest(length_wil)
out_wil = 100 * (close - upper_wil) / (upper_wil - lower_wil)
// plot(out_wil)
// band1 = hline(-20)
// band0 = hline(-80)
// fill(band1, band0)



//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(145, title="DI Length")
dirmov(len) =>
	up_adx = change(high)
	down_adx = -change(low)
	plusDM = na(up_adx) ? na : (up_adx > down_adx and up_adx > 0 ? up_adx : 0)
    minusDM = na(down_adx) ? na : (down_adx > up_adx and down_adx > 0 ? down_adx : 0)
	truerange = rma(tr, len)
	plus_adx = fixnan(100 * rma(plusDM, len) / truerange)
	minus_adx = fixnan(100 * rma(minusDM, len) / truerange)
	[plus_adx, minus_adx]

adx(dilen, adxlen) =>
	[plus_adx, minus_adx] = dirmov(dilen)
	sum_adx = plus_adx + minus_adx
	adx = 100 * rma(abs(plus_adx - minus_adx) / (sum_adx == 0 ? 1 : sum_adx), adxlen)

sig_adx = adx(dilen, adxlen)

// plot(sig_adx, color=red, title="ADX")


//ADX 2
adxlen_2 = input(14, title="ADX Smoothing")
dilen_2 = input(150, title="DI Length")
dirmov_2(len) =>
	up_adx_2 = change(high)
	down_adx_2 = -change(low)
	plusDM_2 = na(up_adx_2) ? na : (up_adx_2 > down_adx_2 and up_adx_2 > 0 ? up_adx_2 : 0)
    minusDM_2 = na(down_adx_2) ? na : (down_adx_2 > up_adx_2 and down_adx_2 > 0 ? down_adx_2 : 0)
	truerange_2 = rma(tr, len)
	plus_adx_2 = fixnan(100 * rma(plusDM_2, len) / truerange_2)
	minus_adx_2 = fixnan(100 * rma(minusDM_2, len) / truerange_2)
	[plus_adx_2, minus_adx_2]

adx_2(dilen_2, adxlen_2) =>
	[plus_adx_2, minus_adx_2] = dirmov_2(dilen_2)
	sum_adx_2 = plus_adx_2 + minus_adx_2
	adx_2 = 100 * rma(abs(plus_adx_2 - minus_adx_2) / (sum_adx_2 == 0 ? 1 : sum_adx_2), adxlen_2)

sig_adx_2 = adx(dilen_2, adxlen_2)

// plot(sig_adx_2, color=red, title="ADX_2")

//Input Position
//buy position
pos_aroon1 = input(-85, title="Aroon_1 Position Index_Down")
pos_madouble1_short = input(117, title="ma double_1 wma_Short")
pos_madouble1_long =  input(86, title="ma double_1 sma_Long")
pos_wil = input(-99, title="Williams Position Index_Down")
pos_adx= input(14, title="ADX Position Index_Up")
pos_aroon2 = input(-39, title="Aroon_2 Position Index_Up")

//sell position
pos_bb = input(120, title="BB Position Index_Up")
pos_aroon_3 = input(99, title="Aroon_3 Position Index_Up")
pos_madouble2_short= input(88, title="ma double_2 ema_Short")
pos_madouble2_long= input(96, title="ma double_2 sma_Long")
pos_adx_2= input(9, title="ADX_2 Position Index_Up")
pos_aroon_4 = input(35, title="Aroon_4 Position Index_Down")

//Condition
longCondition_aroon_1 = (oscillator_1 <= pos_aroon1)
longCondition_ma2 = (pos_madouble1_short > pos_madouble1_long)
longCondition_wil = (out_wil <= pos_wil)
longCondition_adx = (sig_adx >= pos_adx)
longCondition_aroon_2 = (oscillator_2 >= pos_aroon2)

shortCondition_bb = (close > basis_bb)
shortCondition_aroon_3 = (oscillator_3 >= pos_aroon_3)
shortCondition_ma2 = (pos_madouble2_short < pos_madouble2_long)
shortCondition_adx = (sig_adx_2 >= pos_adx_2)
shortCondition_aroon_4 = (oscillator_4 <= pos_aroon_4)

vl_aroon_1 = 0
vl_ma2 = 0
vl_wil = 0
vl_adx = 0
vl_aroon_2 = 0

if longCondition_aroon_1
    vl_aroon_1 := 1
    
if longCondition_ma2
    vl_ma2 := 3

if longCondition_wil
    vl_wil := 1
    
if longCondition_adx
    vl_adx := -1

if longCondition_aroon_2
    vl_aroon_2 := -1
	

vs_bb = 0
vs_aroon_3 = 0
vs_ma2 = 0
vs_adx = 0
vs_aroon_4 = 0

if shortCondition_bb
    vs_bb := 1

if shortCondition_aroon_3
    vs_aroon_3 := 1
    
if shortCondition_ma2
    vs_ma2 := 3

if shortCondition_adx
    vs_adx := -2

if shortCondition_aroon_4
    vs_aroon_4 := -1

// plotshape(vl_aroon_1, title= "vl_aroon_1", location=location.belowbar, color=green, text="vl_aroon_1")
// plotshape(vl_ma2, title= "vl_ma2", location=location.belowbar, color=green, text="\nvl_ma2")
// plotshape(vl_wil, title= "vl_wil", location=location.belowbar, color=green, text="\n\nvl_wil")
// plotshape(vl_adx, title= "vl_adx", location=location.belowbar, color=green, text="\n\n\nvl_adx")
// plotshape(vl_aroon_2, title= "vl_aroon_2", location=location.belowbar, color=green, text="\n\n\n\nvl_aroon_2")

// plotshape(vs_bb, title= "vs_bb", location=location.abovebar, color=orange, text="vs_bb")
// plotshape(vs_aroon_3, title= "vs_aroon_3", location=location.abovebar, color=orange, text="vs_aroon_3\n")
// plotshape(vs_ma2, title= "vs_ma2", location=location.abovebar, color=orange, text="vs_ma2\n\n")
// plotshape(vs_adx, title= "vs_adx", location=location.abovebar, color=orange, text="vs_adx\n\n\n")
// plotshape(vs_aroon_4, title= "vs_aroon_4", location=location.abovebar, color=orange, text="vs_aroon_4\n\n\n\n")

longCondition = (vl_aroon_1 + vl_ma2 + vl_wil + vl_adx + vl_aroon_2) >= 3 ? true : na
shortCondition = (vs_bb + vs_aroon_3 + vs_ma2 + vs_adx + vs_aroon_4) >= 3 ? true : na

buy = longCondition == 1 ? longCondition : na
sell = shortCondition == 1? shortCondition : na

// plotshape(buy, title= "buy", location=location.bottom, color=green, text="buy")
// plotshape(sell, title= "sell", location=location.top, color=orange, text="sell")


// === BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2018, title = "To Year", minval = 2014)

strategy.entry("L", strategy.long, when=(buy))
strategy.close("L", when=(sell))
// strategy.entry("S", strategy.short, when=(sell and (time >= timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))
// strategy.close("S", when=(buy and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))