Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas MetaTrader (parte VII): Eventos de ativação da ordem StopLimit, preparação da funcionalidade para os eventos"
Eu gostaria de ver a implementação de vários TCs usando essa biblioteca e outras alternativas.
E uma análise comparativa, é claro. Em particular, o desempenho no Testador/Otimizador, o tamanho do código e a velocidade de sua escrita.
Eu gostaria de ver a implementação de vários TCs usando essa biblioteca e alternativas.
E uma análise comparativa, é claro. Em particular, o desempenho no Tester/Optimizer, o tamanho do código e a velocidade de sua escrita.
Ainda é cedo. No momento, ainda não preparamos a funcionalidade necessária para concretizar a simplicidade declarada de criar nossos próprios programas. A base necessária ainda está sendo criada. Na oitava parte, a funcionalidade para rastrear outros eventos, como a modificação de ordens e posições e seus níveis de parada, foi implementada e descrita. O próximo artigo está sendo preparado, o qual iniciará a finalização para compatibilidade com a MQL4. A próxima etapa será criar classes de negociação completas e, em seguida, trabalhar com símbolos e contas. Em seguida, criaremos funções de caso de usuário para acesso fácil e rápido a todos os dados coletados e controlados pela biblioteca. E esse não será o estágio final, pois está sendo preparado um conjunto de possibilidades de uso de novos objetos gráficos integrados à biblioteca, com acesso a eles como objetos padrão. Ou seja, a biblioteca terá a capacidade de criar seus próprios objetos gráficos e terá seu próprio shell gráfico na tela + a possibilidade de criar, a partir desse conjunto, seus próprios elementos gráficos para seus programas. Isso foi planejado anteriormente, mas ainda há planos para a implementação.
E a realização do TC será possível, especialmente após a criação de funções de caso de usuário. Embora, é claro, seja possível fazer algo mesmo agora, mas não de forma rápida e fácil, porque isso requer acesso direto a listas e objetos de biblioteca por ponteiros, e isso não é "pegar e obter", no entanto, esse acesso é parcialmente organizado nos exemplos de consultores anexados aos artigos.
... E esse não será o estágio final, pois um conjunto de possibilidades de uso de novos objetos gráficos integrados à biblioteca está sendo preparado, com o acesso normal a eles - como aos objetos padrão. Ou seja, a biblioteca terá a capacidade de criar seus próprios objetos gráficos e terá seu próprio shell gráfico na tela + a capacidade de criar, a partir desse conjunto, seus próprios elementos gráficos para seus programas....
Você escreverá uma biblioteca de gráficos em canvas?
Sim, claro que sim. Não somente nela. Alguns objetos "compostos" do conjunto de objetos gráficos padrão estarão disponíveis para criação, além disso, serão oferecidos formulários para a criação de sua própria GUI com acesso total a todos os dados coletados e controlados pela biblioteca - um conjunto de objetos prontos, além da possibilidade de criar sua própria GUI a partir deles. Naturalmente, tudo é feito de modo que o usuário tenha acesso total a todas as necessidades de uma biblioteca - "fora da caixa", por assim dizer. Conecte uma biblioteca e você terá toda a funcionalidade necessária para criar totalmente qualquer um dos seus desejos, sem precisar procurar as soluções necessárias escritas e publicadas em algum lugar.
Sim, é claro. Não apenas nela. Estarão disponíveis para criação alguns objetos "compostos" a partir do conjunto de objetos gráficos padrão, além de serem oferecidos formulários para a criação de sua própria GUI com acesso total a todos os dados coletados e controlados pela biblioteca - um conjunto de objetos prontos, além da possibilidade de criar sua própria GUI a partir deles. Naturalmente, tudo é feito de modo que o usuário tenha acesso total a todas as necessidades de uma biblioteca - "fora da caixa", por assim dizer. Conecte uma biblioteca e você terá toda a funcionalidade necessária para criar totalmente qualquer um dos seus desejos, sem precisar procurar as soluções necessárias escritas e publicadas em algum lugar.
Ou seja, você criará um ambiente de software multiplataforma com um conjunto completo de possibilidades para a criação de quaisquer EAs. Biblioteca universal para ambas as plataformas com gráficos em tela.
...sem encontrar as soluções necessárias escritas e publicadas em algum lugar.
Isso significa que a biblioteca se tornará uma biblioteca de funcionários?
Não. Isso significa que uma biblioteca será suficiente.
Artem, obrigado!
No método:
//+------------------------------------------------------------------+ //|| Atualiza a lista de pedidos| //+------------------------------------------------------------------+ void CMarketCollection::Refresh(void)
Uma "ordem de mercado" é criada dinamicamente
#else //--- Posições int total_positions=::PositionsTotal(); for(int i=0; i<total_positions; i++) { ulong ticket=::PositionGetTicket(i); if(ticket==0) continue; CMarketPosition *position=new CMarketPosition(ticket); if(position==NULL) continue; //--- Adicionar um objeto de posição à lista de ordens de mercado e posições if(!this.AddToListMarket(position)) continue; //--- Obter o índice da ordem de controle por tíquete e identificador de posição int index=this.IndexControlOrder(ticket,position.PositionID()); //--- Se a ordem não estiver na lista de ordens de controle - adicione-a if(index==WRONG_VALUE) { if(!this.AddToListControl(position)) { ::Print(DFUN_ERR_LINE,TextByLanguage("Failed to add control position" (Falha ao adicionar a posição de controle),"Failed to add a control position "),position.TypeDescription()," #",position.Ticket()); } } //--- Se a ordem já existir na lista de ordens de controle - verifique se há alterações de propriedade else if(index>WRONG_VALUE) { this.OnChangeEvent(position,index); } } //--- Ordens int total_orders=::OrdersTotal(); for(int i=0; i<total_orders; i++) { ulong ticket=::OrderGetTicket(i); if(ticket==0) continue; ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)::OrderGetInteger(ORDER_TYPE); //--- Ordem de mercado if(type<ORDER_TYPE_BUY_LIMIT) { CMarketOrder *order=new CMarketOrder(ticket); if(order==NULL) continue; //--- Adicionar objeto de ordem de mercado à lista de ordens de mercado e posições if(!this.AddToListMarket(order)) continue; } //--- Ordem pendente else { CMarketPending *order=new CMarketPending(ticket); if(order==NULL) continue; //--- Adicionar um objeto de ordem pendente à lista de ordens de mercado e posições if(!this.AddToListMarket(order)) continue; //--- Obter o índice da ordem de controle por tíquete e identificador de posição int index=this.IndexControlOrder(ticket,order.PositionID()); //--- Se a ordem não estiver na lista de ordens de controle - adicione-a if(index==WRONG_VALUE) { if(!this.AddToListControl(order)) { ::Print(DFUN_ERR_LINE,TextByLanguage("Failed to add control order" (Falha ao adicionar a ordem de controle),"Failed to add a control order "),order.TypeDescription()," #",order.Ticket()); } } //--- Se a ordem já existir na lista de ordens de controle - verifique se há alterações de propriedade else if(index>WRONG_VALUE) { this.OnChangeEvent(order,index); } } } #endif
Em seguida, ela é passada por referência para o método:
//--- Adicionar objeto de ordem de mercado à lista de ordens de mercado e posições if(!this.AddToListMarket(order)) continue;
No método"AddToListMarket", a ordem de mercado não é levada em consideração no hash_sum "hash_sum", então por que precisamos inseri-la e controlá-la?
Explique por que precisamos dela, se podemos encontrar todas as informações da posição ou da ordem pendente?
- 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 desenvolvimento fácil e rápido de programas MetaTrader (parte VII): Eventos de ativação da ordem StopLimit, preparação da funcionalidade para os eventos de modificação de ordens e posições foi publicado:
Nos artigos anteriores, nós começamos a criar uma grande biblioteca multi-plataforma, simplificando o desenvolvimento de programas para as plataformas MetaTrader 5 e MetaTrader 4. Na sexta parte, nós treinamos a biblioteca para trabalhar com as posições nas contas netting. Aqui, nós implementaremos o monitoramento da ativação das ordens StopLimit e prepararemos uma funcionalidade para o monitoramento de eventos de modificação de ordens e posições.
Para testar as melhorias implementadas, nós usaremos o EA do artigo anterior. Basta renomear o EA TestDoEasyPart06.mq5 da pasta \MQL5\Experts\TestDoEasy\Part06 para TestDoEasyPart07.mq5 e salvá-lo na nova subpasta \MQL5\Experts\TestDoEasy\ Part07.
Compile o EA, inicie-o no testador, coloque uma ordem StopLimit e aguarde a sua ativação:
Autor: Artyom Trishkin