Можно начать идти от обратного:
- задаём условие, сколько нужно взять пунктов за заданное кол-во баров
- далее поиск таких мест
- после нахождения "рыбных" мест анализ, какая собственно была комбинация баров (паттерн) перед "рыбным" местом.
Maxim Dmitrievsky:
можно, это из области распозначания графических образов (машинное зрение)
Есть какие-то идеи, как это лучше всего сделать? Можно рассчитывать различные вероятностные характеристики и уровни цен, как это сделать?
Может быть здесь есть то что ты ищешь.
Как искать паттерны в биржевых данных и использовать их в торговле?
- habrahabr.ru
Сегодня предлагаю поразмышлять о том, как искать паттерны в биржевых данных и как их использовать для успешной торговли. Будем получать биржевые данные Forex от одного из брокеров, сохраним в базу данных PostgreSQL и попробуем найти закономерности при помощи алгоритмов машинного обучения. В статье есть несколько приятных бонусов в виде кода...
Vladimir Karputov:
Можно начать идти от обратного:
- задаём условие, сколько нужно взять пунктов за заданное кол-во баров
- далее поиск таких мест
- после нахождения "рыбных" мест анализ, какая собственно была комбинация баров (паттерн) перед "рыбным" местом.
в принципе да, но здесь не будет учитвываться вероятность профита когда паттерн "поедет" в ту или иную сторону. Эти риски желательно заложить изначально, а не корректировать по ходу
То есть ты хочешь еще и кластеризацию паттернам задавать (расчитывать)....
Maxim Dmitrievsky:
в принципе да, но здесь не будет учитвываться вероятность профита когда паттерн "поедет" в ту или иную сторону
в принципе да, но здесь не будет учитвываться вероятность профита когда паттерн "поедет" в ту или иную сторону
В смысле? Ведь сначала ищется "рыбное место". Вторым этапом анализируются состояние баров перед рыбным местом.
Igor Yeremenko:
можно, это из области распозначания графических образов (машинное зрение)
можно, это из области распозначания графических образов (машинное зрение)
Его пока к mql прикрутишь... Да мне и не прогнозирование нужно, а поиск лучших входов-выходов
Vladimir Karputov:
В смысле? Ведь сначала ищется "рыбное место". Вторым этапом анализируются состояние баров перед рыбным местом.
В смысле? Ведь сначала ищется "рыбное место". Вторым этапом анализируются состояние баров перед рыбным местом.
я хотел какие-то вероятностные оценки присвоить найденным паттернам и их подволнам, мне показалось что просто искать участки в n-пунктов как-то слишком примитивно. Нужно описывать паттерн статистически, пока не придумал как
Maxim Dmitrievsky:
я хотел какие-то вероятностные оценки присвоить найденным паттернам и их подволнам, мне показалось что просто искать участки в n-пунктов как-то слишком примитивно. Нужно описывать паттерн статистически, пока не придумал как
я хотел какие-то вероятностные оценки присвоить найденным паттернам и их подволнам, мне показалось что просто искать участки в n-пунктов как-то слишком примитивно. Нужно описывать паттерн статистически, пока не придумал как
Нужно ступать постепенно. Сначала просто найти свечи заданного размера. Визуально посмотреть, что получилось:
Search of a pattern, version "1.000"
//+------------------------------------------------------------------+ //| Search of a pattern.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" #property description "Индикатор поиска свечей с заданным размером тела" #property description "Найденные свечи отмечаются символами из набора Wingdings" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Arrows #property indicator_label1 "Bull candle" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrBlue #property indicator_width1 1 #property indicator_label2 "Bear candle" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_width2 1 //--- input параметры sinput string __1__ = ""; // Параметр тела свечи input ushort min_size_candel = 15; // Минимальный размер тела свечи () input ushort bull_code = 226; // Код символа бычьего бара(32-255) input ushort bear_code = 225; // Код символа медвежьего бара(32-255) sinput string __2__ = ""; // Параметр смещения input uchar vertical_shift = 15; // Смещение стрелок по вертикали (0-255) //--- индикаторные буфера для построения double BufferBull[]; double BufferBear[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,BufferBull,INDICATOR_DATA); SetIndexBuffer(1,BufferBear,INDICATOR_DATA); //--- зададим код символа для отрисовки в PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,bull_code); PlotIndexSetInteger(1,PLOT_ARROW,bear_code); //--- зададим cмещение стрелок по вертикали в пикселях PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,-(int)vertical_shift); PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,(int)vertical_shift); //--- установим в качестве пустого значения 0 PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { static datetime prev_time=0; //--- работаем только в момент рождения нового бара, внутри бара не работаем if(prev_time==time[rates_total-1]) return(rates_total); //--- на новом баре запоминает время его рождения prev_time=time[rates_total-1]; //--- блок расчета значений индикатора int start=1; if(prev_calculated>0) start=prev_calculated; //--- цикл расчета for(int i=start;i<rates_total;i++) { //--- если предыдущая свеча имеет тело больше минимального if(MathAbs(open[i-1]-close[i-1])/Point()>min_size_candel) { if(open[i-1]<close[i-1]) BufferBull[i-1]=high[i-1]; if(open[i-1]>close[i-1]) BufferBear[i-1]=low[i-1]; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
MetaTrader Trading Platform Screenshots
MetaQuotes Software Corp., MetaTrader 5, Demo
Search of a pattern, version "1.000"
Файлы:
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Допустим, имеем кусок графика. Необходимо выработать (на истории) наиболее оптимальный способ открытия сделок на нем. Где купить, где продать, где еще прикупить, где закрыть и так далее. Но нужно учесть, что паттерны могут быть разные, и необходимо подобрать наиболее эффективный метод расчета мест открытия позиции для любого паттерна, при минимизации рисков. Сделок на паттерне может быть несколько. Есть еще одно важное условие, паттерн может варьировать в некотором диапазоне, допустим видоизменяться на 20%. То есть сначала мы видим один паттерн, а на следующем баре он уже несколько видоизменился, хотя основные его характеристики остались прежними(но мы все время будем наблюдать весь паттерн целиком и все его последующие изменения). То есть нужно ввести еще какой-то коэффициент погрешности.
Есть какие-то идеи, как это лучше всего сделать? Можно рассчитывать различные вероятностные характеристики и уровни цен, как это сделать?