Dieser Artikel erklärt detailliert eine für Kryptowährungen entwickelte quantitative Handelsstrategie mit mehreren Indikatoren.
I. Strategische Logik
Die wichtigsten Indikatorkategorien sind:
ROC-Oszillator zur Messung von Überkauf/Überverkauf.
Donchian Channel für dynamische Unterstützung und Widerstand.
Bears Power identifiziert Bodenmerkmale.
Machtgleichgewicht für die Beurteilung von Trends.
Gleitender Durchschnitt für die Trendfilterung.
Die Gewinngrenzen und Stop Loss sind ebenfalls so festgelegt, dass die Risiken eines einzigen Handels kontrolliert werden.
II. Vorteile der Strategie
Der größte Vorteil besteht in der Komplementarität der Indikatoren, wenn man aus mehreren Dimensionen ausgeht.
Ein weiterer Vorteil ist die direkte und vernünftige Stop-Loss- und Take-Profit-Funktion für eine umsichtige Geldverwaltung.
Schließlich ermöglicht ein umfangreicher Parameterraum eine Feinabstimmung für Kryptowährungen.
III. Potenzielle Risiken
Allerdings bestehen einige Risiken:
Erstens erhöhen Kombinationen von mehreren Indikatoren die Schwierigkeit der Optimierung.
Zweitens erfordern Abweichungen zwischen den Indikatoren klare logische Regeln.
Schließlich müssen die Parameter für bestimmte Produkte optimiert werden.
IV. Zusammenfassung
Zusammenfassend wird in diesem Artikel eine für Kryptowährungen zugeschnittene quantitative Multi-Indikator-Strategie erklärt. Sie kombiniert intelligent Indikatoren für Risiko- und Geldmanagement. Durch Parameteroptimierung können stabile Gewinne erzielt werden, muss aber die Optimierungsschwierigkeit und die Indikatornutzung verwalten.
/*backtest start: 2023-09-07 00:00:00 end: 2023-09-14 00:00:00 period: 4m basePeriod: 1m 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/ // © mbagheri746 //@version=4 strategy("Bagheri IG Ether", overlay=true, margin_long=100, margin_short=100) TP = input(3000, minval = 1 , title ="Take Profit") SL = input(3443, minval = 1 , title ="Stop Loss") //_________________ RoC Definition _________________ rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=185) smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=49) src = input(title="Source", type=input.source, defval=close) ma = ema(src, smoothingLength) mom = change(ma, rocLength) sroc = nz(ma[rocLength]) == 0 ? 100 : mom == 0 ? 0 : 100 * mom / ma[rocLength] //srocColor = sroc >= 0 ? #0ebb23 : color.red //plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0) //hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898) //_________________ Donchian Channel _________________ length1 = input(43, minval=1, title="Upper Channel") length2 = input(43, minval=1, title="Lower Channel") offset_bar = input(90,minval=0, title ="Offset Bars") upper = highest(length1) lower = lowest(length2) basis = avg(upper, lower) DC_UP_Band = upper[offset_bar] DC_LW_Band = lower[offset_bar] l = plot(DC_LW_Band, style=plot.style_line, linewidth=2, color=color.red) u = plot(DC_UP_Band, style=plot.style_line, linewidth=2, color=color.aqua) fill(l,u,color = color.new(color.aqua,transp = 90)) //_________________ Bears Power _________________ wmaBP_period = input(61,minval=1,title="BearsP WMA Period") line_wma = ema(close, wmaBP_period) BP = low - line_wma //_________________ Balance of Power _________________ ES_BoP=input(15, title="BoP Exponential Smoothing") BOP=(close - open) / (high - low) SBOP = rma(BOP, ES_BoP) //_________________ Alligator _________________ //_________________ CCI _________________ //_________________ Moving Average _________________ sma_period = input(74, minval = 1 , title = "SMA Period") sma_shift = input(37, minval = 1 , title = "SMA Shift") sma_primary = sma(close,sma_period) SMA_sh = sma_primary[sma_shift] plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow) //_________________ Long Entry Conditions _________________// MA_Lcnd = SMA_sh > low and SMA_sh < high ROC_Lcnd = sroc < 0 DC_Lcnd = open < DC_LW_Band BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2] BOP_Lcnd = SBOP[1] < SBOP[0] //_________________ Short Entry Conditions _________________// MA_Scnd = SMA_sh > low and SMA_sh < high ROC_Scnd = sroc > 0 DC_Scnd = open > DC_UP_Band BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2] BOP_Scnd = SBOP[1] > SBOP[0] //_________________ OPEN POSITION __________________// strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd) strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd) //_________________ CLOSE POSITION __________________// strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL) strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL) //_________________ TP and SL Plot __________________// currentPL= strategy.openprofit pos_price = strategy.position_avg_price open_pos = strategy.position_size TP_line = (strategy.position_size > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0 SL_line = (strategy.position_size > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0 // hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false) // hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false) Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1) Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1) Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1) fill(Tline , Pline, color = color.new(color.green,transp = 90)) fill(Sline , Pline, color = color.new(color.red,transp = 90)) //_________________ Label __________________// inMyPrice = input(title="My Price", type=input.float, defval=0) inLabelStyle = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right") posColor = color.new(color.green, 25) negColor = color.new(color.red, 25) dftColor = color.new(color.aqua, 25) posPnL = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (posPnL > 0) ? posColor : (posPnL < 0) ? negColor : dftColor myPnL = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0 var label lb = na label.delete(lb) lb := label.new(bar_index, close, color=posCol, style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left, text= "╔═══════╗" +"\n" + "Pos: " +posDir +"\n" + "Pos Price: "+tostring(strategy.position_avg_price) +"\n" + "Pos PnL: " +tostring(posPnL, "0.00") + "%" +"\n" + "My Price: " +tostring(inMyPrice) +"\n" + "My PnL: " +tostring(myPnL, "0.00") + "%" +"\n" + "╚═══════╝")