Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte X)" - página 3

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
Artem, diga-me qual é a função da seção de código destacada.
Como esse código pode ser executado se o cronômetro não estiver ativado?
Mas se essa seção de código for excluída, as mensagens de evento não serão impressas. Mas tudo funciona com ela.
E eu gostaria de poder obter um tíquete, preços e talvez algumas outras propriedades de posições e ordens junto com a mensagem do evento.
Acho que você alterou o comentário. Em OnTimer(), o EA é verificado, não no testador:
E compare os dois manipuladores: em OnTick() o cronômetro da biblioteca é iniciado apenas no testador, e em OnTimer() o cronômetro da biblioteca é iniciado apenas não no testador - porque na MQL4 o cronômetro no testador não funciona, e nós trabalhamos com ticks no testador.
Vou dar um exemplo agora.
Acho que você alterou o comentário.
O comentário mudou por conta própria, não mexi nele. ))))))
Eu apenas copiei em um lugar e colei em lugares diferentes e não prestei atenção. Mas depois coloquei uma negação na forma de ! e não é importante, não mexi.
Mas a pergunta continua sem resposta: se o cronômetro não é iniciado em OnInit(), qual é o objetivo do manipulador OnTimer() e por que o código nele é executado pelo menos uma vez.
Basicamente, recebi as mensagens no registro. Resta obter as propriedades dos itens. Tipo, tíquete, preços e hora de abertura, fechamento e modificação.
E eu gostaria de poder obter tíquetes, preços e talvez algumas outras propriedades de posições e ordens junto com a mensagem do evento.
No testador, não é possível obter o tíquete da ordem do último evento em OnChartEvent() - parâmetro lparam. Em dparam, o preço é armazenado. Em sparam - símbolo.
Para obter dados no testador, você deve usar o código de evento que obtém com engine.LastTradeEvent() - porque tudo depende do evento - se for uma modificação, você precisará obter uma lista de modificações e, se for uma alteração no número de ordens, você precisará obter listas dessas novas ordens.
Precisamos adicionar o CEngine para retornar os valores necessários ao programa. Ainda não cheguei ao ponto de enviar informações ao programa - ainda estou descrevendo a preparação dos dados necessários. Em artigos futuros, chegaremos à classe que dá acesso fácil a todos os dados necessários. E agora, se precisar urgentemente, você precisa adicionar ao CEngine o retorno da lista da coleção de eventos da classe - a própria classe tem o recebimento dessa lista, aqui estão elas - todas as listas na seção pública CEventCollection:
Todos os eventos são armazenados na lista m_list_events, e esses métodos retornam a lista completa ou filtrada por um determinado critério.
Para obter o último evento, basta criar no CEngine um retorno dessa lista para o programa e, no programa, obter o evento desejado da lista.
Tudo isso será automatizado em breve - ainda não está na fila.
Se você ainda precisar fazer uma muleta, a discussão será em particular. Isso não vale a pena aqui - não se aplica à biblioteca, pois ela está em desenvolvimento, e mais trabalho normal e adequado será feito para colocar todos e quaisquer eventos necessários no programa.
O comentário mudou por conta própria, não mexi nele. )))))
Eu apenas copiei em um lugar e colei em lugares diferentes e não prestei atenção. Mas depois coloquei uma negação na forma de ! e não mexi no que era importante.
Mas a pergunta continua sem resposta: se o cronômetro não é iniciado em OnInit(), qual é o objetivo do manipulador OnTimer() e por que o código nele é executado pelo menos uma vez.
Basicamente, recebi as mensagens no registro. Resta obter as propriedades dos itens. Tipo, tíquete, preços e hora de abertura, fechamento e modificação.
Explique o que você quer dizer? Você está falando sobre a criação de um cronômetro? Ele é criado no construtor do CEngine:
Não no testador, você pode obter o tíquete do pedido do último evento em OnChartEvent() - parâmetro lparam. Em dparam, o preço é armazenado. Em sparam - símbolo.
Eu já o encontrei, obrigado. E, ao adquirir um ingresso, você pode obter tudo o que precisa. Exceto por qual preço houve uma modificação. Ou fazer uma verdadeira muleta para saber o preço antes da modificação. Em princípio, isso ainda não é muito necessário.
Basicamente, obtive as mensagens de registro. Só preciso obter as propriedades das posições. Tipo, tíquete, preços e horário de abertura, fechamento e modificação.
No entanto, para uma solução rápida, adicione um retorno de lista de eventos à seção pública do CEngine:
No EA, adicione este código:
E o último evento será impresso no registro
Explique o que você quer dizer? Você está falando sobre a criação de um cronômetro? Ele é criado no construtor do CEngine:
Bem, você teve que percorrer toda a biblioteca para isso. )))
Eu já encontrei isso, obrigado. E se você conseguir uma passagem, poderá obter tudo o que precisa. Exceto pelo preço da modificação. Ou faça uma muleta de verdade para saber o preço antes da modificação. Eu realmente não preciso disso ainda.
Eu já lhe dei o código - há tudo lá, e o preço antes da modificação também.
Bem, você teve que percorrer toda a biblioteca para isso. )))
Não. Basta ler os artigos
E foi isso que aconteceu:
Enquanto eu estava executando esse código na demonstração, uma ordem de limite foi definida e excluída
E, de repente, durante a próxima simulação, uma posição foi modificada, uma posição foi aberta e uma posição foi fechada. Mas de onde veio o registro da exclusão de uma ordem excluída há muito tempo?