Discussão do artigo "O uso de ORDER_MAGIC para negociação com diferentes consultores especialistas em um único instrumento"
Não sei quem ou como, mas prefiro especificar explicitamente os números de ID ao criar minhas próprias enumerações (embora isso não seja necessário).
Por exemplo, assim:
enum Emagic { ENUM_DIGITAL_NAME = 0, // nome numérico do consultor ENUM_CODE_INTERACTION = 1, // código de interação ENUM_EXPERT_SYMBOL = 2 // o símbolo no qual o EA é lançado };
Isso também pode ajudar na migração da MQL4, por exemplo, essa é a enumeração que uso para trabalhar com pedidos
//ENUM_MT4_ORDER_TYPE enum ENUM_MT4_ORDER_TYPE //Tipos de operações comerciais { OP_BUY = 0, /Compra OP_SELL = 1, //Venda OP_BUYLIMIT = 2, // Ordem pendente BUY LIMIT OP_SELLLIMIT = 3, //Ordem pendente SELL LIMIT OP_BUYSTOP = 4, //Pendente de ordem BUY STOP OP_SELLSTOP = 5 //Pendente de ordem SELL STOP };
Essa abordagem é conveniente porque, independentemente da posição do identificador na enumeração, seu código (valor numérico) não será alterado)....
Além disso, essa abordagem é conveniente se a enumeração contiver identificadores com um valor negativo
PS
Artigo muito interessante, obrigado ao autor...
Não sei quem ou como, mas prefiro especificar explicitamente os números de ID ao criar minhas próprias enumerações (embora isso não seja necessário).
Por exemplo, assim:
Isso também pode ajudar na migração da MQL4, por exemplo, essa é a enumeração que uso para trabalhar com pedidos
Essa abordagem é conveniente porque, independentemente da posição do identificador na enumeração, seu código (valor numérico) não será alterado)....
Além disso, essa abordagem é conveniente se a enumeração contiver identificadores com um valor negativo
PS
Artigo muito interessante, obrigado ao autor...
Para mim, isso não é crucial, pois ao declarar uma enumeração, os valores são atribuídos automaticamente em ordem,
embora eu concorde que sua variante seja mais clara (especialmente se as enumerações forem longas, digamos, mais de 3-4).
Com essa abordagem para o mágico, é necessário escrever a mesma instrução para o usuário, para que ele possa saber claramente quais mágicos estarão ocupados e quais estão livres. Os usuários de Expert Advisors usam Expert Advisors não apenas de um desenvolvedor, e é improvável que o método seja incluído nos padrões usados por todos os autores de Expert Advisors. Se os desenvolvedores do terminal tivessem dividido esse ulong em várias variáveis, de modo que houvesse várias imagens, por exemplo, quatro de dois bytes.
request.magic request.id1 request.id2 request.id3
Ou, pelo menos, completado o terminal com uma biblioteca, para que ele pudesse, de alguma forma, ser incluído nos padrões.
SetMagic(Magic,Id1,Id2,Id3)
Com essa abordagem para o mágico, é necessário escrever a mesma instrução para o usuário, para que ele possa saber claramente quais mágicos estarão ocupados e quais estão livres. Os usuários de Expert Advisors usam Expert Advisors não apenas de um desenvolvedor, e é improvável que o método seja incluído nos padrões usados por todos os autores de Expert Advisors. Se os desenvolvedores do terminal tivessem dividido esse ulong em várias variáveis, de modo que houvesse várias imagens, por exemplo, quatro de dois bytes.
Ou, pelo menos, completado o terminal com uma biblioteca, para que ele pudesse, de alguma forma, ser incluído nos padrões.
Não é de forma alguma um fato que, para o usuário, seja necessário escrever as instruções sobre o trabalho com o MAGIK, mesmo que isso não vá além da descrição de como o MAGIK é formado....
Acredito que, no momento, esse é um dos melhores artigos sobre automação comercial. Vou dizer mais: eu mesmo sou um defensor da codificação do MAGIC em um nível mais sério do que o 777777 ou o 555555, e talvez até prefira colocar informações mais detalhadas do que dizer que isso foi feito pelo autor.
Mas não me dei conta de usar estruturas (já que a ideia de codificação existe desde a MQL4), embora eu provavelmente estivesse prestes a fazê-lo....
Também não acho que seja necessário "escrever" no MAGIC qualquer informação sobre os símbolos nos quais as operações de negociação são feitas (isso se deve ao fato de que essas informações já estão armazenadas em outro lugar e não mudam desde o momento da ordem até o momento do fechamento total da posição). Também acho que será suficiente alocar os três últimos dígitos do MAGIC (se não for usar o código de segurança) ao MARKER (OU MARCADOR, não vou dizer exatamente como é na engenharia genética) do EXPERT.
Isso ocorre porque no PRIMEIRO desses dígitos é possível codificar de 9 a 10 classes básicas de especialistas e, nos dois restantes, seu número exclusivo do ponto de vista do usuário ou desenvolvedor. Como resultado, você normalmente obterá de 900 a 1.000 combinações.
Também prefiro um algoritmo em que o Expert Advisor reconheça pelo menos as ordens definidas pelo trader e as codifique de acordo.
PS
Não acho que seja necessário ter medo de que vários EAs confundam o MAGIC codificado, pelo menos acho que, com uma determinada abordagem, isso não é tão perigoso (e provavelmente provável) quanto parece à primeira vista. Especialmente, isso se torna irrelevante se todos esses especialistas (mesmo que de autores diferentes) apoiarem essa metodologia de criptografia do MAGIC e levarem em conta as ações uns dos outros. O ideal é que apenas um especialista negocie com esse ou aquele par.....
O artigo dá um exemplo de uso de códigos, sendo que nem todos os dígitos são usados e a codificação é obviamente excessiva,
Se necessário, até mesmo esses 9 bits ocupados podem ser compactados.
Além da identificação do mágico (os 9 bits restantes), também pode ser transferido o estado do saldo no momento da realização do pedido.
Como é improvável que o saldo ocupe mais de 6 bits, ainda há espaço para qualquer codificação.
O artigo dá um exemplo de uso de códigos, sendo que nem todos os dígitos são usados e a codificação é obviamente excessiva,
Se necessário, até mesmo esses 9 bits ocupados podem ser compactados.
Além da identificação do mágico (os 9 bits restantes), também pode ser transferido o estado do saldo no momento da realização do pedido.
Como é improvável que o saldo ocupe mais de 6 bits, ainda há espaço para qualquer codificação.
Para tudo isso, você deve adicionar 1.000 ou 10.000 e subtraí-los antes da decodificação, de modo que haja um intervalo garantido de mágicas não ocupadas por seu método.
A tudo isso devem ser adicionados 1.000 ou 10.000 e, antes da decodificação, subtrair, de modo que haja um intervalo garantido de não ocupado por seu método de mágicas.
Bem, como fazer isso sem dor é descrito no artigo (só preciso trabalhar um pouco para expandir o intervalo de criptografia),
Não vejo nenhum problema.
PS: o único ponto fraco é que não se deve esquecer de traduzir o saldo para um número inteiro, caso contrário, a vírgula causará uma falha. Como fazer isso deve ser visto na vinculação, se a conta for de centavos, então multiplique por 100, se essa precisão não for necessária, então faça a tradução para um número inteiro com o corte.
Bem, o artigo descreve como fazer isso sem problemas (só preciso de um pequeno ajuste para expandir o intervalo de criptografia),
Não vejo nenhum problema.
PS: o único ponto fraco é que não se deve esquecer de traduzir o saldo para um número inteiro, caso contrário, a vírgula causará uma falha. Como fazer isso, deve-se observar a vinculação: se a conta for de centavos, multiplique por 100; se essa precisão não for necessária, faça a tradução para um número inteiro com recorte.
Se não houver nenhum problema, dê uma instrução curta e clara sobre como garantir a não interseção de mágicas codificadas pelo seu sistema e não codificadas.
Se isso não for um problema, forneça uma instrução curta e clara sobre como garantir a não interseção de magias codificadas por seu sistema e não codificadas.
Para que minha resposta não pareça uma desculpa, direi imediatamente que essa pergunta não foi considerada, mas é permitida.
Aqui está o valor máximo de ulong 18 446 744 073 709 551 615 que 17*10^18 tem todos os campos livres. Стоит добавить при кодировании 17 000 000 000 000 000 000 000 000 и поставить при декодировании проверку содержит ли 20 и 19 разряд числа 1 и 7 и вы гарантированно определите кодированный ли магик или нет.
//+------------------------------------------------------------------+ //| A função retorna uma mágica pré-fabricada montada a partir dos dados de entrada. //+------------------------------------------------------------------+ ulong Cmagic::SetMagic_request(int digital_name=0,int code_interaction=0) { if(digital_name>=1000)Print("O nome numérico do consultor está definido incorretamente (maior que 1000)"); if(code_interaction>=1000)Print("Conjunto de códigos de identificação de alienígenas incorretos (maior que 1000)."); mag.digital_name =digital_name; mag.code_interaction =code_interaction; mag.expert_symbol =symbolexpert(); mag.magicnumber =17000000000000000000+// вот эта вставка даст 20 разрядов магику mag.digital_name*(int)pow(1000,2)+ mag.code_interaction*(int)pow(1000,1)+ mag.expert_symbol; return(mag.magicnumber); }
e no decodificador.
//+------------------------------------------------------------------+ //| A função divide a mágica em três partes de três dígitos. //|| e retorna a parte apontada pela categoria | //+------------------------------------------------------------------+ int Cmagic::decodeMagic_result(int category) { string string_value=(string)mag.magicnumber; int rem=(int)MathMod(StringLen(string_value),3); if(rem!=0) { rem=3-rem; string srem="0"; if(rem==2)srem="00"; string_value=srem+string_value; } int start_pos=StringLen(string_value)-3*category; string value=StringSubstr(string_value,start_pos,3); if(StringLen(string_value)!=20)return((int)StringToInteger("0"));//если магика не 20 разрядов значит не кодированный return((int)StringToInteger(value)); }
É assim que é, e não se esqueça Dimitri que quem quer fazer está procurando uma oportunidade e quem não quer fazer está procurando uma razão, eu abri uma janela em seu poder para fazer uma janela ou mesmo uma porta fora dela.
A propósito, eu uso esse
(int)pow(1000,2)
por dígitos, mas ninguém proíbe reescrevê-lo por meio de string, apenas no artigo eu quis mostrar os dois métodos e, se possível, encaixá-los organicamente (assim, a codificação é feita por int e a decodificação por string).
E, em geral, eu queria mostrar as possibilidades e não oferecer um conversor de caixa preta (é melhor dar uma pá a um homem do que um balde de mingau).
PS aqui disse uma coisa codificada outra, (eu tenho uma tempestade de modo que a rede é regularmente derrubada) verificação codificada não 1 e 7 em 20 e 19 dígitos e a presença desses mesmos dígitos aqueles se o magik 20 dígitos significa codificação usada, mas você entende que a verificação pode ser reproduzida.
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.
- 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 O uso de ORDER_MAGIC para negociação com diferentes consultores especialistas em um único instrumento foi publicado:
Este artigo considera as questões de codificação de informação, usando a identificação mágica, assim como a divisão, montagem e sincronização de negociação automática de diferentes Expert Advisors. Este artigo será interessante para iniciantes, assim como para negociantes mais experientes, porque trata da questão das posições virtuais, o que pode ser útil na implementação de sistemas completos de sincronização de Expert Advisors e várias estratégias.
Autor: Nikolay Demko