Strategie zur Kombination aus ausgerichtetem gleitendem Durchschnitt und kumulativem hohen niedrigen Index

Schriftsteller:ChaoZhang, Datum: 2023-11-21 15:19:35
Tags:

img

Übersicht

Diese Strategie kombiniert hauptsächlich den High Low Index, den Moving Average Index und den Super Trend Index, um den Markttrend und die offenen Positionen zu bestimmen.

Strategie Logik

  1. Der High Low Index beurteilt, ob der letzte Preis in einem bestimmten Zeitraum ein neues Hoch oder ein neues Tief erzielt hat, und sammelt die Punktzahl. Wenn die Punktzahl steigt, stellt sie die Stärkung der bullischen Kräfte dar. Wenn die Punktzahl fällt, stellt sie die Stärkung der bärischen Kräfte dar.

  2. Der gleitende Durchschnittsindex beurteilt, ob der Preis in einem aufsteigenden Leiterförmigen Aufwärtstrend oder einem absteigenden Leiterförmigen Abwärtstrend ist. Wenn der gleitende Durchschnitt einen Leiterförmigen Anstieg zeigt, stellt er die Stärkung der bullischen Kräfte dar. Wenn er einen Leiterförmigen Rückgang zeigt, stellt er die Stärkung der bärischen Kräfte dar.

  3. Kombinieren Sie die Urteile des High Low Index und des Moving Average Index, um den Markttrend zu bestimmen, und finden Sie dann Handelsmöglichkeiten in Kombination mit der Richtung des Super Trend Index. Insbesondere, wenn sowohl der High Low Index als auch der Moving Average Index stärkende bullische Kräfte zeigen und die Richtung des Super Trend Index nach unten ist, öffnen Sie lange Positionen. Wenn beide Indizes stärkende bärische Kräfte zeigen und die Richtung des Super Trend Index nach oben ist, öffnen Sie kurze Positionen.

Vorteile

  1. Der High Low Index kann die Preisbewegung und Veränderungen der Dynamik effektiv beurteilen. Der Moving Average Index kann den Preistrend effektiv bestimmen. Die Kombination beider kann die Marktrichtung genauer bestimmen.

  2. Die Eröffnung von Positionen in Kombination mit dem Super Trend Index kann eine vorzeitige oder verspätete Eröffnung von Positionen vermeiden.

  3. Mehrere Indikatoren überprüfen sich gegenseitig und verringern falsche Signale.

Risiken

  1. Falsche Signale des High Low Index und des Moving Average Index können zu Verlustpositionen führen.

  2. Eine unzureichende Beteiligung und eine unsachgemäße Einstellung der Parameter des Super Trend Index können falsche Signale erzeugen.

  3. Schnelle Trendumkehrungen und unsachgemäße Stop-Loss-Einstellungen können zu großen Verlusten führen.

  4. Die Risiken können durch Optimierung der Indikatorparameter, Anpassung der Stop-Loss-Preise usw. verringert werden.

Optimierung

  1. Versuche verschiedene Arten von gleitenden Durchschnittsindikatoren, um die optimale Kombination von Parametern zu finden.

  2. Optimieren der Parameter des High Low Index und des Moving Average Index, um die Signale stabiler und zuverlässiger zu machen.

  3. Um falsche Signale zu reduzieren, sind andere Indikatoren zur Überprüfung wie MACD, KD usw. einzubeziehen.

  4. Einbeziehung von Algorithmen für maschinelles Lernen zur automatischen Optimierung von Parametern und Signalgewichten.

  5. Um weniger beliebte Produkte zu verhindern, sollten Sie Stimmungsanalysen einbeziehen.

Schlussfolgerung

Diese Strategie bestimmt Markttrends und Dynamik durch den High Low Index und den Moving Average Index und filtert dann die Signale mit dem Super Trend Index und eröffnet Positionen, wenn sich Bullish- und Bearish-Kräfte konfrontieren und der Super Trend Index umkehrt. Seine Vorteile liegen in der mehrfachen Signalverifizierung und der zeitnahen Eröffnung von Positionen, die Risiken effektiv kontrollieren können. Bestehende Probleme umfassen falsche Signale und Trendfehler. Verschiedene Verbesserungen können durch Parameteroptimierung, Stop-Loss-Einstellungen, Signalfilterung usw. vorgenommen werden, um die Strategie robuster und zuverlässiger zu machen.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)

supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    
f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0

f_getHighLowValue(HighLowPeriod)=>
    currentHigh = highest(high,HighLowPeriod) == high
    currentLow = lowest(low,HighLowPeriod) == low
    currentHigh?1:currentLow?-1:0

inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)

maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection

highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)

hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection

[superTrend, dir] = supertrend(supertrendMult, supertrendLength)

buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)

barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)

// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)

strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)


Mehr