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

 
-Aleks-:

¿Puede mostrarme en mi función cómo hacerlo? Me cuesta mucho entenderlo.


Tienes que decidir qué variables de la función necesitas (para el programa principal) y pasarlas/recuperarlas. Si necesitas Todas, entonces declara estas variables al principio del programa y serán visibles para todas las funciones a la vez.
 
-Aleks-:

No pienses en el "por qué", mejor piensa en el "cómo".

Te dije que no se aplica a esta función...

Tales funciones son grandes, por regla general, por eso es una pena llamarlas para su ejecución varias veces con el fin de obtener diferentes valores, pero quiero obtener todos los resultados a la vez.

Por ejemplo, quiero obtener de una vez el número de todos los lotes y el número de todos los pedidos desglosados por tipo de pedido.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
double n_Lot_BUY;
double n_Lot_SELL;
int n_Order_BUY;
int n_Order_SELL;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
   F();
   Print("Лотов BUY:",n_Lot_BUY,"   Лотов SELL:",n_Lot_SELL,"   Позиций BUY:",n_Order_BUY,"   Позиций SELL:",n_Order_SELL);
  }
//+------------------------------------------------------------------+
void F()
  {
   n_Lot_BUY=0;
   n_Lot_SELL=0;
   n_Order_BUY=0;
   n_Order_SELL=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)){break;}
      if(OrderType()==0)
        {
         n_Order_BUY++;
         n_Lot_BUY=n_Lot_BUY+OrderLots();
        }
      if(OrderType()==1)
        {
         n_Order_SELL++;
         n_Lot_SELL=n_Lot_SELL+OrderLots();
        }
     }
  }
//+------------------------------------------------------------------+
 
Nikolay Gaylis:

Es decir, la idea es declarar todas las variables de antemano, y luego modificarlas a través de una función - entendido, gracias por la opción. Pero, no siempre es conveniente, si se utiliza un mismo nombre de variable para el mismo tipo de variables... ¿no hay otras opciones?
 

los mismos tipos pueden combinarse en una estructura y declararse como una matriz, como se ha sugerido anteriormente)

//структура из переменных
struct OrdStruct
   {
   double tp;
   double sl;
   double open;
   double close;
   double lot;
   datetime time_open; 
   datetime time_close;
   };

//массив структур
OrdStruct ORDERS[];


//обращение к переменным
ORDERS[i].sl=OrderStopLoss();
ORDERS[i].tp=OrderTakeProfit();
ORDERS[i].lot=OrderLots();

//или
ORDERS[i]=ORDERS[i+1];

ZeroMemory(ORDERS[i]);
 
Taras Slobodyanik:

Los mismos tipos pueden combinarse en una estructura y declararse como una matriz, como se ha sugerido anteriormente)

Esto ya es difícil de entender... por ejemplo, no puedo entender i - a qué es igual y, ¿no debería el array ORDERS[i]= tener un tamaño?

 
-Aleks-:

Esto ya es difícil de entender... por ejemplo, no puedo entender i - lo que es igual y, ¿no debería ser el tamaño de la matriz ORDERS[i]=?


Esto es sólo un ejemplo, por supuesto hay que especificar i y ajustar el tamaño del array según el número de pedidos...

es decir, las variables son más o menos las mismas tp / sl / lot ... pero el índice de la matriz i cambia

 
-Aleks-:

Me duele ver su angustia... Estás en un foro técnico, usa la lógica, por favor.

1 Describe el problema;

Describa las variables que está utilizando;

Describa lo que quiere obtener como resultado;

Aprende a expresar tus ideas en un lenguaje técnico en un foro técnico. De lo contrario, tardará mucho tiempo en adivinarlo.

 
Taras Slobodyanik:


Esto es por ejemplo, por supuesto necesito especificar y establecer el tamaño del array dependiendo del número de pedidos...

es decir, las variables son más o menos las mismas tp / sl / lot ... pero el índice de la matriz i cambia

Sí, lo tengo, gracias, debería intentar usarlo en el futuro, en algún lugar.... Simplemente no entiendo, y trabajar con esta estructura como una matriz? ¿Ordenar y realizar otras operaciones estándar?

 
Alexey Kozitsyn:

Me duele ver su angustia... Estás en un foro técnico, usa la lógica, por favor.

1. describir el problema;

Describa las variables que está utilizando;

Describa lo que quiere obtener como resultado;

Aprende a expresar tus ideas en un lenguaje técnico en un foro técnico. De lo contrario, tardará mucho tiempo en adivinarlo.

Por favor, escriba dónde no hay lógica en mis palabras.

El tormento de saber es el placer de resolver.

No quería desvelar mi problema, así que lo mantuve sencillo: me resulta difícil adivinar la causa de la dificultad para percibir... Perdona si te he hecho sentir incómodo con mi "tormento".

 
-Aleks-:

Es decir, la idea es declarar todas las variables de antemano, y luego cambiarlas a través de una función - entendido, gracias por la variante. Pero, no siempre es conveniente que se utilice un mismo nombre de variable para el mismo tipo de variables... ¿no hay otras opciones?

Lee atentamente aquí y verás lo que ocurre. Esto describe la primera opción, que se propuso, el paso de parámetros por referencia.

En pocas palabras, cuando se llama a una función, se puede pasar la variable por parámetro

double FirstMethod(int i,int j)

o por referencia si el nombre de la variable va precedido de un signo &.

double SecondMethod(int &i,int &j)

En la segunda variante, las variables pasadas a la función por referencia se modificarán junto con las variables que tengan incluso nombres diferentes. En el caso especial se trata de las variables i y j

Todo lo demás está suficientemente claro en el texto de ayuda.

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4