Preguntas de un "tonto" - página 56

 
Interesting:

A diferencia del manejador de ticks, el temporizador se ejecutará después de un cierto período de tiempo, establecido por el período.

En el procesamiento pesado del temporizador es, por supuesto, mejor desactivarlo durante un tiempo por deslizamiento o antes del primer tick (hay un montón de variantes), pero si el procesamiento del temporizador no es muy pesado y el período es lo suficientemente largo el temporizador puede ser desactivado.

También en el procesamiento del temporizador puede proporcionar una comprobación de si es un día laborable o no.

Si es necesario, puede programar cálculos pesados para el fin de semana (por ejemplo, la auto-optimizaciónde EA) y ejecutar este proceso desde el temporizador. Al final de los cálculos (o al principio de los mismos), el temporizador puede desactivarse correctamente.

En cuanto a las pruebas en el probador usando la función OnTimer() del EA multidivisa. Supongamos que el temporizador se ajusta a intervalos de 10 segundos. ¿Estará funcionando durante todos los fines de semana del periodo de pruebas? Creo que eso es lo que quería decir Vladimir. Así, si le indicamos al temporizador que se salte el sábado y el domingo, la prueba será mucho más rápida.
 
tol64:
En cuanto a las pruebas en el probador a través de la función OnTimer() del Asesor Experto multidivisa. Supongamos que el temporizador se ajusta a un intervalo de 10 segundos. ¿Estará en marcha todos los fines de semana durante el periodo de pruebas? Creo que eso es lo que quería decir Vladimir. Así, si indicamos al temporizador que se salte el sábado y el domingo, la prueba será mucho más rápida.

1. Probé a desactivar el temporizador los fines de semana cuando los cálculos no eran muy complicados, no noté mucha diferencia (aunque sí la hubo, claro), ahora he decidido no desactivar el temporizador por el momento.

2. Sí, si el temporizador está ajustado, no hay diferencia en el probador o en el modo normal el disparo se producirá hasta que el temporizador se apague. Si se trata de un comprobador, en un intervalo de 10 segundos se disparará durante todo el periodo de prueba, es decir, cada 10 segundos.

Para detener el temporizador durante el fin de semana hay varias soluciones:

а. Apagar el temporizador escribiendo el estado en una variable. Al primer tic de la herramienta principal (o por una señal de "espía") el temporizador puede volver a iniciarse. Este método tiene desventajas relacionadas con la probabilidad de que se salten los ticks o con el retraso de los ticks en el mercado ilíquido. La omisión de ticks también puede ser causada por la falta de conexión con el servidor de comercio.

б. Frenos de deslizamiento, durante un periodo de tiempo determinado. Lo bueno es que el período se especifica con precisión, pero lo malo es que en este método, no sólo el temporizador, sino todo el Asesor Experto estará inactivo hasta la hora X.

No obstante, todas las posiciones y órdenes se procesarán en el probador.

в. Es posible realizar una pausa aumentando el periodo del temporizador. Es conveniente saber de antemano la hora en que el temporizador tiene que "despertarse" y el trabajo del experto no se detiene. Incómodo por el hecho de tener que controlar el temporizador en estado de trabajo o en modo de espera.

в. Dividir el relleno del temporizador en dos grupos, el primero se ejecuta todo el tiempo (por ejemplo, determinar el estado de la conexión), y el segundo según las condiciones (días laborables, conexión presente, se permite el comercio, etc.).

 
Interesting:


Si es necesario, se pueden programar cálculos pesados para el fin de semana (por ejemplo, la autooptimizacióndel EA) y ejecutar este proceso desde el temporizador. Al final de los cálculos (o al principio de los mismos) se puede desactivar correctamente el temporizador.

¡Hola! Ayer se me ocurrió una idea parecida, pero no tuve tiempo de escribir un post con la pregunta al respecto:

1.¿Es posible hacer esto? Cómo esto puede mirar en el código, en particular la apertura y el cierre de las operaciones.O simplemente su ubicación y cálculo-cálculos.Es decir, en el fin de semana en el temporizador va a una función definida, que cíclicamente rebobina la historia, y determina los mejores parámetros.Para este garrapatas en línea no son necesarios, y la función sólo girará en el bucle ...

2.¿Hay algún lugar en alguna rama donde pueda leer sobre esto?

3.¿Si se aplica al campeonato, no se cargará en el coche? Esta es probablemente una pregunta para los organizadores.

 
MetaDriver:
Luego calcula todo en el Asesor Experto en un marco de tiempo adecuado, e imprime el resultado en OnTester(). No tienes que comerciar. ¿Tienes algún problema?

Muchas gracias

Tengo otra pregunta, ¿cómocierro una posición por tiempo, si el precio no ha llegado ni a la toma ni al stop loss?

He leído las bibliotecas sobre cómo trabajar con las órdenes... Lo conecté... El programa jura que no tiene ese procedimiento...

Entonces, mi pregunta es qué tipo de código debe ser para cerrar la orden después de cierto tiempo ( por ejemplo 1 día)

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

así es como tengo que comprobar si una operación está abierta...

OrdersTotal ()!=0 no funciona )))) fallo muy interesante )

 
papaklass:
Existe PosirionTotal() para las posiciones. OrdersTotal() sólo para órdenes pendientes.

si ( PositionsTotal() == 1 )

lo mismo... no hay reacción

// se abre normalmente

si ( TiempoActivación ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// no se puede cerrar antes de la toma o la parada

si ( TiempoActivación ( 2 )

{

if ( PositionsTotal() == 1 ) /// NO FUNCIONA))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

 
BaTTLeBLooM:

Muchas gracias

Así que la pregunta, ¿qué código debe ser aproximadamente, para cerrar la orden después de un cierto tiempo ( por ejemplo 1 día )

Por favor.

Aproximadamente así: se ahorra el tiempo de apertura en una variable. Añada inmediatamente el período de tiempo deseado (por ejemplo, 1 día = 60*60*24).

A continuación, en cada tick (o tiempo), controla si el tiempo actual es mayor que el tiempo de control. Si lo es - lo cierras // si (TimeCurrent() > MyControlTime) CloseMyPosition();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

si ( PositionsTotal() == 1 )

lo mismo... no hay reacción

// se abre normalmente

si ( TiempoActivación ( 1 )

{

if ( _1_operation == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// no se puede cerrar antes de la toma o la parada

si ( TiempoActivación ( 2 )

{

if ( PositionsTotal() == 1 ) /// NO FUNCIONA))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

En realidad, no está claro lo que has escrito aquí, pero PositionTotal() claramente no tiene nada que ver.

Poner Print() antes de comprobar, =1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

Konstantin Gruzdev propuso en su artículo un interesante método con "espías" y "agentes". )) Pero su "agente" exSpy Control panel MCM no quiere trabajar para mí.

A continuación, voy a echar un vistazo a la variante presentada en el artículo. Hasta ahora ha hecho varios expertos en espías, funciona muy bien.

MetaDriver:

Creo que esta tecnología no funcionará en el probador.

Funciona.

 
MetaDriver:

Por favor.

Aproximadamente así: hay que almacenar la hora de apertura en una variable. Añada inmediatamente el intervalo de tiempo necesario (por ejemplo, 1 día = 60*60*24).

A continuación, en cada tick (o tiempo), controla si el tiempo actual es mayor que el tiempo de control. Si lo es - lo cierras // si (TimeCurrent() > MyControlTime) CloseMyPosition();

En una variable es una opción, pero si necesita un cierre más fiable, incluso después de reiniciar el terminal/asesor, puede utilizar un medjic para identificar la orden y comprobar la hora de su apertura.

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}
Razón de la queja: