Donnerstag, 18. Oktober 2018, 08:17 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 392

1

Montag, 5. Februar 2007, 10:20

Zero Lag Exponential Moving Average

Guten Tag,

ich versuche, den ZLeMA zu codieren (NumPer ist eine Konstante):

calc K: 2/(NumPer - 1);
calc lag: (NumPer - 1) / 2;
ZLeMA = K * ( 2 * close - Ref(close,-lag) ) + (1-K) * Pref

Die Fehlermeldung lautet, dass ref() einen festen Parameter verlangt, also die Berechnung lag nicht als Input akzeptiert.

Was kann man da machen?

Viele Grüße
Cornelius

Udo Männlich

Vize-Administrator

Registrierungsdatum: 30. August 2002

Beiträge: 8 155

Wohnort: Trade-Planet

2

Montag, 5. Februar 2007, 11:12

Hallo,

die Formel ergibt so (direkt aus der geposteten Formel übernommen) leider keinen brauchbaren Wert für den ZLGd:

const NumPer:10;// Deine Konstante einsetzen
calc K:2/(NumPer - 1);
calc lag:(NumPer - 1)/2;
calc ZLeMA:(K*(2*close)-RefVar(close,-lag))+(1-K)*Prev ;
ZLeMA


Hier zum testen meine Variante für ZERO LAG GD:

Const Glättung:10;
calc EMA1: GD(CLOSE, Glättung, E);
calc EMA2: GD(EMA1, Glättung, E);
calc Difference: EMA1 - EMA2;
calc ZeroLagEMA: EMA1 + Difference;
ZeroLagEMA

Beide Formeln können kopiert und in INV eingefügt werden. Idealerweise legt man diese Formeln als "eigenen Indikator" an. Falls Du damit Probleme
hast Frage einfach noch mal nach!
Happy Trading

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 392

3

Montag, 5. Februar 2007, 11:43

Hallo Udo,

danke für Deine schnelle Antwort!

Ich habe meine Syntaxfehler korrigiert und es mit RefVar() versucht:

calc K: 2/(NumPer - 1);
calc lag: (NumPer - 1) / 2;
calc ZLeMA: K * ( 2 * close - RefVar(close,-lag) ) + (1-K) * Prev;
ZLeMA

Jetzt klappt es!

Herr Knöpfel, ist es möglich, die rekursive Berechnung mit Prev noch zu beschleunigen? Sie ist WIRKLICH sehr langsam.

Grüße
Cornelius

Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 568

4

Montag, 5. Februar 2007, 12:47

Hallo,

etwas schneller geht es immerhin, wenn #_FastPrev# eingesetzt wird und in der Prev-Zeile möglichst wenig berechnet werden muss, also:

#_FastPrev#
const NumPer: 20;
calc K: 2/(NumPer - 1);
calc lag: (NumPer - 1) / 2;
calc AktWert: 2 * close - RefVar(close,-lag);
calc ZLeMA: K*AktWert + (1-K) * Prev;
ZLeMA


Viele Grüße
Andreas Knöpfel

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 392

5

Montag, 5. Februar 2007, 14:07

Ja, jetzt geht es merklich schneller (halbwegs erträglich ;-).

Vielen Dank für Ihre schnellen Antworten, Herr Knöpfel! Sie haben mir wirklich weitergeholfen.

Grüße
Cornelius

Manfred Wahl

unregistriert

6

Dienstag, 6. Februar 2007, 11:10

Hallo Cornelius,

ich denke, daß es noch viel schneller geht. Probier mal folgendes aus:

Die Gleichung "ZLeMA: K*AktWert + (1-K) * Prev" entspricht der Formel des Exponentiellen gleitenden Durchschnitts:

ZLeMA: GDExpVar(AktWert, NumPer-2);

.....und das der Lösungsweg:

Gleichung des Exp.Durchschnitts (siehe Investox Doku)
... K=2/(1-Perioden)
aufgelöst nach Perioden ergibt dies:
... Perioden=2/K -1
setzt man jetzt Deine Gleichung für K ein:
... Perioden=2/( 2/(Numper-1) ) -1
läßt sich dies vereinfachen zu:
... Perioden=NumPer -2
und das kann man jetzt in die Formel für GDExpVar einsetzten.

Durch diesen Trick kann man oft eine einfache Rekursion beschleunigen.

Gruß Manfred

PS: Den konkreten Fall habe ich nicht getested - sollte aber so funktionieren.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Manfred Wahl« (6. Februar 2007, 11:13)


222

Benutzer

Registrierungsdatum: 9. Juli 2003

Beiträge: 63

7

Mittwoch, 19. Februar 2014, 11:31

Hallo Investoxgemeinde (u. v. a. Ascunia ;-),

kann man diesen Indikator auch in VBS ohne FastPrev schreiben?

Mir gelingt es leider nicht!

(Warte auch auf eine Ergänzung zur Investox-Formel-Sprache speziell für VBS)

Vielen Dank im Voraus

222

Wiwu Weiblich

Meister

Registrierungsdatum: 4. September 2002

Beiträge: 1 638

Wohnort: Neuenhagen b. Berlin

8

Mittwoch, 19. Februar 2014, 14:46

Hallo 222,

man könnte den Indikator natürlich auch in VBS schreiben, um das FastPrev aus dem Code zu eliminieren.
Einfacher ist aber m.E. die Lösung von Manfred Wahl:

Quellcode

1
2
3
4
5
6
const NumPer: 20;
calc K: 2/(NumPer - 1);
calc lag: (NumPer- 1) / 2;
calc AktWert: 2 * close - RefVar(close,-lag);
calc ZLeMA: GDExpVar(AktWert, NumPer-2);
ZLeMA
Viele Grüße von Anke

http://www.ascunia.de

222

Benutzer

Registrierungsdatum: 9. Juli 2003

Beiträge: 63

9

Mittwoch, 19. Februar 2014, 15:11

Hallo Anke,

herzlichen Dank! Natürlich so gehts auch. :thumbup:

Viele Grüße
222