Gewinnberechnung von abgeschlossenen Aufträgen "HELP" - Seite 2

 
Renat Akhtyamov:

Nein, ich meine nicht das, was Sie bereits geschrieben haben.
Nennen Sie mir in Worten die Gewinnberechnung für die abgeschlossenen Aufträge, an denen Sie interessiert sind
- täglich
- verlustreich
- letzte Bestellung
oder etwas anderes?
Beschreiben Sie die Serie

Eine Reihe letzter abgeschlossener Aufträge "vorläufig"

 
Natashe4ka:

Reihe der letzten abgeschlossenen Aufträge "vorläufig"

Das heißt, Sie benötigen Informationen über die zuletzt abgeschlossene Reihe von Aufträgen, wenn ich das richtig verstehe?

Um diesen Ansatz zu implementieren, sollten Sie zunächst das Array der Auftragstickets bei jedem erfolgreichen Abschluss füllen und dann die Informationen zu den abgeschlossenen Aufträgen in der benötigten Form herausziehen

Können Sie es selbst tun?

 

Versuchen Sie


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}} 

 return(LastProfit);
}
 
Vitaly Muzichenko:

Versuchen Sie


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
     }
    }
   }
  }
return(LastProfit);
}

Was ist, wenn sie nicht zur gleichen Zeit geschlossen wird?

Nicht ganz richtig.

Und wenn Sie sich bei der Übermittlung des Abschlussauftrags daran erinnern, dann ist alles in Ordnung.

aber diese Zeile...

t=OrderCloseTime();

ist nicht erforderlich.

Es wird die Gesamtzahl für die gesamte Serie ermittelt

Aber Madam möchte genauere Informationen, wie ich dem ersten Beitrag entnommen habe

 
Renat Akhtyamov:
Was ist, wenn sie nicht zur gleichen Zeit geschlossen wird?
Wenn die Funktion geschlossen wird, klappt alles
 
Renat Akhtyamov:

Sie benötigen also Informationen über die letzte abgeschlossene Reihe von Aufträgen, wenn ich das richtig verstehe?

Um diesen Ansatz zu implementieren, sollten Sie zunächst ein Array von Auftragstickets bei erfolgreichem Abschluss erstellen und dann Informationen über abgeschlossene Aufträge abrufen

Können Sie es selbst tun?

Bitte geben Sie uns ein Beispiel.

D.h.

if (cnt>0) Ticket=OrderTicket()-1;

Und dann vergleichen?

 
Natashe4ka:

Nennen Sie mir lieber ein Beispiel.

D.h.

if (cnt>0) Ticket=OrderTicket()-1;

Und dann vergleichen?

Kein Problem.

Jetzt bleibt nur noch zu klären, wie die Informationen über die abgeschlossenen Aufträge der Serie aussehen sollen ?

Handelt es sich um eine Überweisung oder muss der Betrag durch + und - geteilt werden?

 

Es gibt einen Indikator für

i-Profit

Gibt dieaktuellen Gewinne für heute, Woche, Monat und Jahr aus.

 
Natashe4ka:

Ein besseres Beispiel wäre

Hier ist ein Beispiel:

int ClosePosition(int type=-1,int mg=-1) {
GlobalVariableSet(GetGlobalVariableName("LastProfit"), TimeCurrent()); // запомним время закрытия
// здесь код закрытия всех и сразу, нужен цикл, чтоб не выходил с функции до полного закрытия всех
}

Der Rest der Geschichte

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых позиций    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}}
return(LastProfit);
}

//===============================================================================================
//----------------------- Создает и возвращает имя глобальной переменной -----------------------+
//===============================================================================================
string GetGlobalVariableName(string name="", string symb="0") {
if(symb=="0") { symb=Symbol();}
  if(!MQLInfoInteger(MQL_TESTER)) {
   return(prefix+symb+"_"+(string)AccountInfoInteger(ACCOUNT_LOGIN)+"_"+MQLInfoString(MQL_PROGRAM_NAME)+"_"+name);
  } else {
   return(prefix+symb+"_"+(string)AccountInfoInteger(ACCOUNT_LOGIN)+"_"+MQLInfoString(MQL_PROGRAM_NAME)+"_tester"+"_"+name);
}}


Diese Meldung erscheint auch, wenn wir das Terminal neu starten

void OnTick()
{
   Comment( LastProfitCL(-1, (datetime)GlobalVariableGet(GetGlobalVariableName("LastProfit"))) );
}
 
Alekseu Fedotov:

Es gibt einen Indikator für

i-Profit

Gibt dieaktuellen Gewinne für heute, Woche, Monat und Jahr aus.

Sie ist nicht geeignet, es gibt keine Informationen für 10 Jahre.