[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 214

 
artmedia70:

Por exemplo, uma função que atribui automaticamente a um EA um número mágico único baseado no nome do EA, do par de moedas e do TF no qual ele está instalado:

Chamada:



Você também pode designar um mágico usando CRC32 para garantir que seja único. Ou, você pode verificar rapidamente a integridade de qualquer dado previamente gravado ou recebido de outro terminal, digamos, através da Internet. Neste caso, a função darb está disponível para todos)))) Use-o sabiamente).

int crc_table[256];
 
/* Run this function previously */
void make_crc_table() 
{
    for (int i = 0; i < 256; i++) {
        int c = i;
        for (int j = 0; j < 8; j++) {
            if(c & 1 != 0)
               c = 0xEDB88320 ^ (c >> 1);
            else 
               c = c >> 1;
        }
        crc_table[i] = c;
    }
}
 
bool table_filled = false;

int crc32(string buf) 
{
    if(!table_filled)
    {
      make_crc_table();
      table_filled = true;
    }
    
    int len = StringLen(buf);
    
    int c = 0xFFFFFFFF;
    for (int i = 0; i < len; i++) {
        c = crc_table[(c ^ StringGetChar(buf,i)) & 0xFF] ^ (c >> 8);
    }
    return (c ^ 0xFFFFFFFF);
}
 
alsu:

E também podemos designar um mágico usando CRC32 para garantir que seja único. Ou podemos verificar rapidamente a integridade de quaisquer dados previamente salvos ou recebidos de outro terminal, digamos, através da Internet. Neste caso, escurecer todas as funções)))). Use-o sabiamente).


Alexey, obrigado por sua função interessante e bem escrita. Vou dar uma olhada nisso. Eu mesmo estive pensando em uma idéia semelhante, e aí vem ela.

Bem, aqui está ele:


Victor, eu também procurei por você no Dock. Portanto, estes códigos foram vistos nos indicadores da CodeBase, que eu utilizei para o comércio manual. Afinal de contas, estava longe de ser uma panacéia. Então eu joguei fora quase todos os indicadores, e agora meu consultor especializado é seu próprio indicador, e eu não preciso de quase nada mais!

A propósito, aprendi muito a escavar na Base! Você mesmo tem que ser um especialista para entender tudo no Dock! Há mais detalhes no livro didático, mas faltam muitos!


Boris, eu mesmo não uso indicadores. A menos que seja um traço... E as funções de cordel são necessárias para outros propósitos. Eu escrevi sobre isso acima. Aqui:

hoz:

Para não ler todos os tipos de códigos tortuosos, como aquihttps://www.mql5.com/ru/articles/1524.

(Notei lá, um monte de insetos. E em geral, não sei o que o autor estava pensando quando escreveu este código).

Por favor, me dê uma dica sobre o algoritmo desta variante. Eu quero que a ordem pendente siga o objeto, por exemplo, uma linha de tendência. Ou a ordem pendente deve ficar atrás da linha...

Como é implementado? Eu realmente não entendo isso.

Eu entendo que devemos criar um objeto. Mas devemos de alguma forma especificar que se o preço está "atrás" do objeto, devemos fazer algo, ou se o preço está em jogo, a ordem pendente está nele...

 

Amigos, vocês podem me dar uma dica?

Existe um programa que escreva tudo o que o terminal faz?

Ou como fazer um registro de escrita EA independentemente do servidor?

 
polycomp:
Obrigado pelo esclarecimento! Parece que é melhor não usar estática em bibliotecas.


E você também não deve usá-los fora deles. No MT4, variáveis do tipo estático NUNCA são reinicializadas.
 
herhuman:

Como posso fazer os logs de escrita da EA independentemente do servidor?

E é verdade.
 
hoz:


Para começar, basta articular claramente o que você gostaria de fazer. As abordagens geométricas são bem-vindas.
 
hoz:


Alexey, obrigado por uma característica interessante e escrita de forma inteligente. Vou dar uma olhada nisso. Eu mesmo estive pensando em uma idéia semelhante, e aqui está ela.


Boris, eu mesmo não uso indicadores. A menos que seja uma onduladora... E as funções de cordel são necessárias para outros propósitos. Eu escrevi sobre isso acima. Aqui:


Victor, eu também não tenho lidado com isso, já vi muito disso na Base. Pelo que entendi, o cruzamento de preços com linhas é semelhante com os swipes. Também cruzamentos de linha com seus parâmetros de ordem e posição, etc. Desenterre!
 

Caros senhores, poderiam responder a seguinte pergunta para um novato?

if (((((Bid>1.2153)&&(Bid<1.2160) ||| (Bid>1.2173)&&(Bid<1.2180)) ||| ( (Bid>1.2100)&&(Bid<1.2107) ||| (Licitação>1.2094)&&(Licitação<1.2101)) ||| (((Licitação>1.2092)&&(Licitação<1.2099) ||| (Licitação>1.2091)&&(Licitação<1.2098))|||((Proposta>1.2073)&&(Proposta<1.2080)||(Proposta>1.2005)&&(Proposta<1.2012))))) // se o preço corresponder a uma das condições listadas no cabeçalho do if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir um pedido.

Tenho cerca de 3000 dados de condições não repetitivas, então os coloquei todos em uma matriz unidimensional.

masiv duplo [3000];

se ((Bid===masiv[5]) // se o preço corresponde ao valor do elemento da matriz com o índice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir o pedido.

PERGUNTA: Que código pode ser usado para escrever o seguinte comando

Se o preço corresponder ao valor de qualquer um dos 3000 valores não repetitivos da matriz, masiv duplo [3000]

Abra um pedido.

A opção mais simples é colocar 3000 condições no cabeçalho do if(.....).

Mas provavelmente existem algumas variantes mais compactas do código.

Obrigado pela ajuda.


 
solnce600:

Caros senhores, poderiam, por favor, dizer a um recém-chegado a resposta a esta pergunta?

if (((((Bid>1.2153)&&(Bid<1.2160 )||| (Bid>1.2173)&&(Bid<1.2180)) ||| ( (Bid>1.2100)&&(Bid<1.2107) ||| (Licitação>1.2094)&&(Licitação<1.2101)) ||| (((Licitação>1.2092)&&(Licitação<1.2099) ||| (Licitação>1.2091)&&(Licitação<1.2098))|||((Proposta>1.2073)&&(Proposta<1.2080)||(Proposta>1.2005)&&(Proposta<1.2012))))) // se o preço corresponder a uma das condições listadas no cabeçalho do if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir um pedido.

Tenho cerca de 3000 dados de condições não repetitivas, então os coloquei todos em uma matriz unidimensional.

masiv duplo [3000];

se ((Bid===masiv[5]) // se o preço corresponde ao valor do elemento da matriz com o índice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir o pedido.

PERGUNTA: Que código pode ser usado para escrever o seguinte comando

Se o preço corresponder ao valor de qualquer um dos 3000 valores não repetitivos da matriz, masiv duplo [3000]

Abra um pedido.

A opção mais simples é colocar 3000 condições no cabeçalho do if(.....).

Mas provavelmente existem algumas variantes mais compactas do código.

Obrigado pela ajuda.




Se necessário, uma solução pode ser encontrada. Por exemplo, mude para uma matriz inteira encomendada. Procure nele o valor desejado.
 
solnce600:

Caros senhores, poderiam, por favor, dizer a um recém-chegado a resposta a esta pergunta?

if (((((Bid>1.2153)&&(Bid<1.2160) ||| (Bid>1.2173)&&(Bid<1.2180)) ||| ( (Bid>1.2100)&&(Bid<1.2107) ||| (Licitação>1.2094)&&(Licitação<1.2101)) ||| (((Licitação>1.2092)&&(Licitação<1.2099) ||| (Licitação>1.2091)&&(Licitação<1.2098))|||((Proposta>1.2073)&&(Proposta<1.2080)||(Proposta>1.2005)&&(Proposta<1.2012))))) // se o preço corresponder a uma das condições listadas no cabeçalho do if

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir um pedido.

Tenho cerca de 3000 dados de condições não repetitivas, então os coloquei todos em uma matriz unidimensional.

masiv duplo [3000];

se ((Bid===masiv[5]) // se o preço corresponde ao valor do elemento da matriz com o índice 5

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // abrir o pedido.

PERGUNTA: Que código pode ser usado para escrever o seguinte comando

Se o preço corresponder ao valor de qualquer um dos 3000 valores não repetitivos da matriz, masiv duplo [3000]

Abra um pedido.

A opção mais simples é colocar 3000 condições no cabeçalho do if(.....).

Mas provavelmente existem algumas variantes mais compactas do código.

Obrigado pela ajuda.



Loop:

   double massiv[];  
//----------------------------------------------------------------------
   for (int i=0; i<ArrayRange(massiv,0); i++) {
      if (MathAbs(NormalizeDouble(Bid-massiv[i],Digits))<=0.5*Point) {
         // цена примерно совпадает со значением в massiv[i]
         // ... обрабатываем совпадение
         }
      }
//----------------------------------------------------------------------