Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1477

 
MakarFX:

Aún así, comprueba en cada tic

y el cálculo mínimo se sale... retrocede dos compases.

Mi cálculo mínimo era ser golpeado como en tu foto. Pero entonces añadí la variable LoY1 y dejó de producirse este error. Como resultado, todas las órdenes se abren de la misma manera (por tiempo, cantidad y precio) que en mi código inicial, es decir, como las necesito. Mi código falló en otro lugar .... Pero lo arreglé en el mismo lugar.


double LoU,LoY1,Pr;
int x;
void OnTick()
{
if (Low[1]>Low[2]&&Time[2]>x&&Low[2]<LoY1)
{
LoU=Low[2];
LoY1=Low[2];
}
//**************************************************************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
LoY1=Bid;
x=TimeCurrent();
}
}

Y también puede colocar una orden pendiente en 30 puntos de LoU en lugar de abrir en el mercado. Y entonces usted no necesita comprobar Bid en cada tick. Pero en el caso de una orden pendiente, cada vez que cambie el LoU, deberíamos borrar la antigua orden pendiente y establecer una nueva, o cambiar los parámetros de una orden pendiente actual sin borrarla. Y todo esto debe hacerse con mucha menos frecuencia que la comprobación de cada garrapata de la licitación .

En mi caso, ¿qué variante es la que menos tiempo consume en términos de implementación de código?

1. Compruebe en cada momento si la oferta está a 30 puntos de la unidad de destino.

2. Con cada cambio de LoU, borre el antiguo pendiente y establezca uno nuevo.

3. Con cada cambio de LoU, cambiar los parámetros de la pausa activa

Gracias por su ayuda
.

 
ANDREY:

Mi cálculo del mínimo se salía como en tu foto. Pero entonces añadí la variable LoY1 y se detuvo.

Existen las funciones estándar iLowest yiHighest.

 
ANDREY:

Mi cálculo del mínimo se salía como en tu foto. Pero entonces añadí una variable LoY1 y se detuvo este desvío. Como resultado, todas las órdenes se abren de la misma manera (por tiempo, cantidad y precio) que en mi código original (es decir, de la manera que quiero). Mi código falló en otro lugar .... Pero lo arreglé en el mismo lugar.


Y también puede colocar una orden pendiente en 30 puntos de LoU en lugar de abrir en el mercado. Y entonces usted no necesita comprobar Bid en cada tick. Pero en el caso de una orden pendiente, cada vez que cambie el LoU, deberíamos borrar la antigua orden pendiente y establecer una nueva, o cambiar los parámetros de una orden pendiente actual sin borrarla. Y todo esto debe hacerse con mucha menos frecuencia que la comprobación de cada garrapata de la licitación .

En mi caso, ¿qué variante es la que menos tiempo consume en términos de implementación de código?

1. Compruebe en cada momento si la oferta está a 30 puntos de la unidad de destino.

2. Con cada cambio de LoU, borre el antiguo pendiente y establezca uno nuevo.

3. Con cada cambio de LoU, cambiar los parámetros de la posición activa

1) x no es int, es datetime (será útil en el futuro)

2) su código inicial no tiene órdenes pendientes

3) Ahora tu código realiza más operaciones en cada tick

Compruebe su mensaje

 
Taras Slobodyanik:

existen las funciones estándar iLowest yiHighest.

No es adecuado... el número de elementos de la serie temporal no es constante
 
MakarFX:
No lo hace... el número de elementos de la serie temporal no es constante

er... ¿te impide encontrar el alto/bajo?

 
Taras Slobodyanik:

er... ¿eso te impide encontrar la alta/baja?

Las funcionesiLowest yiHighest significan buscar entre un determinado número de barras (número de elementos de la serie temporal)

en este caso, el número es desconocido y cambia cada vez

 
MakarFX:

1) x no es int, es datetime (será útil en el futuro)

2) su código inicial no tiene órdenes pendientes

3) ahora tu código hace más operaciones en cada tick

Comprueba tu mensaje.

Este es mi antiguo código

Este es mi nuevo código para el mismo periodo de tiempo que el anterior

El número de operaciones por tic es mucho menos importante para mí que el tiempo empleado en este número. Y el nuevo código lleva un 25% menos de tiempo.... si no me equivoco.

Gracias por la ayuda.

 
Aleksei Stepanenko:
Aquí hay una sutileza. Primero fijamos el tamaño y luego al poner a cero liberamos la fijación, esto no cambia el tamaño, no hay otra forma de hacerlo.
¡Muchas gracias!
 
MakarFX:

Aún así, comprueba en cada tic

y el cálculo de la baja se sale... retrocede dos compases.

A continuación se muestra mi código original sin sus adiciones

A continuación con sus últimas mejoras



¿Tal vez if(TimeSeconds(TimeCurrent())==0) debería aplicarse sólo a las secciones en las que no se abren órdenes, y en las que se busca el siguiente mínimo?

Si no me equivoco gracias a tu función mi código empezó a ejecutarse sólo al principio de cada vela de un minuto, por eso no abre las órdenes correctamente.


Gracias por la ayuda.

 
ANDREY:

A continuación se muestra mi código original sin sus adiciones

A continuación se muestra el código con sus últimas mejoras



¿Tal vez, if(TimeSeconds(TimeCurrent())==0) debería aplicarse sólo a las secciones en las que no se abren órdenes, y en las que se busca el siguiente mínimo?

Si no me equivoco, su función ha comenzado a ejecutar mi código sólo al principio de cada vela de minuto.


Gracias por la ayuda.

Razón de la queja: