Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1480

 
Artyom Trishkin #:
Pode. Então, dois valores serão recebidos - somente nas variáveis passadas por referência. Ou seja, a função retorna três valores

Por uma questão de interesse, removi a variável d. Deixei apenas a função. O resultado da impressão não foi alterado. Para ser sincero, não entendo nada sobre os três valores.

Atenciosamente, Vladimir.

 
MrBrooklin #:

Por uma questão de interesse, removi a variável d. Deixei apenas a função. O resultado da impressão não foi alterado. Para ser sincero, não entendo nada sobre os três valores.

Atenciosamente, Vladimir.

Não foi alterado porque esse valor não foi impresso.

Basta adicionar a impressão e você verá.

 
Alexey Viktorov #:

Não foi alterado porque esse valor não foi impresso.

Basta adicionar print e você verá.

Imprimi-o. O valor permaneceu o mesmo.

2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b перед вызовом:14 8
2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b после вызова:28 4

Talvez eu tenha entendido algo errado novamente? Ou você precis ou imprimir avariáveld? É sobre isso que estávamos falando?

Saudações, Vladimir.

 
MrBrooklin #:

Imprimi-o. Como estava, tudo continua igual.

Saudações, Vladimir.

Impresso onde?

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
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 #:

Onde foi impresso?

Agora eu já entendi tudo. )) Obrigado a todos!

Saudações, Vladimir.

 
Bom dia e bom humor a todos! Continuo estudando a linguagem de programação MQL5. Escrevi um pequeno script para calcular o número total de posições abertas e imprimir alguns de seus parâmetros, incluindo códigos de erro, se houver:
//+------------------------------------------------------------------+
//| 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());
           }
        }
     }
  }
//+------------------------------------------------------------------+

Executei-o em um símbolo em que há posições abertas. Ele funciona corretamente e as informações são impressas corretamente. Próximo. Iniciei no símbolo em que não há posições abertas. As informações sobre o fato de não haver posições abertas são exibidas corretamente, mas o código da causa do erro, por algum motivo, não. Você pode me ajudar a entender por que o código de erro não é exibido?

Atenciosamente, Vladimir.

 
MrBrooklin #:

Iniciei-o em um símbolo com posições abertas. Ele funciona corretamente e as informações são exibidas corretamente. Em seguida. Executei-o em um símbolo sem posições abertas. As informações sobre o fato de não haver posições abertas são exibidas corretamente, mas o código da causa do erro, por algum motivo, não. Você pode me ajudar a entender por que o código de erro não é exibido?

De onde vem o código de erro se não há erro? É apenas o símbolo errado para a posição.

 
JRandomTrader #:

Por que haveria um código de erro se não há nenhum erro? É apenas o símbolo errado para a posição.

Obrigado pela resposta! Eu esperava que pelo menos esse código de erro fosse exibido:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posição não encontrada


Não concordo com relação ao símbolo. O símbolo é exatamente aquele em cujo gráfico esse script foi lançado. Não tenho posições abertas no símbolo GBPUSDrfd agora, mas também não há erro. Não está claro!!!

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

Atenciosamente, Vladimir.

 
MrBrooklin #:

Obrigado pela resposta! Eu esperava que pelo menos esse código de erro fosse exibido:

ERR_TRADE_POSITION_NOT_FOUND

4753

Posição não encontrada


Não concordo com relação ao símbolo. O símbolo é exatamente aquele no gráfico do qual esse script foi lançado. Não tenho nenhuma posição aberta no símbolo GBPUSDrfd, mas também não tenho nenhum erro. Não estou entendendo!!!

Atenciosamente, Vladimir.

Todas as posições foram encontradas! Mas nenhuma das posições encontradas tem o símbolo de que precisamos.

 
JRandomTrader #:

Todas as posições encontradas! Mas nenhuma das posições encontradas tem o símbolo de que precisamos.

Agora estou entendendo. Obrigado!!! Acontece que, se houver pelo menos uma posição aberta, o código de erro 4753 nunca aparecerá.

Atenciosamente, Vladimir.

Razão: