Strategie zur Verfolgung von Trends mit mehreren Indikatoren

Schriftsteller:ChaoZhang, Datum: 2023-12-27 17:15:45
Tags:

img

Übersicht

Die Strategie heißtStrategie zur Verfolgung von Trends mit mehreren IndikatorenEs nutzt mehrere Indikatoren, darunter Fisher Transform, gewichteter Moving Average (WMA), Relative Strength Index (RSI) und On-Balance Volume (OBV), um die Trendrichtung des Marktes zu bestimmen und den Trend für den Handel zu verfolgen.

Strategie Logik

  1. Fisher Transform, um den Kurswandel Trend und Dynamik zu erkennen. Handelssignale werden erzeugt, wenn vier Fisher-Linien synchron Farbe ändern.
  2. Der WMA bestimmt die Richtung des Trends, der RSI filtert falsche Signale.
  3. OBV, um den Trend zu bestätigen.

Speziell enthält die Fisher Transform vier Linien - 1x, 2x, 4x und 8x. Wenn vier Linien gleichzeitig grün werden, wird ein langes Signal erzeugt. Wenn vier Linien gleichzeitig rot werden, wird ein kurzes Signal erzeugt. WMA bestimmt, ob der Haupttrend bullisch oder bärisch ist. OBV bestätigt die Trendrichtung. RSI filtert falsche Signale aus.

Analyse der Vorteile

Die Vorteile dieser Strategie:

  1. Die Fisher-Transformation ist momentumsempfindlich, wenn vier Fisher-Linien synchron Farbe wechseln, stellt sie eine hohe Wahrscheinlichkeit einer Trendumkehr sicher.
  2. Die WMA bestimmt den wichtigsten Trend, um einen gegen diesen Trend gerichteten Handel zu vermeiden.
  3. OBV bestätigt den wahren Trend, vermeidet einen falschen Ausbruch in einem Trendlosen Markt.
  4. Der RSI filtert falsche Signale aus, um die Zuverlässigkeit der Handelssignale zu gewährleisten.

Durch die Kombination mehrerer Indikatoren gewährleistet es die Genauigkeit und Zuverlässigkeit der Handelssignale und ist in der Lage, Trends zu erfassen, was zu einer guten Strategieleistung führt.

Risikoanalyse

Risiken dieser Strategie:

  1. Wenn sich der Markt in einer Konsolidierung befindet, können Fischer-Linien falsche Signale erzeugen.
  2. Eine unsachgemäße Einstellung der WMA-Parameter kann sich auf die Trendgenauigkeit auswirken.
  3. Fisher Transform schlägt sich bei kurzfristigen Trends nicht gut.
  4. Der Abfall von Wasserfällen kann zu großen Verlusten führen.

Um die Risiken zu mindern, kann der RSI-Parameter entsprechend angepasst werden. WMA-Periode kann optimiert werden. Stop-Loss kann auch eingestellt werden, um große Verluste zu vermeiden.

Optimierungsrichtlinien

Diese Strategie kann aus folgenden Gesichtspunkten weiter optimiert werden:

  1. Testen Sie die Wirksamkeit über verschiedene Zeitrahmen hinweg, um die optimale Kombination von Parametern zu finden.
  2. Setzen Sie den Stop-Loss-Mechanismus ein, wenn der Verlust ein bestimmtes Niveau erreicht.
  3. Weiterhin werden die Fisher-Transform-Parameter anhand der Rückprüfungsergebnisse angepasst, um die optimale Parameterkombination mit der besten Genauigkeit zu finden.
  4. Versuchen Sie, andere Filterindikatoren wie Festigkeitsindex, Biasindex usw. hinzuzufügen.
  5. Versuche verschiedene Strategien zur Einstellung der Positionsgröße.

Schlussfolgerung

Diese Strategie integriert Fisher Transform, WMA, OBV und RSI, um die Trendrichtung zu bestimmen. Sie erzeugt präzise Handelssignale mit starker Bestätigungsfähigkeit, die es ermöglichen, Gewinne entlang des Trends effektiv zu erzielen. Mit weiterer Parameteroptimierung kann der Gewinnfaktor verbessert werden. Abschließend durch die Kombination mehrerer Indikatoren verfolgt diese Strategie den Trend effektiv mit guter Performance.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//author Sdover0123
strategy(title='FTR, WMA, OBV & RSI Strat', shorttitle='FTR WMA, OBV, RSI',overlay=false, default_qty_type=strategy.percent_of_equity, initial_capital = 100, default_qty_value=100, commission_value = 0.06, pyramiding = 3)
Len = input.int(10, minval=1, group ="Fisher Transform")
mult1 = input.int(1, minval=1, group ="Fisher Transform")
mult2 = input.int(2, minval=1, group ="Fisher Transform")
mult3 = input.int(4, minval=1, group ="Fisher Transform")
mult4 = input.int(8, minval=1, group ="Fisher Transform")
fish(Length, timeMultiplier) =>
    var nValue1 = 0.0
    var nValue2 = 0.0
    var nFish = 0.0
    xHL2 = hl2
    xMaxH = ta.highest(xHL2, Length * timeMultiplier)
    xMinL = ta.lowest(xHL2, Length * timeMultiplier)
    nValue1 := 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1])
    if nValue1 > .99
        nValue2 := .999
        nValue2
    else if nValue1 < -.99
        nValue2 := -.999
        nValue2
    else
        nValue2 := nValue1
        nValue2
    nFish := 0.5 * math.log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1])
    nFish
Fisher1 = fish(Len, mult1)
Fisher2 = fish(Len, mult2)
Fisher4 = fish(Len, mult3)
Fisher8 = fish(Len, mult4)

rsiLength = input.int(14, minval=1, group ="Moving Averages")
rsiVal = (ta.rsi(close, rsiLength) - 50) / 10
avg = strategy.position_avg_price

wma(source, length) =>
    sum = 0.0
    for i = 0 to length - 1
        sum := sum + source[i] * (length - i)
    wma = sum / (length * (length + 1) / 2)
    wma

wmaLength = input.int(10, "WMA Length", minval=1, group ="Moving Averages")
wmaClose = wma(close, wmaLength)
// Determine if WMA is bullish or bearish
isWmaBullish = wmaClose > wmaClose[1]
isWmaBearish = wmaClose < wmaClose[1]

//OBV 
src = close
length = input.int(20, title="OBV Length", group="On-Balance Volume")
obv1(src) =>
    change_1 = ta.change(src)
    ta.cum(ta.change(src) > 0 ? volume : change_1 < 0 ? -volume : 0 * volume)*0.01
os = obv1(src)
obv_osc = os - ta.ema(os, length)
obc_color = (obv_osc > 0 ? color.rgb(0, 255, 8) : color.rgb(255, 0, 0))
plot(obv_osc, color=obc_color, style=plot.style_line, title='OBV-Points', linewidth=2)
plot(obv_osc, color=color.new(#b2b5be, 70), title='OBV', style=plot.style_area)
obvBullFilter = input.float(0.1, minval = 0, maxval = 5, step = 0.01, title ="OBV Bullish minimum value", group="On-Balance Volume")
obvBearFilter = input.float(-0.1, minval = -5, maxval = 0, step = 0.01, title ="OBV Bearish minimum value", group="On-Balance Volume")
obvBull = obv_osc > obvBullFilter
obvBear = obv_osc < obvBearFilter

// Add buy/sell signals
ReversalFilterDown = input.float(-0.7, 'Reversal Down TP Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. When all Fisher lines are changing colour, this will SL/TP the long")
ReversalFilterUp = input.float(0.7, 'Reversal Up TP Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. When all Fisher lines are changing colour, this will SL/TP the short")
RSILevelBuyFilter = input.float(1.66, 'RSI Level Buy Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. Consider negative values")
RSILevelSellFilter = input.float(1, 'RSI Level Sell Filter', -4, 4, step = 0.01, group = "RSI Level Filters", tooltip = "This is defined by taking the RSI value -50 and /10. Consider negative values")
//buys - if breaking out and all Fisher are green and RSI filter value is met 
buySignal = Fisher1 > Fisher1[1] and Fisher2 > Fisher2[1] and Fisher4 > Fisher4[1] and Fisher8 > Fisher8[1] and rsiVal > RSILevelBuyFilter and isWmaBullish and obvBull
ReversalUp = Fisher1 > Fisher1[1] and Fisher2 > Fisher2[1] and Fisher4 > Fisher4[1] and Fisher8 > Fisher8[1] and rsiVal > ReversalFilterUp
//sells - if breaking down and all Fisher are green and RSI filter value is met 
sellSignal = Fisher1 < Fisher1[1] and Fisher2 < Fisher2[1] and Fisher4 < Fisher4[1] and Fisher8 < Fisher8[1] and rsiVal < RSILevelSellFilter and isWmaBearish and obvBear
ReversalDown = Fisher1 < Fisher1[1] and Fisher2 < Fisher2[1] and Fisher4 < Fisher4[1] and Fisher8 < Fisher8[1] and rsiVal < ReversalFilterDown


// Buy and Sell conditions
if buySignal and time>timestamp(2022, 06, 01, 09, 30) and barstate.isconfirmed
    strategy.close("Sell", comment = "Close Short")
    strategy.entry("Buy", strategy.long, comment = "Long")

if sellSignal and time>timestamp(2022, 06, 01, 09, 30) and barstate.isconfirmed
    strategy.close("Buy", comment = "Close Long")
    strategy.entry("Sell", strategy.short, comment = "Short")

if ReversalDown
    strategy.close("Buy", comment = "Close Long")

if ReversalUp
    strategy.close("Sell", comment = "Close Short")

//Plotting
//Fisher
plot(Fisher1, color=Fisher1 > nz(Fisher1[1]) ? color.green : color.rgb(255, 0, 0), title='Fisher TF:1')
plot(Fisher2, color=Fisher2 > nz(Fisher2[1]) ? color.green : color.rgb(255, 0, 0), title='Fisher TF:1', linewidth=2)
plot(Fisher4, color=Fisher4 > nz(Fisher4[1]) ? #008000 : #b60000, title='Fisher TF:1', linewidth=3)
plot(Fisher8, color=Fisher8 > nz(Fisher8[1]) ? #004f00 : #b60000, title='Fisher TF:1', linewidth=3)
//RSI
plot(rsiVal, color=rsiVal < 0 ? color.purple : color.yellow, linewidth=2, title='RSI')

//WMA
plot(isWmaBullish ? -2 : na, color=color.rgb(76, 175, 79, 20), linewidth=3, style=plot.style_linebr, title="WMA Bullish")
plot(isWmaBearish ? -2 : na, color=color.rgb(255, 82, 82, 20), linewidth=3, style=plot.style_linebr, title="WMA Bearish")

//Buy/Sell Signals
plotshape(buySignal, title='Buy Signal', location=location.bottom, color=color.new(color.lime, 0), style=shape.triangleup, size=size.small)
plotshape(sellSignal, title='Sell Signal', location=location.top, color=color.new(color.red, 0), style=shape.triangledown, size=size.small)

//Orientation
hline(RSILevelBuyFilter, color=color.rgb(25, 36, 99, 20), linestyle=hline.style_dotted, linewidth=2)
hline(RSILevelSellFilter, color=color.rgb(111, 27, 27, 20), linestyle=hline.style_dotted, linewidth=2)
hline(0, color=color.rgb(181, 166, 144, 39), linestyle=hline.style_dashed, linewidth=2, title = "Zero Line")
hline(1.5, color=color.rgb(217, 219, 220, 50), linestyle=hline.style_dotted, linewidth=2, title = "1.5 // 65 Line")
hline(-1.5, color=color.rgb(217, 219, 220, 50), linestyle=hline.style_dotted, linewidth=2, title = "-1.5 // 35 Line")

Mehr