RR Trading Software


Tradesignal Expertise seit 2003

Dienstleistungen für Tradesignal Online

Tradesignal Toolboxes

Handelssysteme für Dax Future und Bund Future

Lexikon

Herzlich Willkommen im Lexikon der Website. Hier finden Sie Themen, die mit Tradesignal Online Terminal thematisch verbunden sind. Zahlreiche Tutorials helfen Ihnen bei der Anwendung des Programms, meiner Handelssysteme und der anderen Tools und Erweiterungen. Zahlreiche Know Hows ergänzen die Tutorials und stellen ins Besondere Wissen zur Programmierung in Equilla und der COM Schnittstelle zur Verfügung.

Tradesignal Online Lexikon

Tradesignal Toolboxes Lexikon

Equilla Code Library

Variablen und Arrays in Equilla

Verhalten von Standard Variablen

Statische Variablen

Variablen und Arrays, als Erweiterung einfacher Variablen, sind grundlegende Elemente jeder Programmiersprache. Auch in Equilla stehen diese Objekte zur Verfügung. Das Verhalten unterscheidet sich jedoch in einigen Situationen, vom Verhalten in anderen Programmiersprachen/Umgebungen. 

Einfache Variablen und das Standardverhalten 

Historische Perioden und Variablen 

Grundsätzlich gilt, das eine Variable oder ein Arrayelement pro Periode einen einzigen Wert haben kann. Dieser entspricht der Berechnung des zu Grunde liegenden Codes mit dem Periodenschlusskurs. Indikator I zeigt die folgenden Beispiele. 

Ticks und Variablen

Ein Tick ist eine Kursveränderung im Basiswert, die in Tradesignal auf jeden eingefügten Indikator, jedes Handelssystem und sonstige Equilla Programme übertragen werden, die an diesen Basiswert geknüpft sind. Jeder Tick führt in der aktuellen Chartperiode zu einer vollständigen Berechnung aller Funktionen und Aufgaben. Je nach Aufgabe, kann eine Variable pro Tick einen neuen Wert erhalten, zum Beispiel den Wert eines Indikators, dessen Berechnung den aktuellen Kurs einbezieht.  

Der Beispielindikator zeigt drei Szenarien, die das Verhalten einfacher Variablen aufzeigen. Die Variable counter, wird pro Periode im einen Zähler erhöht. Das hat zur Folge, dass sie am Endes des Charts die Anzahl der Perioden im Chart wiedergibt und pro Tick bei dieser Zahl bleibt. Zur Kontrolle wird die Variable per Print() Anweisung in s Ausgabefenster geschrieben. Egal wie viele Ticks in der aktuellen Periode eintreffen, der Inhalt von counter bleibt im Beispiel immer 90, weil 100 Perioden im Chart geladen sind, abzüglich von 10 Perioden für die Berechnung des RSI, siehe unten. Erst mit dem Wechsel auf eine neue Zeitperiode würde counter um einen Zähler erhöht und so weiter. 

Die Variable oscillator hält das Ergebnis der Berechnung des RSI Oszillators, die den aktuellen Kurs einbezieht. Da der aktuelle Kurs mit jedem neuen Tick variiert, variiert auch das Ergebnis der Berechnung und somit der Inhalt von oscillator. Mit dem Wechsel auf eine neue Periode. Verbleibt der zuletzt berechnete Wert in der Variable, auf die nun historische Periode bezogen. 

Die Variable flag, wird mit False initialisiert und an der letzten Periode des Charts auf True gesetzt. Die Printausgabe zeigt, dass jede historische Periode den erwarteten Wert False aufweist und für jeden Tick in der aktuellen Periode True ausgegeben wird. 

Das Array arrDummy, wird als leeres dynamisches Array initialisiert. Dynamisch bedeutet, dass die Kontrolle über die Anzahl der eingefügten Elemente, beim Programm liegt und die Anzahl nicht begrenzt ist. Pro Periode wird ein neues Element eingefügt, das die jeweilige Periodennummer enthält. Das Array zeigt in der Ausgabe das gleiche Verhalten, wie die Variable counter. 

Für die meisten Anwendungen, wie Indikatoren oder Handelssysteme, ist dieses Verhalten unproblematisch und erwünscht. Einzige exotische Ordermodi, die Orders in der noch laufenden Periode platzieren, werden damit ein Problem haben.  

Denn zwischenzeitlich ermittelte Handelsregeln können mit jedem neuen Tick Ihre Gültigkeit und eine daran geknüpfte und ausgeführte Market Order Ihre Berechtigung verlieren.  

Indikator Beispiel I
Meta:
	Author("Rene Rose, www.rrtradingsoftware.de"),
	WebLink("www.rrtradingsoftware.de"),
	Synopsis("Zeigt das Verhalten einfacher Variablen und Arrays bei 
	Tick Aktualisierungen"),
	Subchart( False );

Vars:
	counter(0), oscillator(0), flag(False);

Arrays:
	arrDummy[];

If CurrentBar = 1 Then
	Print( "Init: ", STR_FormatDateTime(0), counter, oscillator, STR_FormatBoolean( flag ), ArrayLength( arrDummy ) );
	
counter = counter + 1;
oscillator = RSI( Close, 10 );
AppendArray( arrDummy, CurrentBar );

If IsLastBar Then
	flag = True;

If IslastBar = False Then
	Print( STR_FormatDateTime(0), counter, oscillator, STR_FormatBoolean( flag ), ArrayLength( arrDummy ) )
Else Print( "LastBar: ", STR_FormatDateTime(0), counter, oscillator, STR_FormatBoolean( flag ), ArrayLength( arrDummy ) );

Einfache Variablen und Probleme aus dem Standardverhalten
 

Das zweite Beispiel aus Indikator II zeigt, wo Probleme auftreten, die sich aus dem Verhalten der Variablen bei Tickaktualisierungen ergeben. Die Aufgabe Zähle die Ticks innerhalb einer Periode, kann mit einer einfachen Variable nicht ausgeführt werden. Die ausgeführte Addition counter = counter + 1, wird gemäß dem korrekten Verhalten, pro Periode ausgeführt, so dass die Variable counter mit jedem weiteren Tick auf 1 steht. Ein konkreteres, aus der Praxis entnommenes Beispiel zeigt Indikator III. Der Versuch eine Textausgabe ins Ausgabefenster zu schreiben, die nicht mit jedem Tick wiederholt wird, scheitert. Trotz vermeintlich korrekter Programmierung setze eine Flagge, die anzeigt, dass die Printausgabe ausgeführt wurde, erscheint nach jedem Tick eine weitere Zeile im Ausgabefenster. 

Indikator Beispiel II
Meta:
	Author("Rene Rose, www.rrtradingsoftware.de"),
	WebLink("www.rrtradingsoftware.de"),
	Synopsis("Zeigt das Verhalten einfacher Variablen bei 
	Tick Aktualisierungen und sich daraus ergebenden Problemen"),
	Subchart( False );

Vars:
	counter(0);

If CurrentBar = 1 Then
	Print( "Init: ", STR_FormatDateTime(0), counter );
	
If IslastBar Then
	Begin
		counter = counter + 1;
		Print( "LastBar: ", STR_FormatDateTime(0), counter );
	End;
Indikator Beispiel III
Meta:
	Author("Rene Rose, www.rrtradingsoftware.de"),
	WebLink("www.rrtradingsoftware.de"),
	Synopsis("Zeigt das Verhalten einfacher Variablen bei 
	Tick Aktualisierungen und sich daraus ergebenden Problemen"),
	Subchart( False );

Vars:
	counter(0);

If CurrentBar = 1 Then
	Print( "Init: ", STR_FormatDateTime(0), counter );
	
If IslastBar Then
	Begin
		counter = counter + 1;
		Print( "LastBar: ", STR_FormatDateTime(0), counter );
	End;

Statische Variablen, volle Kontrolle über Änderungsverhalten und –Zeitpunkt
 

Die Lösung der beiden oben geschilderten Probleme ist möglich, indem die beiden verwendeten Variablen als statisch deklariert werden. Das Attribut static bewirkt ein Loslösen des Verhaltens von Perioden-basiert auf Ereignis-basiert. Ereignis-basiert bedeutet, die Variable erhält zum Zeitpunkt x einen Wert, der im Programmablauf bestimmt wird und auch innerhalb einer laufenden Zeitperiode liegen kann. Der Wert wird sofort angenommen und bleibt solange erhalten, bis eine weitere Zuweisung erfolgt. Die Aufgabe, zähle alle Ticks in der laufenden Periode, kann damit einfach ausgeführt werden, wie Indikator I zeigt. Denn jede Addition counter = counter + 1, führt zu einer sofortigen und persistenten Änderung des Variableninhalts. Damit wird counter pro Tick um einen Zähler erhöht und zeigt zum Periodenwechsel die tatsächliche Anzahl eingetroffener Ticks an. 

Die Aufgabe der Textausgabe am letzten Bar, die nicht pro Tick wiederholt werden soll, ist ebenfalls lösbar. In diesem Fall wird eine statische boolsche Variable deklariert. Indikator II zeigt die korrekte Ausführung, die technisch betrachtet exakt dem weiter oben geschilderten nicht funktionierendem Beispiel gleicht, mit dem einzigen Unterschied, der nun als static deklarierten Variable. Weil die statische Variable die Zustandsänderung von False auf True sofort annimmt und nicht erst zum Periodenwechsel rollt, unterbleibt nach der ersten Printausgebe wie gewünscht, jede weitere Printausgabe. 

Indikator Beispiel I
Meta:
	Author("Rene Rose, www.rrtradingsoftware.de"),
	WebLink("www.rrtradingsoftware.de"),
	Synopsis("Zeigt das Verhalten statischer Variablen, zur Lösung
	spezieller Programm Aufgaben. Zählt jeden einzelnen Tick
	in der laufenden Periode"),
	Subchart( False );

Vars:
	tickCounter( NumericStatic );

If CurrentBar = 1 Then
	Print( "Init CB 1: ", STR_FormatDateTime(0), tickCounter );
	
If IslastBar Then
	Begin
		If BarStatus = BarStatusOpeningTick Then
			Begin
				Print( "Init LastBar: ", STR_FormatDateTime(0), tickCounter );
				tickCounter = 0;
			End;
			
		tickCounter = tickCounter + 1;
		Print( "LastBar: ", STR_FormatDateTime(0), tickCounter );
	End;
Indikator Beispiel II
Meta:
	Author("Rene Rose, www.rrtradingsoftware.de"),
	WebLink("www.rrtradingsoftware.de"),
	Synopsis("Zeigt das Verhalten statischer Variablen, zur Lösung
	spezieller Programm Aufgaben. Führt die Print Anweisung nur ein einziges
	mal aus"),
	Subchart( False );

Vars:
	printOnce(TrueFalseStatic);

If isLastBar And printOnce = False Then
	Begin
		printOnce = True;
		Print("Eine einzige Ausgabe");
	End;

Download Equilla Codes

Sicherheitsfrage

Alle Codes zum Download finden Sie auf der Equilla Code Download Seite. Sie finden dort alle Codes zu den Tutorials, Know Hows, Equilla Bibliotheken, sowie die Indikatoren und Tools aus der Equilla Code Library. Wenn Sie über neue Beiträge informiert werden möchten, dann tragen Sie sich in die Newsletter Liste ein.

Neu im Lexikon

Organisation von Projekten und Daten in Tradesignal

Pakete in Tradesignal Online Terminal

Handelssysteme als Alternative/Ergänzung zum diskretionären Trading

Das Money Management Modell der Trading System Toolbox (TBX)

Modulreihenfolge und Informationsfluss in den Tradesignal Toolboxes

Die globalen Volatilitäts-Indikatoren der Trading System Toolbox (TBX)

Das Money Management Modell der Trading System Toolbox (TBX)

Die Integration der Indikator Toolbox (IBX) in Ihre Handelssysteme

Variablen und Arrays in Equilla

Skript- und Stapelverarbeitung in Tradesignal Online Terminal

Externe Kursdaten in Tradesignal importieren