
Die Strategie basiert auf dem Ells-Fisher-Random Relative Dynamics-Index, der von John Ells in seinem Control Analysis Kit für Aktien und Futures entwickelt wurde. Die Strategie nutzt den Ells-Fisher-Index, um die relative Stärke von Aktien zu beurteilen und in Verbindung mit maßgeschneiderten Handelsregeln zu kaufen und zu verkaufen.
Die Strategie berechnet zunächst den Schließungspreis - den Eröffnungspreis, also den physischen Teil der Aktie. Dann wird der Hochpreis - der Niedrigpreis, also der Schattenlinie der Aktie, berechnet. Die Dynamik der Aktie wird berechnet, indem die beiden Teile separat addiert und gemittelt werden.
Anschließend wird die Erles-Fischer-Formel auf die RVI angewendet, um die Signalwerte zu erhalten. Wenn der Signalwert über dem Triggerwert liegt, wird der Triggerwert erhöht, wenn er unter dem Triggerwert liegt, wird der Triggerwert abgebrochen. Außerdem werden die Stand-Stop- und Tracking-Stop-Verluste eingestellt, um das Risiko zu kontrollieren.
Die Strategie nutzt die dynamischen Eigenschaften der Aktien und die Zufallsindikatoren, um die relative Stärke des Marktes zu beurteilen. Die Erles-Fischer-Indikatoren sind so konzipiert, dass sie die Auswirkungen von Geräuschen verringern und zuverlässige Handelssignale erzeugen. Der Dynamikindex spiegelt die Trends und Volatilität der Aktien selbst wider und ist ein dynamischer Indikator.
Im Gegensatz zu einem einzigen Einsatz von dynamischen oder zufälligen Kennzahlen verbessert die Strategie die Signalqualität durch eine organische Kombination von Kennzahlen und Modellen. Durch strenge Stop-Loss-Regeln wird die Strategie auch in der Lage, Risiken zu kontrollieren, wenn sie ihre Profitabilität gewährleistet.
Die Strategie beruht auf dem Ehrles-Fischer-Index, bei dem die Parameter des Indikators für neue Umstände optimiert werden müssen, wenn der Markt plötzlich stark verändert wird. Wenn die Parameter des Indikators nicht richtig eingestellt sind, entstehen falsche Signale oder Signalverzögerungen.
Darüber hinaus besteht ein gewisses Maß an Kurvenanpassungsrisiko für die Strategie selbst. Die Strategie kann stark abweichen, wenn sich die Marktumgebung im Test- und im Live-System stark verändert. In diesem Fall müssen die Strategieparameter angepasst oder die Handelsregeln optimiert werden, um sich an neue Marktbedingungen anzupassen.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Optimierung der Parameter des Ehrers-Fischer-Indikators, um ihn empfindlicher zu machen oder um ihn zu filtern.
Die Modellierung von Indikatoren mit Hilfe von Machine Learning-Algorithmen wie LSTM erzeugt zuverlässigere Handelssignale.
Die Stop-Loss-Distanz wird dynamisch angepasst, in Kombination mit Marktschwankungen wie dem ATR.
Erhöhung der Unterstützung für Multi-Factor-Modelle, Integration anderer technischer und grundlegender Indikatoren zur Verbesserung der Signalqualität.
Optimierung der Positionseröffnungslogik, Einstellung dynamischer Ausstiegsbedingungen. Einführung von Adaptive Stop-Loss- und Stop-Stop-Technologien
Die Strategie nutzt die Ells-Fischer-Random-Relativdynamik-Index-Indikatoren, um Markttrends und -Schwächen zu beurteilen und ein vernünftiges Stop-Loss-Mechanismus-Kontrollrisiko einzurichten. Im Vergleich zu einem einzigen Indikator bietet die Strategie eine organische Kombination aus mehreren Indikatoren und Modellen, die ein hochwertiges Signal liefern, um den Lärm zu filtern. Die Strategie kann durch Parameteroptimierung, Modellverschmelzung und Anpassung weiter verbessert werden.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ehlers Fisher Stochastic Relative Vigor Index Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
p = input(10, title = "Length")
FisherStoch(src, len) =>
val1 = stoch(src, src, src, len) / 100
val2 = (4 * val1 + 3 * val1[1] + 2 * val1[2] + val1[3]) / 10
FisherStoch = 0.5 * log((1 + 1.98 * (val2 - 0.5)) / (1 - 1.98 * (val2 - 0.5))) / 2.64
CO = close - open
HL = high - low
value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6
num = sum(value1, p)
denom = sum(value2, p)
RVI = denom != 0 ? num / denom : 0
signal = FisherStoch(RVI, p)
trigger = signal[1]
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
barsSinceEntry := 0
if ((crossover(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossunder(signal, trigger))) and abs(signal) > 2 / 2.64
strategy.entry("Long", strategy.long)
barsSinceEntry := 0
if ((crossunder(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossover(signal, trigger))) and abs(signal) > 2 / 2.64
strategy.entry("Short", strategy.short)
barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
strategy.close_all()
barsSinceEntry := 0
hline(0, title="ZeroLine", color=gray)
signalPlot = plot(signal, title = "Signal", color = blue)
triggerPlot = plot(trigger, title = "Trigger", color = green)
fill(signalPlot, triggerPlot, color = signal < trigger ? red : lime, transp = 50)