Die Strategie nutzt die Theorie der Gaussianer-Verteilung, berechnet den Z-Wert aus dem 10-periodischen Index-Moving-Average der Heckler-Reihe und setzt den Schwellenwert für den 20-periodischen Index-Moving-Average des Z-Wertes.
Berechnen Sie den 10-Perioden-Moving-Average des Heckelberg-Abschlusspreises.
Auf der Grundlage der oben genannten Moving Average-Daten werden die Z-Werte innerhalb von 25 Perioden berechnet. Die Z-Werte spiegeln die Standarddifferenz der Abweichung der Daten vom Mittelwert wider, um zu beurteilen, ob die Daten normal oder abnormal sind.
Der 20-periodische Index-Moving Average für die Z-Werte wird erneut berechnet und ergibt die Kurve emaScore. Diese Kurve spiegelt die langfristige Tendenz der Z-Werte wider.
Der EmaScore-Datenverteilung entsprechend werden die oberen und unteren Schwellenwerte gesetzt. Da die Kurve ein wenig schwanken kann, werden hier 90% und 10% der Datenverteilung als Schwellenwerte gewählt.
Wenn der EmaScore die Mittellinie oder die Untergrenze überschreitet, machen Sie mehr; wenn der EmaScore die Untergrenze, die Untergrenze oder den Höchststand in 100 Zyklen überschreitet, machen Sie nichts.
Durch Anwendung der Gaussianischen Verteilung kann die Normalität anhand von Z-Werten beurteilt und falsche Durchbrüche gefiltert werden
Doppelfilterung, Berechnung der exeScore-Kurve und Beurteilung des langfristigen Trends EXTENSIVE511.
Es wird eine angemessene Schwelle gesetzt, um die Wahrscheinlichkeit eines Fehlhandels zu verringern.
Das ist die einzige Möglichkeit, um eine Umkehrung zu erreichen, wenn man die höchsten und niedrigsten Punkte der 100er-Zyklus zusammenfasst.
Z-Werte werden in Kombination mit Moving Averages verwendet, sind parametersensibel und müssen optimiert werden.
Die Threshold-Einstellungen sind relativ groß, und zu breit oder zu schmal sind nicht gültig.
Die höchsten und niedrigsten Punkte der 100er-Zyklus sind leicht zu Fehlschlägen und können angemessen gelockert werden.
Die Helix-Küche selbst ist etwas zurückgeblieben und muss beurteilt werden, ob sie für diese Strategie geeignet ist.
Testung von Moving Averages für verschiedene Perioden, Z-Wert-Parameter.
Die Parameter werden mit Hilfe der Walk Forward Analysis automatisch optimiert.
Versuchen Sie mit verschiedenen Methoden, wie z. B. der Multiplikation der Standarddifferenz.
Die Logik der Höchst- und Tiefpunkt-Beschlüsse wurde verbessert, um falsche Signale zu vermeiden.
Versuchen Sie es mit anderen Arten oder mit typisch günstigen Alternativen wie Heckler.
Die Strategie basiert auf der Idee der Gauss-Verteilung, die durch die Doppel-Index-Bewegung der durchschnittlichen und dynamischen Schwellenwerte eingestellt wird, um effektiv zu beurteilen, die Preise sind abnormal und erzeugt ein Handelssignal. Der Hauptvorteil ist, dass die Filterung der falschen Durchbrüche, um die Umkehr zu erfassen. Aber die Einstellung der Parameter und die Verwendung von Kombinationen haben einen großen Einfluss auf die Ergebnisse, die weiterhin zu testen und zu optimieren, um die besten Parameter und Kombinationen zu finden.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
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/
// © jensenvilhelm
// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section.
//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)
// User can set the start date for the strategy
startDate = timestamp("2023 06 01")
// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)
// Function to calculate the Z-Score
z_score(_series, _length) =>
_mean = ta.sma(_series, _length)
_stddev = ta.stdev(_series, _length)
(_series - _mean) / _stddev
// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)
// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)
// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50)
// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)
// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)
// Plot highest and lowest EMA score lines
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)
// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)
// Execute trading logic based on conditions and after the start date
if (time >= startDate)
if longCon
strategy.entry("Long", strategy.long)
if shortCon
strategy.close("Long")
if addOn
strategy.entry("LongNR2", strategy.long)
if shortCon
strategy.close("LongNR2")
if shortCon
strategy.entry("Short", strategy.short)
if longCon
strategy.close("Short")