Discussão do artigo "O uso de ORDER_MAGIC para negociação com diferentes consultores especialistas em um único instrumento" - 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
2. o que a expressão (int) representa e qual valor ela assume em int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
1. obrigado ao autor pelo artigo.
2.O que significa a expressão (int) e que valor ela assume em int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Por que, durante o teste, a expressão (int) e SYMBOL_VOLUME_STEP assumem os valores Unknown identifier e como isso afeta o resultado int DIGITS?
4. Como o código de interação funciona?
O código de interação é importante quando os EAs trabalham no mesmo instrumento, onde é suficiente definir nomes numéricos idênticos ou diferentes para os EAs.
Expressão (int) é uma conversão da seguinte expressão para o tipo int.
A expressão SYMBOL_VOLUME_STEP é um dos valores da enumeração ENUM_SYMBOL_INFO_INTEGER.
Nenhuma das expressões acima é uma variável, portanto, naturalmente, elas têm o valor "Unknown identifier" (Identificador desconhecido) no Debugger,
o que significa literalmente "impossível de reconhecer", pois o Debugger simplesmente não consegue entender a que tipo pertence a variável declarada para rastreamento.
4) Como funciona o código de interação?
O código de interação é importante quando os EAs trabalham no mesmo instrumento, sendo suficiente definir nomes numéricos idênticos ou diferentes para os EAs?
Desculpe, eu me distraí e não respondi à quarta pergunta.
O código de interação é usado como uma única mágica para vários Expert Advisors confiáveis.
Por exemplo, se você tiver um EA absolutamente funcional no qual não deseja alterar nada, mas tiver criado um EA de acompanhamento e quiser testar como ele funcionará com esse EA, inicie o EA original e o EA de acompanhamento e forneça o mesmo código de interação a ambos os EAs, e eles perceberão as ações do outro como suas próprias, enquanto as alterações feitas por terceiros EAs sem esse código de interação serão ignoradas (elas serão invisíveis para o par de EAs selecionado).
Ao mesmo tempo, você pode processar alguns dados separadamente porque o código de identificação do EA (nome digital) é diferente,
tudo depende da solicitação que você fará (por exemplo, você pode fazer um relatório apenas sobre o trabalho da rede de arrasto).
Uma mesma transação, dependendo da solicitação, pode ser definida como sua ou de outra pessoa.
1. obrigado ao autor pelo artigo.
2.O que significa a expressão (int) e que valor ela assume em int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Por que, durante o teste, a expressão (int) e SYMBOL_VOLUME_STEP assumem os valores Unknown identifier e como isso afeta o resultado int DIGITS?
4. Como o código de interação funciona?
O código de interação é importante quando os EAs trabalham no mesmo instrumento, onde é suficiente definir nomes numéricos idênticos ou diferentes para os EAs.
Como entendo que você não entendeu muito bem o significado do código, vamos entender o que acontece em detalhes
1. Obtemos o tamanho da etapa de volume do lote para o instrumento, SYMBOL_VOLUME_STEP - Etapa mínima de volume para fazer uma negociação (geralmente é 0,01);
2. Obter o logaritmo do número na base 10 => -log10(0,01) = 2 ou -log10(0,10) = 1 (para MQ é -log10(0,10) = 1);
3. igualar o resultado (-2/-1) à variável DIGITS, que é do tipo int.
4. Se o valor de DIGITS<0, atribua a ela o valor = 0.
PS
(int) é usado para forçar o resultado de um cálculo para o tipo int...
Este artigo não reflete o evento "Stop Loss/Stake Profit occurred". E essa é uma omissão muito forte!
Exemplo: um Expert Advisor tem duas partes: a primeira funciona quando a "posição virtual" em um determinado símbolo e período de tempo é igual a 0, e a segunda funciona quando essa "posição virtual" não é igual a zero; bem, digamos que o Expert Advisor feche essa posição. Vamos considerar uma situação: em algum sinal, fizemos uma compra, a "posição virtual" assumiu o valor +100. Um stop loss foi acionado, a "posição virtual" real assumiu o valor 0. Mas, em nosso caso, ela será igual a +100. O Expert Advisor "pensará" que a posição é +100, mas, na realidade, é 0, o que levará a um resultado indesejável.
Por favor, explique esse ponto para mim.
Este artigo não reflete o evento "Stop Loss/Stake Profit occurred". E essa é uma omissão muito forte!
Exemplo: um Expert Advisor tem duas partes: a primeira funciona quando a "posição virtual" em um determinado símbolo e período de tempo é igual a 0, e a segunda funciona quando essa "posição virtual" não é igual a zero; bem, digamos que o Expert Advisor feche essa posição. Vamos considerar uma situação: em algum sinal, fizemos uma compra, a "posição virtual" assumiu o valor +100. Um stop loss foi acionado, a "posição virtual" real assumiu o valor 0. Mas, em nosso caso, ela será igual a +100. O Expert Advisor "pensará" que a posição é +100, mas, na realidade, é 0, o que levará a um resultado indesejável.
Por favor, explique esse ponto para mim.
É isso mesmo, este artigo não contém um módulo para processar ordens de parada.
Ele descreve as possibilidades de uso do número mágico.
Para usar uma posição virtual, serão necessários stops virtuais.
Então, por que precisamos de mágica?
Porque se a usarmos para vasculhar o histórico, não teremos uma visão completa das ordens colocadas por esse Expert Advisor, porque não conseguiremos identificar stop losses e take profits.
Então, por que precisamos de mágica?
Porque se a usarmos para vasculhar o histórico, não teremos uma visão completa das ordens colocadas por esse Expert Advisor, porque não conseguiremos identificar stop losses e take profits.
É necessário entender que é um erro usar stops como parte de uma estratégia de negociação. As ordens de parada armazenadas no servidor são ordens de proteção contra situações em que algo deu errado (falha na comunicação com o servidor, pânico no mercado); em outros casos, as ordens de parada virtuais na forma de sinais do EA são bastante adequadas.
Mas a prática mostra que os programadores geralmente têm preguiça de virtualizar os stops. Afinal de contas, é muito mais fácil usar ordens stop prontas.
Ao fazer o cálculo, é necessário passar por todas as negociações, se uma negociação com um determinado mágico - levamos em conta seu volume, todas as outras negociações são verificadas quanto ao fato de fechamento por stoploss/stakeprofit, se houver, então é necessário redefinir o valor calculado. Em meu artigo, o stoploss também não é levado em consideração. Quem poderia imaginar... Este é um novo tópico, vocês terão que me desculpar.
Com essa mágica, há mais uma coisa: o EA abriu uma posição, você desconecta o EA e fecha as posições manualmente - é isso, depois disso haverá uma contabilidade incorreta.
E qual é a situação: digamos que um EA abriu uma compra de 0,1, o segundo EA abriu uma venda de 0,1, a posição cumulativa é igual a 0, e considera-se que há duas posições contrárias.
Além de tudo isso, precisamos de algum meio de controle, algum script para calcular se os volumes calculados para todos os mags são consistentes com o volume real, precisamos de meios de nivelamento - para abrir com um magik e fechar com outro.
Isso levanta uma grande questão: se o uso de magik terá demanda e, em caso afirmativo, como conviver com isso....
Devemos abrir uma conta separada para cada consultor?
Foi publicado o novo artigo O uso de ORDER_MAGIC para negociar com diferentes Expert Advisors em um único instrumento:
Autor: Николай
Por favor, corrija-me se eu estiver errado...
Tenho que tentar algo semelhante ao seu código aqui para discriminar operações e posições de diferentes EAs. Tenho várias dúvidas. Esse código é otimizado? Acho que esse código pode realmente deixar o computador mais lento se você tiver um longo histórico de negociações e vários EAs executando esse código - embora eu ainda não tenha comprovado isso, é apenas o que eu acho.
Por exemplo, no arquivo magic_exp1_en.mq5, o método prHistory_Deals(ulong &buf[],int HTD) preenche o buffer buf[] com todas as negociações que tivemos.
Não seria melhor para o desempenho se armazenássemos apenas a última DEAL IN ainda não preenchida por uma DEAL OUT?
Talvez eu não tenha entendido realmente o que o código faz. O que eu acho que o código faz em magic_exp1_en.mq5 é: para todo o histórico de transações desde o início dos tempos :-) ele verifica se a soma dos volumes de todos os DEAL_TYPE_SELL e DEAL_TYPE_BUY é a mesma, caso em que não temos uma posição aberta. Se o volume das VENDAS for maior do que o volume das COMPRAS, então temos uma posição geral de VENDA e uma posição de COMPRA se o volume das COMPRAS for maior do que o das VENDAS.
Não há outra maneira?