Erros, bugs, perguntas - página 951

 
É possível escrever uma função com número variável de parâmetros em MQL5? Por exemplo, como em StringConcatenate(....) ou Print(...)?
 
skteks:

Testei o ExpertMACD Expert Advisor padrão no testador de estratégia, que é entregue juntamente com o MT5, gerando erros:

2013.03.30 19:18:09 Passe genético do núcleo 2 (0, 15) testado com erro "OnInit failed" em 46 ms

2013.03.30 19:18:08 Passe genético Core 1 (0, 13) testado com erro "OnInit failed" em 32 ms

2013.03.30 19:18:07 Passe genético do núcleo 2 (0, 5) testado com erro "OnInit failed" em 0 ms

Descobri ao pesquisar que o erro está no módulo: "SignalMACD" ao optimizar os períodos MACD rápidos e lentos (ao assinalar as caixas nos parâmetros do testador de estratégia).

Alguém já se deparou com tal problema e como lidar com ele? (quando há apenas uma carraça funciona de alguma forma, mas há erros assim que se verificam duas carraças)

Definir uma gama diferente de mudanças Lento e Rápido. O erro desaparecerá. Pode simplesmente ignorá-lo.

 
w1sp:
É possível escrever uma função com número variável de parâmetros em MQL5? Por exemplo, como em StringConcatenate(....) ou Print(...)?
Sim, pode, chama-se sobrecarga de funções.
 
w1sp:
É possível escrever na MQL5 uma função com um número variável de parâmetros? Por exemplo, como em StringConcatenate(....) ou Print(...)?

Por exemplo, pode fazer uma matriz cujo tamanho será igual ao número dos seus parâmetros como parâmetro.

 
Estou interessado num número variável de parâmetros como em StringConcatenate. Assim: Concatenar(cordas, ...); Isto é possível?
 
w1sp:
Estou interessado num número variável de parâmetros como em StringConcatenate. Algo como isto: Concatenação de cordas(cordas, ...); É possível?

O mesmo é possível. Até 64 parâmetros podem ser passados para uma função.

void OnStart()
  {
string s1=Foo("5");
string s2=Foo("5","t");

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
} 
 
Snaf:

O mesmo é possível. Até 64 parâmetros podem ser passados para uma função.

E podemos obter tipos arbitrários para todos os argumentos apenas por sobrecarga? Ou seja, não só a corda, mas também o dobro pode ser passado para uma função, por exemplo. corda s = Concatenar("abc",2.0, "def");

 
w1sp:

E os tipos arbitrários para todos os argumentos só podem ser alcançados através de sobrecarga? Ou seja, não só a corda, mas também o dobro pode ser passado para a função, por exemplo. corda s = Concatenar("abc",2.0, "def");

void OnStart()
  {
//string s1=Foo("5");  // Это теперь ошибка. Компилятор не знаек какой функцией из двух пользоваться
string s2=Foo("5",3.0);

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
}

string Foo(string i0="", double i1=2.0, string i2="")
{
string rez;
if (i1>2.0) {rez=i0+i2;} else rez=i0+"99"+i2;

return rez;
}  
 
Snaf:
Obrigado. Já está. Basta fazer uma função com 64 argumentos de tipo string e acrescentar valor por defeito a todos, excepto ao primeiro.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Olá. Após a actualização da construção do MT5, o indicador já não é exibido normalmente no aparelho de teste, no próprio terminal é exibido normalmente. O indicador é bastante complexo e intensivo em recursos (ZUP), eu traduzo de MT4 para MT5. No testador, a linha Bild 756 ZigZag é exibida normalmente, no testador após Bild 770 - ZigZag os valores dos preços estão correctos, mas o período de tempo não está correcto (deslocado, não uniformemente) ZigZag - buffer de saída. Ao mesmo tempo, os objectos gráficos (triângulos, linhas, etc., que incidentalmente se baseiam em dados de buffers de saída (ZigZag também)) são exibidos normalmente. Por favor, ajude-me a compreender isto.