
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скриншоты торговой платформы MetaTrader
GBPUSD, H1, 2017.03.01
Alpari International Limited, MetaTrader 5, Demo
Что за радуга?
Кстати, взял другие данные. Снова в третьей картинке радуга. Полагаю, что такое получается из-за вашего вмешательства в код, с которого вы писали эту работу. Вы писали в статье, что сделали несколько модификаций.
Нормализация рандома при инициализации узлов ни как не ограничивает сами узлы при обучении. Вы можете инициализировать узлы хоть единицами, это ни как не повлияет на результат.
А вот на скорость достижения результата повлиять может.
То что я инициализирую ноды рандомными значениями из поля между минимумом и максимумом по каждому из столбцов в отдельности, просто ускоряет сходимость, потому как SOM не приходится в начале вгонять ноды в заданные поля.
Процесс этот органично вплетён в само обучение поэтому даже сказать вот в этот момент сетка вгоняет а вот тут учится нельзя. Вгонять в заданное поле значит делать подстройку нода с очень большим коэффициентом изменения.
Так что принципиально, моё вмешательство ничего не изменило. Ускорилась лишь скорость сходимости.
Но если у вас есть нарекания на этот механизм, вы вольны это исправить. Поменяйте инициализацию нодов при создании сетки в Include\SOMNode.mqh
//| Инициализация параметров узла в заданом пределе |
//+------------------------------------------------------------------+
void CSOMNode::InitNode(int x1,int y1,int x2,int y2,const double &min_values[],const double &max_values[])
{
//--- устанавливаем координаты узла
m_x1=x1;
m_y1=y1;
m_x2=x2;
m_y2=y2;
//--- расчет координат центра узла
m_x=x1+MathAbs((x2-x1))/2;
m_y=y1+MathAbs((y2-y1))/2;
//--- подготавливаем массив весов
ArrayResize(m_weights,m_dimension);
//--- инициализация весов случайными значениями;
for(int i=0; i<m_dimension; i++) {m_weights[i]=min_values[i]+(max_values[i]-min_values[i])*rand()/32768;}
};
Поставьте ненормализованный rand() и будет точно как в оригинальном алгоритме. Как то вот так: m_weights[i]=rand();
Правильно ли я понимаю, что если создать файл "optim.csv" вот такого формата:
здесь всего два значения:
то запуск "Sample5_SOM_Net_Player" покажет что-то вроде
то есть сеть Кохена нашла, что в файле "optim.csv" есть два ... Два чего? Паттерна?
То есть, если я хочу исследовать два соседних бара - бычьи они или медвежьи, то мне нужно составить описание таких последовательностей, что то вроде:
В итоге будет четыре основных последовательности ("11", "12", "21", "22") и одна пятая - когда любой бар не является ни бычьим, ни медвежьим (размер тела бара равно нулю).
Затем просто пройтись по заданному количеству баров и составить файл "optim.csv" в который и записать эти последовательности. Получится что-то вроде
После чего запустить "Sample5_SOM_Net_Player". Так?
Значения то у вас два, но вот нодов (узлов) вы заказали 250 (50х50), естественно что сетка натягивает ноды на всё поле промежуточных значений.
К тому же вы внесли в поле кластеризации незначимое значение Time. Если хотите использовать время, то в структуре данных как то должна быть отображена периодичность, иначе как сетка поймёт чем понедельник отличается от пятницы. Такая подача времени как у вас целесообразна хотя бы на данных за несколько лет, тогда в них будут встречаться повторы (если конечно убрать значения года).
Поймите простую мысль, сетка Кохонена помещает узлы, в окрестностях похожих (в многомерном плане) примеров. И тогда с пониманием работы всё встанет на свои места.
Значения то у вас два, но вот нодов (узлов) вы заказали 250 (50х50), естественно что сетка натягивает ноды на всё поле промежуточных значений.
К тому же вы внесли в поле кластеризации незначимое значение Time. Если хотите использовать время, то в структуре данных как то должна быть отображена периодичность, иначе как сетка поймёт чем понедельник отличается от пятницы. Такая подача времени как у вас целесообразна хотя бы на данных за несколько лет, тогда в них будут встречаться повторы (если конечно убрать значения года).
Поймите простую мысль, сетка Кохонена помещает узлы, в окрестностях похожих (в многомерном плане) примеров. И тогда с пониманием работы всё встанет на свои места.
Если я переделаю файл csv в виде такого формата: [размер тела свечи][день недели (1, 2, 3, 4, 5)] и заполню его для, скажем, 100 баров, то в итоге я получу в файле csv 100 ПРИМЕРОВ? И сколько нодов ставить в таком случае? 3*3?
Если я переделаю файл csv в виде такого формата: [размер тела свечи][день недели (1, 2, 3, 4, 5)] и заполню его для, скажем, 100 баров, то в итоге я получу в файле csv 100 ПРИМЕРОВ? И сколько нодов ставить в таком случае? 3*3?
Это зависит от того что вы хотите получить, кластеризацию или регрессию.
Кластеризация объединит несколько примеров в один кластер, тогда количество нодов должно быть меньше чем примеров.
Регрессия потребует нодов больше чем самих примеров, для того чтоб покрыть поля в точках которые не представлены в примерах.
ЗЫ Опять же это процесс не бинарный, поэтому нельзя сказать что это кластеризация, а вот это уже регрессия, представьте это как разнонаправленный спектр, чем больше кластеризации тем меньше регрессии и наоборот. А в нулевой точке, когда количество нодов равно количеству примеров, имеем примерно поровну и кластеризации и регрессии.
Это зависит от того что вы хотите получить, кластеризацию или регрессию.
Кластеризация объединит несколько примеров в один кластер, тогда количество нодов должно быть меньше чем примеров.
Регрессия потребует нодов больше чем самих примеров, для того чтоб покрыть поля в точках которые не представлены в примерах.
Ну, если упростить, то я хотел получить визуализацию для четырёх последовательностей:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Еще раз о картах Кохонена"
Vladimir Karputov, 2017.04.04 13:49
То есть, если я хочу исследовать два соседних бара - бычьи они или медвежьи, то мне нужно составить описание таких последовательностей, что то вроде:
В итоге будет четыре основных последовательности ("11", "12", "21", "22") и одна пятая - когда любой бар не является ни бычьим, ни медвежьим (размер тела бара равно нулю).
в заданном кол-ве баров. То есть я прохожу скриптом по заданному количеству баров, и присваиваю одну из пяти последовательностей ("0", "11", 12", "21", "22"). И также присваиваю день недели. В итоге для 100 баров я получаю 100 примеров [название последовательности][день недели].
Ну, если упростить, то я хотел получить визуализацию для четырёх последовательностей:
в заданном кол-ве баров. То есть я прохожу скриптом по заданному количеству баров, и присваиваю одну из пяти последовательностей ("0", "11", 12", "21", "22"). И также присваиваю день недели. В итоге для 100 баров я получаю 100 примеров [название последовательности][день недели].
Извините не понимаю, если у вас есть комбинация условий и вы точно знаете их, то зачем вам сетка?
ЗЫ Если же нет, то лучше показать сетке что вас интересует, например разность Open[i]-Close[i] в одной колонке, и разность Open[i+1]-Close[i+1] в другой, а уже на основании кластеризации выставлять условия какой кластер как интерпретировать.
Извините не понимаю, если у вас есть комбинация условий и вы точно знаете их, то зачем вам сетка?
***