[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 374

 
Arles:
Por favor, aconseje cómo resolver el problema: El mismo EA está en varios gráficos, una señal para abrir una orden aparece en dos gráficos al mismo tiempo, por ejemplo. Sin embargo, necesitamos que la segunda orden no se abra. El EA tiene una comprobación de una orden abierta pero no sirve de nada porque el primer EA tiene que abrir la orden y el segundo también envía una solicitud para abrir la orden. ¿Tiene alguna solución?
No está muy claro para qué fines se utilizan varios EAs idénticos en varios gráficos. - En base a este entendimiento, sería más lógico aconsejar algo. Sin embargo, en base a la información que tenemos, si quiere que sólo un EA opere, puede deshabilitar el segundo EA para que no opere, ya sea en los ajustes (si hay alguno dentro del EA) o en la pestaña "General" - Permitir que el EA opere (desmarcar la casilla de verificación).
Por cierto, todos los Asesores Expertos no trabajan en paralelo en el mismo terminal, sino secuencialmente. - Hasta que el primero no termine su trabajo, el segundo no procesará los datos. Por lo tanto, si el EA está correctamente escrito, es decir, comprueba la orden colocada, entonces el segundo ya tendrá en cuenta esta orden. - Esta es una. Pero esto sólo ocurrirá si los Asesores Expertos están configurados para trabajar de forma coherente. Digamos que tienen el mismo Magik y la misma contabilidad para la gestión del dinero. Por lo demás, sólo desactivando los EA "innecesarios". - Entonces, ¿por qué ponerlos en...?
 
Chiripaha:
No está muy claro para qué se utilizan varios EAs idénticos en varios gráficos.

El Asesor Experto sólo analiza el par sobre el que se cierne. En el par que aparece primero la señal, abre una orden. Pero a veces una señal aparece en dos pares al mismo tiempo. Y, por extraño que parezca, se abren 2 órdenes, aunque hay una comprobación en el Asesor Experto para cada orden abierta y no debería abrir la segunda. Esto es necesario porque no tenemos suficiente dinero en el depósito.

Hasta que el primero no haya terminado de trabajar, el segundo no procesará los datos.

Sí, pero cuando el 1º ha terminado de trabajar y ha abierto un pedido, el 2º, al haber empezado a trabajar, por poco tiempo NO ve que ya hay un pedido. O se pone a trabajar antes de que se abra la orden.
--

Una cosa más: cuando el 1er EA está Sleep(1000), el segundo EA espera o empieza a trabajar?

 

¡Buenas tardes a todos!

Codifica la siguiente idea

Condición N1 ..Si High[1] supera algún máximo X

y al mismo tiempo

Condición N2 .La diferencia entre el High[1] y el Low de la primera de las siguientes 150 velas >= 150 p.

------------------------------------------------------------------

Acción N1 . Eliminar el pedido anterior

Acción N2 ..Colocar orden pendiente

Acción N3 . Asignar valores a las variables.

PROBLEMA. A pesar de que la orden pendiente debe ser colocada sólo si no hay órdenes en el mercado, o la última orden no es colocada en la barra actual. if (ot==0|| last_order_bar>0)

Cuando se cumple la condición N1 y la condición N2, se colocan simultáneamente Varias órdenes pendientes.

Quiero colocar sólo una orden pendiente.

-----------------------------------------------

Los valores ot y last_order_bar se calculan arriba en este código

                                                                                                                        
                                                                                                                
int last_order_bar = 0;                                                                                                                 
int ot = OrdersTotal();                                                                                                                 
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
      if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift (Symbol (),0,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
if(High[1] > X )
 {
   
   for(int i=1;i<150;i++)
     {
      if((High[1]-Low[i])>=1500*Point)//
      break;         //
             {
     if (ot>0) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if(R==0)                      //если последний выставленный SELLSTOP удален
         {
if (ot==0 || last_order_bar>0)        
int Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//выставить новый SELLSTOP       
if (Ticket>0)                // если SELLSTOP выставлен
 N = (OrderTicket());        //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [0];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0,1);   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return(0);
 
Arles:

El Asesor Experto sólo analiza el par sobre el que se cierne. En el par que aparece primero una señal, abre una orden. Pero a veces una señal aparece en dos pares al mismo tiempo. Y, por extraño que parezca, se abren 2 órdenes, aunque el Asesor Experto tiene una comprobación de cualquier orden abierta y no debería abrir la segunda. Esto es necesario porque no tenemos suficiente dinero en el depósito.

Sí, pero cuando el 1º ha terminado su trabajo y ha abierto una orden, el 2º, al empezar a trabajar, no ve durante un tiempo que la orden ya existe. O se pone a trabajar antes de que se abra el pedido.
--

Una cosa más: cuando el 1er EA es Sleep(1000), ¿el segundo EA espera o empieza a trabajar?

En cuanto a la primera pregunta: he estipulado que si los EAs están escritos correctamente... Por supuesto, puede ocurrir lo que has descrito, si no hay un control en el EA para una orden colocada (abierta) y para la contabilidad de esas órdenes, o para el cálculo de la Gestión del Dinero - todo esto depende del nivel (y la pereza) del programador - si ha pensado en estas cosas y las ha prescrito en el EA o no. Si todo se implementa correctamente, ninguna de sus preocupaciones ocurrirá. - La señal, sí, puede aparecer en 2 pares simultáneamente, pero (ver el post anterior), los Asesores Expertos trabajan secuencialmente. Por lo tanto, hasta que el primer EA no haya procesado las cotizaciones, el siguiente no empezará a funcionar. - Creo que esta es la razón por la que decidimos utilizar el orden secuencial (incluso si fuera posible procesar las citas en paralelo, sería un tema de discusión diferente).

También depende del nivel de la EA. Ya que todas las cosas que has preguntado son bastante complicadas de recetar - no es un trabajo pequeño, que requiere conocimientos de finanzas. Por eso los EAs tienden a ser "simples", y están orientados a que se les dé toda la cuenta de la moneda actual. Por lo general, se negocia una moneda. Porque, para operar con varias divisas, por ejemplo, es necesario tener un tipo de depósito bastante diferente, y esos sistemas tan simples no son realmente aplicables allí. La única excepción a esto serían las operaciones (he olvidado el término exacto, lo reformularé de otra manera) de cobertura, cuando se abre a un precio e inmediatamente se reabre a otro (o incluso a varios) - la diferencia es a sí misma. Pero este es un tipo diferente de EA y allí se contabilizará todo (todo en uno). - Y en general, en mi opinión, si no hay más dinero que liquidez en un par, entonces operar en todos los pares a la vez es un mal tono. (pero esta es mi opinión privada) Carteras, etc. - Esto no es para el comercio especulativo. Por alguna razón la gente no tiene en cuenta eso en absoluto. - Si no es una empresa que produce o comercia a nivel internacional, no necesita muchas divisas. - Este es mi punto - por qué no suelen implementar tales bloques para la contabilidad de diferentes monedas en los EAs - porque son irrelevantes.

Y a la segunda pregunta: Francamente, yo mismo tengo esta pregunta abierta - no estoy muy seguro de cómo reacciona el terminal cuando la función Sleep(1000) - estoy apelando a los que saben esto para darme consejos. Lo ideal es que el terminal en este momento sólo procese los precios en streaming, es decir, que reciba las cotizaciones y dibuje gráficos e indicadores. Pero mientras este EA esté "esperando", no pasará su turno a nadie más. - Pero esta es mi suposición, de la que no estoy totalmente seguro. Tal vez, otra excepción a esta "cola" son los scripts que pueden ser lanzados para su ejecución mientras el EA está esperando. - Tengo la misma pregunta.

Sin embargo, salgo de esta ignorancia construyendo mis Asesores Expertos basados en la corrección del primer punto.

 
solnce600:

¡Buenas tardes a todos!

Codifica la siguiente idea

Condición N1 ..Si High[1] supera algún máximo X

y en este caso

Condición N2 .La diferencia entre el High[1] y el Low de la primera de las siguientes 150 velas >= 150 p.

------------------------------------------------------------------

Acción N1 . Eliminar el pedido anterior

Acción N2 ..Colocar orden pendiente

Acción N3 . Asignar valores a las variables.

PROBLEMA. A pesar de que la orden pendiente debe ser colocada sólo si no hay órdenes en el mercado, o la última orden no es colocada en la barra actual. if (ot==0 || last_order_bar>0)

Cuando se cumple la condición N1 y la condición N2, se colocan simultáneamente Varias órdenes pendientes.

Sólo necesito una orden pendiente para ser colocada.

: )) Andrey, estás preguntando cosas que ya están explicadas en el libro de texto. Mire el ejemplo de la Terminal en el tutorial, donde se describen en detalle los principios y la lógica de cómo deben considerarse las órdenes. - Entonces, la mayoría de tus preguntas desaparecerán por sí solas. En general, el tutorial se basa en el hecho de que la estructura de CUALQUIER Asesor Experto competente se presenta completamente como un ejemplo. - Esto es lo bonito. Se dan + conceptos teóricos básicos de programación. Pero hay un enigma en él - no está pensado para el lector perezoso - se desprende de la estructura de lo escrito. Es decir, para eliminar las preguntas sobre puntos concretos hay que leer todo el libro de texto, pero pocos aceptarán volver a contarlo (el libro de texto).

Está construyendo pilas en la contabilidad de los pedidos. - Necesitas un enfoque más sencillo. La orden está o no está - y no importa en qué barra (bajo sus condiciones) está abierta. - Debido a estas complejidades, nos confundimos al considerar las órdenes y las condiciones. - De ahí, los errores algorítmicos, que cualquier programador debería buscar. Cambia la lógica de escribir el programa y los errores algorítmicos desaparecerán (por sí solos).

 
Bien. Gracias.
 
Arles:

El Asesor Experto sólo analiza el par sobre el que se cierne. En el par que aparece primero la señal, abre una orden. Pero a veces una señal aparece en dos pares al mismo tiempo. Y, por extraño que parezca, se abren 2 órdenes, aunque hay una comprobación en el Asesor Experto para cada orden abierta y no debería abrir la segunda. Esto es necesario porque no tenemos suficiente dinero en el depósito.

¡Esto es bastante elemental! El primer Asesor Experto abre una orden. Si no importa qué EA abrió la orden... entonces cree una condición en ambos. Cree una función booleana que encuentre el último pedido abierto y extraiga respectivamente la hora de su apertura. Sieste tiempo de apertura es igual ala apertura de la barra actual, salimos de la función con TRU. Coloque la función al principio del inicioy si el modo es TRU, entonces salga del inicio.
 
Chiripaha:

Y en cuanto a la segunda pregunta: para ser honesto, yo mismo tengo esta pregunta abierta - no estoy completamente seguro de cómo reacciona el terminal cuando la función Sleep(1000) - estoy apelando a los que saben - para darme una respuesta. Lo ideal es que el terminal en este momento sólo procese los precios en streaming, es decir, que reciba las cotizaciones y dibuje gráficos e indicadores. Pero mientras este EA esté "esperando", no pasará su turno a nadie más. - Pero esta es mi suposición, de la que no estoy totalmente seguro. Tal vez, otra excepción a esta "cola" son los scripts que pueden ser lanzados para su ejecución mientras el EA está esperando. - Tengo la misma pregunta.

Sin embargo, trato de salir de esta ignorancia construyendo mis Asesores Expertos basados en la corrección del primer punto.



Según tengo entendido, después de Sleep() el Asesor Experto simplemente se duerme, es decir, su trabajo se pausa y en este momento recibe cotizaciones y no reacciona a nada. En consecuencia, el terminal pasa la "cola" a otra.

Si alguien no está de acuerdo, que me corrija, por favor.

 
hoz:


Según tengo entendido, cuando se procesa Sleep(), el Asesor Experto simplemente se duerme, es decir, su trabajo se suspende y en este momento no está recibiendo cotizaciones ni reaccionando a nada en absoluto. En consecuencia, el terminal pasa la "cola" a otra.

Si alguien no está de acuerdo, que me corrija, por favor.

No estoy dispuesto a estar de acuerdo. - Porque desde esta posición se pierde la lógica del correcto trabajo y cálculo tanto del dinero como de las posiciones por parte de los Asesores Expertos. - Esta es una. Segundo. - Si mi EA está durmiendo, por ejemplo, durante 100 milisegundos, y otro empieza a trabajar al mismo tiempo, entonces qué pasará, que en cuanto pasen esos 100 milisegundos, el otro tendrá que parar su trabajo... y pasarla de nuevo a este en el medio y así indefinidamente... Por otro lado. He visto (no pocas veces) en los EAs cuando mandan a "dormir" durante minutos y muchas veces en cada bloque de ejecución. - Entonces, si todos los demás búhos no están trabajando durante este tiempo, también está mal de alguna manera. - Así que la pregunta es bastante pertinente. Me gustaría entender la lógica de funcionamiento en este punto. Pero no he encontrado una explicación detallada en los documentos oficiales.

Pero entre dos males yo elegiría este último. En este caso, simplemente dejaría el búho que estoy seguro. Si no es así, da igual: al menos se conserva la corrección de los recálculos, aunque se ralentiza su trabajo.

El problema no es tan trivial como parece. - La cuestión es que mis experimentos han demostrado que si la casilla"Permitir que los EAs operen" está desmarcada, el trabajo del EA no se detiene - todos los cálculos se realizan de la misma manera en cada tick. Sólo las transacciones del EA no se envían al servidor. Pero, si estos cálculos se llenan con estos "resbalones" (no del todo correctamente), entonces si hay 5-10 de estos EAs, entonces específicamente pueden ralentizar la ejecución del EA real que está operando actualmente.

Sí, algunos programadores colocan el control sobre los permisos para comerciar y dejan que el búho trabaje sobre esta base. Pero no se hace más a menudo. Y si el código está cerrado, no podemos entender en absoluto si la operación es de frenado o no (y qué búho exactamente). - Ahora voy a hurgar en este tema en la búsqueda del foro. Algo se ha ralentizado.

Gracias a Arles por la pregunta, por recordarme y ponerme al día. No tenía la suficiente experiencia para entender lo que se escribía sobre el tema. Lo haré de nuevo ahora.

 
Arles:

El Asesor Experto sólo analiza el par sobre el que se cierne. En el par que aparece primero la señal, abre una orden. Pero a veces una señal aparece en dos pares al mismo tiempo. Y, por extraño que parezca, se abren 2 órdenes, aunque hay una comprobación en el Asesor Experto para cada orden abierta y no debería abrir la segunda. Esto es necesario porque no tenemos suficiente dinero en el depósito.

Sí, pero cuando el 1º ha terminado su trabajo y ha abierto una orden, el 2º, al empezar a trabajar, no ve durante un tiempo que la orden ya existe. O se pone a trabajar antes de que se abra el pedido.
--

Una cosa más: cuando el 1er EA duerme (1000) el segundo espera o empieza a trabajar?

Con un pequeño depósito no se opera en varios pares (consejo mundano).

Técnicamente, para que los diferentes EAs tengan en cuenta el número total de órdenes, podemos probar este esquema:

    int li_total - OrdersTotal();
    if (li_total == 0) Sleep (1000);
    li_total - OrdersTotal();
    if (li_total == 0) OrderSend();

No sé si funcionará bien (debería funcionar con 2). Sería más seguro hacerlo a través de las variables globales del terminal disponiendo de "Semaphore" trabajando secuencialmente. Entonces no importa cuántos Asesores Expertos trabajen en paralelo.

Razón de la queja: