Dienstag, 16. April 2024, 18:15 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Kai Jonten

unregistriert

1

Freitag, 27. November 2020, 16:54

Arrays in den Globalen Datenspeicher schreiben??? Geht das?

Hallo an Alle,
trotz ausgiebiger Suche im Forum habe ich bis jetzt keine Antwort auf meine Frage gefunden. Falls jemand einen Verweis auf eine Stelle im Forum kennt, die ich übersehen habe, dann Asche über mein Haupt, aber sagt mir bitte wo ich die Antwort finde. ...

... zur Vorgeschichte: Ich programmiere meine Abfragen und teilweise auch selbstentworfene Indikatoren mittlerweile fast ausschließlich in Investox-VB-Script. Damit bin ich bisher auch sehr zufrieden und komme auch gut zurecht.
Einzelne Werte schreibe ich auch schon mal in den Globalen Datenspeicher, und greife dann von einem parallel laufenden Indikator wieder darauf zurück.

Leider habe keine Ahnung wie man da ein Array hinein schreibt (in den Globalen Datenspeicher), bzw. ob das überhaupt geht. Wie gesagt, mit einzelnen Werten habe ich kein Problem.
Ich weiß, dass man in Handelssystemen Globale Variablen deklarieren und auch mit Arrays belegen kann. Aber geht das auch im Globalen Datenspeicher, ohne ein Handelsystem?
Warum ich das möchte. Nun, es wäre praktisch, wenn ich eine Datenreihe, die man für mehrere Indikatoren braucht nicht jedesmal neu berechnen lassen müsste, sondern sie einmal als Array in den Globalen Datenspeicher schreiben und dann jeweils wieder darauf zugreifen könnte.
Nehmen wir mal folgendes, wenn auch wenig nützliches, aber doch konkretes Beispiel:

(alle) Highdaten plus den Wert 10 (ergibt so ein Band oberhalb der Highs, und ja, das macht natürlich wenig Sinn, ist nur als Beispiel gedacht) in ein Array im Globalen Datenspeicher schreiben und wieder auslesen
Und nochmals: ich weiß, dass das mit, in einem Handelssystem definierten, Globalen Variablen geht. Ich möchte hier wissen, ob ich ein Array auch direkt in den Globalen Datenspeicher, ohne Umweg über eine Handelssystem, schreiben kann, und, wenn ja, wie.
Wäre einfach praktischer, wenn man einen Indikator dann einfach in den Chart ziehen könnte, statt erst ein Handelssystem anzulegen.
Vielleicht weiß jemand Rat
Danke
Kai

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

2

Freitag, 27. November 2020, 22:02

Hallo Kai

Willkommen im Investox Forum!

... wie man da ein Array hinein schreibt (in den Globalen Datenspeicher), bzw. ob das überhaupt geht.

Da gibt's ein Beispiel in der Investox-Hilfe, such mal nach "Datensynchronisierung mit VBScript".

Das Schreiben eines Arrays z.B. sieht lt. Investox Hilfe recht elegant so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Scriptberechneformel "macd(close)", A

GetDatum B

if GlobalData.KeyExists("macd") then

  GlobalData("macd")= Array(A, B)

else

  GlobalData.add "macd", Array(A, B)

end if


Aber geht das auch im Globalen Datenspeicher, ohne ein Handelsystem?

Wenn Du das VBScript als Indikator definiert hast und dann direkt in einem Chart einbindest, also auch ohne ein Handelssystem, sollte es gehen. Dort ist ja der Kontext zu den Titeldaten gegeben.

Im Prinzip kannst Du VBScripts auch aus dem Aufgaben-Manager heraus ausführen, z.B. beim Investox Programstart.

Die Investox-Hilfe merkt dazu an:

Zitat

Eine in VBScript definierte Berechnung ausführen: Mit dieser Aufgabe können Sie ein VBScript ausführen lassen. Ein möglicher Einsatz ist zum Beispiel das Initialisieren von Daten im globalen Datenspeicher von VBScript beim Programmstart. Zu beachten ist, dass bei VBScripts aus dem Aufgaben-Manager keine Titeldaten und kein Ergebnisfeld zur Verfügung stehen.


Wäre einfach praktischer, wenn man einen Indikator dann einfach in den Chart ziehen könnte, statt erst ein Handelssystem anzulegen.

Hier sehe ich den Zusammenhang nicht; dafür braucht es den Globalen Datenspeicher nicht, Du kannst doch jeden Indikator einfach "in den Chart ziehen", ohne ein Handelssystem hinten dran.
Gruss
Bernd

Kai Jonten

unregistriert

3

Samstag, 28. November 2020, 22:35

Hallo Bernd,
erstmal danke für Deine Hilfe.
Den Hinweis aus der Investox Hilfe hatte ich schon gesehen. Deine Anmerkungen haben mir trotzdem weitergeholfen.

Mein Problem war wohl, dass ich Arrays "manuell" gestrickt hatte, also so etwas: Wert(1),Wert(2),Wert(3).... usw., einzeln über eine Schleife erzeugt.
Das funktioniert ganz gut, wenn man anschließend direkt ein Ergebnis aus einem solchen Array ausgeben kann. Wenn man dies allerdings zwischendurch abspeichern muss, weil man von woanders darauf zurückgreifen möchte....


...also war die Überlegung solch ein Array in den globalen Datenspeicher packen..... War wohl kein so schlauer Gedanke.




Nun, inzwischen haben mich einige weitere Denkanstöße auf den wohl richtigen Weg gebracht. Man muss mit ScriptBerechneFormel ein Datenfeld erzeugen (ist ja auch eine Form eines Arrays), dieses synchronisiert man mit den Zeitstempeln und packt es dann in den Globalen Datenspeicher. Von dort kann man dann die Daten wieder auslesen. So funktioniert es jetzt.

Hätte ich auch gleich drauf kommen können, aber manchmal steht man halt auf der Leitung.

Nochmals vielen Dank

Gruß Kai