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.
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...
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?
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 |//+------------------------------------------------------------------+inputint RULE1 = 0;
inputint RULE2 = 0;
inputint RULE3 = 0;
inputint RULE4 = 0;
inputbool FastComb = 1;
inputint FileLine= 20000;
inputstring InpFileName="Report.csv";
//+------------------------------------------------------------------+//| Structure Positions |//+------------------------------------------------------------------+struct STRUCT_POSITION
{
ENUM_POSITION_TYPE pos_type; // position typebool waiting_transaction; // waiting transaction, "true" -> it's forbidden to trade, we expect a transactionulong waiting_order_ticket; // waiting order ticket, ticket of the expected orderbool 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];
/////////////////////////////+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
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);
}
elsePrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
}
//+------------------------------------------------------------------+
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.
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...
O controle é possível, mas nem sempre necessário....
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?
Sim, o terminal só examina os permitidos explicitamente.
Sim, o terminal só está examinando os autorizados.
Portanto, não é o terminal que está bisbilhotando, é a DLL.
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ê 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.