Die Dreifachschwingende Durchschnittskanalstrategie für geduldiges Mining von wertvollen Informationen aus Kerzenlinien

Schriftsteller:ChaoZhang, Datum: 2024-02-01 11:12:47
Tags:

img

Übersicht

Die dreifache gleitende Durchschnittskanalstrategie nutzt mehrere gleitende Durchschnittsindikatoren, um das Kerzendiagramm tief zu analysieren und versteckte Regeln hinter Preisschwankungen aufzudecken, wodurch ein risikoarmer Arbitragehandel erzielt wird.

Grundsätze

Diese Strategie stapelt mehrere EMA-Metriken auf Bollinger Bands, um Preiskanäle aufzubauen und Muster in der Preisvolatilität zu entdecken.

  1. Der BodyResistanceChannel-Indikator wird verwendet, um die Widerstandswerte des Kerzenkörpers zu ermitteln.
  2. Der Support/Resistance-Indikator wird zur Ermittlung von mehrtägigen Support- und Widerstandsniveaus genutzt.
  3. Das duale EMA-System hilft, die Trendrichtung zu bestimmen.
  4. Der Hull MA-Indikator glättet die Kurskurve.

Auf dieser Grundlage werden durch Mustererkennung Umkehrmöglichkeiten ermittelt, um Arbitragestrategien zu formulieren.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Der Aufbau von Preiskanälen mit mehreren EMAS hilft, die Preisentwicklung klar zu bestimmen.
  2. Der Hull MA-Indikator gleicht die Preisausbrüche effektiv aus.
  3. Die Kombination von Umkehrmustern und Kanalindikatoren ermöglicht einen hochwahrscheinlichen und risikoarmen Handel.
  4. Die Konstruktion eines mehrschichtigen Indikatorsystems gewährleistet stabile und zuverlässige Handelssignale.

Risikoanalyse

Potenzielle Risiken dieser Strategie bestehen auch:

  1. Die Lösung besteht darin, einen beweglichen Stop Loss zu übernehmen, um den Verlust pro Handel zu reduzieren.
  2. Das Risiko falscher Signale, wenn die Umkehrmustererkennung schief geht.
  3. Das Risiko einer Verschlechterung der Signalqualität, wenn die Indikatorparameter nicht übereinstimmen.

Optimierungsrichtlinien

Zu den wichtigsten Optimierungsrichtungen gehören:

  1. Optimierung der Kombinationen der EMA-Periodenparameter, um sie besser an die Marktbedingungen anzupassen.
  2. Anpassung der Stop-Loss-Level, um die Rendite pro Handel zu maximieren und gleichzeitig das Verlustrisiko pro Handel zu minimieren.
  3. Einführung eines auf Volatilität basierenden dynamischen Positionsgrößenmoduls zur effektiven Risikomanagement.
  4. Verwenden Sie Deep Learning-Technologien, um mehr Preismuster aufzudecken und die Signalqualität zu verbessern.

Schlussfolgerung

Die dreifache gleitende Durchschnittskanalstrategie untergräbt die Regelmäßigkeit der Kursbewegung mit Stabilität und Effizienz, die langfristiger Anwendung und kontinuierlicher Optimierung würdig ist.


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//╭╮╱╱╭╮╭╮╱╱╭╮
//┃╰╮╭╯┃┃┃╱╱┃┃
//╰╮┃┃╭┻╯┣╮╭┫╰━┳╮╭┳━━╮
//╱┃╰╯┃╭╮┃┃┃┃╭╮┃┃┃┃━━┫
//╱╰╮╭┫╰╯┃╰╯┃╰╯┃╰╯┣━━┃
//╱╱╰╯╰━━┻━━┻━━┻━━┻━━╯
//╭━━━┳╮╱╱╱╱╱╱╱╭╮
//┃╭━╮┃┃╱╱╱╱╱╱╱┃┃
//┃┃╱╰┫╰━┳━━┳━╮╭━╮╭━━┫┃
//┃┃╱╭┫╭╮┃╭╮┃╭╮┫╭╮┫┃━┫┃
//┃╰━╯┃┃┃┃╭╮┃┃┃┃┃┃┃┃━┫╰╮
//╰━━━┻╯╰┻╯╰┻╯╰┻╯╰┻━━┻━╯
//━╯
// http://www.vdubus.co.uk/
strategy(title='Vdub FX SniperVX3 / Strategy  v3', shorttitle='Vdub_FX_SniperVX3_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Piriod=input('720')
ch1 = request.security(syminfo.tickerid, Piriod, open)
ch2 = request.security(syminfo.tickerid, Piriod, close)
longCondition = crossover(request.security(syminfo.tickerid, Piriod, close),request.security(syminfo.tickerid, Piriod, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Piriod, close),request.security(syminfo.tickerid, Piriod, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Mehr