Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А это так генерит ИИ в программе Jan с сайта Open-source ChatGPT Alternative | Jan (используется модуль CodeNinja 7B Q4)
Вот пример реализации функции RNN на MQL4 с комментариями на русском языке:
Спасибо. Не знал про такую программу. Шикарно быстро работает у меня.
GPT - 4
Четверка такая же тупая, как и 3.5. Вот вчерашний пример, решил проверить 4-ю версию.
Вопрос: напиши на С++ и MQL5 аналог фильтра с нулевой фазовой задержкой, в Matlab он называется filtfilt.
Вместо того чтобы бегать по массивам данных в разных направлениях, этот ИИ тупо вызывает функции физического переворота массива (вектора в С++). Так никакого быстродействия не хватит. Короче, для написания программ эти помойки не годятся. А вот использовать, как справочные системы мне очень нравится, гораздо удобнее Гугла или Яндекса.
--------- ответ Chat GPT 4 --------
Функция `filtfilt` в MATLAB применяет фильтрацию с нулевой фазовой задержкой, обрабатывая данные вперед и назад посредством заданного фильтра. Это устраняет фазовую задержку, которая обычно возникает при односторонней фильтрации.
Чтобы создать аналог `filtfilt` в C++, мы можем использовать любую доступную библиотеку цифровой обработки сигналов или реализовать алгоритм самостоятельно. В простейшем случае, процедура должна выглядеть следующим образом:
1. Примените фильтр к данным в прямом направлении.
2. Разверните отфильтрованные данные (сделайте их зеркально отраженными).
3. Примените тот же фильтр к развернутым данным.
4. Снова разверните результат.
Ниже представлен очень простой пример реализации этого алгоритма на C++, используя встроенные инструменты STL для разворота вектора:
```cpp
#include <vector>
#include <algorithm> // для std::reverse
#include <numeric> // для std::accumulate
// Пример простейшей функции фильтрации, замените её на реальную реализацию фильтра
std::vector<double> applyFilter(const std::vector<double>& data) {
return data; // Заглушка, здесь должна быть логика фильтрации
}
std::vector<double> filtfilt(const std::vector<double>& data) {
// Применяем фильтр в прямом направлении
std::vector<double> filteredData = applyFilter(data);
// Разворачиваем отфильтрованные данные
std::reverse(filteredData.begin(), filteredData.end());
// Применяем фильтр в обратном направлении
filteredData = applyFilter(filteredData);
// Снова разворачиваем данные для восстановления исходного порядка
std::reverse(filteredData.begin(), filteredData.end());
return filteredData;
}
int main() {
// Пример использования функции
std::vector<double> signal = {1.0, 2.0, 3.0, 2.0, 1.0}; // Ваш сигнал
std::vector<double> filteredSignal = filtfilt(signal);
return 0;
}
```
В этом примере используется функция `std::reverse`, чтобы перевернуть вектор. В реальной реализации функция `applyFilter` должна содержать код для фильтрации данных.
Реализация фильтров бывает довольно сложной задачей, и в зависимости от типа фильтра (FIR, IIR) может потребоваться разработка специальных алгоритмов. Алгоритмы фильтрации могут быть реализованы "с нуля" или с использованием специализированных библиотек, таких как KissFFT для преобразования Фурье или Intel IPP для обработки сигналов.
Если вы не знакомы с деталями проектирования цифровых фильтров и не хотите имплементировать такую сложную систему самостоятельно, возможно, будет разумнее использовать уже готовые библиотеки для работы со звуком и сигналами, такие как Aquila, SpeexDSP или другие.
В MQL5 нет встроенных функций, эквивалентных `filtfilt` из MATLAB, поэтому мы должны реализовать такую функцию самостоятельно. Однако реализация цифрового фильтра с нулевой фазовой задержкой требует хороших знаний в области цифровой обработки сигналов, а основная трудность заключается в реализации самого фильтра (FIR, IIR и т.д.).
В MQL5 с его ограничениями создать полноценный аналог функции `filtfilt` непросто и сложно сделать это без использования дополнительных библиотек. Обычно трейдеры используют более простые методы фильтрации, такие как скользящие средние или индикаторы.
Ниже приведен пример простейшей "фильтрации" сигнала в MQL5, который использует метод скользящего среднего для демонстрации концепции. Это не эквивалент `filtfilt`, так как простое скользящее среднее не является фильтром с нулевой фазовой задержкой, но его можно использовать как отправную точку для более продвинутой реализации:
```mql5
#include <MovingAverages.mqh>
// Пример простой "фильтрации", используя скользящее среднее (не эквивалент filtfilt)
void SimpleMovingAverageFilter(const double &input[], double &output[], int period, int total) {
// Проверка корректности параметров
if(ArraySize(input) < total || ArraySize(output) < total)
return;
// Применяем скользящее среднее в прямом направлении
for(int i = period-1; i < total; i++) {
output[i] = 0;
for(int j = 0; j < period; j++) {
output[i] += input[i - j];
}
output[i] /= period;
}
// Разворачиваем отфильтрованные данные
ArraySetAsSeries(output, true);
ArrayReverse(output);
// Обратно применяем скользящее среднее
for(int i = period-1; i < total; i++) {
double temp = 0;
for(int j = 0; j < period; j++) {
temp += output[i - j];
}
output[i] = temp / period;
}
// Снова разворачиваем данные
ArrayReverse(output);
}
int OnInit() {
return(INIT_SUCCEEDED);
}
void OnTick() {
// Ваш код здесь
}
void OnStart() {
// Ваши тестовые данные
double data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double filteredData[];
ArraySetAsSeries(data,true);
ArrayCopy(filteredData,data);
// Применяем "фильтр"
SimpleMovingAverageFilter(data, filteredData, 3, ArraySize(data));
}
```
Обратите внимание, что приведенный выше пример далек от идеала и не является полноценной фильтрацией с нулевой фазовой задержкой, но показывает основной принцип двупроходной обработки: данные фильтруются, разворачиваются и снова фильтруются, а затем результат повторно разворачивается.
Если вам необходимо применить реальный фильтр с нулевой фазовой задержкой в MQL5, вам, скорее всего, потребуется импортировать соответствующие функции из внешних DLL или реализовать алгоритм фильтрации самостоятельно в MQL5 с учетом его возможностей и ограничений. Это довольно сложная задача, требующая глубоких знаний в цифровой обработке сигналов.
1. Примените фильтр к данным в прямом направлении.
2. Разверните отфильтрованные данные (сделайте их зеркально отраженными).
3. Примените тот же фильтр к развернутым данным.
4. Снова разверните результат.
Прям как в анекдоте:
Прям как в анекдоте:
Так это ChatGPT 4 писал, не я )). Юмор в том, что вместо того, чтобы пройтись по массиву с данными с индексацией от 0 до N и в обратном направлении от N до нуля он просто тупо, физически реверсирует данные в массиве! И после этого инфоцыгане кричат изо всех утюгов, что ты можешь бухать пивко, а ИИ напишет за тебя диплом, диссертацию и т.д. Главное, пройти у них курсы тысяч так за 70 и золотой ключик у тебя в кармане!
И в то же время, для меня все эти ИИ являются отличной заменой поисковикам в технических вопросах. Например, спросим GigaChat от Сбера про ЦФ:
Вопрос: Чем отличаются цифровые FIR фильтры с четным и нечетным числом коэффициентов?
Цифровые фильтры с конечной импульсной характеристикой (FIR) могут иметь четное или нечетное число коэффициентов. Фильтры с четным числом коэффициентов имеют симметричную импульсную характеристику,
что означает, что они имеют одинаковые значения на одинаковых расстояниях от центра. Фильтры с нечетным числом коэффициентов имеют несимметричную импульсную характеристику, что означает, что они имеют
разные значения на одинаковых расстояниях от центра.
Основное отличие между фильтрами с четным и нечетным числом коэффициентов заключается в их характеристиках. Фильтры с четным числом коэффициентов обычно имеют более гладкую характеристику, что может
быть полезно для некоторых приложений, где требуется более плавное изменение отклика. Фильтры с нечетным числом коэффициентов обычно имеют более резкую характеристику, что может быть полезно для других
приложений, где требуется более быстрое изменение отклика.
И в то же время, для меня все эти ИИ являются отличной заменой поисковикам в технических вопросах. Например, спросим GigaChat от Сбера про ЦФ:
Вопрос: Чем отличаются цифровые FIR фильтры с четным и нечетным числом коэффициентов?
Цифровые фильтры с конечной импульсной характеристикой (FIR) могут иметь четное или нечетное число коэффициентов. Фильтры с четным числом коэффициентов имеют симметричную импульсную характеристику,
что означает, что они имеют одинаковые значения на одинаковых расстояниях от центра. Фильтры с нечетным числом коэффициентов имеют несимметричную импульсную характеристику, что означает, что они имеют
разные значения на одинаковых расстояниях от центра.
Основное отличие между фильтрами с четным и нечетным числом коэффициентов заключается в их характеристиках. Фильтры с четным числом коэффициентов обычно имеют более гладкую характеристику, что может
быть полезно для некоторых приложений, где требуется более плавное изменение отклика. Фильтры с нечетным числом коэффициентов обычно имеют более резкую характеристику, что может быть полезно для других
приложений, где требуется более быстрое изменение отклика.
представим, что число коэффициентов = 1
ну врет же ! ;)
фу, тупая машина )))))
FIR можно было и по русски - КИХ
к тому же, как мне кажется, КИХ-фильтр сможет отфильтровать только синусоидальный сигнал, т.е. который симметричен относительно горизонтальной осипредставим, что число коэффициентов = 1
ну врет же ! ;)
фу, тупая машина )))))
FIR можно было и по русски - КИХ
к тому же, как мне кажется, КИХ-фильтр сможет отфильтровать только синусоидальный сигнал, т.е. который симметричен относительно горизонтальной осиПри кол-ве коэфф. == 1 фильтр вырождается в умножитель )). КИХ фильтрует любой сигнал. Те же мувинги, которые вычисляются по Simple, по сути КИХ с одинаковыми коэффицинтами.
CalculateSimpleMA for(i=begin; i<start; i++) first_value+=price[i]; first_value/=InpMAPeriod;
Спасибо. Не знал про такую программу. Шикарно быстро работает у меня.
Это ещё не всё 😉. Здесь отсортированы 8-ми битные модели вместо стандартных 32-х битных - на них скорость ещё выше
Это ещё не всё 😉. Здесь отсортированы 8-ми битные модели вместо стандартных 32-х битных - на них скорость ещё выше
А можете поподробнее об этом?)
в индикаторе Time left нужно было поменять(разделить) отображение секунд на минуты:секунды.
код целиком был отправлен в Codestrall, функция была заменена на
с комментариями:
Чтобы добавить отображение минут и секунд в таймер, вы можете изменить функцию OnTimer() , чтобы вычислить оставшееся время в минутах и секундах и отформатировать строку соответствующим образом.
Вот пример того, как вы можете изменить функцию OnTimer() , чтобы отображать время в формате "HH:MM ":
Этот код вычисляет оставшееся время в секундах, затем преобразует его в часы, минуты и секунды. Затем он форматирует строку с помощью функции StringFormat() и обновляет текст метки с новой строкой.