Antwort

Gesamter OPEN P/L für ALLE Währungspaare.

5 Antworten

Steve Grün

Abonnent, bbp_participant, Gemeinschaft, 47 Antworten.

Profil besuchen

vor 6 Jahren #197786

Hallo zusammen,

Kann mir bitte jemand mit einer Kundenfunktion helfen, die die Gesamtsumme in Geld aller offenen Aufträge über ALLE Währungspaare, d.h. über alle Charts, zurückgibt?

Vielen Dank im Voraus

Mit freundlichen Grüßen
Steve

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 6 Jahren #197825

Hallo Steven,

Sicher, ich werde die Funktion veröffentlichen

0

Steve Grün

Abonnent, bbp_participant, Gemeinschaft, 47 Antworten.

Profil besuchen

vor 6 Jahren #197826

Hallo Tomas,

Ich bin mir nicht sicher, wo das Problem in den 3 Kundenfunktionen liegt, die ich codiert habe, also habe ich sie alle unten eingefügt. Ich nehme an, es könnte in jedem der 3 sein.

Im Tester in Mt4 funktioniert es gut, aber wenn ich es auf einem Demokonto laufen lasse, wird der Kontostand zur Gesamtsumme addiert.

Der Code für die drei Kundenfunktionen ist unten aufgeführt:

- Ich initialisiere diese Variable wie folgt
lv_NumOrdersToday = GetAllOrdersOpenedToday(0, "false");

int GetAllOrdersOpenedToday(int direction, string includePending) {
string todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
int tradesOpenedToday = 0;

for(int i=0;i<OrdersHistoryTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {

if(Richtung == 1) {
if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// Überspringen von Kurzaufträgen
weiter;
}
} else if(direction == -1) {
if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) {
// Überspringen langer Aufträge
weiter;
}
}

if(includePending == "false") {
if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// Ausstehende Aufträge überspringen
weiter;
}
}

if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
tradesOpenedToday++;
}
}
}

for (int cc = OrdersTotal() - 1; cc >= 0; cc-) {
if (OrderSelect(cc, SELECT_BY_POS)) {

if(Richtung == 1) {
if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// Überspringen von Kurzaufträgen
weiter;
}
} else if(direction == -1) {
if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP) {
// Überspringen langer Aufträge
weiter;
}
}

if(includePending == "false") {
if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP) {
// Ausstehende Aufträge überspringen
weiter;
}
}

if(TimeToStr( OrderOpenTime(), TIME_DATE) == todayTime) {
tradesOpenedToday++;
}
}
}

return(tradesOpenedToday);
}

- in diese Funktion übergeben wird, ist lv_NumOrdersToday aus der obigen Funktion
double GetAllTotalClosedPLInMoney(int orderMagicNumber, int numberOfLastOrders) {
double pl = 0;
int count = 0;

for(int i=OrdersHistoryTotal(); i>=0; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
zählen++;
pl = pl + BestellungProfit();

if(count >= numberOfLastOrders) break;
}
}
}

zurück(pl);
}

double GetALLOpenPLInMoney(int orderMagicNumber) {
double pl = 0;

for(int cnt = 0; cnt < OrdersTotal(); cnt ++)
{
if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) continue;

pl += OrderProfit();
}

zurück(pl);
}

Die Funktionalität, die ich versuche zu bauen, ist die 2 Funktionen ((GetALLOpenPLInMoney(0) + GetAllTotalClosedPLInMoney(0, lv_NumOrdersToday)) Ergebnisse zusammen und sehen, wenn es über oder unter einem vorbestimmten gedeckelten Profit oder Verlust täglichen Betrag ist und wenn ja, dann ich den Handel auf alle Währungspaare aussetzen.

Wieder einmal, wenn ich in MT4-Tester läuft es funktioniert gut, aber wenn ich auf einem Demo-Konto ausgeführt wird es den Kontostand in die Summe aus einem unbekannten Grund enthalten.

d.h. 5023 statt 23 bei einem 5000er-Konto.

Ich danke Ihnen

Mit freundlichen Grüßen
Steve

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 6 Jahren #197897

Hallo,

bitte überprüfen Sie Ihre Mailbox. Ich habe Ihnen eine Antwort auf die an uns gesendete E-Mail geschickt.

0

Steve Grün

Abonnent, bbp_participant, Gemeinschaft, 47 Antworten.

Profil besuchen

vor 6 Jahren #200400

Hallo Tomas,

Das war das Problem. Eine undokumentierte Funktion und, wie ich annahm, die Art und Weise, wie die Daten gespeichert werden. Siehe Link: https://www.mql5.com/en/forum/126192

Aus dem Link ein Auszug unten:
Der Name von OrdersHistoryTotal() ist ein wenig irreführend, da er auch Saldo- und Kreditauszüge enthält. Diese Methode könnte also potenziell unzuverlässig sein... Eine bessere Lösung wäre, eine Schleife über die Bestellungen in der Historie zu ziehen und zu zählen (und dabei den Saldo und die Kreditauszüge herauszufiltern).

 

Zu Ihrer Information: Obwohl nicht offiziell dokumentiert, sind dies die OrderType() von Salden-/Gutschriftenauszügen, wenn sie ausgewählt sind:

 

Anweisung 'Balance': OrderType()==6
Anweisung 'Kredit': OrderType()==7

 

Ich habe entsprechende Änderungen vorgenommen, und alles funktioniert wie geplant.

 

Nur um Sie zu informieren.

Mit freundlichen Grüßen
Steve

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 6 Jahren #200732

Hallo,

Schön, dass es jetzt bei Ihnen funktioniert. Ich überprüfe jetzt die Funktion "Open P/L", die Sie uns per E-Mail geschickt haben.

0

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)