Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 337

 
Artyom Trishkin:

Essa é uma sensação estranha. Apenas mostrou como mantê-lo simples - sem nenhuma variável desnecessária.


Então estou cansado e é hora de ir descansar um pouco - dormir, sim.

 

Boa tarde! Qual é a função da janela indicadora no Expert Advisor?

 
Nauris Zukas:

Boa tarde! Quais funções no Expert Advisor você pode fazer a janela indicadora?


Chame um indicador vazio do Consultor Especialista.

 
Alekseu Fedotov:

Chame um indicador vazio do especialista.

Obrigado!

 
Vitaly Muzichenko:

Encontre aqui o código que você precisa


Olá! Eu assumi a função de determinar o preço da última ordem de venda em aberto

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

Mas quando o colei em minha EA, recebo um erro de compilação na condição da função 'sy' - um símbolo inesperado

=' - ficha inesperada 252 18

l-valor necessário 1 1

conversão implícita de 'string' para 'número' 252 19

'=' - valor l necessário 252 18

'=' - a expressão do tipo 'vazio' é ilegal 252 18

op' - ficha inesperada 252 28

'=' - ficha inesperada 252 30

l-valor necessário 1 1

'OP_SELL' - uso ilegal da operação 252 31

possível perda de dados devido à conversão do tipo 252 30

'=' - valor l necessário 252 30

'=' - a expressão do tipo 'vazio' é ilegal 252 30

'mn' - ficha inesperada 252 44

'=' - ficha inesperada 252 46

l-valor necessário 1 1

1' - uso de operação ilegal 252 48


Parece que tudo deveria estar correto!?? Por favor, avise, eu copiei e não mudei nada.


 
vikzip:

Olá! Eu assumi a função de determinar o preço da última ordem de venda em aberto

Mas quando o colo em um EA, recebo um erro de compilação na condição da função 'sy' - um símbolo inesperado

=' - ficha inesperada 252 18

l-valor necessário 1 1

conversão implícita de 'string' para 'número' 252 19

'=' - valor l necessário 252 18

'=' - a expressão do tipo 'vazio' é ilegal 252 18

op' - ficha inesperada 252 28

'=' - ficha inesperada 252 30

l-valor necessário 1 1

'OP_SELL' - uso ilegal da operação 252 31

possível perda de dados devido à conversão do tipo 252 30

'=' - valor l necessário 252 30

'=' - a expressão do tipo 'vazio' é ilegal 252 30

'mn' - ficha inesperada 252 44

'=' - ficha inesperada 252 46

l-valor necessário 1 1

1' - uso de operação ilegal 252 48


Parece que tudo deveria estar correto!?? Por favor, avise, eu copiei e não mudei nada.


Preciso devolver o tipo de função

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Acho que tudo deveria estar correto!?? Por favor, avise, eu copiei enão mudei nada.



E o cabeçalho da função, e não copiou o tipo de função


A função originalmente se parece com esta:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


E o cabeçalho da função, e não copiou o tipo de função


A função originalmente se parece com esta:


Alekseu Fedotov:

Um cabeçalho de função, e não copiaram o tipo de função


A função originalmente se parece com esta:


Correto, o exemplo também dizia. Se eu entendi corretamente, você pode selecionar o tipo de pedido, o que eu já fiz.

  • Op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão de-1 significa qualquer posição.
Então tornei a função global, colocando-a antes de começar. Mas se eu devolver o tipo duplo bem antes do nome da função, um erro ocorrerá. Por favor, me diga por quê!

PriceS' - função só pode ser declarada no âmbito global 252 10

Eu entendi que a função deve ser global!

Traduziu o erro no tradutor que ele diz

A função pode ser definida apenas no âmbito global. Se eu entender o significado destas palavras corretamente, ela deve ser definida globalmente e, portanto, não a preceda com o dobro. Não está claro porque gera um erro no sy mesmo se eu apenas o copio a partir do padrão.

sy' - ficha inesperada 248 17 '=' - ficha inesperada 248 19 l-valor necessário 1 1

Posso fazer sy global? e o mesmo erro com outras variáveis declaradas na função.

op' - ficha inesperada 248 28 'OP_SELL' - operação ilegal 248 31 'mn' - ficha inesperada 248 44

 
vikzip:


Isso mesmo, também foi escrito no exemplo. Se entendi corretamente, é possível selecionar o tipo de pedido, o que eu fiz.

  • op- Operação comercial, tipo de posição. Valores válidos:OP_BUY,OP_SELL ou-1. O valor padrão de-1 significa qualquer posição.
Então tornei a função global, colocando-a antes de começar. Mas se eu devolver o tipo duplo bem antes do nome da função, um erro ocorrerá. Por favor, me diga por quê!

PriceS' - função só pode ser declarada no âmbito global 252 10

Eu entendi que a função deve ser global!

Traduzido o erro no tradutor diz


Colocar a função fora da função inicial

E no corpo da função de partida, você a chama assim:

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 parâmetros magik, separado por vírgula, coloque seu próprio ou 0

 
Alekseu Fedotov:

Colocar a função fora da função inicial

No corpo da função de partida, você a chama assim:

3 parâmetros magik, separado por vírgula, coloque seu próprio ou 0


Muito obrigado!!!! Assim que eu coloquei a função fora da função de início, todos os erros desapareceram!!!

Razão: