Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1467

 
Alexey Viktorov #:

Was meinen Siedamit ? Meinen Sie, dass man, um eine bestimmte Anzahl von Elementen von einem Array in ein anderes zu kopieren, etwa temp[], die Arraygröße vor dem Kopieren festlegen sollte ArrayResize(temp, new_size); ?????

Nein, ich meinte natürlich, dass die Arraygröße immer bekannt ist oder bekannt sein kann. Und sie kann und sollte bei Indexüberlauf kontrolliert werden.

 
Valeriy Yastremskiy #:

Natürlich nicht, ich meinte, dass die Array-Größe immer bekannt ist oder bekannt sein kann. Und sie kann und muss auf Indexüberschreitung kontrolliert werden.

Man kann es kontrollieren, aber es ist nicht immer notwendig...

 
Alexey Viktorov #:

Kontrolle ist möglich, aber nicht immer notwendig....

Hehe, dann fangen Sie an, nachdem Sie die Grenzen überschritten haben))))
 
Valeriy Yastremskiy #:
Hehe, dann fangen Sie an, nachdem Sie über))))) gegangen sind.

Hier ist ein Blick...

Forum über Trading, automatisierte Handelssysteme und das Testen von Handelsstrategien.

Fragen von Anfängern MQL5 MT5 MetaTrader 5

Alexey Viktorov, 2023.06.27 21:19

Was ist das Problem? Deklarieren Sie ein Array temp[] und kopieren Sie 30 Elemente hinein und suchen Sie den Index des minimalen/maximalen Wertes. Und wenn am Ende weniger als 30 übrig sind, wird kopiert, wie viele übrig sind. Und in diesem Fall würde ich lieber die while()-Schleife verwenden.


Warum sollte ich die Größe des temp[]-Arrays kontrollieren?

Sie sollten die Größe des Arrays kontrollieren, von dem aus wir nach temp[] kopieren, das bestreite ich nicht... Aber warum muss ich die Größe des Arrays kontrollieren, in dem wir nach dem Maximum\minimum suchen?

 
Erinnern Sie mich, bitte, wenn es einen Aufruf von Web-Socket-Verbindung von DLL von EA aufgerufen, ist es notwendig, Host-Adresse in Terminal-Einstellungen zu ermöglichen?
 
leonerd Terminal-Einstellungen zu ermöglichen?

Ja, das Terminal durchsucht nur die ausdrücklich erlaubten Adressen.

 
Valeriy Yastremskiy #:

Ja, das Terminal stöbert nur in den zugelassenen Systemen.

Es ist also nicht das Terminal, das herumschnüffelt, sondern die DLL.

 
leonerd #:

Es ist also nicht das Terminal, das sich einmischt, sondern die DLL.

Eine DLL braucht keinen autorisierten Host in mt. Es reicht, die Verwendung einer DLL in mt. zu erlauben, und die DLL selbst kann absolut alles tun.

 
Können Sie mir sagen, wie ich eine Datei öffnen kann, außer ShellExecuteW durch dll-Import? Gibt es eine ähnliche Funktion in winapi.mqh?
 

Könnten Sie mir bitte sagen, wo dieser Code nicht richtig funktioniert? Er liest die Datensätze nach dem Zufallsprinzip, findet nicht alles und liefert bei einem Neustart neue Ergebnisse.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int                  RULE1  = 0;
input int                  RULE2  = 0;
input int                  RULE3  = 0;
input int                  RULE4  = 0;
input bool                 FastComb  = 1;
input int                  FileLine= 20000;
input string               InpFileName="Report.csv";
//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE pos_type;              // position type
   bool              waiting_transaction;    // waiting transaction, "true" -> it's forbidden to trade, we expect a transaction
   ulong             waiting_order_ticket;   // waiting order ticket, ticket of the expected order
   bool              transaction_confirmed;  // transaction confirmed, "true" -> transaction confirmed
   //--- Constructor
   STRUCT_POSITION()
     {
      pos_type                   = WRONG_VALUE;
      waiting_transaction        = false;
      waiting_order_ticket       = 0;
      transaction_confirmed      = false;
     }
  };
STRUCT_POSITION SPosition[];
///////////////////////////
struct Report
  {
   long              Pass;
   double            Result;
   double            Profit;
   double            Payoff;
   double            ProfitFactor;
   double            RecoveryFactor;
   double            SharpeRatio;
   long              Custom;
   double            EquityDD;
   long              Trades;
   long               Field1;
   long               Field2;
   long               Field3;
   long               Field4;
   long               Field5;
   long               Field6;
   long               Field7;
   long               Field8;
   long               Field9;
  };
long ProfitComb[20001][10];
///////////////////////////
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(FastComb)
     {
      ArrayInitialize(ProfitComb,-1);
      ReportListComb();
      int FindComb=0;
      for(int i=0; i<=FileLine; i++)
        {
         if(RULE1==ProfitComb[i][1] && RULE2==ProfitComb[i][2] && RULE3==ProfitComb[i][3] && RULE4==ProfitComb[i][4])
           {
            FindComb=1;
            break;
           }
        }
      if(FindComb==0 && RULE1!=0)
         return(INIT_PARAMETERS_INCORRECT);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void ReportListComb()
  {
   Report ReportStr[];
   ResetLastError();
   ArrayResize(ReportStr,FileLine);
   string subfolder="Data";
   int file_handle=FileOpen(subfolder+"\\Report.csv",FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI|FILE_COMMON,';');
   if(file_handle!=INVALID_HANDLE)
     {
      int i=0;
      while(!FileIsEnding(file_handle))
        {
         i++;
         ReportStr[i].Pass=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Result=StringToDouble(FileReadString(file_handle));
         ReportStr[i].Profit=FileReadNumber(file_handle);
         ReportStr[i].Payoff=FileReadNumber(file_handle);
         ReportStr[i].ProfitFactor=FileReadNumber(file_handle);
         ReportStr[i].RecoveryFactor=FileReadNumber(file_handle);
         ReportStr[i].SharpeRatio=FileReadNumber(file_handle);
         ReportStr[i].Custom=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].EquityDD=FileReadNumber(file_handle);
         ReportStr[i].Trades=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field1=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field2=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field3=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field4=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field5=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field6=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field7=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field8=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));
         ReportStr[i].Field9=StringToInteger(DoubleToString(FileReadNumber(file_handle),0));

         ProfitComb[i][1]=ReportStr[i].Field1;
         ProfitComb[i][2]=ReportStr[i].Field2;
         ProfitComb[i][3]=ReportStr[i].Field3;
         ProfitComb[i][4]=ReportStr[i].Field4;
         ProfitComb[i][5]=ReportStr[i].Field5;
         ProfitComb[i][6]=ReportStr[i].Field6;
         ProfitComb[i][7]=ReportStr[i].Field7;
         ProfitComb[i][8]=ReportStr[i].Field8;
         ProfitComb[i][9]=ReportStr[i].Field9;
        }
      FileClose(file_handle);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
//+------------------------------------------------------------------+
Grund der Beschwerde: