MetaTrader 4 - Exemplos MagicNumber: quotMagicquot Identificador da Ordem 1. Preâmbulo Em 3, o gerenciamento de posições abertas foi bastante demorado. Os comerciantes tinham à sua disposição uma ferramenta bastante limitada para trabalhar com a lista de posições abertas e fechadas. O problema de distinguir entre posições próprias e outras foi resolvido de maneiras bastante complicadas. Em 4, a situação mudou cardinalmente. Agora, o comerciante pode usar uma grande variedade de funções e gerenciar completamente todas as posições abertas e encomendar ordens e obter acesso a informações sobre quaisquer posições fechadas. Um parâmetro especial chamado MagicNumber foi adicionado para identificar pedidos. Este é o parâmetro com o qual nosso artigo tratará. 2. O que é MagicNumber int OrderSend (símbolo de seqüência de caracteres, int cmd, duplo volume, preço duplo, deslizamento int, double stoploss, double takeprofit, string commentNULL, int magic0. Datetime expiration0, color arrowcolorCLRNONE) magic - Order magic number. Pode ser usado como identificador definido pelo usuário, isto é, Quando uma ordem está sendo colocada (uma posição está sendo aberta), pode-se atribuir um número exclusivo a ela. Esse número será, portanto, usado para distinguir a ordem acima dos outros. Não há nenhum uso (ou mesmo possibilidade) aplicando esse recurso ao negociar manualmente, mas é realmente inexplicável ao negociar usando um especialista (negociação automatizada). Exemplo 1: um comerciante humano e um especialista estão negociando no terminal do cliente ao mesmo tempo. Tarefa: o especialista deve negociar de acordo com seu algoritmo e pode não fazer nada com as posições abertas manualmente. Solução: o especialista deve atribuir um MagicNumber único e não-zero à posição a ser aberta. No futuro, ele deve gerenciar apenas posições, cujo MagicNumber é igual ao pré-definido. Exemplo 2: Dois especialistas com diferentes algoritmos estão negociando no terminal do cliente ao mesmo tempo. Tarefa: o especialista deve gerenciar apenas suas ordens. Solução: cada especialista deve usar seu MagicNumber exclusivo não-zero ao abrir posições. No futuro, eles devem gerenciar apenas posições, cujo MagicNumber é igual ao predefinido. Exemplo 3: Vários especialistas, um comerciante humano e um especialista de assistência que percebem um Trailing Stop não padrão estão operando no terminal do cliente simultaneamente. Tarefa: os especialistas em negociação devem funcionar de acordo com seus algoritmos e podem não fazer nada com as posições abertas manualmente. O especialista assistente que realiza o Trailing Stop pode modificar apenas as posições abertas manualmente, mas não as abertas por outros especialistas. Solução: os especialistas em negociação devem usar MagicNumbers únicos e gerenciar apenas suas posições. O especialista assistente deve modificar apenas as posições com o MagicNumber igual a 0. Todos os três exemplos são bastante realistas, e os usuários provavelmente poderiam ter definido esses problemas para si mesmos. Em todos os três casos, o MagicNumber é usado para resolvê-lo. Desta forma, não é o único, mas o mais fácil. 3. Realização Agora, deixe-nos resolver a tarefa específica: crie um especialista que possa trabalhar apenas com suas próprias posições sem prestar atenção às posições abertas manualmente ou por outros especialistas. Digamos primeiro um especialista simples, para o qual o sinal para abrir uma posição será quando o indicador MACD atender a linha zero. O especialista ficará assim: vamos anexá-lo ao gráfico e ver como ele funciona: tudo está bem, mas há um problema aqui. Se abrimos um cargo durante a operação de especialistas, ele considerará essa posição como própria e atuará em conformidade. Isso não é o que queremos. Vamos modificar o nosso especialista de forma a gerenciar apenas suas próprias posições: adicione a variável externa denominada ExpertID para ser usada para alterar os valores do MagicNumber para as posições abertas pelo especialista. Após a seleção da função OrderSelect () Adicione verificar se o MagicNumber da ordem selecionada está em conformidade com a da variável ExpertID. Vamos escrever o valor do ExpertID em vez de 0 no campo MagicNumber durante a abertura da posição Considerando as alterações acima, o código aparecerá da seguinte maneira: Agora, quando O especialista está trabalhando, o usuário pode abrir posições manualmente. O especialista não os tocará. 4. Múltiplos especialistas idênticos em gráficos diferentes de um símbolo Existem casos em que o mesmo EA deve negociar nos gráficos do mesmo símbolo, mas com diferentes prazos, por exemplo. Se tentarmos unir nosso especialista ao gráfico EURUSD, H1 e ao EURUSD, M30, simultaneamente, eles interferirão mutuamente: cada um considerará a posição aberta para ser sua posição e modificá-la a seu critério. Esse problema pode ser resolvido ao atribuir outro ID do Especialista ao outro especialista. Mas isso não é muito conveniente. Se houver muitos especialistas usados, pode-se ficar enredado entre seus IDs. Podemos encontrar este problema usando o período do gráfico como MagicNumber. Como devemos fazê-lo Se acabarmos de adicionar o período do gráfico ao ExpertID, é possível que 2 especialistas diferentes em 2 gráficos diferentes gerem o mesmo MagicNumber. Então, vamos multiplicar o ExpertID em 10 e colocar o período do gráfico (seu código de 1 a 9, para ser exato) no final. Isso parecerá algo assim: agora adicione este código à função init () dos especialistas e substitua o ID do Expert por um MagicNumber em todos os lugares. A versão final da EA parece assim: nessa aparência, o especialista pode ser usado em vários gráficos com diferentes períodos. O valor da variável ExpertID será apenas alterado se houver necessidade de iniciar dois especialistas em gráficos do mesmo símbolo e período (por exemplo, EURUSD H1 e EURUSD H4), mas isso acontece extremamente raramente. Da mesma forma, usando o código acima, o usuário pode melhorar suas EAs e ensinar-lhes a distinguir suas posições dos estrangeiros. Aviso: todos os direitos sobre esses materiais são reservados pela MQL5 Ltd. É proibida a cópia ou reimpressão desses materiais, no todo ou em parte. O item Selecionar seleciona uma única ordem e permite que as funções da Informação do Pedido retornem informações sobre a ordem selecionada. Porque tantas funções de informação de ordem dependem de OrderSelect, você deve estar familiarizado com esta função e como ela funciona. Nota: no MT4, o termo pedido refere-se a ordens abertas, pedidos fechados, negociações abertas e negociações fechadas. Bool OrderSelect (int index, int select, int poolMODETRADES) OrderSelect seleciona uma ordem específica para permitir que outras funções de negociação acessem informações sobre a ordem. Valor de retorno: o valor de retorno é VERDADEIRO se a função tiver sucesso ao selecionar a ordem com o índice especificado e FALSE se a função falhar. As informações de erro podem ser recuperadas no caso de uma falha na função GetLastError. Índice int índice numero de índice ou numero de bilhete, dependendo do parâmetro selecionado. Int select Uma bandeira que determina o índice que representa. Existem dois valores possíveis: o índice SELECTBYPOS usa um número de índice seqüencial no grupo de pedidos. O índice SELECTBYTICKET usa o número do ticket da ordem (atribuído via OrderSend) int pool Sinalizador opcional que pode ser usado quando o parâmetro select é definido como SELECTBYPOS. MODETRADES (padrão) As ordens selecionadas serão retiradas de pedidos abertos ou pendentes. MODEHISTÓRIA Os pedidos selecionados serão retirados de pedidos fechados ou cancelados.
No comments:
Post a Comment