Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 120

 
Ihor Herasko:

Sí, ya lo veo. Y veo la respuesta a la pregunta en el post de abajohttps://www.mql5.com/ru/forum/160587/page115#comment_6521492. En otras palabras, el problema es que la funcionalidad no está dividida en subtareas lógicas. Usted ha agrupado: la recuperación de la orden, la decisión sobre la acción comercial y la ejecución de la operación.

Esta tarea puede resolverse exactamente en tres etapas:

  1. Recopilación de información sobre las órdenes que deben ser supervisadas por el programa. Este es exactamente el bucle que ya tienes. El resultado de este ciclo debe ser la matriz de pedidos.
  2. Cálculo de las señales de negociación. El resultado del cálculo es una orden de apertura y/o cierre de órdenes. Depende de la estrategia de negociación. Antes, cuando no había ninguna enumeración, utilizaba los códigos: 0 - sin señal, 1 - abrir Compra, -1 - abrir Venta, 2 - cerrar Compra, -2 - cerrar Venta.
  3. Ejecución de una operación comercial. Si hay una señal de comercio y una de las órdenes (punto 1) se ajusta a ella, se realiza una operación de comercio. Después, todo el algoritmo se reinicia empezando por el punto 1. En algunos casos, incluso salimos de OnTick para continuar con el siguiente tick.

Bien, gracias. Al menos está claro lo que hay que hacer. Intentaré averiguar "cómo" hacerlo yo mismo. Aunque todavía no estoy familiarizado con las matrices. De todos modos, gracias de nuevo.

 

¡¡¡Dime cómo salir de esto!!!


for(int i=Total de Pedidos()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

romper;

La advertencia es: el valor de retorno de 'OrderSelect' debe ser comprobado

¿Dequéotramanerase debe comprobareste valor de'OrderSelect'?

si hago esto: j=OrderSelect(); ¿Es esto correcto?


 
Rewerpool:

¡¡¡Dime cómo salir de esto!!!


for(int i=Total de Pedidos()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

romper;

La advertencia es: el valor de retorno de 'OrderSelect' debe ser comprobado

¿Dequéotramanerase debe comprobareste valor de'OrderSelect'?

si hago esto: j=OrderSelect(); ¿Es esto correcto?


 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 
Alekseu Fedotov:

¡No funcionó!

((((

 
He escrito en el archivo, todo está bien, pero ahora cómo puedo guardar datos como "eurusd" "1.2242" datos temporales, etc.?
 
Mickey Moose:Lo escribí en un archivo, todo está bien, pero ahora ¿cómo puedo spar los datos, por ejemplo, "eurusd" "1.2242" ¿datos temporales, etc.?

string s=FileReadString(F1); // Leer la siguiente línea del archivo de texto
StringSplit(s, "," , a); // Dividir los elementos separados por comas en un array
datetime T1=StrToTime(a[4]); // Además, la transformación procede ...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);

 
novichok2018:

Bien, gracias. Al menos está más claro lo que hay que hacer. Intentaré averiguar el "cómo" yo mismo. Sin embargo, aún no estoy familiarizado con las matrices. De todos modos, gracias de nuevo.

Escribe al menos un bloque y enséñamelo. En este caso le dirán más.

 
Rewerpool:

¡No ayudó!


Léelo con atención, otra vez.

 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

El código completo tendrá el siguiente aspecto

   for(int i=OrdersTotal()-1; i>=0; i--) 
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
       if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
          {
         break;
          }
        }
      }
 
Rewerpool:

¡No funcionó!


Así que no has hecho nada. Lo escribiste arriba:

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

Y lo tienes escrito sin comprobarlo. Aunque así se vería más legible:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   ....
}
 

@Ihor Herasko @Alekseu Fedotov

¡¡¡GRACIAS!!! ¡FUNCIONÓ DE ESA MANERA!