Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1426

 
vitaliy zamkovoy actual le restamos el precio de hace veinte segundos y lo comparamos con alguna constante con la posterior apertura de una orden, ¿cómo lo registramos?

Registre el precio actual y la hora. Compare la hora con la hora actual en cada tick, si es más de 20 segundos recuerde el segundo precio. Calcule la diferencia entre el primer precio y el segundo. Compare el resultado obtenido con una constante y tome la decisión de abrir una orden.

 
Valeriy Yastremskiy #:

Recuerda el precio y la hora actuales. Compare la hora con la hora actual en cada tick, si son más de 20 segundos recuerde el segundo precio. Calcule la diferencia entre el primer precio y el segundo. Compare el resultado obtenido con una constante y tome la decisión de abrir una orden.

¿Le he entendido bien: necesita recordar el precio actual cada segundo para compararlo con el precio actual cuando se elimina cada valor de esta serie durante 20 segundos?

La comparación debe ser continua.

 
vitaliy zamkovoy #:

¿Te he entendido bien: necesitas recordar el precio actual cada segundo, para que cuando se borre cada valor de esta serie durante 20 segundos, puedas compararlo con el actual?

La comparación debe ser continua.

Los ticks no van parejos, la cuestión está en el algoritmo entonces, si es necesario comprobar todos los ticks, entonces todos los ticks deben ser memorizados y comparados. Si es posible con menos frecuencia de acuerdo con el algoritmo, a continuación, un temporizador y después de un segundo recordar el precio y después de 20 segundos también recordar y comparar. O más bien debería recordar todos los precios o precios en un segundo dentro de 20 segundos y comparar con un nuevo tick.
Puede haber 1 tick por segundo, puede haber uno en 5 segundos, y puede haber 100 en un segundo. Tienes que decidir cómo actuar cuando hay un tick cada 5 segundos y cuando hay 100 ticks por segundo.

 
Valeriy Yastremskiy #:

garrapatas no son uniformes, la cuestión está en el algoritmo entonces, si usted necesita para comprobar todas las garrapatas, a continuación, todas las garrapatas deben ser memorizados y comparar. Si es posible ser menos frecuente de acuerdo con el algoritmo, a continuación, un temporizador y después de un segundo recordar el precio y después de 20 segundos también recordar y comparar. O más bien debería recordar todos los precios o precios en un segundo en 20 segundos y comparar con un nuevo tick.
Puede haber 1 tick por segundo, puede haber uno en 5 segundos y puede haber 100 en un segundo. Tienes que decidir cómo actuar cuando hay un tick cada 5 segundos y cuando hay 100 ticks por segundo.

No se trata de elegir una opción, sino de la dificultad que supone para mí escribirla .... Hoy estoy aquí por primera vez. Soy un aficionado total.

Sólo quiero probar mi idea...

 
vitaliy zamkovoy #:

No se trata de elegir una opción, sino de la dificultad que supone para mí escribirla ..... Hoy es mi primera vez aquí. Aficionado total.

Sólo quiero probar mi idea.

El algoritmo debe ser preciso, y la comprensión de las condiciones de su aplicación. No se puede escribir código de otra manera. El código es la realización de un algoritmo de acciones, no puede ser inexacto.

Y aquí es mejor escribirlo tú mismo primero, y quizás corrijas errores.

Entiendes los signos de los iguales, más es menos.

 

Búfer de anillo:

Tomamos un buffer - un array estático suficientemente grande de estructuras "precio, hora" (o dos arrays separados).

Tomamos dos variables - "punteros" (índices) a la cabeza y la cola de la memoria intermedia.

En cada tick añadimos un elemento a la cabeza y avanzamos el puntero.

Comparamos la hora con el elemento de la cola y, si es necesario, desplazamos el puntero.

Comparamos el precio con el elemento de la cola.

Si algún puntero ha llegado al final del array, lo ponemos a cero.

 
JRandomTrader array estático suficientemente grande de estructuras "precio, hora" (o dos arrays separados).

Tomamos dos variables - "punteros" (índices) a la cabeza y cola del buffer.

En cada tick añadimos un elemento a la cabeza y movemos el puntero.

Comparar el tiempo con el elemento en la cola, si es necesario - mover el puntero.

Comparamos el precio con el elemento de la cola.

Si algún puntero ha llegado al final de la matriz - restablecer este puntero a cero.

👍
 
Valeriy Yastremskiy #:

El algoritmo debe ser preciso, y una comprensión de las condiciones de su aplicación. Es imposible escribir código de otra manera. El código es la realización de un algoritmo de acciones, no puede ser inexacta.

Y aquí es mejor escribir primero usted mismo, y tal vez se corregirá errores.

Entiendes los signos de los iguales, más es menos.

¡Hola, Valery! Estoy completamente de acuerdo contigo. Para escribir un código correcto, necesitas una condición exacta para abrir una posición. Este código también funciona:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+

pero la cuestión es si debería funcionar como Vitaly pretende. Francamente hablando, no entiendo muy bien por qué una vez cada 20 segundos (o incluso una vez cada 10, 5 o 1 segundo), tenemos que comprobar la diferencia de precios. ¿Qué nos dará en términos de determinar la dirección del movimiento del precio?

Saludos, Vladimir.

 
MrBrooklin #:

Hola, Valery. Estoy completamente de acuerdo contigo. Para escribir un código correcto, necesitas una condición exacta para abrir una posición. Este código también funciona:

pero la cuestión es si debería funcionar como Vitaly pretende. Francamente hablando, no entiendo muy bien por qué una vez cada 20 segundos (o incluso una vez cada 10, 5 o 1 segundo), tenemos que comprobar la diferencia de precios. ¿Qué hará en términos de determinar la dirección del movimiento del precio?

Saludos, Vladimir.

MrBrooklin #:

¡Hola, Valery! Estoy completamente de acuerdo contigo. Para escribir un código correcto, se necesita una condición exacta para la apertura de una posición. Este código también funciona:

pero la cuestión es si debería funcionar como Vitaly pretende. Francamente hablando, no entiendo muy bien por qué una vez cada 20 segundos (o incluso una vez cada 10, 5 o 1 segundo), tenemos que comprobar la diferencia de precios. ¿Qué hará en términos de determinar la dirección del movimiento del precio?

Saludos, Vladimir.

Describes la tarea de forma incorrecta. No es "una vez cada 20 segundos", sino comprobar cada segundo con los indicadores que han pasado hace algún tiempo. En cuanto a "por qué" - esto no es una pregunta para esta discusión. (Y 20 segundos es sólo como un ejemplo).

Es como una media móvil, donde la primera vela se compara con la segunda vela. Sólo tengo que calcular todo dentro de la vela actual (cero) minutos. (O incluso mejor - en un gráfico de líneas. Después de todo, 20 segundos pueden fluir a la primera vela).

 
vitaliy zamkovoy #:
No está describiendo correctamente la tarea. No se trata de "una vez cada 20 segundos", sino de comprobar cada segundo los valores que han pasado hace algún tiempo. En cuanto al "por qué", no es una pregunta para este debate. (Y 20 segundos es sólo un ejemplo).

Sí, me equivoqué, no entendí bien lo que quieres hacer/comprobar.

Saludos, Vladimir.