Jump to content
Tom Next - Daytrading Community

In Strategie den aktuellen Kontostand abfragen


Henrik

Recommended Posts

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!! :tongue:

Link to comment
Share on other sites

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 by Tommyknocker
Link to comment
Share on other sites

Oh, vielen Dank, das hilft mir schon sehr weiter! :tongue: 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.

Link to comment
Share on other sites

Funktioniert super :tongue:

 

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.

Link to comment
Share on other sites

  • 1 year later...

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üße

DT

  • Upvote 1
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...