Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 566

 

Hallo zusammen!

Bitte geben Sie einen Hinweis auf eine mögliche Lösung des Problems.

Es sind 2 oder 3 oder mehr Indikatoren in Betrieb. Jeder von ihnen hat eine Linie: Comment(" Indikator 1 läuft."); der nächste Comment(" Indikator 2 läuft."); usw. jeweils.

Wie, vielleicht mit der "intelligenten" Übersetzung des Wagens, einen Blick auf die obere linke Ecke des Bildschirms zu bekommen (die nächste Beschriftung überschreibt die vorherige nicht in einem Zeitraum von mindestens 1 Tick):

Der Indikator 1 funktioniert.

Der Indikator 2 funktioniert.

LED 3 ist in Betrieb.

usw.

 

Wie erkläre ich mein Optimierungskriterium in 610 build, auf meinem alten EA?

Der Expert Advisor wird mit dem 610er Build ausgeführt.

Bei MQL5 sieht der Code zum Beispiel wie folgt aus:

double OnTester()
{
double prof=0.0;
prof=TesterStatistics(STAT_PROFIT);

  return(prof);
}

Wenn ich ihn auf Expert Advisor platziere, bevor er startet, erscheint die Spalte Custom nicht.

Und die zweite Frage: Alte EAs zeigen beim Kompilieren eine gelbe Meldung an: Funktion muss einen Wert zurückgeben.

Beispielzeile.

if(Work==false){Alert("Критическая ошибка. Эксперт не работает.");return;}
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//--- параметры для записи данных в файл
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
string             InpFileName="";
int t=0;
int file_handle=-2;
double mass[];
int OnInit()
  {
   Comment("Start");
   InpFileName=StringConcatenate(WindowExpertName(),".csv");      // Имя файла  
 
   ResetLastError();
   file_handle=FileOpen(WindowExpertName()+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);   
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   Comment(t);
   if(file_handle!=INVALID_HANDLE)
     {
      t++;
      ArrayResize(mass,t+1,10000);
      mass[t]=Ask;
      //--- запишем время сигналов и их значения в файл
      for(int i=0; i<ArraySize(mass); i++)
       FileWrite(file_handle,mass[t]);
      //--- закрываем файл
      FileClose(file_handle);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
//+------------------------------------------------------------------+

Ich kann nicht herausfinden, wie ich in die nächste Zeile schreibe...

Ich versuche, jedes Zitat in eine neue Zeile zu schreiben, aber es funktioniert nicht ....

 

Ich teste einen EA mit einem benutzerdefinierten Indikator. Manchmal werden die Geschäfte in Übereinstimmung mit den Bedingungen eröffnet, und manchmal ist nicht klar, nach welchem Prinzip. Ich starte die Visualisierung, der Indikator wird so gezeichnet, wie er sein sollte, aber die Geschäfte stimmen nicht immer mit dem Indikator überein. Ich habe versucht, die problematischen Bereiche mit den Alarmen zu überprüfen, aber der Indikator im Expert Advisor zeigt ebenfalls Nullen an. Ich verstehe nicht, was das Problem ist, wenn der Indikator korrekt gezeichnet wird beim Testen, wo sind die Indikatorwerte an den EA übergeben?

Der Code befindet sich im Expert Advisor:
double line=iCustom(NULL,0,"Ttest3",Period_MA_1,p2,p3,p4,1,1);

if (line >0){Opn_B=true;}
if (line <=0){Cls_B=true;}
 
VOLDEMAR:

Ich kann nicht herausfinden, wie ich in die nächste Zeile schreibe...

Ich versuche, jedes Zitat in eine neue Zeile zu schreiben, aber es funktioniert nicht ....


FileSeek
 
Forexman77:

Ich teste einen EA mit einem benutzerdefinierten Indikator. Manchmal werden die Geschäfte in Übereinstimmung mit den Bedingungen eröffnet, und manchmal ist nicht klar, nach welchem Prinzip. Ich starte die Visualisierung, der Indikator wird so gezeichnet, wie er sein sollte, aber die Geschäfte stimmen nicht immer mit dem Indikator überein. Ich habe versucht, die problematischen Bereiche mit den Alarmen zu überprüfen, aber der Indikator im Expert Advisor zeigt ebenfalls Nullen an. Ich verstehe nicht, was das Problem ist, wenn der Indikator während des Tests korrekt gezeichnet wird, wo werden die Indikatorwerte an den Expert Advisor übergeben?

Der Code befindet sich im Expert Advisor:

Vielleicht liegt das Problem im EA?
 
Vladon:

vielleicht liegt das Problem beim Berater?
Ich weiß es ehrlich gesagt selbst nicht. Ich lasse einen einzigen visuellen Testindikator über Null laufen, bei einem Prozentsatz von sieben wird ein Handel eröffnet, bei den übrigen nicht.
 

Es ist ein Fehler aufgetreten, den ich nicht verstehe:

'li_cnt' - undeclared identifier

in der Zeile:

    return (li_cnt);

diese Zeile ist in der Funktion enthalten:

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        int li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}
Die Variable li_cnt wird wie gesehen deklariert. Der Compiler schwört, dass es nicht deklariert ist. Was bedeutet das?
 
hoz:

Es ist ein Fehler aufgetreten, den ich nicht verstehe:

in der Zeile:

diese Zeile ist in der Funktion enthalten:

Die Variable li_cnt wird wie gesehen deklariert. Der Compiler schwört, dass es nicht deklariert ist. Was bedeutet das?


Weil Ihre Variable innerhalb von if else deklariert ist
 
hoz:

Es ist ein Fehler aufgetreten, den ich nicht verstehe:

in der Zeile:

diese Zeile ist in der Funktion enthalten:

Die Variable li_cnt wird wie gesehen deklariert. Der Compiler schwört, dass es nicht deklariert ist. Was bedeutet das?

// 1.9 Инициализация рабочего массива. ====================================================================================================
int fInit_ArrayINT (int& fia_INT[],                                              // Инициализируемый массив
                    string fs_List,                                              // Инициализируемые значения в строке
                    int fi_Range,                                                // Размер массива
                    double fd_Factor = 1.0,                                      // множитель
                    string fs_NameArray = "",                                    // имя возвращаемого массива
                    string fs_Delimiter = ",")                                   // Разделитель значений в строке
{
//----
int li_cnt=0;
    //---- Ищем в строке разделитель - признак наличия в строке > 1 параметра
    if (StringFind (fs_List, fs_Delimiter) == -1) return (1);
    else
    {
        string lsa_TMP[];
        li_cnt = fGet_StrArrayFromLine (fs_List, lsa_TMP, ",");
  
        if (fi_Range > 0)
        {
            if (li_cnt != fi_Range)
            {
                Print (fs_NameArray, ": не соотвествие в размерности массива !!!");
                li_cnt = fi_Range;
            }
        }
        fCreat_StrToInt (lsa_TMP, fia_INT, li_cnt, fd_Factor, fs_NameArray);
    }
//----
    return (li_cnt);
}