Das Einbinden einer AgenaScript DLL in den AgenaTrader ist eine extrem nützliche Möglichkeit da man so Klassen, Erweiterungen und globale Funktionen einmal zentral zurechtlegen kann und diesen Source Code nicht jeweils in Scripts wie Indikatoren oder Conditions redundant kopieren muss (Duplizieren von Code = Fehleranfälligkeit!).
Die hier abgebildete Test-DLL für AgenaTrader wurde mit dem folgendem Setup erstellt und eingebunden:
- Windows 10 64bit
- Agena Trader Andromeda 1.0.8.453
- Visual Studio Ultimate 2013 (Community Edition auch möglich)
- Für alle Aktivitäten verwenden wir .NET Framework 3.5
- Visual Studio wurde als Administrator ausgeführt, um Probleme beim Kopieren in den GAC zu vermeiden.
Für AgenaTrader in Version 1.9 und aufwärts wird Visual Studio 2015 empfohlen und .NET Framework 4.6 benötigt.
Erstellen einer AgenaScript DLL in Visual Studio
Für die Erstellung unserer sehr einfache DLL nutzen wir Visual Studio und erstellen ein Projekt mit dem Typ Klassenbibliothek. Der Name unserer Projektes ist AgenaTraderDLL da dieser Name später benötigt wird. Unsere sehr einfache DLL besteht aus folgendem Code:
using System;
namespace AgenaTraderDLL
{
public static class ExternalHelper {
public static String Test() {
return „Hello World!“;
}
}
}
In den Projekteinstellungen muss das Projekt bevor wir kompilieren zuerst signiert werden. Die Einstellungen zum Signieren findest du innerhalb der Projekteinstellungen.
Die von uns erstellte DLL muss nun mittels gacutil.exe in den GAC (Global Assembly Cache) kopiert werden. Eine Alternative ist das Erstellen eines MSI Packages. Die gacutil Variante ist während der Entwicklung die bessere (schnellere) Variante. Da wir .Net 3.5 einsetzen, verwenden wir gacutil aus folgendem Ordner:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe
Um sich etwas Arbeit beim kopieren in den GAC zu ersparen kann der Visual Studio Post Build Prozess verwendet werden, so kopiert Visual Studio nach jedem Build die neu erstellte DLL in den GAC.
„C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe“ /i „$(TargetPath)“
Nun kann die Test-DLL kompiliert werden und wird automatisch in den GAC kopiert.
Um sicherzustellen ob die DLL auch wirklich im GAC vorhanden ist kann folgender Befehl verwendet werden:
„C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe“ /l „AgenaTraderDLL“
Falls man händisch die DLL aus dem GAC entfernen möchte, kann man dies über den folgenden Befehl tun:
„C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe“ /u „AgenaTraderDLL“
Achtung gacutil wurde in der Kommandozeile als ADMINISTRATOR ausgeführt!
Verwendung unserer DLL im AgenaTrader
Wir starten AgenaTrader und klicken auf: Tools => Programmierung => Programmier Referenzen. Im „Select References“ Fenster erkennen wir unsere DLL im GAC. Über den Karteireiter „Browse“ laden wir unsere DLL seperat in den AgenaTrader und werden anschließend im unteren Fenster den Pfad zur lokalen DLL wiederfinden.
Wenn wir das korrekte ‚using‘ Statement in unsere AgenaScript Files wie Indikatoren oder Conditions hinzufügen, können wir auf die gekapselten Funktionen in unserer DLL zugreifen.
using AgenaTraderDLL;
Im OnBarUpdate() Event eines AgenaScript Indikators oder einer AgenaScript Condition greifen wir auf den statischen Helper zu und schreiben den Wert aus unserer DLL in die Ausgabe des AgenaTrader.
protected override void OnBarUpdate() {
String helloDLLworld = ExternalHelper.Test();
Print(helloDLLworld);
}
Zu guter Schluß müssen wir alle Scripts im AgenaTrader kompilieren.
Der Source Code zu diesem Artikel ist auf unserem GitHub Projekt verfügbar.