Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXI): classes de negociação - objeto básico de negociação multiplataforma" - página 2
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
Obrigado, este é um trabalho importante e útil....
Obrigado, este é um trabalho importante e útil....
De nada
Olá Artyom - existe uma maneira mais fácil de obter o número do tíquete depois de fazer uma ordem ou abrir uma posição? Isso parece muito complicado :-(
Os consultores de teste exibem todos os dados da última ordem colocada ou posição aberta. Isso significa que a biblioteca conhece esses dados. Ela implementa a funcionalidade de eventos, e a biblioteca relata todos os eventos definidos. Dessa forma, você precisa controlar esses eventos e obter o objeto da última ordem ou posição e, a partir dele, obter um tíquete (e todos os outros parâmetros da ordem ou posição). Ainda não é possível dar nenhum exemplo. Mas voltarei em breve e poderei ajudar.
Você pode ver por si mesmo onde os consultores de teste obtêm os dados do evento e os imprimem no registro. Da mesma forma, você pode acessar o mesmo ponto em seu programa e obter dados desses eventos.
В тестовых советниках же показываются все данные последнего выставленного ордера или открытой позиции. Это означает, что библиотека знает эти данные. В ней реализован событийный функционал, и о всех установленных событиях библиотека сообщает. Соответственно, вам нужно контролировать эти события и получать объект последнего ордера или позиции, а из него брать тикет (и все остальные параметры ордера или позиции). Сейчас пока нет возможности привести какой-либо пример. Но в скором времени вернусь и смогу помочь.
Можете самостоятельно поглядеть откуда тестовые советники берут данные о событиях и распечатывают их в журнал. Соответственно, можете из своей программы получить доступ к той же точке и брать данные от этих событий.
Os consultores de teste exibem todos os dados da última ordem colocada ou posição aberta. Isso significa que a biblioteca conhece esses dados. Ela implementa a funcionalidade de eventos, e a biblioteca relata todos os eventos definidos. Dessa forma, você precisa controlar esses eventos e obter o objeto da última ordem ou posição e, a partir dele, obter um tíquete (e todos os outros parâmetros da ordem ou posição). Ainda não é possível dar nenhum exemplo. Mas voltarei em breve e poderei ajudar.
Você pode ver por si mesmo onde os consultores de teste obtêm os dados do evento e os imprimem no registro. Da mesma forma, você pode acessar o mesmo ponto em seu programa e obter dados desses eventos.
Sim, eu entendo - estou dando uma olhada mais de perto e me perguntando se tenho a garantia de que meu manipulador de eventos será chamado imediatamente e, se várias ordens/posições tiverem sido solicitadas, que tipo de análise preciso realizar para garantir que eu combine corretamente os eventos com cada solicitação... tudo isso apenas para descobrir o número do ticket que, por exemplo, para ordens pendentes, a biblioteca recebe em 'm_result' dentro de CTradeObj::SetOrder()
É por isso que eu acho que seria mais útil que o número do tíquete (ou -1 se não for bem-sucedido) fosse retornado de CEngine::PlaceBuyLimit() e de toda essa família de métodos, porque quando você coloca uma ordem ou abre uma posição, na maioria das vezes você quer registrar imediatamente o número do tíquete para poder consultá-lo mais tarde... Na minha humilde opinião, forçar o usuário do DoEasy a implementar o tratamento de eventos para isso faz com que a biblioteca pareça desnecessariamente complicada .
Provavelmente há um bom motivo para a sua abordagem, portanto, não sei se você concorda; caso contrário, eu gostaria muito de entender o raciocínio por trás da sua decisão de design ;-)
Sim, eu entendo - estou dando uma olhada mais de perto e me perguntando se tenho a garantia de que meu manipulador de eventos será chamado imediatamente e, se várias ordens/posições tiverem sido solicitadas, que tipo de análise preciso realizar para garantir que eu combine corretamente os eventos com cada solicitação... tudo isso apenas para descobrir o número do tíquete que, por exemplo, para ordens pendentes, a biblioteca recebe em 'm_result' dentro de CTradeObj::SetOrder()
É por isso que eu acho que seria mais útil que o número do tíquete (ou -1 se não for bem-sucedido) fosse retornado de CEngine::PlaceBuyLimit() e de toda essa família de métodos, porque quando você coloca uma ordem ou abre uma posição, na maioria das vezes você quer registrar imediatamente o número do tíquete para poder consultá-lo mais tarde... Na minha humilde opinião, forçar o usuário do DoEasy a implementar o tratamento de eventos para isso faz com que a biblioteca pareça desnecessariamente complicada .
Provavelmente há um bom motivo para a sua abordagem, portanto, não sei se você concorda; caso contrário, eu gostaria muito de entender o raciocínio por trás da sua decisão de design ;-)
Tudo é muito simples. Na MQL5, o sucesso do envio de uma ordem de negociação para o servidor não garante sua execução. O sucesso do envio é uma verificação da exatidão dos parâmetros em uma ordem de negociação. A execução da ordem é de responsabilidade da bolsa. Só podemos usar o fato de uma mudança no ambiente de negociação e, após detectar essa mudança, seguir em frente. É por esse motivo que não uso os dados recebidos na resposta do servidor.
Всё очень просто. В MQL5 успешность отсылки торгового приказа на сервер не гарантирует его исполнения. Успешность отсылки - это просо проверка на корректность параметров в торговом приказе. Исполнение приказа лежит на стороне биржи. Мы можем лишь использовать факт изменения торгового окружения, и после обнаружения его изменения уже двигаться дальше. Именно по этой причине я не использую данные, полученные в ответе сервера.
Tudo é muito simples. Na MQL5, o sucesso do envio de uma ordem de negociação para o servidor não garante sua execução. O sucesso do envio é uma verificação da exatidão dos parâmetros em uma ordem de negociação. A execução da ordem é de responsabilidade da bolsa. Só podemos usar o fato de uma mudança no ambiente de negociação e, após detectar essa mudança, seguir em frente. É por esse motivo que não uso os dados recebidos na resposta do servidor.
Certo, estou tentando implementar essa abordagem em minha estrutura de EA para facilitar o gerenciamento usando o TestDoEasyPart39.mq5 como guia, mas estou tendo alguns problemas com eventos perdidos - ainda estou investigando/depurando (tudo no modo testador por enquanto)... Gostaria de receber outros exemplos de código de como você mesmo faz isso em outros EAs, se puder compartilhar alguns.
Ainda estou usando a versão da biblioteca da Parte 39; essa é a melhor versão a ser usada no momento ou você recomenda a atualização para uma versão mais recente?
OK, estou tentando implementar essa abordagem em minha estrutura de EA para facilitar o gerenciamento, usando seu TestDoEasyPart39.mq5 como guia, mas estou tendo alguns problemas com eventos perdidos - ainda estou investigando/depurando (tudo no modo testador por enquanto)... Gostaria de receber outros exemplos de código de como você mesmo faz isso em outros EAs, se puder compartilhar alguns.
Ainda estou usando a versão da biblioteca da Parte 39; essa é a melhor versão a ser usada no momento ou você recomenda a atualização para uma versão mais recente?
Até o momento, todas as versões subsequentes são dedicadas à criação de indicadores.
Voltarei aos consultores em breve. Lá também verificarei as mensagens dos usuários de que alguns eventos de negociação (que ocorrem simultaneamente) são perdidos.
E então poderei mostrar a você como usar o modelo de evento da biblioteca.
Пока все последующие версии посвящены созданию индикаторов.
Скоро опять вернусь к советникам. Там и проверю сообщения пользователей о том, что некоторые торговые события (происходящие одновременно) теряются.
И там же смогу тогда показать как использовать событийную модель библиотеки.
Até o momento, todas as versões subsequentes são dedicadas à criação de indicadores.
Voltarei aos conselheiros em breve. Lá também verificarei as mensagens dos usuários de que alguns eventos de negociação (que ocorrem simultaneamente) são perdidos.
E então poderei mostrar a você como usar o modelo de evento da biblioteca.
Quando você espera começar a trabalhar novamente nos recursos para consultores especializados? Dependendo de sua resposta, talvez eu precise escolher escrever minha própria classe/métodos multiplataforma para simplificar a colocação de ordens, a abertura de posições, etc., pelo menos para meu projeto atual.
Ao lidar com eventos de negociação, como TRADE_EVENT_PENDING_ORDER_PLASED ou TRADE_EVENT_POSITION_OPENED, como posso garantir que um determinado evento corresponda a uma solicitação de negociação específica que enviei anteriormente? Atualmente, tenho apenas uma ordem/posição por símbolo, portanto, é fácil verificar se o símbolo do evento corresponde à minha solicitação... No entanto, mais tarde meu EA deverá ser capaz de abrir várias ordens/posições no mesmo símbolo (usando um único número mágico), e espero que não seja necessário comparar o preço de entrada, SL, TP, etc. Eu estava pensando em usar números mágicos diferentes, ou aquele recurso que agrupa os grupos nº 1 e nº 2 no número mágico.
Estou um pouco confuso e não tenho certeza de qual é a melhor abordagem para associar eventos de negociação a solicitações - você poderia me ajudar com isso por enquanto? Se eu puder associar de forma confiável uma solicitação de negociação ao seu número de tíquete, acredito que poderei continuar usando o DoEasy para esse projeto.
Quando você espera começar a trabalhar novamente em recursos para consultores especializados? Dependendo de sua resposta, talvez eu precise escolher escrever minha própria classe/métodos multiplataforma para simplificar a colocação de ordens, a abertura de posições, etc., pelo menos para meu projeto atual.
Ao lidar com eventos de negociação, como TRADE_EVENT_PENDING_ORDER_PLASED ou TRADE_EVENT_POSITION_OPENED, como posso garantir que um determinado evento corresponda a uma solicitação de negociação específica que enviei anteriormente? Atualmente, tenho apenas uma ordem/posição por símbolo, portanto, é fácil verificar se o símbolo do evento corresponde à minha solicitação... No entanto, mais tarde meu EA deverá ser capaz de abrir várias ordens/posições no mesmo símbolo (usando um único número mágico), e espero que não seja necessário comparar o preço de entrada, SL, TP, etc. Eu estava pensando em talvez usar números mágicos diferentes, ou aquele recurso que agrupa os grupos nº 1 e nº 2 no número mágico.
Estou um pouco confuso e não tenho certeza de qual é a melhor abordagem para associar eventos de negociação a solicitações. Se eu puder associar de forma confiável uma solicitação de negociação ao seu número de tíquete, acredito que poderei continuar usando o DoEasy para esse projeto.