Обсуждение статьи "ZigZag всему голова (Часть I). Разработка базового класса индикатора" - страница 7
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Загрузил новый архив, попробовал компилировать TestZZ_03.mq5
Результат тот-же. Ошибка и отсылка на ту-же функцию, дважды иницированную разными параметрами.
Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.
Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.
void CZigZagModule::GetZigZagData(const double &zz_h[],const double &zz_l[],const datetime &time[])
{
int h_total =::ArraySize(zz_h);
int l_total =::ArraySize(zz_l);
int total =h_total+l_total;
//--- Обнуление переменных ZZ
ZeroZigZagData();
//--- Пройдёмся в цикле по скопированным значениям ZZ
for(int i=0; i<total; i++)
{
//--- Если уже получили нужное количество максимумов и минимумов ZZ, выйдем из цикла
if(m_counter_highs==m_copy_extremums && m_counter_lows==m_copy_extremums)
break;
//--- Контроль выхода за пределы массива
if(i>=h_total || i>=l_total)
break;
//--- Заполняем массив максимумов пока не скопируем нужное количество
if(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];
//--- Увеличим счётчик максимумов
m_counter_highs++;
}
//--- Заполняем массив минимумов пока не скопируем нужное количество
if(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];
//--- Увеличим счётчик минимумов
m_counter_lows++;
}
}
TestZZ_03 и TestZZ_04 не появляются среди загруженных советников, значит TestZZ_04 тоже не компелируется.
Тогда попробуйте сначала разобраться, почему они у вас не появляются. Посмотрел архив ещё раз. Там есть всё для тестов.
Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.
void CZigZagModule::GetZigZagData(const int handle,int buffer_num_highs,int buffer_num_lows,
const string symbol,const ENUM_TIMEFRAMES period,
const datetime start_time,const datetime stop_time)
{
//--- Получим исходные данные
int times_total =::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
int highs_total =::CopyBuffer(handle,2,0,times_total,m_zz_highs_temp);
int lows_total =::CopyBuffer(handle,3,0,times_total,m_zz_lows_temp);
//--- Максимальное количество экстремумов
int max_items =(int)::fmax((double)highs_total,(double)lows_total);
//--- Если не хватает, попробуем ещё раз
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;
}
}
//--- Счётчики
int lows_counter =0;
int highs_counter =0;
//--- Считаем максимумы
int h_total=::ArraySize(m_zz_highs_temp);
for(int i=0; i<h_total; i++)
{
if(m_zz_highs_temp[i]>0)
highs_counter++;
}
//--- Считаем минимумы
int l_total=::ArraySize(m_zz_lows_temp);
for(int i=0; i<l_total; i++)
{
if(m_zz_lows_temp[i]>0)
lows_counter++;
}
//--- Получим количество экстремумов
int copy_extremums=(int)::fmin((double)highs_counter,(double)lows_counter);
CopyExtremums(copy_extremums);
//--- Пройдёмся в цикле по скопированным значениям ZZ
GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
}
...
Вставляйте код правильно:
//---
Это не тот метод. Вот с этим списком параметров:
Оба метода записаны в инклюдфайле.
Первый стр 217
Второй стр 258
...
Вы не заменили файлы. Удалите их все. И загрузите заново из последнего архива: https://www.mql5.com/ru/forum/299970/page6#comment_10495849