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

 

MrBrooklin #:
     

      ObjectSetInteger(0, "UpwardTrendline", OBJPROP_COLOR, Blue);
      ObjectSetInteger(0, "UpwardTrendline", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSetInteger(0, "UpwardTrendline", OBJPROP_WIDTH, 3);
      ObjectSetInteger(0, "UpwardTrendline", OBJPROP_RAY_RIGHT, true);
ObjectSetInteger(0, "UpwardTrendline", OBJPROP_RAY_RIGHT, false);
 
Artyom Trishkin #:

Gracias, Artyom! Hombre, yo no tenía suficiente inteligencia para entender una cosa tan simple y obvia. Que Dios te bendiga.

Saludos, Vladimir.

 

¡Buenos días y buen humor a todos!

¡Eso es! "¡Ya voy, tu techo!" Ese soy yo. Ejecuto el guión:

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint pos_buy,uint pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

y obtengo esto:

2023.11.22 07:59:29.375 Count_Pos (v.2) (EURUSDrfd,M1)  pos_buy 0
2023.11.22 07:59:29.375 Count_Pos (v.2) (EURUSDrfd,M1)  pos_sell 2
2023.11.22 07:59:29.375 Count_Pos (v.2) (EURUSDrfd,M1)  По символу EURUSDrfd открыто: 0 длинных позиций
2023.11.22 07:59:29.375 Count_Pos (v.2) (EURUSDrfd,M1)  По символу EURUSDrfd открыто: 0 коротких позиций

y debería haber dos posiciones cortas. ¿Podría decirme dónde he cometido un error?

Saludos, Vladimir.

 
MrBrooklin #:

¡Buenos días y buen humor a todos!

¡Eso es! "¡Ya voy, tu techo!" Ese soy yo. Estoy ejecutando el guión:

y consigo esto:

y debería haber dos posiciones cortas. Por favor, ¿podría decirme dónde he cometido un error?

Saludos, Vladimir.

Las dos últimas impresiones

muestran el valor de las variables

uint count_buy=0, count_sell=0;

que están inicializadas, pero no se les ha asignado nada más.
Es decir, todo funciona como está escrito, sin milagros.

 
Alexander Sevastyanov #:

Las dos últimas impresiones

muestra el valor de las variables

que están inicializadas, pero a las que no se ha asignado nada más.
Es decir, todo funciona como está escrito, sin milagros.

Hola, Alexander. Ahí es donde me quedé perplejo. ¿Qué hay que asignar? Creo que la función Calc_Pos(count_buy, countsell) debería funcionar, ¿o lo he entendido mal?

Saludos, Vladimir.

 
MrBrooklin #:

Hola, Alexander. Ahí es donde me quedé perplejo. ¿Qué hay que asignar? Creo que la función Calc_Pos(count_buy, countsell) debería funcionar, ¿o lo he entendido mal?

Saludos, Vladimir.

1. Declaras e inicializas dos variables.

uint count_buy=0, count_sell=0;

2. 2. Pasas sus valores a la función.

Calc_Pos(count_buy,count_sell);

No está muy claro por qué se hace esto.
A continuación, se imprimen los valores de estas variables. Pero no se han cambiado en ninguna parte,
respectivamente, y se imprimen ceros. Todo funciona como está escrito.

P.D. Tratando de entender tu plan: puedes declarar estas dos variables globales.
Por ejemplo, así:

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

   uint pos_buy=0, pos_sell=0;  // это глобальные переменные

//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos()
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Calc_Pos();
   Print("По символу ",_Symbol," открыто: ",pos_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",pos_sell," коротких позиций");
  }
//+------------------------------------------------------------------+
 
Alexander Sevastyanov #:

1. Se declaran e inicializan dos variables.

2. 2. Pasas sus valores a la función.

No está muy claro por qué se hace esto.
Luego se imprimen los valores de estas variables. Pero no se han cambiado en ninguna parte,
respectivamente y se imprimen con ceros. Todo funciona como está escrito.

P.D. Tratando de entender tu plan: puedes declarar estas dos variables globales.
Por ejemplo, así:

Muchas gracias, Alexander. Tu corrección ha hecho que el código funcione. Para ser sincero, yo mismo me di cuenta de que estaba confundido en tres pinos. Tengo que volver a estudiar lo de pasar argumentos a una función. Al parecer, tengo un completo malentendido aquí.

Saludos, Vladimir.

 
MrBrooklin #:

Muchas gracias, Alexander. Tu corrección ha hecho que el código funcione. Para ser sincero, yo mismo me di cuenta de que estaba confundido en tres pinos. Tengo que volver a estudiar lo de pasar argumentos a una función. Por lo visto, aquí tengo un completo malentendido.

Saludos, Vladimir.

Enviar variables al área global no es pasar argumentos a una función...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Pon & antes de los nombres de las variables en la entrada de la función y todos los problemas se resolverán.

 
Alexey Viktorov #:

Enviar variables al ámbito global no es pasar argumentos a una función...

Anteponga & a los nombres de las variables en la entrada de la función y todos los problemas quedarán resueltos.

Hola Alexey, ¡¡¡así que ese es el problema!!! ¡ Muchas gracias, querido! Se me rompió la cabeza, ¡pensé que faltaba algo más! ¡¡¡¡Resultó que los cerebros no son suficientes!!!! ))

Saludos, Vladimir.

 
Alexey Viktorov #:
Pon & delante de los nombres de las variables en la entrada de la función y todos los problemas estarán resueltos

Encontré y vi el video sobre funciones con referencias. A partir de esta lección de vídeo me di cuenta de que necesito no sólo una lección de MQL5 para principiantes, sino una lección de MQL5 para principiantes especialmente dotados de estupidez. En resumen, no entendí nada. En general, es necesario digerir toda la información que ha recibido y volver a ver este video cinco o incluso seis veces. ¡Pero habrá algo que hacer en mi tiempo libre! ))

Saludos, Vladimir.

Razón de la queja: