Jump to content
Tom Next - Daytrading Community

Fragen zur NT Programmierung


askerix

Recommended Posts

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

Link to comment
Share on other sites

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.

  • Upvote 3
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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 ...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...