Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1467

 
Alexey Viktorov #:

Cosa intendetedire ? Pensate che per copiare un certo numero di elementi da un array a un altro, un certo temp[], si debba impostare la dimensione dell'array prima della copia ArrayResize(temp, new_size); ?????

No, naturalmente, intendevo dire che la dimensione dell'array è sempre nota o può essere nota. E può e deve essere controllata per l'overrun degli indici.

 
Valeriy Yastremskiy #:

Certo che no, intendevo dire che la dimensione dell'array è sempre nota o può essere nota. E può e deve essere controllata per evitare l'overrun dell'indice.

Si può controllare, ma non è sempre necessario...

 
Alexey Viktorov #:

Controllare è possibile, ma non sempre necessario....

Hehe, allora inizia dopo aver superato i limiti))))
 
Valeriy Yastremskiy #:
Hehe, poi iniziare dopo essere andati oltre)))))

Ecco un'occhiata...

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading.

Domande dei principianti MQL5 MT5 MetaTrader 5

Alexey Viktorov, 2023.06.27 21:19

Qual è il problema? Dichiarare un array temp[] e copiare 30 elementi in esso e cercare l'indice del valore minimo/massimo. E se alla fine ci saranno meno di 30 elementi, copierà quanti ne sono rimasti. In questo caso, preferirei usare il ciclo while().


Perché dovrei controllare la dimensione dell'array temp[]?

Dovreste controllare la dimensione dell'array da cui copiamo a temp[], non lo metto in dubbio... Ma perché devo controllare la dimensione dell'array in cui cerchiamo il massimo e il minimo?

 
Ricordatemi, per favore, se c'è una chiamata di connessione web socket dalla DLL chiamata da EA, è necessario consentire l'indirizzo host nelle impostazioni del terminale?
 
leonerd impostazioni del terminale?

Sì, il terminale cerca solo quelli consentiti in modo esplicito.

 
Valeriy Yastremskiy #:

Sì, il terminale si occupa solo di quelli autorizzati.

Quindi non è il terminale a frugare, ma la DLL.

 
leonerd #:

Quindi non è il terminale a essere coinvolto, ma la DLL.

Una DLL non ha bisogno di un host autorizzato in mt. è sufficiente consentire l'uso di una DLL in mt. e la DLL stessa può fare assolutamente tutto.

 
Potete dirmi come aprire un file, tranne ShellExecuteW attraverso l'importazione della dll? Esiste una funzione simile in winapi.mqh?
 

Potreste dirmi dove questo codice non funziona correttamente? Legge i record in modo casuale, non trova tutto e fornisce nuovi risultati a un nuovo avvio.

//+------------------------------------------------------------------+
//|                                                      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());
  }
//+------------------------------------------------------------------+
Motivazione: