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

 
Por favor digam-me, estou a usar uma função dentro de outra. No exterior, declaro uma variável. No interno, eu utilizo-a. Aqui está sobre
  string PositionSymboll = "";
   if  (PositionSymboll=PositionGetSymbol(i)){//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
    if (PositionGetInteger(POSITION_MAGIC)== MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
              { BU_();}}

Etc. Jura assim: 'PositionSymboll' - identificador não declarado Redo.mq5 2472 5

Honestamente, não esperava nenhuma captura aqui. Se o encapsular dentro da função BU_() que estou a utilizar, o pyrimen será "nulo". O que devo fazer melhor?

Seria muito bom para mim declará-lo dentro da primeira função, dentro do laço do se.

 
Oh, você! E mesmo ao declará-lo dentro da função OnTick() vazia, o compilador também jura o mesmo, já na primeira função! Estou fora, estou fora...
 
Dimka-novitsek:
Oh, você! E mesmo declarando-o dentro da função OnTick() vazia, o compilador também explode, já na primeira função! Vou passar, apenas caí...
void OnStart()
  {
   int i=0; long MAGIC=1234;
   
   string PositionSymboll="";
   if(PositionSymboll=PositionGetSymbol(i))
     {//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
      if(PositionGetInteger(POSITION_MAGIC)==MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
        { BU_();}
     }
  }
void  BU_(){} 

compila normalmente, mas a construção

string PositionSymboll="";
   if(PositionSymboll)

questionável, está a verificar a variável de corda verdadeiro/falso ????????? estou intrigado

a questão é retórica.

 
Obrigado!!! Ainda estou apenas a aprender, esta é a minha primeira EA em MQL5. O que quer dizer com retórica?
 
Dimka-novitsek:
Obrigado!!! Estou apenas a aprender, esta é a minha primeira EA em MQL5. O que quer dizer com retórica?

Isto significa que não é necessária uma resposta.

Apenas uma variável de tipo string passada como uma expressão numa declaração de if só dará falso num caso, se a variável não tiver sido rubricada.

Em todos os outros casos, o conteúdo variável será dado por verdadeiro.

 
Obrigado!!!
 

Poderia dizer-me se existe uma função que deve voltar a ser verdadeira se houver uma ordem pendente ao preço enviado para a função. Mas retorna "careca" (alternadamente verdadeiro/falso). Por favor, informe-me onde me falta a lógica de trabalhar com encomendas em mql5? (apenas aprendizagem).


bool OrderExist(double price)                                                                      // функция возвращает наличие ордера на передаваемой цене
{
         
uint total=OrdersTotal();
ulong    ticket;

for(uint i=0;i<total;i++)
   {
   if((ticket=OrderGetTicket(i))>0)      
      {
      if(NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),4)== price)
         {
         return(true);
         }
      }
   }
return(false);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
DMXX:

Por favor, informe, há uma função que deve voltar a ser verdadeira se houver uma ordem pendente ao preço que eu enviei para a função. Mas regressa careca (alternadamente verdadeiro/falso). Por favor, informe-me onde me falta a lógica de trabalhar com encomendas em mql5? (apenas aprendizagem).

Mas não é certo que a ordem tenha aberto ao preço indicado, pode ter havido um deslize, por isso recebo o seguinte: se a ordem abriu a tempo - verdadeiro, se não o fez (o preço mudou) - falso.

 
fyords:
Mas não é o facto de a ordem ter sido aberta ao preço estabelecido, poderia ter ocorrido um deslizamento e é por isso que temos o seguinte resultado: se a ordem foi aberta a tempo - verdadeira, se não foi aberta a tempo (o preço mudou) - falso.
Sim, é afixado no terminal a este preço. Se estiver em funcionamento, significa que foi colocado com sucesso, certo?
 
DMXX:
Sim, está pendurado no terminal a este preço. Se estiver em funcionamento, significa que é colocado com sucesso, certo?

Sim, está definido, mas quando é accionado...

Ou outro exemplo: temos uma ordem pendente, o seu preço difere do actual por 1 ponto, no tick seguinte o preço salta não por 1 ponto, mas, digamos, por 3-5 pontos, o que resulta na abertura a um preço errado. Um exemplo óbvio é uma lacuna.

Ou talvez eu não compreenda a questão e seja burro.

Razão: