Silverveins:
Boa noite,
Estou tentando colocar uma função dentro do meu expert para me retornar a soma do lucro e prejuízo do dia até o momento.
Todas as formulas que utilizei até agora me retornam o lucro mas o prejuízo quando tem ele mostra zerado. Alguém saberia me dizer o porque?
Olá,
printa os dados do DEAL, sem filtros, que você descobre!
ticket = HistoryDealGetTicket(cnt);
Print(
HistoryDealGetString(Ticket, DEAL_SYMBOL), " ", HistoryDealGetInteger(Ticket, DEAL_MAGIC), " ",
HistoryDealGetInteger(Ticket, DEAL_TICKET), " ", HistoryDealGetInteger(Ticket, DEAL_ORDER), " ",
HistoryDealGetInteger(Ticket, DEAL_ENTRY), " ", HistoryDealGetDouble(Ticket, DEAL_VOLUME), " ",
HistoryDealGetDouble(Ticket, DEAL_TYPE), " ", HistoryDealGetDouble(Ticket, DEAL_PROFIT), " ",
HistoryDealGetInteger(Ticket, DEAL_POSITION_ID));
Rogerio,
Primeiramente gostaria de agradecer pela resposta.
No dia do backtest teve 2 operaçoes com prejuizo de -14 e uma com 0, me parece que ele ta pegando dois magicnumbers:
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:38.019 2021.09.02 11:22:51 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 0 5 5 1 100.0 1 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 0 5 5 1 100.0 1 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:59 MGLU3 0 5 5 1 100.0 1 0.0 4
Rogerio,
Primeiramente gostaria de agradecer pela resposta.
No dia do backtest teve 2 operaçoes com prejuizo de -14 e uma com 0, me parece que ele ta pegando dois magicnumbers:
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 0 3 3 1 100.0 0 -14.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 MGLU3 1 2 2 0 100.0 1 0.0 2
2022.05.02 22:00:37.524 2021.09.01 16:40:17 0 1 0 0 0.0 2 10000.0 0
2022.05.02 22:00:38.019 2021.09.02 11:22:51 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 0 5 5 1 100.0 1 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 0 5 5 1 100.0 1 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:53 MGLU3 1 4 4 0 100.0 0 0.0 4
2022.05.02 22:00:38.019 2021.09.02 11:22:59 MGLU3 0 5 5 1 100.0 1 0.0 4
Pelo o que entendi ai o Expert esta com Magicnumber 1 e como ele esta apurando o resultado no MAgicnumber 0 então esta dando este erro. Agora não sei oque fazer.
Olá,
pelo que estou lendo, parece, que precisa é aprender a programar.
Rapaz, você está confundindo Ordem (order), posição e negócio(deal). dá uma olhada nesse tópico aqui que vai solucionar seu problema
- 2022.04.19
- www.mql5.com
Então @Silverveins
Primeiro é importante entender o conceito por detrás das ordens que são estabelecidas em cada negócio.
As ordens serão parte de uma posição que você negociou, como você solicitou um total
HistoryDealsTotal()
deve passar procurando o ID da sua posição
//armazente este id ao adquirir uma nova posição PositionGetInteger(POSITION_IDENTIFIER); //Quando percorrer as posições como fez, continue sua busca pelo ticket, contudo, cheque a ID ulong tmp_ticket = HistoryDealGetTicket(i); ulong tmp_id = HistoryDealGetInteger(tmp_ticket, DEAL_POSITION_ID);
que é um identificador único e então busque as ordens que esta posição gerou.
Quanto a requisitar o saldo atual, quando estabelecer uma posição
//Selecione; PositionSelect(); //Recupere o valor do saldo para essa posição; double saldo_corrente = PositionGetDouble(POSITION_PROFIT);
No que diz respeito ao magic number, vi que você comentou o parâmetro na chamada da função, logo, caso ele não tenha sido especificado corretamente, qualquer valor virá dentro da sua comparação
//Ele esta comentadodouble TOTAL_PROFIT_OF_OPEN_POSITIONS(/*int magicNum*/)//Então, qualquer valor pode esta aí dentro se essa variável, até mesmo lixo de memória, se ela não estiver sendo tratada em algum outro lugar HistoryDealGetInteger(ticket, DEAL_MAGIC) == magicNum;
Acrescento também que ao invés de fazer
datetime time_start = TimeCurrent ()- TimeCurrent ()% 86400; //Porque não faz em OnInit()? datetime time_start = TimeCurrent() - 86400; //visto que terá o real início em que o EA começou a rodar e só fará essa requisição e cálculo uma única vez
Outra pergunta e sugestão é; você esta fazendo este loop no evento OnTick()? Caso sim, evite isso, deveria até mesmo evitar fazer um loop sobre o histórico e carregar somente os dados sobre a última posição que adquiriu e ir acrescentando-os em um lugar.
Caso pense sobre isso, pode fazer uma checagem entre as ID's das posições e, caso elas mudem, então você faz
//Uma seleção do histórico referente apenas a última posição HistorySelectByPosition(ultima_posicao);
Quanto a evitar o uso dessa requisição em no evento Ontick(), pode utilizar o evento OnTrade() para isso.
Enfim, acredito que estes passos sejam suficientes para você resolver este problema aí
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa noite,
Estou tentando colocar uma função dentro do meu expert para me retornar a soma do lucro e prejuízo do dia até o momento.
Todas as formulas que utilizei até agora me retornam o lucro mas o prejuízo quando tem ele mostra zerado. Alguém saberia me dizer o porque?