Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fragen zur NT Programmierung

Geschrieben

nachdem ich nun schon ein halbes Jahr mit NT programmiere und ich endlich von der Ein-Klassen-Programmierung weg kommen möchte (Ich wurde mal zum Programmierer ausgebildet, daher sind mir OO-Prinizpien bekannt - aber noch nicht alles c# spezifische, erst recht nicht .net :/ ) habe ich mir ein paar Gedanken zur Aufteilung von Klassen gemacht.

 

Daraus sind ein paar (allgemeine) Fragen entstanden:

 

Nutzt Ihr den Ninjascript Editor für grössere Scripte? Bie mir funktioniert das Code-Folding nicht immer und dann ist es ein ewiges scrollen - was gibt es sonst für Alternativen (VS hab ich in einer VM schon mal getestet) die auch ein Intellisense unterstützen?

 

Ist es möglich das OrderHandling in eine eigene Klasse auszulagern ohne diese von Strategy abzuleiten?

Was für Ansätze habt ihr sonst dafür gefunden (einfach alle "Framework-Methoden" in die UserDefinedMethods.cs (partial der Strategy-Klasse)?

 

Schreibt ihr lieber Logfiles in Textfiles oder eine DB?

Ich finde eine DB zwar "cooler" - aber umso mehr "Umsysteme" angebunden werden von welchen die Strategy abhängig ist umsomehr leidet die Stabilität.

 

Wenn ich mir eine "Hilfs"-Klasse in VS schreibe - wie bekomme ich sie in NT? (In der lokalen NT-Installation wohl über VS -> Projekt öffnen und dort anhängen -> aber wie auf andere Nicht-Developer-Systeme?)

 

danke und sonniges Wochenende,

askerix

Featured Replies

Geschrieben

Nutzt Ihr den Ninjascript Editor für grössere Scripte? Bie mir funktioniert das Code-Folding nicht immer und dann ist es ein ewiges scrollen - was gibt es sonst für Alternativen (VS hab ich in einer VM schon mal getestet) die auch ein Intellisense unterstützen?

Hallo askerix,

 

ich entwickle ein Handelssystem, das nach markttechnischen Prinzipien arbeitet. Die Komplexität des Projektes ist rasant gewachsen. Ich kam mit den UserDefinedMethods.cs sehr schnell an Grenzen. Aus diesem Grund habe ich die gesamte Logik aus den Ninja Scripten ausgelagert. Ich entwickle jetzt unter Visual Studio Pro und benutzte C#. Es wird eine DLL erzeugt, die in einen NinjaTrader Strategy-Script eingebunden wird.

 

Ist es möglich das OrderHandling in eine eigene Klasse auszulagern ohne diese von Strategy abzuleiten?

Was für Ansätze habt ihr sonst dafür gefunden (einfach alle "Framework-Methoden" in die UserDefinedMethods.cs (partial der Strategy-Klasse)?

Ich habe das gesamte Orderhandling ebenfalls ausgelagert. Leider ist es mir nicht gelungen, die NT Klassen IOrder, ... I*, in das externe Projekt einzubinden. ich muss deshalb die I*Objekte in eigene (bei mir MtI*) Objekte konvertieren.

 

Die OnOrderUpdate-Methode in NT sieht (z.Z.) bei mir folgendermaßen aus:

 

	protected override void OnOrderUpdate(NinjaTrader.Cbi.IOrder order)
       {
		// Order uns Mt-Format konvertieren
		MtIOrder mtIOrder = fillMtIOrder(order, null);
		
		// Entry-Order verarbeiten
		if (order.Name.Substring(0, 1) == "E")
		{
			workbenchController.WorkbenchModel.OnOrderUpdateEntryOrder(mtIOrder, order);
			return;
		}
		
		// Exit-Order verarbeiten
           if (order.Name.Substring(0, 1) == "X") 
           {
               workbenchController.WorkbenchModel.OnOrderUpdateStopLossOrder(mtIOrder, order);
               return;
           }						
	}

 

 

Schreibt ihr lieber Logfiles in Textfiles oder eine DB?

Z.Z. logge ich in Textfiles. Ich hatte zwar mal mit MySQL experimentiert. Habe das aber erstmal auf Eis gelegt.

Geschrieben

Ich arbeite seit 15 Jahren in der Softwareentwicklung. Unter anderem als Entwickler, Architekt, Berater, Administrator und was

es sonst alles noch so gibt. Die Prinzipien der Objektorientierung wie Kapselung, Wiederverwendung, Polymorphismus, ...

sind Teil meiner täglichen Arbeit.

 

Als ich vor einigen Jahren mit NT angefangen habe, wollte ich genau das 1:1 umsetzen und bin ähnlich wie Ihr an die Sache

rangegangen. Nach einiger Zeit, mehr Erfahrung und viel bezahlten Lehrgeld habe ich folgende Punkte verinnerlicht:

 

  • Passe Dich den Gegebenheiten an
  • Je einfacher, desto eher wird es funktionieren
  • Wiederverwendung ja, aber nicht um jeden Preis
  • NT bestimmt wo es lang geht

 

Ich möchte jetzt nicht weiter über die verschiedenen Ansätze philosophieren, aber ich verwende nur eine weitere Zwischenklasse

nach den UserDefinedMethods, um meine eigenen Methoden, Variablen und weitere Prüfungen zentral zu verwalten.

 

Das reicht mir vollkommen, denn die Strategien haben selten mehr als 1000 Zeilen Code, eher weniger.

Dabei sind nur gut 20% unterschiedlich zu anderen Ansätzen. Exits wiederholen sich sehr oft,

so dass man diese noch in eigene Indikatoren auslagern könnte. Allerdings sind es meist die

Nuancen in den jeweiligen Strategien, die dann doch wieder anders sind und da ist es für mich einfacher

den Code direkt vor Ort zu haben.

 

Über die eigene Zwischenklasse hatte ich auch mal in meinem Blog was geschrieben:

http://dt-trading.blogspot.com/search/label/Code-Snippets

 

Auch wenn hier noch UserDefinedMethods.cs steht, wollte ich diese Methoden komplett selbst verwalten

und habe mir noch eine weitere Vererbungsebene eingebaut, die bei mir nun DT_BaseStrategy.cs heißt.

 

Ich komme mit diesem Ansatz sehr gut klar, nur wenn man Code austauschen oder weitergeben möchte ist es etwas schwieriger,

da dann immer mehrere Klassen und Methoden mit exportiert werden müssen. Ein weiteres Problem ist natürlich die Code-Completion,

die bereits angesprochen wurde. Da man aber die Methoden und Varianten mit der Zeit kennt, ist das zu vernachlässigen.

 

Dennoch kann ich SharpDevelop als weitere Entwicklungsumgebung empfehlen. Gerade zum Debuggen ist diese freie Software gut zu gebrauchen.

 

Beste Grüße

DT

Geschrieben
Bezüglich Logging: schau dir mal die NLog bzw. Log4Net Projekte an, und auch kompatible Log-Viewer wie Sentinel oder Gibraltar. Damit ist man viel flexibler als wenn man einfauch nur Text-Files erstellt. Das erfordert zwar etwas Einarbeitungszeit, machtg sich m.E. aber sicher bezahlt.
Geschrieben
  • Autor

Hallo zusammen,

 

vielen Dank für Euren Input, gibt einiges anzuschauen!

 

Ich möchte jetzt nicht weiter über die verschiedenen Ansätze philosophieren, aber ich verwende nur eine weitere Zwischenklasse

nach den UserDefinedMethods, um meine eigenen Methoden, Variablen und weitere Prüfungen zentral zu verwalten.

..

Auch wenn hier noch UserDefinedMethods.cs steht, wollte ich diese Methoden komplett selbst verwalten

und habe mir noch eine weitere Vererbungsebene eingebaut, die bei mir nun DT_BaseStrategy.cs heißt.

DT,

heisst dass, DT_BaseStrategy erbt von "Strategy" und deine eigentliche Stragtegy-Klasse erbt von DT_BaseStrategy? Dieser Ansatz kam mir nämlich gestern vorm einschlafen ;-) . Kann NT damit umgehen und an den richtigen Orten seinen eigenen Code einpflanzen, wenn meine Strategy-Klasse nicht direkt von "Strategy" erbt?

Dies würde das Problem von Codeänderungen in der UserDefinedMethods.cs umgehen (nach jedem unvorsichtigen Compilieren könnten angewandte Strategien nicht mehr richtig funktionieren) und man könnte eine Versionierung der eigenen BaseStrategy einführen...

Geschrieben

heisst dass, DT_BaseStrategy erbt von "Strategy" und deine eigentliche Stragtegy-Klasse erbt von DT_BaseStrategy? Dieser Ansatz kam mir nämlich gestern vorm einschlafen ;-) . Kann NT damit umgehen und an den richtigen Orten seinen eigenen Code einpflanzen, wenn meine Strategy-Klasse nicht direkt von "Strategy" erbt?

Dies würde das Problem von Codeänderungen in der UserDefinedMethods.cs umgehen (nach jedem unvorsichtigen Compilieren könnten angewandte Strategien nicht mehr richtig funktionieren) und man könnte eine Versionierung der eigenen BaseStrategy einführen...

 

Genau so sieht es bei mir zurzeit aus ...

Geschrieben
  • Autor

Super, vielen Dank, dann werde ich den Ansatz mal weiter verfolgen

 

askerix

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.