[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 214

 
artmedia70:

Por ejemplo, una función que asigne automáticamente a un EA un número mágico único basado en el nombre del EA, el par de divisas y el TF en el que está instalado:

Llama:



También puede asignar un Mago usando CRC32 para asegurarse de que es único. O bien, puede comprobar rápidamente la integridad de cualquier dato previamente guardado o recibido desde otro terminal, por ejemplo, a través de Internet. En este caso, la función darb está disponible para todos)))) Utilícelo 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:

Y también podemos asignar un Mago usando CRC32 para asegurarnos de que es único. O podemos comprobar rápidamente la integridad de cualquier dato previamente guardado o recibido desde otro terminal, por ejemplo, a través de Internet. En este caso, darb toda la función)). Utilícelo sabiamente).


Alexey, gracias por tu interesante y bien escrita función. Le echaré un vistazo. Yo mismo he estado pensando en una idea similar, y aquí viene.

Bueno, aquí está:


Víctor, yo también te busqué en el Muelle. Entonces, estos códigos fueron vistos en los indicadores de CodeBase, que utilicé para el comercio manual. Resultó estar lejos de ser una panacea. Así que deseché casi todos los indicadores, y ahora mi Asesor Experto es su propio indicador, ¡y no necesito casi nada más!

Por cierto, ¡he aprendido mucho indagando en la Base! Hay que ser un experto para entender todo lo que hay en el Muelle. Hay más detalles en el libro de texto, ¡pero faltan muchos!


Boris, yo mismo no utilizo indicadores. A menos que sea un guión... Y las funciones de cadena son necesarias para otros fines. Ya escribí sobre ello más arriba. Aquí:

hoz:

Para no leer todo tipo de código torcido, como aquíhttps://www.mql5.com/ru/articles/1524.

(Me he dado cuenta de que hay un montón de bichos. Y en general, no sé en qué estaba pensando el autor cuando escribió este código).

Por favor, denme una pista sobre el algoritmo de esta variante. Quiero que la orden pendiente siga el objeto, por ejemplo, una línea de tendencia. O la orden pendiente debe estar detrás de la línea...

¿Cómo se aplica? Realmente no lo entiendo.

Entiendo que debemos crear un objeto. Pero deberíamos especificar de alguna manera que si el precio está "detrás" del objeto, deberíamos hacer algo, o si el precio está en la línea, la orden pendiente está en ella.

 

Amigos, ¿pueden darme una pista?

¿Hay algún programa que escriba todo lo que hace el terminal?

¿O cómo hacer que un EA escriba registros independientemente del servidor?

 
polycomp:
Gracias por la aclaración. Parece que es mejor no utilizar la estática en las bibliotecas.


Y tampoco deberías usarlos fuera de ellos. En MT4, las variables de tipo Estático NUNCA se reinicializan.
 
herhuman:

¿Cómo puedo hacer que el EA escriba los registros independientemente del servidor?

Lo hace.
 
hoz:


Para empezar, articule claramente lo que le gustaría. Los enfoques geométricos son bienvenidos.
 
hoz:


Alexey, gracias por un artículo tan interesante e inteligentemente escrito. Le echaré un vistazo. Yo mismo he estado pensando en una idea similar, y aquí está.


Boris, yo mismo no utilizo indicadores. A no ser que sea una máquina de hacer saltos... Y las funciones de cadena son necesarias para otros fines. Ya escribí sobre ello más arriba. Aquí:


Víctor, yo tampoco he tratado con esto, he visto mucho de esto en Base. Según tengo entendido, los cruces de precios con las líneas son similares con los barridos. También captar los cruces de líneas con sus parámetros de orden y posición, etc. ¡Descúbrelo!
 

Estimados señores, ¿podrían responder a la siguiente pregunta para un novato?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Oferta>1.2094)&&(Oferta<1.2101)) | (((Oferta>1.2092)&&(Oferta<1.2099) || (Oferta>1.2091)&&(Oferta<1.2098))||((Oferta>1.2073)&&(Oferta<1.2080)||(Oferta>1.2005)&&(Oferta<1.2012))))) // si el precio coincide con una de las condiciones enumeradas en la cabecera if

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

Tengo alrededor de 3000 datos de condiciones no repetitivas, así que los he colocado todos en un array unidimensional

doble masiv [3000];

if ((Oferta==masiv[5]) // si el precio corresponde al valor del elemento de la matriz con el índice 5

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

PREGUNTA: Con qué código se puede escribir el siguiente comando

Si el precio coincide con el valor de cualquiera de los 3000 valores no repetidos de la matriz double masiv [3000]

Abrir un pedido.

La opción más sencilla es poner 3000 condiciones en la cabecera if(.....).

Pero probablemente hay algunas variantes más compactas del código.

Gracias por la ayuda.


 
solnce600:

Estimados Señores, ¿podrían decirle a un recién llegado la respuesta a esta pregunta?

if (((((Bid>1.2153)&&(Bid<1.2160 )|| (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Oferta>1.2094)&&(Oferta<1.2101)) | (((Oferta>1.2092)&&(Oferta<1.2099) || (Oferta>1.2091)&&(Oferta<1.2098))||((Oferta>1.2073)&&(Oferta<1.2080)||(Oferta>1.2005)&&(Oferta<1.2012))))) // si el precio coincide con una de las condiciones indicadas en la cabecera if

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

Tengo alrededor de 3000 datos de condiciones no repetitivas, así que los he colocado todos en un array unidimensional

doble masiv [3000];

if ((Oferta==masiv[5]) // si el precio corresponde al valor del elemento de la matriz con el índice 5

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

PREGUNTA: Con qué código se puede escribir el siguiente comando

Si el precio coincide con el valor de cualquiera de los 3000 valores no repetidos de la matriz double masiv [3000]

Abrir un pedido.

La opción más sencilla es poner 3000 condiciones en la cabecera if(.....).

Pero probablemente hay algunas variantes más compactas del código.

Gracias por la ayuda.




Si es necesario, se puede encontrar una solución. Por ejemplo, cambiar a una matriz ordenada de enteros. Busca en él el valor deseado.
 
solnce600:

Estimados Señores, ¿podrían decirle a un recién llegado la respuesta a esta pregunta?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Oferta>1.2094)&&(Oferta<1.2101)) | (((Oferta>1.2092)&&(Oferta<1.2099) || (Oferta>1.2091)&&(Oferta<1.2098))||((Oferta>1.2073)&&(Oferta<1.2080)||(Oferta>1.2005)&&(Oferta<1.2012))))) // si el precio coincide con una de las condiciones indicadas en la cabecera if

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

Tengo alrededor de 3000 datos de condiciones no repetitivas, así que los he colocado todos en un array unidimensional

doble masiv [3000];

if ((Oferta==masiv[5]) // si el precio corresponde al valor del elemento de la matriz con el índice 5

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

PREGUNTA: Con qué código se puede escribir el siguiente comando

Si el precio coincide con el valor de cualquiera de los 3000 valores no repetidos de la matriz double masiv [3000]

Abrir un pedido.

La opción más sencilla es poner 3000 condiciones en la cabecera if(.....).

Pero probablemente hay algunas variantes más compactas del código.

Gracias por la ayuda.



Bucle:

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