Obrigado pelo feedback. Ainda não sei como verificar os parâmetros, pois estou aprendendo a programar. Pelo que consegui entender - no código, o Expert Advisor chama o método GetZigZagData().
A primeira vez com os parâmetros GetZigZagData(h_zz,l_zz,t_zz),
a segunda vez com parâmetros diferentes GetZigZagData(zz_handle_current,_Symbol,_Period,start_time_in,stop_time_in).
O arquivo de inclusão tem as duas opções
void CZigZagModule::GetZigZagData(constdouble &zz_h[],constdouble &zz_l[],constdatetime &time[])
{
int h_total =::ArraySize(zz_h);
int l_total =::ArraySize(zz_l);
int total =h_total+l_total;
//--- Zeragem de variáveis ZZ
ZeroZigZagData();
//--- Vamos percorrer os valores ZZ copiadosfor(int i=0; i<total; i++)
{
//--- Se já tivermos obtido o número necessário de máximos e mínimos de ZZ, saia do loopif(m_counter_highs==m_copy_extremums && m_counter_lows==m_copy_extremums)
break;
//--- Controle de superação de matrizif(i>=h_total || i>=l_total)
break;
//--- Preencher o array de máximos até que tenhamos copiado o número necessário de máximosif(zz_h[i]>0 && m_counter_highs<m_copy_extremums)
{
m_zz_high[m_counter_highs] =zz_h[i];
m_zz_high_bar[m_counter_highs] =i;
m_zz_high_time[m_counter_highs] =time[i];
//--- Aumentar o contador de máximos
m_counter_highs++;
}
//--- Preencha a matriz de mínimos até que o número necessário seja copiadoif(zz_l[i]>0 && m_counter_lows<m_copy_extremums)
{
m_zz_low[m_counter_lows] =zz_l[i];
m_zz_low_bar[m_counter_lows] =i;
m_zz_low_time[m_counter_lows] =time[i];
//--- Aumentar a contagem mínima.
m_counter_lows++;
}
}
//--- Determinar a direção do movimento do preço
m_direction=(m_zz_high_time[0]>m_zz_low_time[0])? 1 : -1;
}
//+------------------------------------------------------------------+//|| Obtém dados ZZ do identificador passado//+------------------------------------------------------------------+void CZigZagModule::GetZigZagData(constint handle,int buffer_num_highs,int buffer_num_lows,
conststring symbol,constENUM_TIMEFRAMES period,
constdatetime start_time,constdatetime stop_time)
{
//--- Vamos obter os dados iniciaisint times_total =::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
int highs_total =::CopyBuffer(handle,buffer_num_highs,start_time,stop_time,m_zz_highs_temp);
int lows_total =::CopyBuffer(handle,buffer_num_lows,start_time,stop_time,m_zz_lows_temp);
//--- Número máximo de extremosint max_items =(int)::fmax((double)highs_total,(double)lows_total);
//--- Se isso não for suficiente, vamos tentar novamente.if(times_total<max_items)
{
while(true)
{
::Sleep(100);
times_total=::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
if(times_total>=max_items)
break;
}
}
//--- Contadoresint lows_counter =0;
int highs_counter =0;
//--- Calcular os máximosint h_total=::ArraySize(m_zz_highs_temp);
for(int i=0; i<h_total; i++)
{
if(m_zz_highs_temp[i]>0)
highs_counter++;
}
//--- Calcular os mínimosint l_total=::ArraySize(m_zz_lows_temp);
for(int i=0; i<l_total; i++)
{
if(m_zz_lows_temp[i]>0)
lows_counter++;
}
//--- Obter o número de extremosint copy_extremums=(int)::fmin((double)highs_counter,(double)lows_counter);
CopyExtremums(copy_extremums);
//--- Vamos percorrer os valores ZZ copiados
GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
}
escritas uma após a outra.
Carreguei arquivos antigos, depois novos, excluí o MT5 em geral, instalei um novo a partir do zero, nada ajuda, o erro da tela acima persiste.
Алексей Тарабанов: ZY: Por que você programa em C se não tem certeza de que pode endereçar uma função com parâmetros diferentes?
Não estou entendendo muito bem. Tenho muitas opções sobre o que programar? Tenho o MT5, que está em MQL5, e estou tentando aprender.
Acho que uma função pode ser acessada com parâmetros diferentes, até li que isso se chama sobrecarga. Mas não entendo como lidar com isso. Além disso, tenho certeza de que o erro não é do autor, é muito provável que eu esteja cometendo um erro, a única questão é onde exatamente ????.
Alterei os nomes dessas funções no arquivo de inclusão e acrescentei os números 1 e 2 a elas, respectivamente.
Encontrei todas as referências a elas no Expert Advisor e as editei. O erro antigo desapareceu, mas apareceu um novo. De fato - algum problema com os tipos de dados. O tradutor escreveu o seguinte:
'stop_time_in' - unable to convert enumeration TestZZ_03.mq5 77 78
A terceira e a quarta ainda não compilam.
'GetZigZagData' - nenhuma das sobrecargas pode ser aplicada à chamada de função TestZZZ_03.mq5 77 15
"Get ZigZag Data" - nenhuma das sobrecargas pode ser aplicada à chamada de função test z_03.mq5 77 15
---------------------
pode ser uma de 2 função(ões) TestZZZ_03.mq5 77 15
pode ser uma de 2 funções TestZZ_03.at MQL5 77 15
---------------------
void CZigZagModule::GetZigZagData(const int,int,int,const string,const ENUM_TIMEFRAMES,const datetime,const datetime) ZigZagModule.mqh 52 22
______________
Ou seja, o compilador jura que uma mesma função é iniciada com parâmetros diferentes.
A terceira e a quarta ainda não compilam.
Verifique os parâmetros transmitidos. O número ou os tipos deles estão incorretos. Isso ocorre quando se chama GetZigZagData.
Obrigado pelo feedback. Ainda não sei como verificar os parâmetros, pois estou aprendendo a programar. Pelo que consegui entender - no código, o Expert Advisor chama o método GetZigZagData().
A primeira vez com os parâmetros GetZigZagData(h_zz,l_zz,t_zz),
a segunda vez com parâmetros diferentes GetZigZagData(zz_handle_current,_Symbol,_Period,start_time_in,stop_time_in).
O arquivo de inclusão tem as duas opções
escritas uma após a outra.
Carreguei arquivos antigos, depois novos, excluí o MT5 em geral, instalei um novo a partir do zero, nada ajuda, o erro da tela acima persiste.
ZY: Por que você programa em C se não tem certeza de que pode endereçar uma função com parâmetros diferentes?
Não estou entendendo muito bem. Tenho muitas opções sobre o que programar? Tenho o MT5, que está em MQL5, e estou tentando aprender.
Acho que uma função pode ser acessada com parâmetros diferentes, até li que isso se chama sobrecarga. Mas não entendo como lidar com isso. Além disso, tenho certeza de que o erro não é do autor, é muito provável que eu esteja cometendo um erro, a única questão é onde exatamente ????.
CopyExtremums(copy_extremums); //--- Vamos percorrer os valores ZZ copiados GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);Acho que está aqui.Alterei os nomes dessas funções no arquivo de inclusão e acrescentei os números 1 e 2 a elas, respectivamente.
Encontrei todas as referências a elas no Expert Advisor e as editei. O erro antigo desapareceu, mas apareceu um novo. De fato - algum problema com os tipos de dados. O tradutor escreveu o seguinte:
'stop_time_in' - unable to convert enumeration TestZZ_03.mq5 77 78