Henrik Posted February 22, 2010 Report Posted February 22, 2010 Wie lautet der Befehl, um den aktuellen Kontostand abzufragen?Wenn es geht ohne diese ATM-Geschichte, das ist mir zu umständlich und fehleranfällig. Es muss doch irgendeinen Befehl geben...meinetwegen reicht mir auch Profit/Lost der Strategie, hauptsache ich kriege das in eine Variable zum weiterverarbeiten...Ich finde aber nix. Danke!!
Tommyknocker Posted February 22, 2010 Report Posted February 22, 2010 (edited) Wie lautet der Befehl, um den aktuellen Kontostand abzufragen?Wenn es geht ohne diese ATM-Geschichte, das ist mir zu umständlich und fehleranfällig. Es muss doch irgendeinen Befehl geben...meinetwegen reicht mir auch Profit/Lost der Strategie, hauptsache ich kriege das in eine Variable zum weiterverarbeiten...Ich finde aber nix. Ich hab leider schon lange nichts mehr mit Ninjatrader gemacht, aber auf die schnelle hab ich das gefunden. Da gibts auch ein sample .cs file dazu. Aber scheinbar gibt es wirklich keinen einfachen Zugriff auf den aktuellen Kontostand. Ninjatrader Support Forum Thread Und grad noch was entdeckt, es scheint ab NT7 wohl doch was neues in dieser Richtung zu geben. Allerdings scheinbar noch ohne Dokumentation der Funktion. For Cash Value: GetAccountValue(AccountItem.CashValue)For Realized PnL: GetAccountValue(AccountItem.RealizedProfitLoss) Edited February 22, 2010 by Tommyknocker
Henrik Posted February 23, 2010 Author Report Posted February 23, 2010 Oh, vielen Dank, das hilft mir schon sehr weiter! Das werde ich heuet abend gleich ausprobieren. Wo hast du denn das mit dem frischen NT7-Code gefunden? In dem NT7-Beta-Unterforum von Ninjatrader? Ich schau ja immer in dieser großen PDF-Datei, wo alles, inkl. der Codebefehle für NT 6.5 beschrieben ist, das funzt ja meistens auch für NT7.
Henrik Posted February 23, 2010 Author Report Posted February 23, 2010 Funktioniert super Habs kombiniert mit der E-Mailfunktion:#region Variables private bool sendeMail = false; //Für die Parametereinstellungen bool sendemailcode = false; //Für interne Berechnung ob Mail schon gesendet worden ist protected override void OnBarUpdate() // [...] Code bla bla ggf TimeFrameKürzel if (SendeMail && sendemailcode) //Wenn E-Mail in den Parametern aktiviert und interne E-Mail-Variable auf "true" gesetzt ist { SendMail("absender@email.com", "empfänger@email.com", "(Betreff) Strategie Update", ( "Cash Value = " + GetAccountValue(AccountItem.CashValue) + "\nRealized PuL = " + GetAccountValue(AccountItem.RealizedProfitLoss))); sendemailcode = false; //Setzt die interne Variable wieder auf falsch damit nicht ununterbrochen Mails gesendet werden } //Irgendwo im Code, was nur selten aufgerufen wird, muss nun... sendemailcode = true; //...gesetzt werden. z.B. bei ""EnterLong" oder auch in einem eigenen Timeframe welches stündlich aufgerufen wird, // so wird die E-Mail immer dann geschickt wann man es möchte (nach EnterLong oder alle Stunde) #region Properties [Description("Sendet eine E-Mail in einem Intervall")] [Category("\tE-Mail")] //Eröffnet in den Parametern ganz oben ein eigenes E-Mail-Feld, damit das "true" oder "false" nicht die zu optimierenden Parameter stört public bool SendeMail { get { return sendeMail; } set { sendeMail = value; } } Irgendwo im Code setzt man jetzt "sendemailcode = true;", und dann sendet er eine Mail mit dem Inhalt: Accountgröße und realisierter Profit und Verlust. Dieses Codekürzel irgendwohin setzen, wo es nur ab und zu aufgerufen wird, sonst droht eine E-Mail-Flut.Das Ganze ist über die Parameter (de)aktivierbar.
Tommyknocker Posted February 23, 2010 Report Posted February 23, 2010 Wo hast du denn das mit dem frischen NT7-Code gefunden? In dem NT7-Beta-Unterforum von Ninjatrader? Ja, ich hab einfach das ganze NT Forum nach balance und total profitloss gesucht und bin dann recht rasch auf einen Forumseintrag gestoßen.
BlackburnMV Posted January 13, 2012 Report Posted January 13, 2012 Hallo Henrik, ich komm nochmal zurück auf Deinen sendemailcode für NT. Wo hast Du Ihn im code platziert, damit nur eine email abgeschickt wird? Blackburn
Henrik Posted January 13, 2012 Author Report Posted January 13, 2012 Na dort, wo es nur einmal aufgerufen wird...kommt auf den Code drauf an!
DarthTrader Posted January 14, 2012 Report Posted January 14, 2012 Eine Möglichkeit wäre es den Code in OnPositionUpdate zu positionieren.Diese Methode wird von NT bei jedem Positionswechsel LONG/SHORT -> FLAT, FLAT -> LONG/SHORT aufgerufen: /// <summary> /// Wird nach jedem Positionswechsel aufgerufen. /// <summary> protected override void OnPositionUpdate(IPosition position) { Print("OnPositionUpdate ... Position = " +position.MarketPosition); if (position.MarketPosition == MarketPosition.Flat) { // Sende Email ... } else if (position.MarketPosition == MarketPosition.Long) { // ... } else if (position.MarketPosition == MarketPosition.Short) { // ... } } Beste GrüßeDT 1
BlackburnMV Posted January 14, 2012 Report Posted January 14, 2012 Vielen Dank Das werde ich die nächsten Tage gleich mal ausprobieren. Blackburn
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now