Capital-City
Mitglied seit 11 Jahre 2 Monate
* Metastock 8.0 Pro: Gewichteter Index mit MS-Security Data Function ?
Hallo allerseits,
ich möchte mit der Security Data Function von Metastock 8.0 Pro gerne eigene, gewichtete Indices entwickeln. Leider bin ich in der Programmierung nicht so bewandt. Kann mir jemand bei der Umsetzung des untenstehenden Beispiels helfen ?
Beispiel-Index, bestehend aus
Rohstoff 1 40%, Rohstoff 2 35%, CRB-Index 25%,
zusammengefasst in einem Index
Vielen Dank schon jetzt
und Gruss
C-C
Geschrieben von Capital-City
am
Am einfachsten ist es wohl, du definierst es dir als Indikator.
-------------------------------------------------------------------
myIndex := Security("Rohstoff1",C)*0.4 + Security("Rohstoff2",C)*0.35 +Security("CRB",C)*0.25;
myIndex
------------------------------------------------------------------
So ganz das Gewünschte ist dies aber nicht, weil der Index jetzt nur als Indikator und nicht als Security selbst zur Verfügung steht.
Dafür ist der Downloader zuständig, dort kann man neue Securities aus bereits vorhandenen zusammen setzen und dabei gewichten. Downloader -> New -> Composite. Das ist allerdings auf zwei Securities beschränkt, zumindest in meiner Version. Eine mehrstufige Definition kann ich leider auch nicht vornehmen, da eine composite Security nicht als Input für die Definition angeboten wird. Aber vielleicht geht das ja in 8.0, einfach mal ausprobieren.
Viel Erfolg
Bernd Kürbs
Hallo,
das Vorhaben ist in der Realität i.d.R. sehr schwer mit zufriedenstellenden Ergebnissen umzusetzen, da es eine Reihe von "Knackpunkten" gibt:
Die einfache Addition von den Indizes funktioniert auf Grund der oft sehr unterschiedlichen Handelszeiten meistens nur auf EOD Basis, die Kurve dieses Indikators liefert auf die von Bernd dargestellte Weise nur eine Close (O,H oder L) Linie. Bei der simplen Addition kann es zu erheblichen Verschiebungen kommen, wenn die unterschiedlichen Underlyings stark voneinander abweichende Preise haben. Wenn Sec 1 1000 Punkte, Sec 2 50 Punkte und Sec 3 nur 1 Punkt hat, dann erhält man kaum das gewünschte Resultat.
Es ist daher zu überlegen, ob man nicht den Umweg über Excel macht: Man schreibt eine Exploration mit O,H,L und C mit allen Indizes, die man für einen neuen Indes haben möchte, überlegt sich eine intelligente Gewichtung und speichert das Ergebnis dann als neuen Index ab. Alternativ könnte man die Daten auch per DDE in MS als Indikator nutzen.
Zunächst möchte ich mich bei Bernd Kuerbs und Metatrader für ihre Bemühungen bedanken.
Erst durch die gegebenen Antworten ist mir klar geworden, dass ich mich bei meiner Fragestellung unklar ausgedrückt habe.
Selbstverständlich ist mir bewusst, dass mein Vorhaben, die Bildung eines eigenen Indexes aus verschiedenen Rohstoffen, in Real-Time der unterschiedlichen Handelszeiten wegen nicht realistisch sein kann. So schwebt mir bei den Rohwaren auch nur eine EoD Lösung vor. Anders sieht es hingegen bei den Devisen aus. Hier könnte ich mir den Nutzen auch in Real-Time vorstellen.
Der Ansatz von Bernd Kürbs scheint meinen Vorstellungen schon sehr nahe zu kommen. Allerdings wäre ich sehr dankbar, eine Formel für die "Security-Data-Function" von MS-8.0 pro zu bekommen, die folgendem Bedürfnis Rechnung trägt:
Ausgangs-Punkt (kann Jahre zurückliegen) ist ein Index-Stand von 100 oder 1000
Nachfolgende Aufstellung wäre dann das Basis-Material zur Veränderung des Indexes.
Rohstoff 1: Veränderung zum Vortag in %-Punkten / 40 % Gewicht am Index
Rohstoff 2: Veränderung zum Vortag in %-Punkten / 35 % Gewicht am Index
Rohstoff 3: Veränderung zum Vortag in %-Punkten / 15 % Gewicht am Index
Rohstoff 4: Veränderung zum Vortag in %-Punkten / 10 % Gewicht am Index
Das Gesamtergebnis der %-Punkte zu meinem Index hinzugefügt, ergibt den aktuellen Stand des gewünschten Indexes.
Beispiel: Vortages-Index Stand = 100.0000
Rohstoff 1: Veränderung gegenüber Vortag + 1.20% x 0,40 = + 0.4800
Rohstoff 2: Veränderung gegenüber Vortag + 0.75% x 0,35 = + 0.2625
Rohstoff 3: Veränderung gegenüber Vortag + 2.25% x 0,15 = + 0.3375
Rohstoff 4: Veränderung gegenüber Vortag + 0.60% x 0,10 = + 0.0600
Total = + 1.1400
Neuer Index-Stand = 100.0000 + 1.1400 = 101.1400
Könnt ihr mir bei der Umsetzung helfen ?
Vielen Dank
und Gruss
Capital-City
Die Addition von prozentualen Veränderungen wird nicht funktionieren. Ein einfaches Beispiel.
Index A
100 ->50->25->50 Veränderung in %: -50% -50% +100%
Index B
100->200->400->200 Veränderung in %: +100% +100% -50%
Wenn du jetzt die prozentualen Veränderungen addierst ergibt das immer +50%.
Index (A+B)
200->250->425->250 Veränderung in%: +25% +75% -40%
Wenn du also an %tualen Veränderungen interessiert bist, solltest du den zusammengesetzten Index wie vorgeschlagen definieren. Wenn du dann die Veränderung von einem bestimmten Stichtag zu heute wissen willst, reicht es eigentlich, den Index durch den Wert an diesem Stichtag zu teilen.
Beispiel: Du hast den Indikator so angelegt, dass er am 1.1.1999 mit dem Wert 100 startet. Wenn er denn heute bei 400 steht, hat er seit dem 1.1.1999 eben einen Zuwachs von 300%. Wenn du jetzt den Zuwachs seit dem 1.1.2003 wissen willst, nimmst du halt den Wert vom 1.1.2003, sagen wir 200, und definierst einen neuen Index := (myIndex/200)*100. Dann steht dieser Index heute bei 200 und der Zuwachs seit dem 1.1.2003 ist eben 100%.
So erhälst du zwar für jeden Stichtag einen eigenen Indikator, aber die kann man in einem Fenster darstellen und erhält so einen recht guten Überblick über die verschiedenen Veränderungen.
Viel Spaß beim Ausprobieren, Samstag solls ja regnen.
Bernd Kürbs
Hallo,
man könnte Dein Vorhaben am einfachsten so umsetzen, kleines Beispiel anbei:
Schritt 1:
Exploration mit einem Feld Ref(C,-1) basteln, die gewünschten Indizes aufnehmen und laufen lassen, das Ergebnis in Excel kopieren (Hinweis: Durch die Exloration erhält man am einfachsten die Ticker und Verzeichnisse für die Security Funktion).
Schritt 2:
In Excel zwei Spalten in das Ergebnis einfügen, einmal die Gewichtung als Konstante und einmal den Normierungsfaktor, der sich durch =(100/B2)*C2 ermitteln lässt (Bsp. für 2 Zeile).
Schritt 3:
Mit den so gewonnenen Ergebnissen wieder zurück nach MS, den Indikator Builder öffnen und den Index erzeugen, für das Beispiel ergeben sich die folgenden Formeln:
MyIndex 1
(Security("C:\MSData\US Sektor\GOX.X",C)*0.274172912) +
(Security("C:\MSData\US Sektor\HUI.X", C)*0.314490133)+
(Security("C:\MSData\US Sektor\XAU.X", C)*0.520988389)+
(Security("C:\MSData\US Sektor\OIX.X", C)*0.040600893)
MyIndex 2
(Security("C:\MSData\US Sektor\GOX.X",C)*0.274172912) +
(Security("C:\MSData\US Sektor\HUI.X", C)*0.314490133)+
(Security("C:\MSData\US Sektor\XAU.X", C)*0.520988389)+
(Security("C:\MSData\US Sektor\OIX.X", C)*0.040600893)
Man sieht an der Differenz und der Performance, das es nicht unerheblich ist, wie die Indizes zusammengestellt werden.
Bei Realtime Indizes muss man in der Security Funktion mit der Online Variable arbeiten:
(Security("ONLINE:GOX.X",C)*0.274172912) +
(Security("ONLINE:HUI.X", C)*0.314490133)+
(Security("ONLINE:XAU.X", C)*0.520988389)+
(Security("ONLINE:OIX.X", C)*0.040600893)
Ich möchte mich bei Metatrader und Bernd Kürbs für die Tipps bedanken. Ich habe erst in der kommenden Woche Urlaub und werde mir dann die Zeit nehmen, mit euren Vorschlägen zu experimentieren.
@ Bernd Kürbs: Bei uns hat es am Samstag nicht geregnet und ich war fast den ganzen Tag in meinem Garten. Leider wächst aber zu wenig, um meine Ernte an den internationalen Rohwaren-Märkten zu verkaufen. Bestenfalls könnte ich das Unkraut anbieten, nur will das leider keiner kaufen. Ein Kurssturz wäre somit vorprogrammiert; mit oder ohne selbstgebauten Index.
Herzlichen Dank und Gruss
Capital-City