Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXV): processamento de erros retornados pelo servidor de negociação" - 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
Sobre as informações registradas no valor do Número Mágico:
você pode usar uma mágica diferente para cada grupo para criar grupos diferentes. Por exemplo, se o número mágico do consultor for 123, o número mágico do primeiro grupo será 124, o número mágico do segundo grupo será 125, o número mágico do terceiro grupo será 126 e assim por diante.
A biblioteca oferece uma maneira diferente de criar grupos diferentes - o número de cada subgrupo é armazenado diretamente no valor do número mágico. Em seguida, o número mágico do EA também é um identificador de grupo, mas é colocado em um grupo independente chamado MagicID - o identificador do número mágico do EA. E há mais dois grupos. Cada um deles tem 15 subgrupos. E cada um dos subgrupos pode ter seu próprio identificador.
Isso proporcionarámais flexibilidade ao trabalhar com grupos.
Por exemplo: queremos mover uma grade de ordens pendentes para trás do preço - adicione-as ao grupo 1 no subgrupo 1. O grupo 1 se move atrás do preço. O subgrupo 1 se move ao longo da MA. Agora, queremos mover algumas dessas ordens que se movem atrás do preço (grupo 1) pelo SAR Parabólico. Damos a elas o subgrupo 2. Então, o grupo 1 se move atrás do preço, mas o subgrupo 1 se move pela MA e o subgrupo 2 se move pela SAR Parabólica.
As ordens são acionadas, transformando-se em posições - você pode definir seus próprios grupos para modificação de stoplosses e seus próprios subgrupos nesse grupo para modificação por valores diferentes. Os algoritmos de modificação são escritos em subgrupos.
Em geral, um voo de fantasia. Também é possível usar uma mágica simples, mas você mesmo terá de inventar a lógica de rastreamento de diferentes grupos.
Sobre a segunda pergunta:
Há uma classe CSelect. Ela está disponível no programa e fornece métodos de seleção e pesquisa sobre os quais você está escrevendo em todas as coleções existentes: Account, Event, Order, Symbol.
Você pode selecionar os objetos de cada coleção em uma lista com base em todos os critérios. Na lista criada, você pode selecionar novamente, refinando os critérios, e pode encontrar os valores máximo e mínimo para o critério de seleção.
No entanto, mais adiante haverá funções personalizadas (muito mais tarde) para acesso rápido e conveniente a todas as propriedades de todas as coleções e pesquisa nelas.
Mas, por enquanto, somente por meio do CSelect, e quando você precisar. A classe é estática, portanto, o acesso a seus métodos é feito por meio de ":::" Por exemplo, CSelect::ByOrderProperty().
Sim, a propósito, há um exemplo de seu uso no programa bem no EA de teste - por exemplo, em suas funções finais:
Descobri o CSelect, mas acontece que tenho de fazer uma escolha em cada lugar em que precisamos de valores agregados: digamos que eu precise calcular o lucro total de uma grade de posições para fazer o trailing, essa é uma função. Em outra, digamos que eu esteja ajustando o lucro total de uma grade após abrir ou fechar uma das ordens - e para isso preciso do lucro total e do volume agregado.
E em outro lugar, preciso tomar a decisão de abrir uma nova grade ou continuar com a atual - preciso saber quantas ordens já estão abertas nesse grupo.
Todos esses valores são calculados por meio de uma execução na lista, que pode ser selecionada por uma série de CSelects. Mas como preciso deles em lugares diferentes, teria que iniciar uma agregação a cada vez, recalcular no início de um tick e usá-los em todos os lugares.
Achei que seria bom adicionar essa construção à biblioteca, com a capacidade de alocá-la por um conjunto de critérios de seleção, por exemplo, símbolo, magia (com grupos), tipo de ordem.
E que ele colete estatísticas simples: número de ordens, volume total, lucro total... uma coleção de ordens, a propósito, já que já a selecionamos.
Caso contrário, será necessário criar uma estrutura auxiliar a cada vez, ou CSelects e iteração em cada local.
Descobri o CSelect, mas acontece que tenho de fazer uma escolha em cada lugar em que precisamos de valores agregados: digamos que eu precise calcular o lucro total de uma grade de posições para poder arrastá-la, essa é uma função. E em outra, digamos, estou ajustando o total de uma grade após abrir ou fechar uma das ordens - e para isso preciso do lucro total e do volume agregado.
Em outro lugar, preciso tomar a decisão de abrir uma nova grade ou continuar com a atual - preciso saber quantas ordens já estão abertas nesse grupo.
Todos esses valores são calculados por meio de uma execução na lista, que pode ser selecionada por uma série de CSelects. Porém, como eles são necessários em locais diferentes, tenho que iniciar uma construção agregada a cada vez, recalculá-la no início de um tick e usá-la em todos os lugares.
Achei que seria bom adicionar essa construção à biblioteca, com a possibilidade de alocá-la por um conjunto de critérios de seleção, por exemplo, símbolo, magia (com grupos), tipo de ordem.
E permitir que ele colete estatísticas simples: número de ordens, volume total, lucro total... uma coleção de ordens, a propósito, já que já fizemos uma amostragem.
Caso contrário, será necessário criar uma estrutura auxiliar a cada vez, ou CSelects e iteração em cada local.
E você propõe tornar os cálculos na própria biblioteca mais pesados? Já há muitas coisas a serem calculadas lá.
Por que não fazer o que você sugere diretamente no EA em vez de na biblioteca? Não há diferença onde calcular tudo isso. Mas alguém precisa disso (você) e alguém não precisa. E por que ele precisa de cálculos desnecessários?
Para não contar sempre a mesma coisa em funções diferentes, você deve criar listas globais no Expert Advisor, onde poderá colocar as informações de que precisa em qualquer lugar. E em funções separadas, e somente quando necessário, pegue essas listas públicas e, a partir delas, obtenha os dados necessários somente dentro da função e retorne-os.
A biblioteca fornece um conjunto de dados, oferece a possibilidade de selecionar esses dados em qualquer combinação e fornece ferramentas para resolver tarefas que não são suficientemente rápidas para serem feitas do zero.
E você está sugerindo que os cálculos na própria biblioteca sejam ponderados? Já há muita contagem acontecendo lá.
Por que não fazer o que você sugere diretamente no EA em vez de na biblioteca? Não há diferença onde calcular tudo isso. Mas alguém precisa disso (você) e alguém não precisa. E por que ele precisa de cálculos adicionais?
Para não contar sempre a mesma coisa em funções diferentes, você deve criar listas globais no Expert Advisor, onde poderá colocar as informações de que precisa em qualquer lugar. E em funções separadas, e somente quando necessário, pegue essas listas públicas e, a partir delas, obtenha os dados necessários somente dentro da função e retorne-os.
A biblioteca fornece um conjunto de dados, oferece a possibilidade de selecionar esses dados em qualquer combinação e fornece ferramentas para resolver tarefas que não são suficientemente rápidas para serem feitas do zero.
Bem, proponho torná-la opcional.
Iniciar uma "assinatura".
Mas se essa ideia não lhe parecer digna de consideração, eu mesmo escreverei o wrapper.
Mais uma vez, obrigado pelo que já foi feito e por tudo o que ainda está nos planos (aqui e ali eu encontro reservas sobre os planos para continuar o desenvolvimento da biblioteca).
Bem, eu sugiro contar opcionalmente.
Faça uma "assinatura".
Mas se você não achar essa ideia digna de consideração, eu mesmo escreverei o wrapper.
Mais uma vez, obrigado pelo que já foi feito - e adiante para o que mais estiver em andamento (vi reservas aqui e ali sobre os planos de continuar desenvolvendo a biblioteca)