Resultado de operações fechadas.

 

Pessoal, estou usando essa função para pegar o resultado em aberto e o resultado fechado do dia, o resultado em aberto é corretamente apresentado, mas o resultado fechado não (Calculate closed profit).

Estou tentando encerrar as operações quando resultado total atinge a meta do dia (dailyProfit = closedProfit + openProfit;) Mas o closedProfit  não retorna nenhum valor.


void UpdateDailyProfit()
{
    datetime dayStart = iTime(_Symbol, PERIOD_D1, 0);
    HistorySelect(dayStart, TimeCurrent());
    double closedProfit = 0;
    double openProfit = 0;
    
    // Calculate closed profit (include DEAL_ENTRY_OUT and DEAL_ENTRY_OUT_BY)
    for(int i = HistoryDealsTotal()-1; i >= 0; i--)
    {
        ulong ticket = HistoryDealGetTicket(i);
        ENUM_DEAL_ENTRY entryType = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket, DEAL_ENTRY);
        if(HistoryDealGetInteger(ticket, DEAL_MAGIC) == MagicNumber && 
           (entryType == DEAL_ENTRY_OUT || entryType == DEAL_ENTRY_OUT_BY))
        {
            closedProfit += HistoryDealGetDouble(ticket, DEAL_PROFIT);
        }
    }
    
    // Calculate open profit
    for(int i = PositionsTotal()-1; i >= 0; i--)
    {
        ulong ticket = PositionGetTicket(i);
        if(PositionGetString(POSITION_SYMBOL) == _Symbol && 
           PositionGetInteger(POSITION_MAGIC) == MagicNumber)
        {
            openProfit += PositionGetDouble(POSITION_PROFIT);
        }
    }
    
    dailyProfit = closedProfit + openProfit;
}
 
Thiago LopesPessoal, estou usando essa função para pegar o resultado em aberto e o resultado fechado do dia, o resultado em aberto é corretamente apresentado, mas o resultado fechado não (Calculate closed profit). Estou tentando encerrar as operações quando resultado total atinge a meta do dia (dailyProfit = closedProfit + openProfit;) Mas o closedProfit  não retorna nenhum valor.

Teste esse:

// Obtém o saldo atual da conta
   double account_deposit = AccountInfoDouble(ACCOUNT_BALANCE) + AccountInfoDouble(ACCOUNT_CREDIT);

// Calcula o resultado das operações encerradas hoje
   double closed_result_today = 0.0;
   datetime start_of_day = iTime(_Symbol, PERIOD_D1, 0);
   HistorySelect(start_of_day, TimeCurrent());
   for(int i = 0; i < HistoryDealsTotal(); i++)
     {
      ulong deal_ticket = HistoryDealGetTicket(i);
      if(IsGlobalMagicNumber(HistoryDealGetInteger(deal_ticket, DEAL_MAGIC)))
        {
         closed_result_today += HistoryDealGetDouble(deal_ticket, DEAL_PROFIT);
        }
     }

// Calcula o depósito inicial do dia
   double daily_deposit = account_deposit - closed_result_today;


// CONTINUA . . .
 
Thiago Lopes:

Pessoal, estou usando essa função para pegar o resultado em aberto e o resultado fechado do dia, o resultado em aberto é corretamente apresentado, mas o resultado fechado não (Calculate closed profit).

Estou tentando encerrar as operações quando resultado total atinge a meta do dia (dailyProfit = closedProfit + openProfit;) Mas o closedProfit  não retorna nenhum valor.


Não sei se pode ser o caso, mas se seu algoritmo tem reversao teria que incluir tambem o DEAL_ENTRY_INOUT, o DEAL_ENTRY_OUT_BY seria pra detectar fechamento pelo closed by em conta hedging.

 
Ricardo Rodrigues Lucca #:

Não sei se pode ser o caso, mas se seu algoritmo tem reversao teria que incluir tambem o DEAL_ENTRY_INOUT, o DEAL_ENTRY_OUT_BY seria pra detectar fechamento pelo closed by em conta hedging.

É exatamente nesse ponto o problema, o EA não identifica o lucro quando a operação é fechada pelo close by. quando o fechamento é pelo TP/SL normal, ele identifca.