Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 84
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Entonces, por favor, responda a mi pregunta anterior
1) Escribir una matriz de estructuras
2) Transferencia a otras funciones
3) Recuperación y comparación de elementos de una matriz de estructuras
4) imprimir un conjunto de estructuras
Es importante que lo escriba en forma de código para que entienda cómo debe ser.
Todo depende de la tarea a realizar. Dado que las tareas pueden ser tan diferentes como se quiera, ¿qué debe mostrarse?
Bueno, lo escribo, pierdo el tiempo y lo que he escrito me cuadra. Y el agujero es triangular. ¿Y dónde pongo el cuadrado entonces?
Todo depende de la tarea a realizar. Dado que las tareas pueden ser tan variadas como se quiera, ¿qué debe mostrarse?
Bueno, lo escribiré, perderé mi tiempo, pero lo que he escrito está cuadrado. Y el agujero es triangular. ¿Y dónde pongo el cuadrado entonces?
tomemos el puesto 699 y sobre
cómo pasar esto a otras funciones y comparar un elemento de la estructura con el anterior
para que pueda tomar cualquier orden en el orden y la salida de todos los valores a la impresión
La diferencia es que no es un número y hay diferentes reglas de registro.
tomemos el puesto 699 y sobre
cómo pasar esto a otras funciones y comparar el elemento de la estructura con el anterior
y así puedo tomar cualquier orden en orden e imprimir todos los valores
La diferencia es que no es un número y se aplican diferentes reglas de escritura.
Hay que hacer un bucle con todas las órdenes necesarias.
Una vez determinado el siguiente orden necesario, se incrementa el array en 1, y se registran todos los datos de este orden en su nueva celda. La celda de la matriz se rellena con la hora de apertura de la orden (si busca órdenes cerradas, la hora de cierre). El resto de los datos deben escribirse en los campos de la estructura.
Una vez finalizado el bucle, ordena el array en orden ascendente de valores.
Deberías hacer esto primero. El resto se puede discutir más adelante.
No es un problema que pueda resolverse en un solo ciclo.
Gracias.
//| test.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct myorder
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[][5];
int i;
int Magic=444;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
CalcOrders();
}
//+------------------------------------------------------------------+
void CalcOrders()
{
int count1=-1;
ArrayResize(orders,AccountInfoInteger(ACCOUNT_LIMIT_ORDERS),10);
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()<2))
{
count1++;
orders[count1][0].Ticket=OrderTicket();
orders[count1][1].lot=OrderLots();
orders[count1][2].orderopenprice=OrderOpenPrice();
orders[count1][3].ordertype=OrderType();
orders[count1][4].profit=OrderProfit();
orders[count1][5].stoploss=OrderStopLoss();
}
}
ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);
}
//+------------------------------------------------------------------+
He puesto tu código en tu post.
Ahora bien, si empiezas a resolverlo
He puesto tu código en tu post.
Ahora bien, si empiezas a resolverlo
1) pensó que el número de parámetro X orden Y es más apropiado para la tarea dada
2) Lo tengo igual a 50 o 100 dependiendo del tipo de cuenta, y nada más
3) por lo que sicount1++; aumentará en cada pasada, y el array adquirirá su valor
1) consideró que el número de parámetros X orden Y es más apropiado para esta tarea
2) es igual a 50 o 100 según el tipo de cuenta, y nada más
3) por lo que sicount1++; aumentará en cada pasada, y el array adquirirá su valor
1. ¿para qué sirve la estructura entonces?
2. Necesitas este parámetro para una serie de posiciones de mercado "que fueron y que se fueron"... El array antes del bucle debe tener un tamaño cero .
3. Así es. El array tiene un tamaño cero al principio. Con cada nuevo pedido encontrado, el array pasa a tener un tamaño igual al número de pedidos que necesita.
1) ¿Para qué sirve la estructura entonces?
2. Se necesita este parámetro para el conjunto de posiciones de mercado "lo que fue y lo que se fue". El array antes del bucle debe tener un tamaño cero .
3. Así es. El array tiene un tamaño cero al principio. Con cada nuevo pedido encontrado, el array pasa a tener un tamaño igual al número de pedidos que necesita.
1) el compilador se quejará si no se pone la segunda dimensión, "especificar tipo de clase, parámetros desconocidos" aparecerá inmediatamente
2) el bot morirá inmediatamente en el lanzamiento con "error crítico array out of range".
3) establecerint count1=-1; luego pasar por el bucle. ¿Qué pasa aquí?
1) el compilador se quejará si no se establece la segunda dimensión
2) entonces el bot morirá inmediatamente al arrancar con "error crítico array out of range"
3) simplemente establecerint count1=-1; ¿Qué pasa aquí?
Sólo te dice que una de las dimensiones debe ser eliminada. Estás declarando un array unidimensional y quieres escribirlo en uno bidimensional. ¿Qué obtendrá como resultado? Obtendrá un error del compilador, por supuesto.
2. Tienes que llenar el array correctamente en el bucle, y no sólo darle alguna variable de tamaño aleatorio y luego meter cosas de tamaño aleatorio en él.
3. tú eres el que pone la variable a -1. Y el array debe tener un tamaño cero antes del bucle. ¿Qué no está claro aquí?
Juguemos a un juego de asociación:
- Imagina que tienes un globo desinflado (matriz vacía) que tiene volumen interno cero (tamaño de la matriz cero). Dentro de este globo (en el array) quieres poner monedas (las órdenes que quieras). Aquí, cada moneda, una vez que decida que es adecuada para ser almacenada en el globo (cada orden deseada encontrada), aumentará el volumen interno del globo (sólo la propia moneda estirará el globo, y tiene que hacerlo usted mismo: aumentar el tamaño del array en 1 y meter una orden en él).
Aquí hay una asociación para ti.Al final, cuando encuentres todas las monedas y las introduzcas en la bola, ésta no se desinflará - su volumen interno ha sido estirado por las monedas (al final del ciclo de búsqueda el tamaño de la matriz será igual al número de órdenes necesarias encontradas, ya que aumentaste el tamaño de la matriz en 1 con cada orden necesaria encontrada).
Ahora imagina que inicialmente pones tus monedas no en una bola, que es de goma y puede cambiar su tamaño, sino en una pequeña hucha que tiene un tamaño limitado (has fijado inicialmente el tamaño de la matriz y no lo has aumentado más). ¿Qué pasará? No todas las monedas caben en la hucha. El globo lo hará.