Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1467

 
Alexey Viktorov #:

O que você quer dizer comisso ? Você acha que, para copiar algum número de elementos de um array para outro, algum temp[], você deve definir o tamanho do array antes de copiar ArrayResize(temp, new_size); ?????

Não, é claro, eu quis dizer que o tamanho do array é sempre conhecido ou pode ser conhecido. E ele pode e deve ser controlado para a superação de índices.

 
Valeriy Yastremskiy #:

Claro que não, eu quis dizer que o tamanho da matriz é sempre conhecido ou pode ser conhecido. E ele pode e deve ser controlado quanto à superação de índices.

Você pode controlá-lo, mas nem sempre é necessário...

 
Alexey Viktorov #:

O controle é possível, mas nem sempre necessário....

Hehe, então comece depois de ultrapassar os limites))))
 
Valeriy Yastremskiy #:
Hehe, então comece depois de ir além)))))

Aqui está uma olhada...

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Perguntas de iniciantes MQL5 MT5 MetaTrader 5

Alexey Viktorov, 2023.06.27 21:19

Qual é o problema? Declare uma matriz temp[] e copie 30 elementos para ela e procure o índice do valor mínimo/máximo. E se, no final, houver menos de 30, ele copiará quantos restarem. E, nesse caso, eu preferiria usar o loop while().


Por que devo controlar o tamanho da matriz temp[]?

Você deve controlar o tamanho da matriz de onde copiamos para temp[], não discuto... Mas por que preciso controlar o tamanho da matriz onde estamos procurando o máximo\mínimo?

 
Lembre-me, por favor, se houver uma chamada de conexão de soquete da Web da DLL chamada pelo EA, é necessário permitir o endereço do host nas configurações do terminal?
 
leonerd configurações do terminal?

Sim, o terminal só examina os permitidos explicitamente.

 
Valeriy Yastremskiy #:

Sim, o terminal só está examinando os autorizados.

Portanto, não é o terminal que está bisbilhotando, é a DLL.

 
leonerd #:

Portanto, não é o terminal que vai se envolver, é a DLL.

Uma dll não precisa de um host autorizado no MT. Basta permitir o uso de uma dll no MT. e a própria dll pode fazer absolutamente qualquer coisa.

 
Você pode me dizer como abrir um arquivo, exceto ShellExecuteW por meio da importação de dll? Existe uma função semelhante no winapi.mqh?
 

Você poderia me dizer onde esse código não está funcionando corretamente? Ele lê os registros aleatoriamente como deseja, não encontra tudo e fornece novos resultados em um novo início.

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