Freitag, 19. April 2024, 01:30 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.

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

1

Montag, 14. September 2009, 17:37

Suche Lösung für: Open,High,Low,Close-BasisKursreihen bei Anbruch einer neuen Periode in ein Textfile exportieren

Hallo,

wenn man im Chart einen Datenreihe markiert, rechte Maustaste & Kopieren, dann kann man einmalig über die Zwischenablage die Datenreihen mit Datum und Uhrzeit ganz leicht in ein Textfile exportieren. Die Textdatei kann man mit einem externen Programm öffnen, z.B. Java, Python oder einer anderen Programmiersprache und diverse Berechnungen anstellen. Aber leider nur einmalig, d.h. man muß jedesmal händisch aktiv werden.

Mir geht es um eine fortlaufende Parameterübergabe der Basiskursdaten an ein externes Java-Programm über die Dateischnittstelle, ohne das ein manueller Eingriff meinerseits notwenig ist.

Damit das ganze automatisiert ablaufen kann, müsten die Basiskursdaten regelmäßig, immer zum Open der nächsten Periode, in ein File geschrieben werden. Hat jemand vielleicht eine Idee wie man das bewerkstelligen kann?

Danke.

Viele Grüße
Torsten

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

2

Montag, 14. September 2009, 17:57

Hallo Torsten

So als Idee fällt mir ein, Du könntest die gewünschten Werte einem VBScript Indi übergeben, welches analog dem VBScript Beispielcode codiert ist (dort sind ja eigentlich alle wesentlichen Elemente Deiner Anforderung schon drin, Fileschreiben). Als Ergebnis() gibst Du irgendwas zurück, z.B. 1, denn darauf kommt es Dir ja nicht an.

Dann chartest Du den Indi über Formel einfügen zusammen mit dem Schlüsselwort #_AktPerPeriode#, und nun sollte immer zum Open Dein Indi aufgerufen werden und dadurch die Datei ergänzen.
Gruss
Bernd

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

3

Sonntag, 20. September 2009, 02:16

Hallo,

ich bin soweit gekommen:

Zitat


...
''2) Wert in Textdatei speichern:
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile( dirName & "\" & fileDataName, 8, True) '8..ForAppending

For i = Startindex To EndIndex
Ergebnis(i)=Daten(i) 'das was ins File geschrieben, kommt auch per return zurück
filetxt.WriteLine(Now & chr(9) & cstr(Daten(i))) 'Uhrzeit und Daten speichern
next
filetxt.Close


Ins File geschrieben wird:

Zitat


20.09.2009 02:03:27 100
20.09.2009 02:03:27 101
20.09.2009 02:03:27 102
20.09.2009 02:03:27 103
20.09.2009 02:03:27 104
20.09.2009 02:03:27 105
20.09.2009 02:03:27 106
20.09.2009 02:03:27 107


Aber das Datum und die Zeit ist die aktuelle, wo das File geschrieben wird, wegen 'Now'.
Ich möchte aber das Datum & Uhrzeit so haben, wie es original in Investox angezeigt wird, d.h. so:
18.09.2009 08:00:00 100
18.09.2009 09:00:00 101
18.09.2009 10:00:00 102
18.09.2009 11:00:00 103
...

wie der originale Zeitstempel ist.

Wie könnte man das korrekt mit dem richtigen Zeitstempel umzusetzen?

Danke.

Viele Grüße
Torsten

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

4

Sonntag, 20. September 2009, 09:56

Du hast das File schön für Appending aufgemacht, aber dann appendest mit Deiner Schleife bei jedem Aufruf die Ganze Suppe ans File. Als Ergebnis müsste Dein File auch ganz hübsch wachsen bei jedem Durchlauf

Lass die Schleife mal nur für die Rückgabe an den Chart so stehen (so als optische Erfolgskontrolle), aber schreibe immer nur den letzten Wert raus mit GetDatum (siehe INV VBSCript Doku Sonderfunktionen)!
Gruss
Bernd

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bernd« (20. September 2009, 10:18)


sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

5

Sonntag, 20. September 2009, 18:45

Hallo Bernd,

Zitat

Du hast das File schön für Appending aufgemacht, aber dann appendest mit Deiner Schleife bei jedem Aufruf die Ganze Suppe ans File. Als Ergebnis müsste Dein File auch ganz hübsch wachsen bei jedem Durchlauf.

Ja, so ist es. Aber das läßt sich leicht lösen mit "2..ForWriting".

Zitat

aber schreibe immer nur den letzten Wert raus

Ich brauche die komplette Zeitreihe im File, damit auch ein Backtest später möglich ist mit der externen Berechnung. Das schreiben der kompletten Zeitreihe geht fix, das ist von der Geschwindigkeit okay.

Zitat

mit GetDatum (siehe INV VBSCript Doku Sonderfunktionen)!

Da habe ich ein Problem, in der Doku heist es dazu:

Zitat

Mit der Funktion GetDatum erfolgt der Zugriff auf die Zeitstempel der Daten.
GetDatum Datumfeld
Dabei ist „Datumfeld“ eine zuvor definierte Variable.
Beispiel:
Dim Datumfeld
GetDatum Datumfeld
„Datumfeld“ enthält nun die Zeitstempel als Folge von Double-Werten.


und das ganze sieht dann so aus:

Zitat


40056,3340277778 100
40056,3347222222 101
40056,3354166667 102
40056,3361111111 102
40056,3368055555 103
...


Ich benötige die Zeitangabe aber als String, d.h. so "18.09.2009 08:00:00".

Es sieht nicht so aus, dass man statt "Double-Werte" auch Stringwerte über die Funktion ausgeben könnte.
Hat jemand vielleicht eine Idee.

Viele Grüße
Torsten

PS:
Der relevante Codeteil sieht so aus:

Zitat

...
Dim datumFeld
GetDatum datumFeld '„datumFeld“ enthält nun die Zeitstempel als Folge von Double-Werten.

For i = Startindex To EndIndex
Ergebnis(i)=Daten(i) 'das was ins File geschrieben, kommt auch per return zurück
filetxt.WriteLine(cstr(datumFeld(i)) & chr(9) & cstr(Daten(i))) 'Daten, Uhrzeit und Wert in FileZeile speichern
next
...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »sten« (20. September 2009, 19:20)


Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

6

Sonntag, 20. September 2009, 21:02

Was passiert, wenn Du den Timestamp erst in ein Datum umwandelst mit CDate und dann das Resultat ausgibst mit CStr ?
Gruss
Bernd

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

7

Sonntag, 20. September 2009, 21:22

Alternativ: ein Datumsobjekt (Date) hat in VB eine ToString Methode.

Habe als Beispiel dazu folgendes Codeschnippsel gegoogelt:

Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))

Darin wird durch das Argument das Format des String bestimmt.

Viele Grüße
Cornelius

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

8

Sonntag, 20. September 2009, 23:05

Hallo,

Danke für die Tips.

Zitat

Was passiert, wenn Du den Timestamp erst in ein Datum umwandelst mit CDate und dann das Resultat ausgibst mit CStr ?

So gehts.

cstr(datumFeld(12584))=40074,9159722183
cstr(CDate(datumFeld(12584)))=18.09.2009 21:59:00

Viele Grüße
Torsten

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

9

Montag, 21. September 2009, 00:27

Gern geschehen :)

@Cornelius, ich glaube, der Scripting Host kennt die toString Methode leider nur für JScript, nicht für VBScript. Hab's nicht ausprobiert, aber lt. VBScript Doku sieht's nicht so gut aus. Daher mein Hinweis auf CDate zusammen mit CStr.
Gruss
Bernd

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

10

Montag, 21. September 2009, 12:17

Hallo Bernd,

das wäre ja enttäuschend, ist aber möglich - das Codeschnippsel war für VB, nicht direkt für VBSkript. Ich war davon ausgegangen, dass die Methode auch in VBSkript zur Verfügung steht.

Aber Hauptsache, Sten hatte jetzt Erfolg mit Deinem Hinweis.

Mal eine andere Frage:

Es gibt die Möglichkeit, mit Weka (und wahrscheinlich auch anderen Data Mining Tools) Java-Code zu generieren. Ist es möglich, Java in VBSkript einzubinden und auf diesem Wege aus Investox darauf zuzugreifen? Die Daten könnte man ja dann wie von Sten vorgesehen zur Verfügung stellen.

Viele Grüße
Cornelius

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

11

Montag, 21. September 2009, 18:56

Hallo Cornelius

Man kann aus VBScript schon externe Programme oder Dokumente aufrufen; möglicherweise auch externe JScript Routinen. Probiert habe ich es aber nicht, denn ich sehe den Sinn nicht:

VBScript ist wirklich rudimentäres Programmieren, es kann noch weniger als VB. JScript kann wenig mehr, aber ist auch keine vollständige Java Umgebung. Selbst wenn es gelingt, aus VBScript eine JScript Routine extern aufzurufen - wird sie die speziellen Investox Schlüsselworte und Sonderfunktionen vermutlich nicht beherrschen. Und da so ein Konstrukt garantiert an Geschwindigkeit verliert gegenüber "nativen" VBscript Indikatoren für INV, würde ich es eigentlich auch gar nicht erst probieren.

Davon abgesehen bin ich kein Spezialist für VB/VBScript Programmierung: erst INV hat mich wieder veranlasst, mir diese "Konstrukte" anzusehen. Davor waren meine letzten Basic Berührungen TinyBasic Ende der 1970er Jahre. Zu dem Zeitpunkt hat man das eigentlich als Spielerei ganz gerne mal angesehen, aber ansonsten Bytecode direkt programmiert, was das bedeutet, weiss ja heute fast keiner mehr. Allenfalls mal den jeweils zur CPU passenden Assembler als "höhere" Programmiersprache verwendet. C war dann schon mehr magic. Dann kam Forth und ja, PL/I. Nun, und seither eine Reihe weiterer Sprachen, auch für multiple hochparallele und skalierbare System. Nur Basic, damit war eigentlich kein Geld zu verdienen und daher keine Veranlassung, das anzusehen.

Jedenfalls reicht mein bisschen Basic, um mit VB.net und VBScript für INV ein wenig rumzuzaubern, und mehr brauche ich im Moment an der Stelle nicht ...
Gruss
Bernd

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

12

Dienstag, 22. September 2009, 10:42

Hallo,

Zitat

Ist es möglich, Java in VBSkript einzubinden und auf diesem Wege aus Investox darauf zuzugreifen?


Das ist eine super interessante Frage.

Man könnte die Frage auch vereinfacht so formulieren:
Ist es irgendwie möglich Javacode in Investox direkt auszuführen?

Und das ganze möglichst so, dass Herr Knöpfel nicht zuviel Arbeit damit hat, d.h. nicht noch eine weitere Programmiersprache in Investox einbetten muss.

Die Anbindung von Investox an die Javawelt wäre ein gewaltiger Schritt. In Java stehen Millionen von Mannjahren Implementierungen zur Verfügung, d.h. zahlreiche Frameworks die dann auch innerhalb von Investox nutzbar wären. Unzählige Algorithmen aus den verschiedensten Bereichen, die man dann auf Zeitreihen anwenden könnte.

Ich denke dass es prinzipiell möglich sein müßte, weil Java so konzipiert ist, dass es nicht direkt auf der Hardware läuft, sondern über eine virtuelle Maschine (Runtime-Umgebung). Das war auch einer der Gründe warum sich Java gegenüber anderen Programmiersprachen durchgesetzt hat, weil man nur einmal JavaCode geschrieben hat und dieser ist dann auf allen Plattformen (Windows, Linux, ...) gelaufen.

Vielleicht könnte man diesen Vorteil von Java auch für Investox nutzen, wenn man eine Java-Runtime Umgebung hätte, die in VB implementiert ist, d.h. innerhalb von VB läuft.

Dann ganze würde dann so aussehen:
Investox --> VB --> VB-JavaRuntime --> Javacode...direkt ausführbar

Dann müßte man auch nicht mehr die Zeitreihenübergabe über Textfiles durchführen, sondern man könnte direkt auf den Investox-Kontext zugreifen und dadurch würden die Javacodeausführung wesentlich beschleunigt werden.

Der Knackpunkt ist, gibt es eine Java-Runtime Umgebung für VB (oder .NET) und wie könnte man diese am geschicktestens in Investox einbinden.

Viele Grüße
Torsten

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

13

Dienstag, 22. September 2009, 11:54

Das ist eine super interessante Frage.


Danke, Sten! Das finde ich auch.

Es gibt z.B. Shells für Agenten- (Jade) und Expertensysteme (Jess) in Java und sicher viel, viel Material für Zeitreihenanalysen.

Diese Welt für Investox zu erschliessen wäre ein starker Vorteil. Ich glaube nicht, dass viele Wettbewerbsprodukte das können (wenn überhaupt eines).

Viele Grüße
Cornelius

upgap

unregistriert

14

Dienstag, 22. September 2009, 20:18

Ja, das geht.

Java-Klassen aus nicht Java-Programmiersprachen heraus aufzurufen, das geht per Java-Invokation API.
Die gibt's nur für C/C++.
Dh. man schreibt ein C Programm, das die entsprechenden Java Klassen aufruft (via Java-Invokation API).
Kompiliert die in eine dll.
Sobald man aus einer Programmiersprache bzw. einem Programm dlls aufrufen kann, kann man damit eine Brücke zu Java (seinen Java-Klassen) herstellen.

vbs kann kein leider keine dlls callen, daher kann man per vbs kein Java aufrufen.

Es geht aber sehrwohl mit dem Investox Enwicklerkit, daß eine Schnittstelle für vb.net bietet.
Denn in vb.net kann man (unmanged) c-dlls aufrufen (und damit Java).

hth & lg, upgap

cnolte

Profi

Registrierungsdatum: 23. November 2006

Beiträge: 399

15

Dienstag, 22. September 2009, 21:51

Hallo,

das klingt ja im Prinzip gut!

Kann und möchte denn jemand Beispielcode zur Verfügung stellen, der die Grundstruktur verdeutlicht? (Also VB Code der C Code aufruft der Java Code aufruft.)

Das wäre wohl auch etwas für die Download-Datenbank des Forums.

Viele Grüße
Cornelius

P.S. Ist mir schon klar, dass die meisten Investox Anwender sich wahrscheinlich nicht mit Programmierungen in Java auseinandersetzen möchten. Aber wenn die Brücke erst einmal steht, kann sich durchaus der ein oder andere finden, der etwas Interessantes entwickelt und zur Verfügung stellt - so wie das mit ADMG geschehen ist. Interessante Möglichkeiten dafür gibt es jedenfalls.