Errori, bug, domande - pagina 951

 
È possibile scrivere una funzione con un numero variabile di parametri in MQL5? Per esempio, come in StringConcatenate(...) o Print(...)?
 
skteks:

Ho testato l'Expert Advisor standard di ExpertMACD nel tester di strategie, che viene consegnato insieme a MT5, genera errori:

2013.03.30 19:18:09 Core 2 genetic pass (0, 15) testato con errore "OnInit failed" in 46 ms

2013.03.30 19:18:08 Core 1 genetic pass (0, 13) testato con errore "OnInit failed" in 32 ms

2013.03.30 19:18:07 Core 2 genetic pass (0, 5) testato con errore "OnInit failed" in 0 ms

Ho scoperto cercando che l'errore è nel modulo: "SignalMACD" quando si ottimizzano i periodi Fast e Slow MACD (quando si spuntano le caselle nei parametri del tester della strategia).

Qualcuno ha incontrato un tale problema e come affrontarlo? (quando c'è un solo tick in qualche modo funziona, ma ci sono errori non appena si controllano due tick)

Impostare una gamma diversa di cambiamenti Lento e Veloce. L'errore scomparirà. Puoi semplicemente ignorarlo.

 
w1sp:
È possibile scrivere una funzione con un numero variabile di parametri in MQL5? Per esempio, come in StringConcatenate(...) o Print(...)?
Sì, è possibile, si chiama sovraccarico di funzioni.
 
w1sp:
È possibile scrivere in MQL5 una funzione con un numero variabile di parametri? Per esempio, come in StringConcatenate(...) o Print(...)?

Per esempio, potete fare un array la cui dimensione sarà uguale al numero dei vostri parametri come parametro.

 
Mi interessa un numero variabile di parametri come in StringConcatenate. Come questo: string Concatenate(string s, ...); È possibile?
 
w1sp:
Mi interessa un numero variabile di parametri come in StringConcatenate. Qualcosa del genere: string Concatenate(string s, ...); È possibile?

Simile è possibile. Si possono passare fino a 64 parametri a una funzione.

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:

Simile è possibile. Si possono passare fino a 64 parametri a una funzione.

E possiamo ottenere tipi arbitrari per tutti gli argomenti solo tramite overloading? Cioè, non solo la stringa, ma anche il doppio può essere passato a una funzione, per esempio. stringa s = Concatenate("abc",2.0, "def");

 
w1sp:

E i tipi arbitrari per tutti gli argomenti possono essere ottenuti solo con l'overloading? Cioè, non solo la stringa, ma anche il doppio può essere passato alla funzione, per esempio. stringa s = Concatenate("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:
Grazie. Capito. È sufficiente fare una funzione con 64 argomenti di tipo stringa e aggiungere un valore predefinito a tutti tranne il primo.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Salve. Dopo aver aggiornato la build di MT5, l'indicatore non viene più visualizzato normalmente nel tester, nel terminale stesso viene visualizzato normalmente. L'indicatore è abbastanza complesso e richiede molte risorse (ZUP), lo traduco da MT4 a MT5. Nel tester, la linea Bild 756 ZigZag viene visualizzata normalmente, nel tester dopo Bild 770 - i valori dei prezzi ZigZag sono corretti, ma il timeframe non è corretto (spostato, non uniformemente) ZigZag - buffer di uscita. Allo stesso tempo, gli oggetti grafici (triangoli, linee, ecc., che per inciso sono basati sui dati dei buffer di uscita (anche ZigZag)) vengono visualizzati normalmente. Per favore, aiutatemi a capire questo.
Motivazione: