Por favor, como consigo acompanhar a compra "a mercado" pelo CTrade? Há situações frequentes em que o volume da compra não é retornado corretamente pelo Trade.RestultRetcode() mesmo com resultado TRADE_RETCODE_DONE. Inicialmente, julguei que fosse um problema da corretora Rico (XP), que às vezes efetua operações com diferentes taxas de latência em operações dentro da XP, menor que o tempo de atualização de algum cache de memória. Acrescentei um sleep(15000) de 15 segundos, mas continuo tendo problema com o resultado do volume negociado. No simulador não encontro problema nenhum.
Ademais, como rastrear os valores de cada "deal", quando é dividido em lotes de preços diferentes? No Journal ou "Terminal" aparecem as informações, mas como obtenho isso no código?
Procura por OnTrade aqui no forum que tinha um exemplo de um colega sobre como rastrear as execuções. Essa forma colocando um Sleep entre as coisas é errado porque muitas vezes pra ter novos dados, a função que esta executando precisa terminar e na proxima chamada só que os dados são disponibilizados....
Procura por OnTrade aqui no forum que tinha um exemplo de um colega sobre como rastrear as execuções. Essa forma colocando um Sleep entre as coisas é errado porque muitas vezes pra ter novos dados, a função que esta executando precisa terminar e na proxima chamada só que os dados são disponibilizados....
Agradeço a resposta. A respeito do OnTrade(), como essa função poderia me ajudar? O código que mostrei, executo-o no OnTick().
Sobre o exemplo do colega a respeito de rastrear execuções: só me aparece sua resposta a esta minha pergunta. Poderia me passar alguma informação adicional para procurar? Nome, ou palavra-chave?
Minha pergunta é bem objetiva: como obtenho aquelas informações de "Deal" que o journal ou expert exibe ao executar uma ordem? Embora a função espere até 60 segundos (eu medi pela Rico), o CTrade.ResultRetcode() parece falhar em algumas situações, ou provavelmente eu precise tomar algum cuidado que me escapou. De qualquer modo, o Resultcode é incompleto, pois a execução no mercado pode dividir o lote em várias ordens com preços diferentes, e o Retcode() só me fornece um único preço (não reparei se é o último, ou o maior).
Acredito que você esteja procurando por HistoryDealGetDouble() . . .
Veja também:
if(!HistorySelect(0, TimeCurrent())) { Print("Erro ao carregar o histórico!"); return; } int total_deals = HistoryDealsTotal(); Print("Total de deals no histórico: ", total_deals); for(int j = 0; j < total_deals; j++) { ulong ticket = HistoryDealGetTicket(j); Print("Índice: ", j, " Ticket: ", ticket, " Símbolo: ",HistoryDealGetString(ticket,DEAL_SYMBOL)); Print(" Ordem n.", HistoryDealGetInteger(ticket, DEAL_ORDER), " Tipo: ", HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_TYPE_BUY ? "compra" : "venda"); Print(" Volume = ", (int)HistoryDealGetDouble(ticket, DEAL_VOLUME), " Preço = R$", HistoryDealGetDouble(ticket, DEAL_PRICE)); }
Agradeço a resposta. A respeito do OnTrade(), como essa função poderia me ajudar? O código que mostrei, executo-o no OnTick().
Sobre o exemplo do colega a respeito de rastrear execuções: só me aparece sua resposta a esta minha pergunta. Poderia me passar alguma informação adicional para procurar? Nome, ou palavra-chave?
Minha pergunta é bem objetiva: como obtenho aquelas informações de "Deal" que o journal ou expert exibe ao executar uma ordem? Embora a função espere até 60 segundos (eu medi pela Rico), o CTrade.ResultRetcode() parece falhar em algumas situações, ou provavelmente eu precise tomar algum cuidado que me escapou. De qualquer modo, o Resultcode é incompleto, pois a execução no mercado pode dividir o lote em várias ordens com preços diferentes, e o Retcode() só me fornece um único preço (não reparei se é o último, ou o maior).
Tu já deve ter experimentado nesse momento mas o HistorySelect serve pra filtrar por data que dai se quiser receber só as de hoje é facil controlar ali do que fazer uns ifs em baixo. Mas que bom que deu certo.
Isso, o Vinicus tem razão é OnTradeTransaction aquele codigo dele nessa resposta naquele ultimo link que ele colocou. Se olhar o código pra mim é a melhor forma de fazer o rastreamento. Eu tinha separado aquele codigo aqui e não lembrava o tópico.
Tu já deve ter experimentado nesse momento mas o HistorySelect serve pra filtrar por data que dai se quiser receber só as de hoje é facil controlar ali do que fazer uns ifs em baixo. Mas que bom que deu certo.
Encontrei uma informação valiosa de Vladimir nesse assunto a respeito do HistorySelect.
Essa recomendação fez meu algoritmo encontrar deals sumidos: utilizar SEMPRE o horário do servidor, e selecionar uma data para o futuro, para garantir a recuperação das informações:
HistorySelect(dataInicio - 60*60*24, TimeTradeServer()+60*60*24);
"Melhor sobrar do que faltar".
- 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
Por favor, como consigo acompanhar a compra "a mercado" pelo CTrade? Há situações frequentes em que o volume da compra não é retornado corretamente pelo Trade.RestultRetcode() mesmo com resultado TRADE_RETCODE_DONE. Inicialmente, julguei que fosse um problema da corretora Rico (XP), que às vezes efetua operações com diferentes taxas de latência em operações dentro da XP, menor que o tempo de atualização de algum cache de memória. Acrescentei um sleep(15000) de 15 segundos, mas continuo tendo problema com o resultado do volume negociado. No simulador não encontro problema nenhum.
Ademais, como rastrear os valores de cada "deal", quando é dividido em lotes de preços diferentes? No Journal ou "Terminal" aparecem as informações, mas como obtenho isso no código?