Calcul du profit d'un ordre fermé "HELP - page 2

 
Renat Akhtyamov:

Non, je ne veux pas dire ce que vous avez déjà écrit.
Dites-moi en quelques mots - le calcul du bénéfice pour les ordres fermés qui vous intéressent.
- quotidien
- déficitaire
- dernière commande
ou autre chose ?
Décrire la série

Une série de derniers ordres fermés "pour l'instant".

 
Natashe4ka:

Série de dernières commandes fermées "pour l'instant".

En d'autres termes, vous avez besoin d'informations sur la série d'ordres la plus récemment clôturée, si je comprends bien ?

Pour mettre en œuvre cette approche, vous devez d'abord remplir le tableau des tickets de commande à chaque clôture réussie, puis extraire les informations sur les commandes clôturées sous la forme dont vous avez besoin.

Pouvez-vous le faire vous-même ?

 

Essayez


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:

Essayez


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);
}

Et si ça ne se ferme pas en même temps ?

Ce n'est pas tout à fait ça.

Et si vous vous en souvenez au moment de soumettre l'ordre de fermeture, alors tout ira bien.

mais cette ligne...

t=OrderCloseTime();

n'est pas nécessaire.

Le total de toute la série sera affiché

Mais madame veut des informations plus détaillées, comme je l'ai compris dans le premier message.

 
Renat Akhtyamov:
Et si ça ne se ferme pas en même temps ?
S'il y a une fonction à fermer, tout s'arrangera.
 
Renat Akhtyamov:

Vous avez donc besoin d'informations sur la dernière série d'ordres clôturés, si je comprends bien ?

Pour mettre en œuvre cette approche, vous devez d'abord créer un tableau de tickets de commande à la clôture réussie, puis extraire des informations sur les commandes clôturées.

Pouvez-vous le faire vous-même ?

Veuillez nous conseiller d'utiliser un exemple.

I.e.

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

Et ensuite comparer ?

 
Natashe4ka:

Vous feriez mieux de me donner un exemple.

I.e.

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

Et ensuite comparer ?

Pas de problème.

Maintenant, il ne reste plus qu'à clarifier comment les informations sur les ordres fermés de la série devraient se présenter ?

S'agit-il d'un transfert ou le montant doit-il être divisé par + et - ?

 

Il existe un indicateur pour

i-Profit

Produit lesbénéfices actuels pour aujourd'hui, la semaine, le mois, l'année.

 
Natashe4ka:

Un meilleur exemple serait

Voici un exemple :

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

La suite de l'histoire

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых позиций    |
//+----------------------------------------------------------------------------+
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);
}}


Nous l'obtenons même si nous redémarrons le terminal

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

Il existe un indicateur pour

i-Profit

Produit lesbénéfices actuels pour aujourd'hui, la semaine, le mois, l'année.

Il n'est pas adapté, il n'y a aucune information depuis 10 ans.
Raison: