Jupiter und Saturn Momentum MA Crossover gefilterte Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-03 16:13:20
Tags:

img

Übersicht

Diese Strategie verwendet als Handelssignale gleitende Durchschnitts-Crossovers, kombiniert mit dem Volatilitätsindikator BB und einem benutzerdefinierten Impulsindikator zur Filtration, um die Zuverlässigkeit der MA-Crossover-Signale zu verbessern und falsche Signale zu reduzieren.

Grundsätze

  1. Verwenden Sie 50-Perioden-EMA und 200-Perioden-SMA, um goldenes Kreuz und Todeskreuz zu bilden.

  2. Wenn sich der Preis im Aufwärtstrend befindet, muss der Preis über der 200-Tage-Linie und der benutzerdefinierte Momentumindikatorwert unter 25 liegen, um Kaufsignale zu generieren.

  3. Wenn sich der Preis in einem Abwärtstrend befindet, müssen die Preise unterhalb der 200-Tage-Linie und der benutzerdefinierte Momentum-Indikatorwert über 75 liegen, um Verkaufssignale zu generieren.

  4. Der benutzerdefinierte Impulsindikator bildet mittlere BB-Linie und Banddistanz in einem Bereich von 0-100 auf der Grundlage historischer Maxime und Minime ab.

  5. Der Momentum-Indikator spiegelt die relative Preisvolatilität wider, die Schwellen-Filterung hilft, falsche Crossovers zu reduzieren.

Vorteile

  1. Nutzen Sie die Stärken der EMA und SMA, um mittelfristige Trends zu erfassen.

  2. Eine erhöhte Filtration mit Impulsindikator verbessert die Zuverlässigkeit und verringert die falschen Signale.

  3. Die BB-Banddistanz spiegelt die Volatilitätsintensität wider, die historische Normalisierung vermeidet Parameterabhängigkeit.

  4. Anpassungsfähige EMA-, SMA-Perioden und Momentumsschwellen, die sich an unterschiedliche Marktumgebungen anpassen lassen.

  5. Einfache Logik mit Optimierung Flexibilität, starke Praktikabilität.

Risikoanalyse

  1. EMA und SMA haben einen Verzögerungseffekt und können kurzfristige Chancen verpassen.

  2. Trend nach Art, der für marktbezogene Märkte ungeeignet ist.

  3. Momentenschwelle erfordert iteratives Backtesting für den optimalen Parameter, Risiken von Überanpassung.

  4. Langfristige Systeme bieten eine konstante, aber möglicherweise begrenzte absolute Rendite.

  5. Kann die Zulassungszeiten verkürzen oder ergänzende Indikatoren hinzufügen, um die Anpassungsfähigkeit zu verbessern.

Möglichkeiten zur Verbesserung

  1. Versuche verschiedene MA-Kombinationen für optimale Parameter.

  2. Ergänzende Indikatoren wie MACD, KD für zusätzliche Validierung hinzufügen.

  3. Optimieren Sie die Impulsindikatorparameter wie Rückblick, Kartierungsbereich.

  4. Einbeziehung von Stop Loss zur Risikokontrolle.

  5. Anpassen für symbolspezifische Parameter mit Hilfe von Feature-Extraktion durch maschinelles Lernen.

  6. Fügen Sie Lautstärkenanzeiger hinzu, um unzumutbare Kreuzungssignale zu vermeiden.

Schlussfolgerung

Diese Strategie kombiniert die Stärken des langfristigen Trendfolgens und der doppelten Schwungschwellenfilterung für hohe Zuverlässigkeit und praktischen Wert. Weitere Verbesserungen sind durch Parameteroptimierung und komplementäre Techniken möglich. Das innovative Konzept liefert wertvolle Einblicke für andere Trendsysteme. Eine wertvolle Ergänzung zur algorithmischen Handelsstrategiebibliothek.


/*backtest
start: 2023-10-26 00:00:00
end: 2023-10-27 13:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false)

// Inputs
emaLength = input(20, "EMA Length")
stdDevLength = input(2, "Standard Deviation Length")
priceSource = close
takeProfitPoints = input(1000, title="Take Profit (in Points)")
stopLossPoints = input(2500, title="Stop Loss (in Points)")

// Calculate EMA
ema = ema(priceSource, emaLength)

// Calculate Standard Deviation
stdDev = stdev(priceSource, stdDevLength)

// Calculate differences
diff1 = (ema + stdDev) - ema
diff2 = ema - (ema - stdDev)

// Calculate min and max differences from last year
lookbackPeriod = 504 // Number of trading days in a year
minDiff1 = lowest(diff1, lookbackPeriod)
maxDiff1 = highest(diff1, lookbackPeriod)
minDiff2 = lowest(diff2, lookbackPeriod)
maxDiff2 = highest(diff2, lookbackPeriod)

// Map differences based on requirements
mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1))
mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2))

// Combine mapped differences into a single line
mappedLine = if close > ema
    mappedDiff1
else
    mappedDiff2

// Plot 'mappedLine' in the main chart area conditionally
plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2)

// Calculate the 50EMA and 200SMA
ema50 = ema(close, 50)
sma200 = sma(close, 200)

// Plot the 50EMA and 200SMA on the main chart
plot(ema50, color=color.blue, title="50 SMA", linewidth=2)
plot(sma200, color=color.red, title="200 SMA", linewidth=2)

// Initialize trade variables
var bool waitingForBuy = na
var bool waitingForSell = na
var bool buyConditionMet = false
var bool sellConditionMet = false

if not sellConditionMet and crossunder(ema50, sma200)
    sellConditionMet := true
    waitingForBuy := false

if sellConditionMet 
    waitingForSell := true
    sellConditionMet := false

if waitingForSell and close < sma200 and mappedLine > 75
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForSell := false

// Define the strategy conditions and execute trades
if not buyConditionMet  and crossover(ema50, sma200)
    buyConditionMet := true
    waitingForSell := false

if buyConditionMet 
    waitingForBuy := true
    buyConditionMet := false

if waitingForBuy and close > sma200 and mappedLine < 25
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForBuy := false


Mehr