Dienstag, 16. April 2024, 09:05 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

lubesi

unregistriert

1

Donnerstag, 29. März 2018, 10:39

Externe Fubktionen dll

Hallo Investox-Gemeinde,

als Anhänger sehr kurzfristiger Handelsstrategien 20 sek bis ein paar Minuten bin ich auf die Analyse von Tickdaten angewiesen. In der Investox-Formelsprache habe ich keine Funktionen gefunden (sorry bin Neuling) um den Zeitstempel der Ticks auszulesen. Die Anzahl der Perioden (Ergebnis vieler Funktionen z.B BarsSince) ist jedoch bei Ticks wenig aussagekräftig, da man auf die Zeit nicht unbedingt schließen kann. Ich bin daher auf die Verwendung externer Funktionen via dll, die auch den weiteren Vorteil größtmöglicher Flexibilität bieten, angewiesen.
Leider habe ich die mitgelieferten dlls (ExterneDotNetIndis.dll vom Jahr 2006, ExterneIndisBeispiel.dll vom Jahr 2001) und auch nach Anleitung erstellten dll (Visual Studio 2017 Community) mit Visual Basic, C# oder C++ mit diversen Übergabe Parametern der Calculate -Funktion und Registrierungsmethoden (regsrv32 oder regasm) nicht zum Laufen gebracht. Die Fehlermeldungen sind unterschiedlich (immerhin gibt es eine Beeinflußung):


-Fehler im Programmablauf aufgetreten.Typen unverträglich (Fehler Nr 13)

-Ungültiger Prozeduraufruf oder ungültiges Argument (Fehler Nr 5)
-Automationsfehler aufgetreten. Klasse unterstützt keine Automatisierung
oder unterstützt die erwartete Schnittstelle nicht (Fehler Nr 430)

-Überlauf aufgetreten. Die Werte einer Berechnung liegen außerhalb des gültigen Bereichs oder es fand eine Division durch 0 statt (Fehler Nr 6)


Ich bin daher etwas ratlos, was noch zu probieren ist und wenden mich vertrauensvoll an Euch. Hat jemand externe dlls am Laufen und unter welchen Konfigurationen? (Meine: Windows 7 bzw. 10 64-bit, Investox XL 7.5.1, VS2017 bzw. VS2012, .net V2 bis 4.6)

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

2

Montag, 16. April 2018, 13:51

... jedoch bei Ticks wenig aussagekräftig, da man auf die Zeit nicht unbedingt schließen kann. Ich bin daher auf die Verwendung externer Funktionen via dll ... angewiesen.


Eigentlich kann man sowas mit der Investox-Formelsprache prima lösen, bis hin zum "Erzeugen einer eigenen Squawk-Box", die so Sachen ansagt wie "Hohe Dynamik im Markt", "Achtung, der SP&P beginnt zu rennen" oder später dann "Dynamik im DAX Tape lässt nach" usw., ideal für die Unterstützung z.B. von diskretionären Echtzeit-Handels-Ansätzen.

Statts nach externenen dll usw. zu fragen, teil uns doch einfach mal mit, was Du eigentlich am Markt machen willst.

Dann kann man Dir raten, wie das mit Investox zu bewerkstelligen wäre - statts gleich mit Beitrag 1 im Forum aufgrund eines ersten eigenen Misserfolgs bei der Umsetzung eine Richtung ("es muss jetzt unbeding mit externer dll und regasm32" und was weiss ich alles) vorzugeben und aufgrund mangelnder Kenntnisse den Weg zum Ziel schon im Vorfeld völlig unnötig einzuengen.

Höchst wahrscheinlich wird sich auch Dein Problem ohne C, C++, regsrv32 oder regasm mit Investox Standard-Mitteln umsetzen lassen.
Gruss
Bernd

lubesi

unregistriert

3

Dienstag, 17. April 2018, 05:34

jetzt habe ich doch noch eine Antwort erhalten - vielen Dank Bernd. Du hast natürlich Recht, dass Vieles in Investox umsetzbar ist. Die Möglichkeiten der Tickanalyse (zumindest Sekunden genau), Daten-Import aus anderen Systemen und eben die Backtestfunktionalitäten (mit und ohne dll) waren für mich letztlich kaufentscheidend. Das Forum hätte ich fast vergessen anzuführen und zu loben!
Um kurzfristig (1 bis 30 min) spezielle Marktphasen zu handeln, versuche ich erstmals zu klassifizieren welcher Markt den überhaupt vorliegt. Hierfür möchte ich anhand der letzten Hochs und Tiefs ein Muster ableiten (wie man das in jedem vernünftigen Chart und im realen Trading halt auch macht). z.B. Gehe Long, wenn letztes Tief über vorigem Tief liegt und letztes Hoch knapp unter einer runden Marke (z.B. 12050 beim Dax Future). Gefühlsmäßig werden solche Marken magisch angezogen und durchbrochen. Ich hätte dieses Gefühl gerne statistisch bestätigt (und versilbert ;).
Die Funktionen HHV und HHVBars schienen mir hierfür bestens geeignet mit dem Problem, dass ich bei Tickdaten anhand der Anzahl der Bars nicht implizit auf die Dauer schließen kann. So ist der Zugriff auf das letzte Hoch zeitlich nicht ermittelbar. z.B. 1000 Tickbars können 40 Minuten lang sein, aber auch 3 Stunden und mehr. In einer Dokumentation habe ich gelesen, dass in einer dll auf den Zeitstempel der Datenreihe sehr wohl zugegriffen werden kann, ich habe jedoch noch keine entsprechende Lösung im klassischen Investox gefunden.

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

4

Dienstag, 17. April 2018, 12:51

Hallo lubesi

Schön, dass Du Dich für Investox entschieden hast; an dieser Stelle nachträglich noch ein "herzlich Willkommen" im Forum.

Gemäss Deinen Ausführungen sprichst Du von 1 bis 30 Min Charts, dann aber wieder von Tickdaten und Tickbars, und wie lange es her ist seit Tick-Ereignis xyz).

D.h. Du vermischst verschiedene Zeitebenen. Die gute Nachricht: in der Tat kann man das mit Investox tun. Aaaaabäär, man muss sich der Konsequenzen bewusst sein; die dazu notwendigen Einsicht lese ich jedoch noch nicht aus Deinem 2. Beitrag.

Dies wäre auch überraschend, denn es benötigt längere Zeit, sich über Dinge wie "Blick in die Zukunft", Ad-Hoc Analysen für diskretionäres Trading vs. Zeitstabilität vs. Backtest und Realhandel im Klaren zu werden.

Das ist normal, und jeder neue Anwender startet seine Lernkurve mit solchen Fragen :-)

Eines kann ich Dir jedoch hier versichern: Du bist NICHT in einem Fragen-Bereich, der die Anwendung eines externen Indikators / dll auch nur im im Entferntesten in Deinen Fokus rücken sollte.

Deine Ausführungen zeigen ganz klar, dass sich alles mit der Investox Formelsprache und (konzeptuell) Deinem eigenen Kopf wird lösen lassen.

Nicht einmal VBScript sehe ich aktuell zwingend als notwenig für Deine Fragestellung (und dies solltest Du zuerst meisten, bevor Du Dir über externe eigen-programmierte dll auch nur den einen einzigen Gedanken zerbrichst).

Ich schlage folgendes vor:
1) Schau Dir diese Investox Indikatoren und die Doku dazu an:
* Komp()
* DatePart() und DateDiff()
* BarsSince()
* und vielleicht noch am Rande: TickAnalyse()

2) Zerbrich Dir den Kopf bitte über diesen Themenkomplex
* Tickdaten
* vs. vorkomprimierte Daten
(und suche in der Investox Doku und im Forum - es gibt da eine Vielzahl von Threads zu diesem Gebiet; Suchbegriffe könnte zum Anfang sein: Zeitstabilität, Flattersignale)

Ich mache mal ein Beispiel:
* Ausgangspunkt sei eine Basis-Komprimierung von 15 Minuten (Basis-Komprimierung, also das was Du unter "Handelsystem einstellen / Titel / Komprimierung" eingestellt hast)
* D.h. Du hast für diese 15 Minuten Kerze nur den direkten Zugriff
** auf diese Kurse: Open, High, Low und Close dieser 15 Minuten
** dazu auf den Volumen-Indikator als auffsummiertes Volumen dieser 15 Minuten
** dazu auf die Statistik-Daten dieser 15 Minuten, welche Dir der Indikators TickAnalyse() liefert
** (also das sind die direkten und unmittelbaren Daten aus Deinem Datenfeed; natürlich gibt es hunderte darauf abgeleitete Indikatoren in Investox oder selbst-geschriebene, aber letztlich gehen alle auf diese paar Daten zurück)

a) Für ein vollautomatisches Handelssstem kannst Du nun mit Komp() auch auf höhere Komprimierungen korrekt zugreifen, z.B. auf 30 Min. oder Stunden Kerzen, auf EOD Daten oder Wochendaten usw., also alles was mehr als 15 Minuten ist

b) Für diskretionäre Ansätze dagegen könnte man mit Komp() auch auf tiefere Komprimierungen (10 Min, 5 Min, 1 Min. bis runter zum letzten Tick) zugreifen. Um beim Beispiel aus meinem vorhergehenden Beitrag zu bleiben, man könnte die Ticks pro Sekunde rechnen um dann vermittels der Investox-Sprachsynthese einen Satz anzusagen wie "Das DAX Tape rennt wie blöd, worauf wartest Du, geh' jetzt endlich rein in den Markt".

Nun, 2b) kann man machen als diskretionärer Trader, um seine Intuition zu unterstützen (wie eine Squawk Box eben), aber das kriegst Du niemals back-getestet ;-)

Mir scheint nun aus Deinen Ausführungen, Du möchtest ein vollautomatisches Handelssystem haben, der Backtest soll aussehen wie der Realhandel, auf 1 bis 30 Min. Bars (also Typ 2a), aber eigentlich möchtest Du mit Typ 2b dazwischen-grätschen.

Das wird nicht gehen. Auch nicht mit einer externen dll. Du musst Dir zunächst über die Zusammenhänge klar werden (und nach den genannten Stichworten im Forum suchen) => konzeptionelle Kopf-Arbeit.

Jedoch, das mit extenen Indikatoren, vergiss es für Deine Problemstellung !!!

Solange Du nicht kommst mit ausschliesslich rechenintensiven mathematischen Ansätzen (wie z.B. Bandpass- oder Butterworth Filter etc.), frag' bitte nicht nach externen dll. Sogar das sehr rechen-intensive R-Quadrate Problem konnte ein Forums-Mitglied mit Investox VBScript lösen! Ohne externe dll, und ich vermute, man könnte selbst diese mathe-lastige Aufgabe kaum schneller codieren in einer externen dll.

Gut, Schnelligkeit bei Mathe-Berechnungen jenseits von Datenreihen war nicht Teil Deiner Frage-Stellung - aber dies ist weitgehend der einzige denkbaren Daseinszwecken der externen dll Anbindung; auf alle Daten hast Du doch Zugriff mit der Formerlsprache und spätestens mit VBScript!
Gruss
Bernd

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Bernd« (17. April 2018, 13:56)


lubesi

unregistriert

5

Donnerstag, 19. April 2018, 13:25

Hallo Bernd,

da hast du mir eine ordentliche Denkaufgabe verpasst -herzlichen Dank und auch für die Willkomensgrüße. Um auch ein wenig auzuholen, handle ich schon länger real und bin sehr kurzfristig und arbitrage ähnlich orientiert. Es stehen mir zahlreiche Werkzeuge - größten teils Eigenentwicklungen zur Verfügung - eine Squawk Box ist auch dabei ;). Leider ist meine Art vom Aussterben bedroht und ich suche daher meinem Handelsstil treu bleibend nach Alternativen. Um mich auf Deine Antwort zu beziehen, wäre ich gerne angetreten um 2b zu meistern (what a fool). Da man die Slippage nur grob schätzen kann, sind die Backtesting Ergebnisse sowieso zu interpreitieren. News Events (z.B. NFP) lässt man auch besser außen vor. Flattersignal können mit Schalterfunktionen gelöst werden. Deine angesprochenen Suchthemen im Forum werde ich wohl noch durcharbeiten müssen - nochmals vielen Dank für die Ratschläge.
Die Datumsfunktionen DatePart und DateDiff habe ich so verstanden, dass man das aktuelle Datum auswerten kann, nicht jedoch das Datum eines einzelnen Ticks oder Ereignisses. Auch die Rückrechnung der Zeitspanne einer Komprimierung liefert immer die Anzahl TickBars und nich die Anzahl der Minuten (was ich nicht verstehe) , so ist
HHVBars(Komp(#Ref(High,-1)#,#1#),5000) = HHVBars(High,5000)
BarsSince bzw. Resistance muss ich noch prüfen.
Was die Performance von Investox betrifft bin ich derzeit eigentlich ganz zufrieden und wäre nicht auf die Rechenpower einer dll angewiesen (Butterworth Filter oder andere Tief/Hochpässe sind derzeit nicht mein Fokus). Ein paar Exit und Entry Regeln, ein paar Stops rechnet mein Pc für ein Jahr Tickdaten(ca. 5 Mio) in 2 min 20 sek. Mein Investox hat noch irgendwo eine Limitierung von 16 Mio Ticks je Titel. Irgendwo habe ich gelesen, dass 200 Mio Ticks problemlos bewältigbar sein müssten. Derzeit arbeit ich mich durch die Berechnungtitel um v.a. für Optimierungen schneller zu werden.
Ich bleib dran.
Gruss Lubesi (klingt furchtbar, ist aber leicht zu merken ;))

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

6

Donnerstag, 19. April 2018, 21:47

Hallo Lubesi

Um mich auf Deine Antwort zu beziehen, wäre ich gerne angetreten um 2b zu meistern (what a fool).

Gern geschehen :D

News Events (z.B. NFP) lässt man auch besser außen vor.

NFP & Co. kommen ja immer um die gleiche Zeit, kann man mit Investox DatePart() leicht backtesten, wieviele Minuten vorher und nachher man sich raushalten sollte. Tip: DST berücksichtigen bei Ami News! (zu DST gibt's nen Indikator im Forum zum Download)

DatePart und DateDiff habe ich so verstanden, dass man das aktuelle Datum auswerten kann, nicht jedoch das Datum eines einzelnen Ticks oder Ereignisses.

Damit solltest Du bis zur Sekunde des Ticks runter kommen:

Quellcode

1
Komp(#DatePart(h)*10000+DatePart(n)*100+DatePart(s)#, #1T/V#)

Verwirrend: auf dem 15 Minuten Chart zeigt es halt die Sekunde vom letzten Tick der jeweiligen 15-Minuten Periode an. Life würde es immer die letzte Sekunde der lebenden Periode zeigen => das geht schonmal in die angesprochene Richtung mit Flattern & Co.

Lubesi (klingt furchtbar

Wäre mir jetzt nicht aufgefallen. Ich habe Dich einfach im ehemaligen Deutsch Ostafrika verortet, da ist Lubesi ein gängiger Nachname und Deutsch spricht man in der Gegend z.T. immer noch. Kann ja niemand was für seinen Namen, aber Du schreibst gutes Deutsch ;)
Gruss
Bernd