Cálculo do lucro de pedidos fechados "HELP - página 2

 
Renat Akhtyamov:

Não, eu não me refiro ao que você já escreveu.
Diga-me em palavras - cálculo do lucro para o qual você está interessado em pedidos fechados
- diariamente
- que gera perdas
- último pedido
ou algo mais?
Descreva a série

Uma série de últimos pedidos fechados "por enquanto".

 
Natashe4ka:

Série de últimos pedidos fechados "por enquanto

Ou seja, você precisa de informações sobre a série de pedidos mais recentemente encerrados, se eu entendi corretamente?

Para implementar esta abordagem, você deve primeiro preencher o conjunto de tickets de pedidos em cada fechamento bem sucedido e depois retirar as informações sobre os pedidos fechados no formulário que você precisa

Você mesmo pode fazer isso?

 

Tente


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:

Tente


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

E se não fechar ao mesmo tempo?

Não é bem assim.

E se você se lembrar ao apresentar o pedido de fechamento, então estará tudo bem.

mas esta linha...

t=OrderCloseTime();

não é necessário.

Ele puxará o total para toda a série

Mas a senhora quer informações mais detalhadas, como eu entendi do primeiro post

 
Renat Akhtyamov:
E se não fechar ao mesmo tempo?
Se a função fechar, tudo vai dar certo
 
Renat Akhtyamov:

Então você precisa de informações sobre a última série fechada de pedidos, se eu entendi corretamente?

Para implementar esta abordagem, você deve primeiro criar uma série de tickets de pedidos no fechamento bem sucedido e depois obter informações sobre os pedidos fechados.

Você mesmo pode fazer isso?

Por favor, aconselhe-nos a usar um exemplo.

Isto é

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

E depois comparar ?

 
Natashe4ka:

É melhor me dar um exemplo.

Isto é

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

E depois comparar ?

Não há problema.

Agora a única coisa que falta esclarecer é como devem ser as informações sobre as ordens fechadas da série ?

É uma transferência ou a quantia deve ser dividida por + e - ?

 

Há um indicador para

i-Profit

Produzlucros atuais para hoje, semana, mês, ano.

 
Natashe4ka:

Um exemplo melhor seria

Aqui está um exemplo:

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

O resto da história

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


Conseguimos isso mesmo que reinicializemos o terminal

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

Há um indicador para

i-Profit

Produzlucros atuais para hoje, semana, mês, ano.

Não é adequado, não há informações durante 10 anos.