Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXX): ordens de negociação pendentes, gerenciamento de objetos-ordens"
Boa tarde,
Obrigado pelo trabalho que você fez
Uma pequena solicitação: honestamente, li os artigos (principalmente para aumentar meu conhecimento), mas, devido à duração do ciclo do artigo e à necessidade de lidar com outros projetos, preciso voltar e revisitar artigos anteriores para entender as alterações. O projeto cresceu e, por isso, se possível, em um artigo futuro, volte e ilustre a estrutura da biblioteca resultante hoje.
Atenciosamente, obrigado desde já
Boa tarde,
Obrigado pelo trabalho que você fez
Uma pequena solicitação: honestamente, li os artigos (principalmente para aumentar meu conhecimento), mas, devido à duração do ciclo do artigo e à necessidade de lidar com outros projetos, preciso voltar e revisitar artigos anteriores para entender as alterações. O projeto cresceu e, portanto, se possível, em um artigo futuro, volte e ilustre a estrutura da biblioteca resultante hoje.
Atenciosamente, obrigado desde já
Tentarei descobrir como ilustrar uma estrutura bastante simples de alguma forma. Ela é muito simples e, ao mesmo tempo, tem muitos vínculos entre as diferentes classes da biblioteca.
Tudo o que é criado - tudo é acumulado no CEngine - a partir desse objeto, no momento, há acesso a todas as classes da biblioteca (e haverá outro ponto de acesso - por meio da classe de funções de usuário, mas ainda a ser concluído). Mas, por enquanto, há acesso apenas aos métodos de todas as classes criadas, que são necessários no momento.
As próprias classes usam ponteiros entre si para poder usar os dados de uma classe em outra. E se você começar a mostrar todos esses relacionamentos, poderá ficar ainda mais confuso. E se você mostrar todos os objetos de base, que são herdados por muitas classes e listas dentro das classes, e também mostrar onde todos eles são executados no timer, será uma bagunça.
É por isso que é muito mais fácil simplesmente apresentar a estrutura de uma classe, e todas as outras classes são idênticas a essa estrutura. E isso é muito simples, mas absolutamente insuficiente para exibir a estrutura de toda a biblioteca e suas inter-relações.
E mais uma coisa: a biblioteca está se expandindo gradualmente, mas, mais uma vez, dentro da estrutura do conceito de criação de objetos de biblioteca declarado no início. Portanto, basta entender sua estrutura uma vez para que tudo fique bem simples.
Mas é claro que pensarei (e já estou pensando) em como mostrar tudo de uma forma mais simples e acessível.
Artem, boa tarde. Seu trabalho é inestimável! Obrigado pela oportunidade de desenvolver e pelo tempo que você dedica para que pessoas como eu possam salvá-lo qualitativamente.
Tenho uma sugestão: deveríamos publicar um repositório com suas bibliotecas no github? O que isso faria:
- Bem, um sistema de controle de versão, é claro.
- Uma oportunidade para que todos participem do desenvolvimento da biblioteca DoEasy.
- A capacidade de pesquisar rapidamente o código e acessar a versão mais atualizada a qualquer momento.
Por exemplo, enquanto estudava a biblioteca, encontrei e corrigi vários erros e otimizei uma parte do código. Nesse caso, eu poderia agora enviar uma solicitação especial dentro da estrutura do sistema de controle de versão, por meio da qual você decidiria se aceitaria ou não meus aprimoramentos na versão atual da biblioteca.
Você está fazendo um ótimo trabalho, e nós, juntos (há muitas pessoas como eu), poderíamos investir nosso próprio tempo para o bem comum, a fim de aprimorar o DoEasy. Estou pronto para ajudar na realização do que foi proposto.
Artem, boa tarde. Seu trabalho é inestimável! Obrigado pela oportunidade de desenvolvimento e pelo tempo que você dedica para que pessoas como eu possam salvá-lo qualitativamente.
Tenho uma sugestão: deveríamos publicar um repositório com suas bibliotecas no github? O que isso faria:
- Bem, um sistema de controle de versão, é claro.
- Oportunidade de participar do desenvolvimento da biblioteca DoEasy para todos.
- A capacidade de pesquisar rapidamente o código e acessar a versão mais atualizada a qualquer momento.
Por exemplo, enquanto estudava a biblioteca, encontrei e corrigi alguns erros e otimizei alguns códigos. Nesse caso, eu poderia agora enviar uma solicitação especial dentro da estrutura do sistema de controle de versão, por meio da qual você decidiria se aceitaria ou não meus aprimoramentos na versão atual da biblioteca.
Você está fazendo um ótimo trabalho, e nós, juntos (há muitas pessoas como eu), poderíamos investir nosso próprio tempo para o bem comum, a fim de aprimorar o DoEasy. Estou pronto para ajudar na realização do que foi proposto.
Olá. Obrigado por seus comentários.
No momento, é muito cedo para falar e pensar sobre o repositório - a biblioteca está em desenvolvimento ativo e, até que eu crie e publique tudo o que planejei, não quero me desviar do plano. E as inúmeras correções e revisões feitas por usuários de terceiros apenas distrairão o autor de seguir os planos.
Mas é melhor relatar os erros encontrados e as formas de eliminá-los diretamente nas discussões dos artigos em que os erros foram encontrados - isso só ajudará no desenvolvimento da biblioteca e na eliminação dos erros encontrados.
Ao compilar o arquivo TradingControl.mqh, ocorrem dois erros:
'CTrading::OpenPosition<double,d...' - não é possível acessar a função de membro privado TradingControl.mqh 328 21
ver declaração de 'CTrading::OpenPosition<double,double>' Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - não é possível acessar a função de membro privado TradingControl.mqh 344 18
see declaration of 'CTrading::PlaceOrder<double,double,double,double>' Trading.mqh 156 26
Esses métodos estão na seção privada da classe CTrading. Os erros desaparecem se você os mover para a seção pública dessa classe. Mas nos arquivos anexados (e pelo que entendi, eles estão funcionando) esses métodos também estão na seção privada da classe CTrading, e esses dois erros ocorrem ao compilar o arquivo TradingControl.mqh.
Artyom, então como isso funciona para você? Ou há um erro aqui ou estou entendendo algo errado.
P.S. Fiz o download dos arquivos anexados para a próxima parte - 31, e lá também esses métodos estão localizados na seção privada da classe CTrading e também ocorrem esses dois erros durante a compilação.
Ocorrem dois erros ao compilar o arquivo TradingControl.mqh:
'CTrading::OpenPosition<double,d...' - não é possível acessar a função de membro privado TradingControl.mqh 328 21
ver declaração de 'CTrading::OpenPosition<double,double>' Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - não é possível acessar a função de membro privado TradingControl.mqh 344 18
ver declaração de 'CTrading::PlaceOrder<double,double,double,double>' Trading.mqh 156 26
Esses métodos estão na seção privada da classe CTrading. Os erros desaparecem se você os mover para a seção pública dessa classe. Mas nos arquivos anexados (e pelo que entendi, eles estão funcionando) esses métodos também estão na seção privada da classe CTrading, e esses dois erros ocorrem ao compilar o arquivo TradingControl.mqh.
Artem, então como isso funciona para você? Ou há um erro aqui ou estou entendendo algo errado.
P.S. Fiz o download dos arquivos anexados para a próxima parte - 31, e lá também esses métodos estão localizados na seção privada da classe CTrading e também ocorrem esses dois erros ao compilar.
Isso aconteceu depois de uma atualização recente. Tente colocá-los em uma seção protegida para que não possam ser acessados de fora. Os públicos são muito ruins
Isso aconteceu depois de uma atualização recente. Tente criá-los em uma seção protegida para que não possam ser acessados de fora. Público é muito ruim
Ok, farei isso.
Mais uma pergunta: há métodos na seção pública ClosePosition, PlaceBuyStop, PlaceBuyLimit, etc., que podem ser acessados por meio de uma seção protegida. Não é essencial para eles que estejam na seção pública?
Tudo bem, eu vou.
E há outra pergunta: existem métodos na seção pública ClosePosition, PlaceBuyStop, PlaceBuyLimit, etc., que podem ser usados em qualquer lugar. Não é fundamental que eles estejam na seção pública?
Eles devem estar lá - são um dos métodos para trabalhar com ordens e posições
- 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
Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXX): ordens de negociação pendentes, gerenciamento de objetos-ordens foi publicado:
No último artigo, criamos classes de objetos-ordens pendentes que correspondem ao conceito geral de objetos de biblioteca. Hoje, trataremos de classes que permitem gerenciar objetos de ordens pendentes.
Inicialmente, queria criar uma classe independente que gerenciasse as ordens pendentes e que contivesse todos os métodos para trabalhar com elas. Resultou que a classe de negociação base CTrading da biblioteca e a nova classe de gerenciamento de ordens pendentes a serem criadas estavam tão interconectadas que foi mais fácil fazer com que uma nova classe de gerenciamento de objetos-ordens pendentes se tornasse herdeiro da classe de negociação base.
O gerenciamento de objetos de ordens pendentes é feito no temporizador da classe, portanto, tornaremos virtual o temporizador da classe de negociação base, portanto, o temporizador da classe de gerenciamento de ordens pendentes será virtual. Sendo assim, tudo o que tenha a ver com o temporizador da classe de negociação base vamos escrevê-lo no seu temporizador, enquanto tudo o que deva trabalhar na classe de gerenciamento de ordens pendentes vamos escrevê-lo no temporizador da classe em questão.
Além da classe para gerenciar objetos de ordens pendentes, criaremos uma pequena classe para implementar pausas, a fim de, no futuro, não usarmos a função Sleep(), que interrompe o funcionamento do programa por um tempo. O objeto-pausa nos permitirá não depender de ticks, assim, nos fins de semana, será possível testar código que precise de algum tipo de espera. A pausa será monitorada no temporizador.
Autor: Artyom Trishkin