Signalworks financial systems
Home
Kontakt
Sitemap
Home arrow Development arrow TradeStation-Adds arrow GlobalValues.dll
Dynamic Link Library :: GlobalValues.dll
Einleitung

Eine DynamikLinkLibrary (DLL) kann benutzt werden, um EasyLanguage® funktional zu erweitern. DLLs können in einer Vielzahl von Programmiersprachen wie C, Delphi und PowerBASIC geschrieben werden. Die Funktionen, die von der DLL exportiert werden, können von den EasyLanguage-Analysis-Techniken und von anderen Anwendungen verarbeitet und genutzt werden. DLL-Funktionen können Aufgaben durchführen, die nicht ausschliesslich in EasyLanguage umsetzbar sind. Zusätzlich können sie benutzt werden, um die Verarbeitung zu beschleunigen. Diese Globale-Werte-DLL (GlobalValues.dll) speichert Werte in und holt Werte  aus dem globalen Speicher. Die Funktionalität erlaubt es EasyLanguage-Analysis-Techniken, Informationen zwischen verschiedenen Chartfenstern in Tradestation2000i oder auch zu anderen Anwendungen wie Microsoft Excel® auszutauschen. Die gespeicherten Werte können z.B. in einer anderen Analysis-Technik auf verschiedenen Zeitebenen in verschiedenen Chartfenstern verwendet werden. 

Die GlobalValues.dll ist eine spezifische Weiterentwicklung der populären GlobalVariable.dll. Hauptansatz der Weiterwicklung war die Implementierung der Backtesting-Funktionalität. Dies ist mit der Version1.0 erfolgt. Die Werte, die im gv_setChart global gespeichert werden, stehen ab dem eingestellten Chart-Startdatum für andere Chartfenster bzw. Analysis-Techniken zur Verfügung. Die Daten werden also nicht wie in der GlobalVariablen.dll ab „LastBarOnChart“ verfügbar gemacht sondern sind für den gesamten eingestellten Chartzeitraum des gv_setCharts abrufbar.
So ist es z.B. möglich, Indikatorenwerte aus kleineren Zeitfenstern in größeren Zeitfenstern anzuzeigen und das über den gesamten eingestellten Chartzeitraum. Strategien können diese Werte nutzen, um in anderen Zeitfenstern Signale zu generieren. Die gespeicherten Werte sind in mehreren Chartfenstern gleichzeitig nutzbar. Es können in mehreren Chartfenstern gleichzeitig Werte global gespeichert werden.
Aktuell sind bis zu 10 verschiedene gv-setCharts möglich, die jeweils bis zu 10 Parametern speichern können. Also insgesamt sind 100 Parameter möglich, deren jeweiligen Werte pro Bar in jedem Min.- und Tickchart-Zeitfenster gespeichert werden. Damit abhängig vom gewünschten Backtesting-Zeitraum ist der Speicherbedarf [Array-Größe] der GlobalValues.dll.
Der mögliche Backtesting-Zeitraum wurde in dieser Version 1.0 auf ca. 100 Tage (Richtwert für 1Min. Zeitfenster) festgelegt. Anpassung nach oben ist ohne weiteres möglich, erhöht jedoch den Speicherbedarf und den entsprechend Zeitbedarf bei Abruf der Werte durch die entsprechenden Analysis-Techniken. 
 
DLL-Funktionen, Parameter und Return-Werte
DLL-FunktionParameterReturn-Wert
GV_ResetValues()int gvParam
int gvBar
Integer Wert von gvParam
Returns –1 bei Fehler
GV_SetValues()int gvParam
float gvValue
int gvBar
Integer Wert von gvParam
Returns –1 bei Fehler
GV_SetBarinterval()int gvIndex
int gvBarinterval
Integer Wert von gvIndex
Returns –1 bei Fehler
GV_SetRefdate()int gvIndex
int gvRefDate
Integer Wert von gvIndex
Returns –1 bei Fehler 
GV_SetTitle()int gvIndex
LPSTR gvChartTitle
Integer Wert von gvIndex
Returns –1 bei Fehler
GV_GetValues()int gvParam
int gvBar
Float Wert
Returns –1.0 bei Fehler
GV_GetBarinterval()int gvIndexDouble Wert
Returns –1 bei Fehler
GV_GetRefdate()int gvIndex LPSTR
Returns NULL bei Fehler
GV_GetTitle()int gvIndexLPSTR
Returns NULL bei Fehler
GV_GetVersion() LPSTR
Tabelle 1: Funktionen der GlobalValues.dll mit Parametern und Rückgabewerten 
 
DLL-Funktionen und Funktionsweise
DLL-FunktionFunktionsweise
GV_ResetValues()Für #gvParam (Index- und Werte-Parameter)  werden alle #gvBar-Einträge im globalen Speicher gelöscht. #gvBar ist die normierte Bar-Zeit-Korrelation des aktuell eingestellten Chartzeitraums. #gvParam und #gvBar werden von der ELA-Funktion SW_GVResetValues übergeben.
GV_SetValues()Speichert den Wert #gvValue in einem Array, das über #gvParam und über #gvBar (Datums- und Zeitvariable) deklariert ist. #gvParam, #gvValue und #gvBar werden von der ELA-Funktion SW_GVSetValues übergeben.
GV_SetBarinterval()Speichert das Barinterval (Timeframe) des gvSet-Charts als Parameter #gvBarinterval in einem Array, deklariert über den Chartfensterindex #gvIndex. Die Parameter #gvIndex und #gvBarinterval werden von der ELA-Funktion SW_GVSetBarinterval übergeben.
GV_SetRefdate()Speichert das erste Datum des gvSet-Charts als Parameter #gvRefdate in einem Array, deklariert über den Chartfensterindex #gvIndex. Das Datum wird als Referenzdatum für die Synchronisation zwischen gvSet-Charts und gvGet-Charts verwendet. Die Parameter #gvIndex und #gvRefdate werden von der ELA-Funktion SW_GVSetRefdate übergeben.
GV_SetTitle()Speichert den Title als LPSTR #gvChartTitle des gvSet-Charts in einem Array, deklariert über den Chartfensterindex #gvIndex. Der String #gvTitle wird aus dem Parameter #sIndex(„count_title“) des gvSet-Charts in der ELA-Funktion SW_GVSetTitle erzeugt und mit #gvIndex übergeben.
GV_GetValues()Übergibt den im Array gespeichert Wert #gvValue, referenziert durch #gvParam und #gvBar an die ELA-Funktion SW-GVGetValues.
GV_GetBarinterval()Übergibt den im Array gespeichert Wert #gvBarinterval, referenziert durch #gvIndex an die ELA-Funktion SW-GVGetBarinterval.
GV_GetRefdate()Übergibt den im Array gespeicherten Wert #gvRefDate, referenziert durch #gvIndex an die ELA-Funktion SW-GVGetValues.
GV_GetTitle()Übergibt den im Array gespeicherten Wert #gvTitle, referenziert durch #gvIndex an die ELA-Funktion SW-GVGetValues.
GV_GetVersion()Übergibt die aktuelle Version von GlobalValues.dll als LPSTR. 
Tabelle 2: Funktionen der GlobalValues.dll mit Funktionsbeschreibung
 
Funktionsbeschreibung

Werte, die über die ELA-Funktion SW_GVSetValues in GlobalValues.dll gespeichert werden, sind Zeit- und Datumscodiert. In der ELA-Funktion SW_GVSetValues werden Datum und Zeit jedes Bars normiert und als #gvBar an die .dll-Funktion GV_SetValues übergeben. Werden die in der GlobalValues.dll gespeicherten Werte abgefragt, wird die Normierung in der ELA-Funktion SW_GVGetValues entschlüsselt und der ermittelte GlobalValue steht allen Analysis-Techniken zur Verfügung. Die Werte der Kurshistory bleiben solange gespeichert, wie die Chartanwendung aktiv ist. Die Speicherung historischer Parameter in der  GlobalValues.dll ermöglicht das Backtesting von Strategien.

Die Referenzierung der Werte erfolgt mittel Index-Parameter und Werte-Parameter. Zur Deklaration sind aktuell 10 Index-Parameter (0…9) und 10 Werte-Parameter (0…9) möglich, also insgesamt 100 Parameter (#define MAXPARAMETER 100). Über diese 100 Parameter werden die entsprechenden Werte aus der Analysis-Technik für jedes einzelne Bar (!) gespeichert. Die .dll-Definition #define MAXVALUES legt die maximal möglichen Werte fest und ist aktuell mit 300.000 festgelegt. Diese Angabe entspricht jedoch nicht der Anzahl der möglichen Bars im Chart, da Wochenenden und Feiertage einen Datumssprung verursachen und den normierten Parameter #gvBar z.B. bei Wochenenden um 3 Tage erhöht.

Um die Synchronisation zwischen verschiedenen Zeitfenstern von gvSet-Chart und gvGet-Chart zu gewährleisten, wird zum Einen das Datum der ersten Bar des gvSet-Charts als Referenzdatum sowie das Barinterval global gespeichert. Diese Aufgabe übernehmen die ELA-Funktionen SW_GVSetRefdate und SW_GVSetBarinterval. In der ELA-Funktion SW-GVGetValues wird das Referenzdatum des gvSet-Charts mit dem Startdatum der Analysis-Technik verglichen. Bei größeren gvGet-Chart-Zeitfenstern verschiebt sich die Startzeit/-datum durch den Wert „Number of bars study will reference“ nach vorn. In diesem Falle wäre das Startdatum des gvGet-Chart später als jenes vom gvSet-Chart. Durch Angleichung des gvGet-Startdatums an das Referenzdatum werden die Charts synchronisiert. Des weiteren werden Datum und Zeit jedes Bar normiert codiert und dem globalen Parameter #gvBar zugeordnet.

Um zeitversetzte Zeitfenster zu synchronisieren (wie z.B. 3Min.gvSet-Chart und 5 Min.gvGetChart, bei denen Werte im 3Min.-Interval gespeichert und im 5Min.-Interval ausgelesen werden), wird bei Rückgabewert 0 (z.B. 9.10Uhr kann 3Min.-Chart keinen Wert speichern, erst wieder 9.12Uhr, jedoch 5Min.-Chart fragt 9.10Uhr und wieder 9.15Uhr global ab, d.h.  der Wert um 9.10Uhr wird mit 0 an den 5Min.-gvGet-Chart zurückgegeben) der Referenzwert #gvBarinterval des gvSet-Charts global ermittelt und abhängig davon in einer Routine der letzte gespeicherte globale Wert #gvValue ermittelt.
Dadurch erfolgt eine lückenlose, übereinstimmende Werteermittlung, es sei denn zum Zeitpunkt der Abfrage existiert das jeweilige Bar im gvSet-Chart nicht, z.B. durch Unterbrechnung der Kursversorgung. 
Die Möglichkeit der Kontrolle, ob die Charts synchron laufen, ist durch die Möglichkeit einer .txt-Kontrolldatei gegeben, die in der Demo-Analysis-Technik integriert ist. Die folgenden Tabellen zeigen beispielhaft die Synchronität zwischen gvSet-Chart  und gvGet-Chart: 
TitlegvSetDategvSetTimegvGetDategvGetTime gvValue 
DAX[31.5.2006][0905][31.5.2006] [0905] 35.25 
DAX[31.5.2006][0910][31.5.2006] [0910] 8.61 
DAX[31.5.2006][0915][31.5.2006] [0915] 11.44 
DAX[31.5.2006][0920][31.5.2006] [0920]42.45 
DAX[31.5.2006][0925][31.5.2006] [0925] 67.34 
DAX[31.5.2006][0930][31.5.2006] [0930] 87.38 
DAX[31.5.2006][0935][31.5.2006] [0935] 81.21 
DAX[31.5.2006] [0940][31.5.2006] [0940] 92.81 
DAX[31.5.2006][0945][31.5.2006] [0945] 80.64 
DAX[31.5.2006] [0950][31.5.2006] [0950] 72.61 
DAX [31.5.2006][0955] [31.5.2006] [0955] 84.99 
DAX [31.5.2006][1000] [31.5.2006] [1000] 90.42 
 
Tabelle 1: 1Min-gvSet-Chart und 5Min-gvGet-Chart (zeitsynchron, Zeitvielfaches) 
TitlegvSetDategvSetTimegvGetDategvGetTime gvValue 
DAX[31.5.2006][0909][31.5.2006] [0910] 13.35 
DAX[31.5.2006][0915][31.5.2006] [0915] 9.67 
DAX[31.5.2006][0918][31.5.2006] [0920] 14.36 
DAX[31.5.2006][0924][31.5.2006] [0925]18.77 
DAX[31.5.2006][0930][31.5.2006] [0930] 26.80
DAX[31.5.2006][0933][31.5.2006] [0935] 35.58 
DAX[31.5.2006][0939][31.5.2006] [0940] 47.01 
DAX[31.5.2006] [0945][31.5.2006] [0945] 69.29
DAX[31.5.2006][0948][31.5.2006] [0950] 84.16
DAX[31.5.2006] [0954][31.5.2006] [0955] 94.03 
DAX [31.5.2006][1000] [31.5.2006] [1000] 95.03 
DAX [31.5.2006][1003] [31.5.2006] [1005] 91.36
 
Tabelle 2: 3Min-gvSet-Chart und 5Min-gvGet-Chart(zeitversetzt, kein Zeitvielfaches) 
Wie werden die nun Werte aus einer Analysis-Technik global gespeichert? Für die Parametrisierung der globalen „Werte-Ordnung“ ist nur ein Inputparameter in der Analysis-Technik erforderlich:
#sIndex("count_title")   im Format: "Value{0...9}_String" 
Der Wert #count wird als Index-Parameter verwendet. Mögliche Parameter sind aktuell {0…9}.  Die zu speichernden Werte der Analysis-Technik werden in der folgenden Form an die ELA-Funktion SW_GVSetValues übergeben, die den Wert parametrisiert an die GlobalValues.dll zur Speicherung übergibt:
gvSetValue1 =  SW_GVSetValues(sIndex,0,Value1);
(ruft die ELA-Funktion SW_GVGetValues auf und übergibt #sIndex als String im Format ‘count_title’ , 0 als Werte-Parameter und Value1 als global zu speichernder Wert. Über die .txt-Kontrolle kann die Prüfung erfolgen, ob der Wert 0 gespeichert wurde. Falls der Wert -1 gespeichert wurde, ist ein Fehler aufgetreten.)
Werden globale Werte abgefragt, wird folgende Form an die ELA-Funktion SW_GVGetValues übergeben, die den Wert entparametrisiert an die Analysis-Technik zurückgibt:
gvGetValue1 =  SW_GVGetValues(sIndex,0); 
(ruft die ELA-Funktion SW_GVGetValues auf und übergibt #sIndex als String im Format ‘count_title’ und 0 als Werte-Parameter. Falls der Wert -1 zurückgegeben wird, ist ein Fehler aufgetreten.)
In der gvSet-Analysis-Technik kann die in den Beispiel-ELA-Dateien integrierte RESET-Funktion dafür genutzt werden, beim Analysis-Start alle vormaligen globalen Werte des spezifischen (durch #sIndex festgelegten) Index-Parameters zu löschen {RESET_ALL(‚YES’)} oder zu übernehmen {RESET_ALL(‚NO’)}.
Mit dem weiteren Parameter RESET_PARAM(-1) ist es möglich, einzelne Werte-Parameter {RESET_PARAM(0…9)} zu löschen, wobei die anderen Werte-Parameter des jeweiligen Index-Parameters erhalten bleiben.
Ist ein Chart mit den 9 möglichen Werte-Parametern nicht ausreichend, können bis zu 9 weitere gvSet-Charts genutzt werden, die Werte global den gvGet-Charts oder anderen Anwendungen zur Verfügung stellen.
 
Anmerkung

Wird die Anwendung gestartet, die die GlobalValues.dll nutzt, werden alle Wertefelder mit dem Wert 0 initialisiert. Stringfelder werden mit NULL initialisiert. Beim Wechsel von Zeitfenstern im gvSet-Chart und gvGet-Chart sind die Analysis-Techniken neu zu laden, um sicherzustellen, dass die aktuellen Werte synchronisiert gespeichert bzw. abgerufen werden!

Kontrolle über Synchronität kann über die implementierte .txt-file-Funktion erfolgen.
Error-Code der .dll-Funktionen ist -1. Werden Werte mit -1 ausgegeben, ist ein Fehler beim Speichern/Abfragen aufgetreten.
In folgenden Fällen wird Error-Code -1 zurückgegeben, wenn:
#gvIndex < 0 oder #gvIndex > 99 (MAXPARAM)
#gvParam < 0 oder #gvParam > 99 (MAXPARAM)
#gvBar > 300.000 (MAXVALUES)
 
Anwendungsbeispiel 1

Es werden die Werte des SlowStochastic-Indikator im 1Min-gvSet-Chart global gespeichert und in einen 5Min-gvGet-Chart global übertragen. Zur Umsetzung wurden zwei Indikatoren programmiert - SW_GVSet-StoccValues, der die Werte der SlowStochastic aus dem 1Min-gvSet-Chart in der GlobalValues.dll speichert und SW_GVGet-StoccValues, der die global gespeicherten SlowStochastic-Werte per Plot im 5Min-gvGet-Chart zur Anzeige bringt.

Der Indikator SW_GVSet-StoccValues enthält folgende Inputparamter:
{ Stochastic }HighValue(High), LowValue(Low), CloseValue(Close), Length(14),sZone(80), bZone(20),
{ global }sIndex("count_title"), RESET_ALL("no"), RESET_PARAM(-1);
   
  
Die Parameter für die Stochastic werden für die SlowD- und SLowK-Funktion benötigt. Parameter #sIndex wird für die globale Parametrisierung benötigt, #RESET-ALL(‚yes’) löscht alle vormaligen Werte, die eventuell für den gewählten Index-Parameter gespeichert waren. #RESET_PARAM(-1) steht per default auf -1. Werte von {0…9} löschen spezifisch die globalen Werte des gewählten Werte-Parameter.  
Die Input-Parameter im Formatfenster des Indikators SW_GVSet-StccValues sind wie folgt angegeben: 
Input-Parameter SW_GVSet-StoccValues 
Abbildung 1: Input-Parameter des Indikators SW_GVSet-StoccValues 
Der Indikator SW_GVGet-StoccValues enthält folgende Inputparamter: 
{ Stochastic }HighValue(High), LowValue(Low), CloseValue(Close), Length(14),sZone(80), bZone(20),
{ global }sIndex("count_title"), RESET_ALL("YES"), RESET_PARAM(-1);
{ control }txt_control("no"), DIR("C:\"), NAME("GVGet-StoccValues");
 
Der Input-Parameter #txt_control("yes") ermöglicht die Kontrolle der globalen Wertezuordnung. Ist der Parameter mit "yes" angegeben, wird im Verzeichnis #DIR("C:\") die .txt-Datei unter dem Namen #NAME("GVGet-StoccValues") gespeichert.
Die Angabe von #sIndex erfolgt wie beim Indikator SW-GVSet-Values.
Die Input-Parameter im Formatfenster des Indikators SW_GVSet-StccValues sind wie folgt angegeben:
Input-Parameter SW_GVGet-StoccValues 1Min-Chart 
Abbildung 2: Input-Parameter des Indikators SW_GVGet-StoccValues   
Das Resultat der globalen Speicherung und Abfrage wird Abbildung 3 und 4 veranschaulicht. In Abbildung 2 wird zum Vergleich der reale SlowStochastic-Indikator für den 5Min.-Chart gezeigt. 
1Min-gvSet-Chart 
Abbildung 3: 1Min-gvSet-Chart mit Indikator SW_GVSet-StoccValues
5Min-gvGet-Chart 
Abbildung 4: 5Min-gvGet-Chart mit Indikator SW_GVGet-StoccValues und SlowStochastic
 
Anwendungsbeispiel 2

Die Werte des SlowStochastic-Indikator im 3Min-gvSet-Chart werden global gespeichert und in einen 5Min-gvGet-Chart in eine Strategie übertragen.
Zur Umsetzung wurde der o.g. Indikator SW_GVSET-StoccValues verwendet, der die Stochastic-Werte für jedes Bar in die GlobalValues.dll speichert, und es wurde die Strategie SW_GVGet-StoccCross programmiert, die die global gespeicherten SlowStochastic-Werte unter folgenden Bedingungen im 5Min-gvGet-Chart als Signale zur Anzeige bringt:

Condition1 = gvSlowK > gvSlowD;
Condition2 = gvSlowK < gvSlowD;
Buy-Signale werden erzeugt, wenn Condition1 der aktuellen Bar und Condition2 der vorherigen Bar erfüllt sind (also zur aktuellen Bar ein Cross-Over erfolgt). Im umgekehrten Sinn werden Sell-Signale erzeugt, wenn Condition2 der aktuellen Bar und Condition1 der vorherigen Bar erfüllt sind.
 Diese Festlegung ist beispielhaft und stellt keine Handelsempfehlung oder Handelsaufforderung dar!
Bei diesem Anwendungsbeispiel wird #sIndex des Indikators SW_GVSet-StoccValues auf dem Index-Parameter "1" festgelegt, damit beide Anwendungsbeispiele gleichzeitig arbeiten können. 
Formatparameter SW_GVSet-StoccValues 3Min-Chart 
Abbildung 5: Input-Parameter des Indikators SW_GVSet-StoccValues 
Die Strategie SW_GVGet-StoccCross enthält folgende Input-Parameter:
{ Stochastic }HighValue(High), LowValue(Low), CloseValue(Close), Length(14),sZone(80), bZone(20),
{ global }sIndex("count_title"),
{ control }DIR("C:\"), NAME("GVGet-StoccValues");
   
  
Die Stochastic-Parameter werden für den realen Indikator zum visuellen Vergleich verwendet. Die globalen SlowStochastic-Werte werden über folgenden Funktionsaufruf abgefragt:  
gvSlowk = SW_GVGetValues(sIndex,0);
(ruft die ELA_Funktion SW_GVGetValues auf und ermittelt den globalen Wert von Werte-Parameter 0) 
DIR("C:\") legt das Verzeichnis zur Speicherung der Kontroll-.txt-Datei fest. NAME("GVGet-StoccValues") definiert den Namen der Kontroll-.txt-Datei.
Das Resultat der globalen Speicherung und Abfrage wird Abbildung 1 und 2 veranschaulicht. In Abbildung 2 wird zum Vergleich der reale SlowStochastic-Indikator für den 5Min.-Chart gezeigt.
gvSlowd = SW_GVGetValues(sIndex,1);
(ruft die ELA_Funktion SW_GVGetValues auf und ermittelt den globalen Wert von Werte-Parameter 1)  
Die Input-Parameter für die Strategie SW_GVGet-StoccCross sind wie folgt festgelegt: 
Formatparameter SW_GVGet-StoccCross 
Abbildung 6: Input-Parameter der Strategie SW-GVGet-StoccCross 
Das Resultat der globalen Speicherung und Signalgenerierung auf Basis der globalen SlowStochastic-Werte wird in Abbildung 7 und 8 veranschaulicht. Abbildung 8 zeigt zur Kontrolle der Signale zusätzlich den Indikator SW_GVGet-StoccValues.
 
3Min-gvSet-Chart 
Abbildung 7: 3Min-gvSet-Chart mit Indikator SW_GVSet-StoccValues
 
5Min-gvGet-Chart 
Abbildung 8: 5Min-gvGet-Chart mit Strategie SW_GVGet-StoccCross und Indikator SW_GVGet-StoccValues
 
Nutzung und Feedback
Die Nutzung von GlobalValues.dll ist kostenpflichtig. Bei Interesse verwenden Sie bitte unser Kontaktformular».
 
Datenschutz | Disclaimer | Impressum | Kontakt | Home