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

 
MrBrooklin #:

Lo imprimí. Tal como estaba, todo sigue igual.

Saludos, Vladimir.

¿Impreso dónde?

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d=SecondMethod(a,b);
   Print("Результат выполнения функции ", d);
   Print("a и b после вызова:",a," ",b, " ",d);// или здесь. А можно и там и тут…
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

¿Dónde se imprimió?

Ahora ya lo tengo claro. )) Gracias a todos.

Saludos, Vladimir.

 
¡Buenos días y buen humor a todos! Sigo estudiando el lenguaje de programación MQL5. Escribí un pequeño script para calcular el número total de posiciones abiertas e imprimir algunos de sus parámetros, incluyendo códigos de error, si los hay:
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
         else // если выбрать позицию не удалось
           {
            PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", _Symbol, GetLastError());
           }
        }
     }
  }
//+------------------------------------------------------------------+

Lo ejecuté en un símbolo, donde hay posiciones abiertas. Funciona correctamente, la información se imprime correctamente. Siguiente. Comencé en el símbolo donde no hay posiciones abiertas. La información sobre el hecho de que no hay posiciones abiertas se muestra correctamente, pero el código de la causa del error, por alguna razón no. ¿Pueden ayudarme a entender por qué no se muestra el código de error?

Saludos, Vladimir.

 
MrBrooklin #:

Lo he iniciado en un símbolo con posiciones abiertas. Funciona correctamente, la información se muestra correctamente. Siguiente. Lo ejecuté sobre un símbolo sin posiciones abiertas. La información sobre el hecho de que no hay posiciones abiertas se muestra correctamente, pero el código de la causa del error, por alguna razón no. ¿Pueden ayudarme a entender por qué no se muestra el código de error?

¿De dónde viene el código de error si no hay ningún error? Es sólo el símbolo incorrecto para la posición.

 
JRandomTrader #:

¿Por qué habría un código de error si no hay error? Es sólo el símbolo incorrecto para la posición.

Gracias por la respuesta. Esperaba que al menos se mostrara este código de error:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posición no encontrada


No estoy de acuerdo en lo del símbolo. El símbolo es exactamente aquel en cuyo gráfico se lanzó este script. Ahora no tengo posiciones abiertas en el símbolo GBPUSDrfd, pero tampoco hay error. ¡No está claro!

2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 
2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 

Saludos, Vladimir.

 
MrBrooklin #:

Gracias por la respuesta. Esperaba que se mostrara al menos este código de error:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posición no encontrada


No estoy de acuerdo sobre el símbolo. El símbolo es exactamente el mismo, en el gráfico del que se lanzó este script. No tengo ninguna posición abierta en el símbolo GBPUSDrfd, pero tampoco tengo ningún error. ¡¡¡No entiendo!!!

Saludos, Vladimir.

¡Todas las posiciones han sido encontradas! Pero ninguna de las posiciones encontradas tiene el símbolo que necesitamos.

 
JRandomTrader #:

Todas las posiciones encontradas. Pero ninguna de las posiciones encontradas tiene el símbolo que necesitamos.

Ahora ya lo tengo. ¡¡¡Gracias!!! Resulta que si hay al menos una posición abierta, el código de error 4753 nunca aparecerá.

Saludos, Vladimir.

 
MrBrooklin #:

Ya lo tengo. Gracias. Resulta que si hay al menos una posición abierta, el código de error 4753 nunca aparecerá.

Saludos, Vladimir.

Aparecerá si escribes lo siguiente

PositionSelect("мой символ");
 
Alexey Viktorov #:

Aparecerá si escribe esto

Hola Alexey, una aclaración. ¿Es necesario usar PositionSelect() en lugar de un bucle, o he entendido algo mal otra vez?

Saludos, Vladimir.

 
MrBrooklin #:

Hola Alexey, una aclaración. ¿Es necesario utilizar PositionSelect() en lugar de un bucle o he entendido algo mal otra vez?

Saludos, Vladimir.

Puedes escribirlo como quieras, lo principal es escribir un caracter inexistente para obtener un error...