Daut Junior:
Olá Daut
O DEAL_MAGIC de operações manuais é sempre zero. Você pode sair dessa lendo a posição de DEAL_POSITION_ID e verificar se o POSITION_MAGIC e igual ao do EA.
Rogerio Giannetti Torres #:
Olá Daut
O DEAL_MAGIC de operações manuais é sempre zero. Você pode sair dessa lendo a posição de DEAL_POSITION_ID e verificando se o POSITION_MAGIC e igual ao do EA.
Grande Rogério, muito obrigado! Vou tentar já..
Abraços,
Srs., podem me ajudar a achar o lucro ou prejuizo total do dia, estou tentando o codigo abaixo mas quando tem prejuizo so aparece 0
datetime time_start = (datetime) (86400*(((ulong)TimeCurrent())/86400));/*iTime(_Symbol, PERIOD_D1, 0);*/ double result = 0.0; ulong ticket; int cnt; if(HistorySelect(time_start, TimeCurrent())) { for(cnt = HistoryDealsTotal() - 1; cnt >= 0; cnt--) { ticket = HistoryDealGetTicket(cnt); if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == magicNum) { result += HistoryDealGetDouble(ticket, DEAL_PROFIT); } } } else { Print(_Symbol, " - Erro ao recuperar o histórico de operações..."); } return(result); }
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Boa tarde!
Estou desenvolvendo um EA (MQL5), e preciso obter o lucro total das posições fechadas, desde o início da conta.
Estou usando a função abaixo:
double Lucro_Total(int magicnumber)
{
HistorySelect(StringToTime(TimeToString("01/01/1990", TIME_DATE)), INT_MAX);
int total = HistoryDealsTotal();
double result=0;
for(int i = 0; i < total; i++)
{
ulong Ticket = HistoryDealGetTicket(i);
if(HistoryDealGetInteger(Ticket, DEAL_MAGIC) == magicnumber
&& HistoryDealGetInteger(Ticket, DEAL_ENTRY) != DEAL_ENTRY_IN)
{
result+= HistoryDealGetDouble(Ticket, DEAL_PROFIT);
}
}
return result;
}
Ela me retorna o lucro de todas a posições fechadas pelo EA, mas as que eu, por ventura, fecho manualmente, a função não retorna.
Mesmo eu fechando manualmente, o número mágico da ordem permanece o da abertura pelo robô, mas não sei se pelo fato de não ter TP e nem SL (por conta do fechamento manual) o HistoryDealsTotal não consegue ler.
Se alguém já passou por isso, conseguiu resolver, e puder compartilhar, ficarei agradecido.
Obrigado!
Abs.