Невозможно скомпилировать , потому что многие файлы потеряны. например
//--- доступный трейлинг
Здравствуйте
Файлы, на которые вы ссылаетесь, поставляются с MQL5 IDE. Здесь и здесь есть руководства по использованию мастера.
Спасибо, что прочитали.
- www.mql5.com
У меня то же самое. Ошибка связана с вектором _c[], который не скопирован. Так же, как _ma[0] обозначает цену последнего бара скользящего среднего, _c[] обозначает цену последнего закрытия. Несколько строк ниже он обновляется, похоже, что он каким-то образом проскочил.
double CSignalCNN::GetOutput() { int _index = 5; matrix _inputs; vector _ma, _h, _l, _c; _inputs.Init(m_input_size, m_input_size); for(int g = 0; g < m_epochs; g++) { for(int h = m_train_set - 1; h >= 0; h--) { _inputs.Fill(0.0); _index = 0; for(int i = 0; i < m_input_size; i++) { for(int j = 0; j < m_input_size; j++) { if(_ma.CopyIndicatorBuffer(m_ma[_index].Handle(), 0, h, __KERNEL + 1) && _h.CopyRates(m_symbol.Name(), m_period, 2, h, __KERNEL + 1) && _l.CopyRates(m_symbol.Name(), m_period, 4, h, __KERNEL + 1) && _c.CopyRates(m_symbol.Name(), m_period, 8, h, __KERNEL + 1)) { _inputs[i][j] = _c[0] - _ma[0]; _index++; } } } // //Print(" входные данные: \n", _inputs); CNN.Set(_inputs); CNN.Pad(); //Print("Входы с заполнителем: \n", CNN.inputs); CNN.Convolve(); CNN.Activate(); CNN.Pool(); // целевые уровни, поскольку изменения цены с каждой матрицей служат индикатором бычьего, медвежьего или колебательного тренда // подразумевая матрицы для eventful: // значительные изменения цен // незначительные изменения цен // изменения цены закрытия, // соответственно // // Изменения цены в каждом столбце охватывают соответственно 1, 2 и 3 бара // & изменения цены в каждой строке обусловлены различными весами применяемой цены по отношению к другим применяемым ценам // Итак, значение «high» определяется следующим образом: только максимумы (H); (максимумы + максимумы + цена закрытия)/3 (HHC); и (максимумы + цена закрытия)/3 (HC) // при этом «low» определяется как: только минимумы (L); (минимумы + минимумы + цена закрытия)/3 (LLC); и (минимумы + цена закрытия)/3 (LC) // а цена закрытия рассчитывается следующим образом: только цена закрытия (C); (максимумы + минимумы + цена закрытия + цена закрытия)/3 (HLCC); и (максимумы + минимумы + цена закрытия)/3 (HLC) // // Здесь исходят из следующих допущений: // высокие значения в верхней части графиков означают бычий тренд // высокие значения в нижней части графика указывают на медвежью тенденцию // а небольшая амплитуда колебаний в условиях тесного диапазона свидетельствует о волатильном рынке matrix _targets[]; ArrayResize(_targets, __KERNEL_SIZES.Size()); for(int i = 0; i < int(__KERNEL_SIZES.Size()); i++) { _targets[i].Init(__KERNEL_SIZES[i], __KERNEL_SIZES[i]); // for(int j = 0; j < __KERNEL_SIZES[i]; j++) { if(i == 0)// максимальные значения «бычьего настроения» { _targets[i][j][0] = _h[j] - _h[j + 1]; _targets[i][j][1] = ((_h[j] + _h[j] + _c[j]) / 3.0) - ((_h[j + 1] + _h[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_h[j] + _c[j]) / 2.0) - ((_h[j + 1] + _c[j + 1]) / 2.0); } else if(i == 1)// минимумы, указывающие на «медвежью тенденцию» { _targets[i][j][0] = _l[j] - _l[j + 1]; _targets[i][j][1] = ((_l[j] + _l[j] + _c[j]) / 3.0) - ((_l[j + 1] + _l[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_l[j] + _c[j]) / 2.0) - ((_l[j + 1] + _c[j + 1]) / 2.0); } else if(i == 2)// закрыть позицию из-за «whipsaw» { _targets[i][j][0] = _c[j] - _c[j + 1]; _targets[i][j][1] = ((_h[j] + _l[j] + _c[j] + _c[j]) / 3.0) - ((_h[j + 1] + _l[j + 1] + _c[j + 1] + _c[j + 1]) / 3.0); _targets[i][j][2] = ((_h[j] + _l[j] + _c[j]) / 2.0) - ((_h[j + 1] + _l[j + 1] + _c[j + 1]) / 2.0); } } // //Print("Цели для: " + IntegerToString(i) + " следующие: \n", _targets[i]); } CNN.Get(_targets); CNN.Evolve(m_learning_rate); } } // Конец цикла For _index = 0; _h.CopyRates(m_symbol.Name(), m_period, 2, 0, __KERNEL + 1); _l.CopyRates(m_symbol.Name(), m_period, 4, 0, __KERNEL + 1); _c.CopyRates(m_symbol.Name(), m_period, 8, 0, __KERNEL + 1); for(int i = 0; i < m_input_size; i++) { for(int j = 0; j < m_input_size; j++) { if(_ma.CopyIndicatorBuffer(m_ma[_index].Handle(), 0, 0, __KERNEL + 1)) { _inputs[i][j] = _c[__KERNEL] - _ma[__KERNEL]; _index++; } } } CNN.Set(_inputs); CNN.Pad(); CNN.Convolve(); CNN.Activate(); CNN.Pool(); double _long = 0.0, _short = 0.0; if(CNN.output[0].Median() > 0.0) { _long = fabs(CNN.output[0].Median()); } if(CNN.output[1].Median() < 0.0) { _short = fabs(CNN.output[1].Median()); } double _neutral = fabs(CNN.output[2].Median()); if(_long + _short + _neutral == 0.0) { return(0.0); } return((_long - _short) / (_long + _short + _neutral)); }
Замените этот метод
У меня то же самое. Ошибка связана с вектором _c[], который не копируется. Так же как _ma[0] обозначает цену последнего бара скользящего среднего, _c[] обозначает цену последнего закрытия. Несколько строк ниже он обновляется, похоже, что-то сбилось.
Замените этот метод
Пожалуйста, ознакомьтесь с исправленным приложением.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Возможности Мастера MQL5, которые вам нужно знать (Часть 23): CNN:
Свёрточные нейронные сети (Convolutional Neural Networks, CNNs) — ещё один алгоритм машинного обучения, который, как правило, специализируется на разложении многомерных наборов данных на ключевые составные части. Мы рассмотрим принцип его работы и исследуем возможное применение для трейдеров в очередном классе сигналов Мастера MQL5.
Мы продолжаем рассматривать идеи машинного обучения и статистики, которые могут быть полезны трейдерам, в контексте быстрого тестирования и прототипирования в Мастере MQL5. Цель по-прежнему заключается в рассмотрении одной идеи в рамках одной статьи. Изначально я думал, что для этой части потребуется как минимум две статьи, но всё же рискнул втиснуть информацию в одну. Как следует из названия, сверточные нейронные сети (Convolutional Neural Networks, CNNs) обрабатывают многомерные данные в свертках с помощью ядер.
Эти ядра несут на себе сетевые веса и, как и многомерные входные данные, обычно имеют матричную форму. Они имеют меньшие общие размеры по сравнению с входными данными. Выполняя итерацию по матрице входных данных при прямом распространении (feed forward), каждая итерация по сути циклически проходит по входным данным. Именно из-за этого "цикла" сети и называют "сверточными".
Итак, в этой статье мы познакомимся с ключевыми этапами работы CNN, создадим простой класс MQL5, реализующий эти этапы, интегрируем этот класс в пользовательский класс сигналов Мастера MQL5 и, наконец, выполним тестовые запуски с помощью советника, собранного из этого класса сигналов.
Автор: Stephen Njuki