Dienstag, 16. April 2024, 20:41 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Backe

unregistriert

1

Freitag, 31. Januar 2003, 20:34

Parabolic variante

Hallo allerseits!

Ich wollte mir mal einen veränderten Parabolic programmieren, aber es geht nicht so recht.

Mal als Beispiel: close schneidet den Parabolic von unten nach oben

der Parabolic soll aber nur nachgezogen werden wenn der close ein neues 5 Tage Hoch macht

wenn nicht bleibt der Parabolic auf dem Wert den er hatte als der close das letzte 5 Tage Hoch markiert hat

solange bis entweder ein neues 5 Tage hoch gebildet wird oder der close den parabolic kreuzt

Vielleicht hat einer eine Idee

Gruß Backe

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

2

Samstag, 1. Februar 2003, 02:41

Hallo Backe !
mir ist dazu auf die Schnelle folgendes eingefallen:

{5 Tages-Hoch}
calc 5dayhigh: If(close>=HHV(Close, 5),1,0);

{Parabolic, der sich nur bei Vorliegen eines neuen 5-Tages Hochs auf Schlusskursbasis ändert}
calc Para: If(5dayhigh=1, SAR(Close, 0.05, 0.5), ValueWhen(SAR(Close, 0.05, 0.5), 5dayhigh =1,1,V));

{Schnittpunkt des Schlusskurses mit dem 5-Tages Hoch Parabolic}
Cross(close,Para,1)=1

Meintest Du sowas ?
Viele Grüße von Anke

http://www.ascunia.de

Fritz

unregistriert

3

Samstag, 1. Februar 2003, 13:31

Hallo Wiwu,

zu

calc 5dayhigh: If(close>=HHV(Close, 5),1,0);

eine kleine Anmerkung.

close kann nicht > HHV(close, 5) sein.
Es reicht also die einfache Schreibweise:

close=HHV(close, 5) aus. If..... ist hier nicht nötig.

Grüße Fritz

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

4

Samstag, 1. Februar 2003, 16:05

Hallo Fritz !
Du hast völlig recht- es war halt heute morgen noch ein wenig früh (bzw. spät-wie man es nimmt :)) ). Die Unschönheit in der Formel ist mir selbst auch noch aufgefallen - da war aber mein Computer schon aus und ich hab es nicht noch einmal korrigiert.
Trotzdem danke für den Hinweis und ein schönes WE.
Viele Grüße von Anke

http://www.ascunia.de

Backe

unregistriert

5

Samstag, 1. Februar 2003, 16:08

Re

Hallo!

Danke für Eure Hilfe, habs nach langem Kampf hinbekommen.

calc al: If(HHV(close,z) > Ref(HHV(close,z),-1) and close > ValueWhen(SAR(close,s,m), LLV(close,z) < Ref(LLV(close,z),-1), 1, V), 1, 0);
calc as: If(LLV(close,z) < Ref(LLV(close,z),-1) and close < ValueWhen(SAR(close,s,m), HHV(close,z) > Ref(HHV(close,z),-1), 1, V), 1, 0);

calc w: If(BarsSince(al=1, 1)<BarsSince(as=1, 1),1,0);

calc bl: If(al+as=0 and w=1,1,0);
calc bs: If(al+as=0 and w=0 ,1,0);

calc wal: If(al=1, SAR(close, s, m), 0);
calc was: If(as=1, SAR(close, s, m), 0);

calc wbl: If(bl=1, ValueWhen(SAR(close, s, m), al=1, 1, V), 0);
calc wbs: If(bs=1, ValueWhen(SAR(close, s, m), as=1, 1, V), 0);


wal+was+wbl+wbs





Parameter z:= Zeitraum für HHV/LLV (5)
s:= Schrittweite des SAR (0,05)
m:= Maximum (0,2)

Gruß Backe

Hans-Jürgen Männlich

Administrator

Registrierungsdatum: 10. Juli 2002

Beiträge: 1 712

6

Samstag, 1. Februar 2003, 18:57

Hallo Backe,
ich hab mir deinen Parabolic mal vorgenommen und ihn auf Optimierungsmöglichkeiten durchsucht. Es gab ja schon oft eine Diskusion über Optimierung von Code, vor allem bei Intraday-System.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
calc HHV: HHV(close, z);
calc LLV: LLV(close, z);
calc SAR: SAR(close,s,m);

calc al: HHV > Ref(HHV,-1) and close > ValueWhen(SAR, LLV < Ref(LLV,-1), 1, V);
calc as: LLV < Ref(LLV,-1) and close < ValueWhen(SAR, HHV > Ref(HHV,-1), 1, V);

calc w: BarsSince(al=1, 1) < BarsSince(as=1, 1);

calc bl: al+as=0 and w=1;
calc bs: al+as=0 and w=0 ;

calc wal: If(al=1, SAR, 0);
calc was: If(as=1, SAR, 0);

calc wbl: If(bl=1, ValueWhen(SAR, al=1, 1, V), 0);
calc wbs: If(bs=1, ValueWhen(SAR, as=1, 1, V), 0);

wal+was+wbl+wbs


Wie man unschwer erkennen kann sind Berechungen von LLV und HHV von jeweils 4 auf 1 zurückgegangen. Beim SAR konnte sogar von 6 auf 1 reduziert werden. Durch die Verwendung von calc wird nur 1mal berechnet, später kann über die Verwendung des VariablenNamen auf die berechnete Zeitreihe zugegriffen werden. Einige der IF-Bedingungen sind nicht erforderlich. Bedingungen wie al+as=0 and w=1 ergeben als Ergebnis entweder 1 (wenn die vollständige Bedingung erfüllt ist) oder 0 (wenn ein Teil der Bedingung nicht erfüllt ist). If ist somit nicht nötig.

Bitte nicht als Belehrung oder gar als Kritik verstehen, ich dachte mir nur, dass dieses Beispiel vielleicht für einige eine Anregung sein könnte Programmcode in zeitkritischen Systemen zu überprüfen.

Noch ein Tipp für Investox-Neulinge:
falls man die Formelergebnisse von mit calc berechneten Zeitreihen in ENTER- und EXIT-Bedingungen verwenden möchte, legt man die Berechnungen im Definitionsbereich des HS ab.
Viele Grüße,
Hans-Jürgen

Backe

unregistriert

7

Samstag, 1. Februar 2003, 21:22

Re Verbesserung

Hallo Hans Jürgen!

Natürlich freue ich mich über die Tips. Es ist schon besser wenn man sich gleich einen schlanken Formelaufbau angewöhnt.

Dank und Gruß Backe

Backe

unregistriert

8

Dienstag, 4. Februar 2003, 07:40

RE: Re Verbesserung

Hallo!

Es hatte sich noch ein kleiner Fehler eingeschlichen. Jetzt sollte es stimmen.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
calc HHV: HHV(c, z);
calc LLV: LLV(c, z);
calc SAR: SAR(c,s,m);

calc al: HHV > Ref(HHV,-1) and c > ValueWhen(SAR, LLV < Ref(LLV,-1), 1, V) and c > sar;
calc as: LLV < Ref(LLV,-1) and c < ValueWhen(SAR, HHV > Ref(HHV,-1), 1, V) and c < sar;

calc w: BarsSince(al=1, 1) < BarsSince(as=1, 1);

calc bl: al+as=0 and w=1;
calc bs: al+as=0 and w=0 ;

calc wal: If(al=1, SAR, 0);
calc was: If(as=1, SAR, 0);

calc wbl: If(bl=1, ValueWhen(SAR, al=1, 1, V), 0);
calc wbs: If(bs=1, ValueWhen(SAR, as=1, 1, V), 0);

wal+was+wbl+wbs


Als zus. Variable kommt noch c dazu. Standart = close.

Hier im Vergleich mit einem normalen Parabolic SAR (rot)dargestellt

http://people.freenet.de/backe/ParabMod.jpg


Gruß Backe

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Backe« (4. Februar 2003, 07:57)