English 中文 Español Deutsch 日本語 Português
Исследование статистики повторяемости направления свечей

Исследование статистики повторяемости направления свечей

MetaTrader 4Примеры | 19 января 2010, 09:46
10 657 49
Игорь
Игорь

Введение

Здравствуйте.

Хочу предложить вашему вниманию рассмотреть следующую мысль. Нельзя ли предсказать поведение рынка на ближайший небольшой период, на основе повторяемости направления свечей в одно и то же время в течение дня. Если такая повторяемость, конечно, обнаружится.

Вообще, если удастся обнаружить, что в течение последних нескольких дней, в одно и то же время, свечи всегда имели одно и то же направление, то это само по себе было бы интересно. Ведь весь технический анализ, по сути, сводится к нахождению статистически значимых зависимостей.

Смена направления повторяющихся свечей говорит о смене тренда

Давайте для начала договоримся о некоторых терминах. Хотя эти термины общеупотребительные, стоит еще раз напомнить о них, для исключения разночтений. Если цена открытия свечи меньше чем цена закрытия - свеча бычья (на предлагаемых рисунках они закрашены белым цветом), если наоборот - цена медвежья (закрашены черным цветом). Если цена открытия равна цене закрытия, то такие свечи будем называть равными (термин мой). Если цена котировки, в течение какого-то периода падала, то говорим о медвежьем тренде за данный период, если наоборот, то о бычьем.

Давайте посмотрим на график:

Рис 1. Свечной график на 4-х часовом таймфрейме USDJPY, с 20.11.2009 по 08.12.2008

Как видно из рисунка 1, если тренд медвежий, то и свечи, составляющие этот тренд, в основном медвежьи, если бычий, то и свечи бычьи. Если боковой, то и свечи постоянно меняют направление.

Собственно, наша задача - определить, есть ли у свечей какая-либо повторяемость, и как она меняется в зависимости от изменения направления тренда.

Конечно, все это можно проделать и вручную, скажем, взять часовой или любой другой график, выписать на бумажку направление свечей, и сравнивать их друг с другом за какой-то период. Объем работы большой, но в принципе возможный. Но у нас есть такое замечательное средство, как язык программирования MQL4, с помощью которого можно легко написать эксперта, который сам все подсчитает и сам все расскажет о результатах расчетов.

Итак, что нам нужно:

  • Во-первых, мы должны иметь возможность задавать период времени, который нас интересует, вряд ли есть 15-минутные свечи, которые с вероятностью 100% были медвежьими в 7:15 ежедневно, на протяжении последних пары лет. Хотя проверить такую возможность, хотя бы за последние полгода, мы должны иметь, а вдруг.
  • Во-вторых, наверное, неплохо было бы знать, сколько свечей за рассматриваемый период, было бычьих, сколько медвежьих. Согласитесь, если за последние 10 дней часовые свечи со временем открытия 18:00 - 6 раз были бычьи, а 4 раза медвежьи, то вряд ли из этой информации можно вытащить что-то серьезное. Вот если они 9 раз из 10 были медвежьи, то такую информацию стоит учитывать, например, для того, чтобы решить, в каком направлении открываться сегодня в 18:00.
  • В-третьих, неплохо было бы также узнать, какое среднее расстояние между ценой открытия и закрытия было у данных свечей, а также среднюю их высоту за рассматриваемый период.
  • В-четвертых, мы должны иметь возможность проводить наши расчеты на различных таймфреймах.

Все это возможно задать во внешних переменных предлагаемого скрипта - script_Statistics_candles.

Посмотрим на нижеследующий рисунок.

Рис. 2. Входные параметры скрипта

На рисунке 2 показаны входные параметры, которые можно изменять в скрипте.

Open_session - Время начала исследуемой сессии

Close_session - Время окончания исследуемой сессии

Period_time - Таймфрейм, на которых скрипт считает вероятность повторения свечей. Может принимать одно из следующих значений - 5, 15, 30, 60, 240. Прошу запомнить, что допустимы только эти и никакие другие значения. Соответственно, эти значения будут соответствовать периодам графиков - 5, 15, 30 минут, 1 час и 4 часа.

Ниже выкладываю код самого скрипта. Код я максимально комментирую по той причине, что сам я в процессе изучения учебника по MQL4, не раз обращался к экспертам, выложенным на данном сайте и прежде всего, наиболее полно комментированным. Ведь не секрет, что любая статья, выложенная на данном сайте, имеет, помимо прочего и обучающее значение, для тех, кто делает первые шаги в использовании языка MQL4.

//+------------------------------------------------------------------+
//|                                 script_Statistics_candles_V2.mq4 |
//|                              Copyright © 2009, Игорь Александров |
//|                                                sydiya@rambler.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Игорь Александров"
#property link      "sydiya@rambler.ru"
#property show_inputs
//---- Входные параметры

extern string  Open_session ="2009.11.20";   //Дата открытия исcледуемой сессии 
extern string  Close_session = "2009.11.26"; //Дата закрытия исcледуемой сессии
extern int     Period_time = 60;             //Период графика, на котором будет работать эксперт,
                                             //может принимать значения 5;15;30;60;240                     
//-----------------------------------------------------------------
int 
    Day_bars_i;                      //Номер дня для i-го бара в сессии    
double
    Mas_vira_maina[24,60]={0,0 0,0}, //Объявляем массив для баров с равной ценой открытия - закрытия
    Mas_vira[24,60]={0,0 0,0},       //Объявляем массив для вычислений бычьих баров
    Mas_maina[24,60]={0,0 0,0},      //Объявляем массив для вычислений медвежьих баров
    Mas_kol_vo[24,60]={0,0 0,0},     //Обьявляем массив для вычислений кол-ва подсчитаных баров
    Mas_profit[24,60]={0,0 0.0},     //Обьявляем массив для вычислений профита по open-close
    Mas_H_L[24,60]={0,0 0.0};        //Обьявляем массив для вычислений профита по high-low

string Symb;                         //Название финанс. инструмента, на котором исполняется скрипт
bool New_day = false;                //Флаг нового дня
//--------------------------------------------------------------------

//----------------------------Стартуем--------------------------------

int start()
  {                                  //-общая открывающая скобка
  
  Print("----------------------------------------------------------------------");
  Print("  Результаты работы скрипта- Statistics_candles- ",TimeToStr(TimeCurrent( )) );
  Print("  Расчет проведен с ",Open_session," до ",Close_session);

//------------------------Обьявляем переменные ----------------------
  int  
       Hour_open_bars,                  //Номер часа открытия i-го бара в сессии
       Minute_open_bars,                //Номер минуты открытия i-го бара в сессии
       Shift_open,                      //Номер бара с временем открытия Open_session               
       Shift_close,                     //Номер  бара с временем открытия Close_session
       Shift_open_close,                //Количество баров в сессии
       Total_day=0;                     //Счетчик количества подсчитанных дней     
                    
  double Open_bars_price,               //Цена открытия i-го бара сессии
         Close_bars_price,              //Цена закрытия i-го бара сессии
         Low_bars_price,                //Минимальная цена i-го бара сессии
         High_bars_price,               //Максимальная цена цена i-го бара сессии
         Total_bars=0;                  //Кол-во исследуемых баров при старте скрипта
         
  datetime Time_open_session,           //Время открытия первого бара исследуемой сессии 
                                        //в формате datatime          
           Time_close_session,          //Время открытия последнего бара исследуемой 
                                        //сессии в формате datatime 
           Time_open_bars;              //Время открытия баров в формате datatime 
                       
  bool  Session_vira=false,             //Флаг бычьей сессии
        Session_maina=false;            //Флаг медвежьей сессии 
//-----------------------Конец обьявления переменных ------------------
                   
  Symb=Symbol();                        // Название фин.инструмента
  
  //Запрашиваем время начала исследуемой сессии в формате datatime      
  Time_open_session= StrToTime(Open_session); 

  //Запрашиваем время закрытия исследуемой сессии в формате datatime
  Time_close_session= StrToTime(Close_session); 

  //Запрашиваем номер бара, открывающего сессию
  Shift_open=iBarShift( Symb,Period_time, Time_open_session,false);

  //Запрашиваем номер бара,закрывающего сессию 
  Shift_close=iBarShift( Symb,Period_time, Time_close_session,false);

//---------------------------------------------------------------------  
for(int i = Shift_open; i>=Shift_close; i --)        //Цикл перебора баров в сессии
{ //Открывающая скобка цикла переборов баров
    Total_bars++;                                    //Счетчик кол-ва исследуемых баров  
    static int New_day_shift=0;                      //Номер дня при старте советника

    // Запрашиваем время открытия i-го бара в сессии
    Time_open_bars=iTime( Symb,Period_time,Shift_open-Total_bars);

    //Запрашиваем час открытия i-го бара в сессии
    Hour_open_bars=TimeHour(Time_open_bars); 

    //Запрашиваем минуту открытия i-го бара в сессии 
    Minute_open_bars=TimeMinute(Time_open_bars);

    // Запрашиваем номер дня для i-го бара в сессии 
    Day_bars_i=TimeDayOfYear( Time_open_bars);
    
    //Если номер дня первого бара в сессии не равен номеру i-го дня,то
    if(New_day_shift!=Day_bars_i)  
      {                                    
         New_day = true;               //флаг нового дня сработал         
         New_day_shift=Day_bars_i;     //и присваиваем номеру дня номер i-го бара
         Total_day++;                  //Счетчик дней увеличиваем на единицу        
      }  
      else                             //в противном случае
      {
      New_day = false;                 //флаг нового дня не сработал 
      }      
       //Запрашиваем цену открытия i-го бара
       Open_bars_price= iOpen( Symb, Period_time,i);

       //Запрашиваем цену закрытия i-го бара
       Close_bars_price=iClose( Symb, Period_time,i);

       //Запрашиваем минимальную цену i-го бара
       Low_bars_price=iLow( Symb, Period_time,i);

       //Запрашиваем максимальную цену i-го бара
       High_bars_price=iHigh( Symb, Period_time,i);
        
       //Если цена открытия бара меньше цены закрытия, то сессия бычья
       if(Open_bars_price<Close_bars_price) 
          {                                      
          //Значение массива в соответствующей ячейке увеличиваем на единицу
          Mas_vira[Hour_open_bars,Minute_open_bars]=Mas_vira[Hour_open_bars,Minute_open_bars]+1;

          //Значение массива в соответствующей ячейке увеличиваем на единицу
          Mas_kol_vo[Hour_open_bars,Minute_open_bars]=Mas_kol_vo[Hour_open_bars,Minute_open_bars]+1; 

          //В массив заносим разницу между ценой открытия и закрытия в пунктах
          Mas_profit[Hour_open_bars,Minute_open_bars]=
          Mas_profit[Hour_open_bars,Minute_open_bars]+(Close_bars_price-Open_bars_price)/Point;

          //В массив заносим разницу между максимальной и минимальной ценой бара в пунктах
          Mas_H_L[Hour_open_bars,Minute_open_bars]=
          Mas_H_L[Hour_open_bars,Minute_open_bars]+(High_bars_price-Low_bars_price)/Point;
          }          

       //Если цена открытия бара больше цены закрытия, то сессия медведей
       if(Open_bars_price>Close_bars_price)
          {
           //Значение массива увеличиваем на единицу
           Mas_maina[Hour_open_bars,Minute_open_bars]=Mas_maina[Hour_open_bars,Minute_open_bars]+1;

           //Значение массива в соответствующей ячейке увеличиваем на единицу
           Mas_kol_vo[Hour_open_bars,Minute_open_bars]=Mas_kol_vo[Hour_open_bars,Minute_open_bars]+1; 

           //В массив заносим разницу между ценой открытия и закрытия в пунктах
           Mas_profit[Hour_open_bars,Minute_open_bars]=
           Mas_profit[Hour_open_bars,Minute_open_bars]+(Open_bars_price-Close_bars_price)/Point;

          //В массив заносим разницу между максимальной и минимальной ценой бара в пунктах
           Mas_H_L[Hour_open_bars,Minute_open_bars]=
           Mas_H_L[Hour_open_bars,Minute_open_bars]+(High_bars_price-Low_bars_price)/Point;
          }

        //Если цена открытия бара равна цены закрытия, то сессия никакая
        if(Open_bars_price==Close_bars_price)
          {
           //Значение массива увеличиваем на единицу
           Mas_vira_maina[Hour_open_bars,Minute_open_bars]=Mas_vira_maina[Hour_open_bars,Minute_open_bars]+1;

           //Значение массива в соответствующей ячейке увеличиваем на единицу
           Mas_kol_vo[Hour_open_bars,Minute_open_bars]=Mas_kol_vo[Hour_open_bars,Minute_open_bars]+1; 
           
           //Значение масива оставляем таким же
           Mas_profit[Hour_open_bars,Minute_open_bars]=
           Mas_profit[Hour_open_bars,Minute_open_bars]+0;

           //В массив заносим разницу между максимальной и минимальной ценой бара в пунктах
           Mas_H_L[Hour_open_bars,Minute_open_bars]=
           Mas_H_L[Hour_open_bars,Minute_open_bars]+(High_bars_price-Low_bars_price)/Point;
          }                                                                          
      
} //Закрывающая скобка цикла перебора баров
//--------------------------Выводим информацию в журнал экспертов-------------------

Print("Обработано - ",Total_day," дней; ",Total_bars," баров, по ",Period_time," минут");

for (int h=0; h<=23; h++) //Цикл перебора часов
{
  for (int m=0; m<=60; m++) //Цикл перебора минут
   {
    if (Mas_kol_vo[h,m]!=0) //Если значение массива не равно 0, то считаем дальше
    {     
  Print("За расчитанный период, среди ",Mas_kol_vo[h,m],
       " баров,с временем открытия ",h,":",m,
       " .Бычьих- ",Mas_vira[h,m],
       ".Медвежьих- ",Mas_maina[h,m],
       ".Равных - ",Mas_vira_maina[h,m]);
  Print("У баров с временем открытия ",h,":",m,
       " ,среднее расстояние между ценами Open-Close - ",Mas_profit[h,m]/Mas_kol_vo[h,m],
       " пунктов.Между High-Low - ",Mas_H_L[h,m]/Mas_kol_vo[h,m]," пунктов.");   
     }
           Mas_vira_maina[h,m]=0;  //Обнуляем значение массива
           Mas_vira[h,m]=0;        //Обнуляем значение массива
           Mas_maina[h,m]=0;       //Обнуляем значение массива
           Mas_kol_vo[h,m]=0;      //Обнуляем значение массива
           Mas_profit[h,m]=0;      //Обнуляем значение массива
           Mas_H_L[h,m]=0;         //Обнуляем значение массива
   } //Конец цикла перебора минут
} //Конец цикла перебора часов
             
Print("-------------- Скрипт закончил работу --------------------");

   return(0);    
  }                                        //-общая закрывающая скобка
  

Как видите, я объявляю шесть массивов на глобальном уровне под вычисления.

double    
Mas_vira_maina[24,60]={0,0 0,0}, //Объявляем массив для баров с равной ценой открытия - закрытия
Mas_vira[24,60]={0,0 0,0},       //Объявляем массив для вычислений бычьих баров
Mas_maina[24,60]={0,0 0,0},      //Объявляем массив для вычислений медвежьих баров
Mas_kol_vo[24,60]={0,0 0,0},     //Объявляем массив для вычислений кол-ва посчитанных баров
Mas_profit[24,60]={0,0 0.0},     //Объявляем массив для вычислений профита по open-close
Mas_H_L[24,60]={0,0 0.0};        //Объявляем массив для вычислений профита по high-low

В буфер Mas_kol_vo будем заносить количество подсчитанных баров. Зачем это нужно. Казалось бы, значение ячеек массивов для open-close и high-low можно поделить на количество подсчитанных дней, тем более и счетчик в коде имеется- Total_day. Но в процессе работы над скриптом я столкнулся с отсутствием некоторых баров в истории, поэтому получались иногда интересные результаты. Например, высота некоторых баров получалась уж совсем нереальной.

Для чего нужны остальные массивы понятно из комментариев.

Ну а теперь собственно, проверим повторяемость баров при разных направлениях тренда. Для этого возьмем часовой график на USDJPY показанный на рис 1. Как видно из рисунка с 20.11.2009 по 26.11.2009, график имеет медвежью направленность, с 26.11.2009 по 2.12.2009 на графике боковой тренд и с 2.12.2009 по 8.12.2009 бычий тренд.

Проверим, есть ли за этот период повторяющиеся свечи и если есть, то как меняется их направление.

Ставим скрипт на часовой график. Для тех, кто не знает, как это сделать, расскажу чуть подробнее. Сам скрипт -script_Statistics_candles_V2.mq4, скачиваем в папку \Program Files\Название терминала\expert\scripts. Компилируем. Скрипт появится в левом нижнем углу, в окошке под названием "Навигатор". Выглядит это примерно так:

Рис.3 Окно навигатора

Из этого окна достаточно перетащить мышью скрипт в окно терминала, появится окно свойств - рис. 2. Выставляем дату начала и конца работы скрипта.

Для того чтобы понимать логику наших действий, прошу представить следующее. Как бы первое, что вы делаете утром, встав с постели, это запуск данного скрипта. Результаты его работы вы заносите в табличку, по типу той что будет представлена ниже под номером 1. Ваша задача попытаться понять, на результатах работы скрипта, как будут развиваться события на рынке в ближайшие сутки, а может и двое.

Итак, сегодня как будто 26 ноября 2009 года. Вы запускаете скрипт, Вас интересует статистика по свечам за последние, скажем, 6 календарных дней. То есть в свойствах скрипта вы выставляете: Open_session- 2009.11.20 (шесть дней назад), Close_session - 2009.11.26 (то есть сегодня), таймфрейм для расчета можете взять любой, я буду на часовом графике, т.е Period_time=60. И так мы будем делать ежедневно, увеличивая время начала и конца работы скрипта каждый раз на один день.

Мы же будем это делать на исторических данных.

Нажимаем кнопку "ОК" в свойствах, в папке экспертов в Log файле, появилась запись:

21:05:46 script_Statistics_candles_V2 USDJPY,H1 inputs: Open_session="2009.11.20"; Close_session="2009.11.26"; Period_time=60;
21:05:46 script_Statistics_candles_V2 USDJPY,H1: ----------------------------------------------------------------------
21:05:46 script_Statistics_candles_V2 USDJPY,H1: Результаты работы скрипта - script_Statistics_candles- 2010.01.15 20:05
21:05:46 script_Statistics_candles_V2 USDJPY,H1: Расчет проведен с 2009.11.20 до 2009.11.26
21:05:46 script_Statistics_candles_V2 USDJPY,H1: Обработано - 5 дней; 97 баров, по 60 минут
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 0:0 .Бычьих- 1.Медвежьих- 3.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 0:0,среднее расстояние между ценами Open-Close - 6.5 пунктов.Между High-Low - 11 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 5 баров,с временем открытия 1:0 .Бычьих- 1.Медвежьих- 2.Равных - 2
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 1:0,среднее расстояние между ценами Open-Close - 2.2 пунктов.Между High-Low - 10 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 2:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 2:0,среднее расстояние между ценами Open-Close - 7.5 пунктов.Между High-Low - 13.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 3:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 3:0,среднее расстояние между ценами Open-Close - 9 пунктов.Между High-Low - 14.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 4:0 .Бычьих- 0.Медвежьих- 4.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 4:0,среднее расстояние между ценами Open-Close - 7.25 пунктов.Между High-Low - 12 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 5:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 5:0,среднее расстояние между ценами Open-Close - 6 пунктов.Между High-Low - 12.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 6:0 .Бычьих- 1.Медвежьих- 2.Равных - 1
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 6:0,среднее расстояние между ценами Open-Close - 3.75 пунктов.Между High-Low - 8.25 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 7:0 .Бычьих- 1.Медвежьих- 3.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 7:0,среднее расстояние между ценами Open-Close - 1.75 пунктов.Между High-Low - 10 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 8:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 8:0,среднее расстояние между ценами Open-Close - 4.25 пунктов.Между High-Low - 8.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 9:0 .Бычьих- 0.Медвежьих- 3.Равных - 1
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 9:0,среднее расстояние между ценами Open-Close - 8.25 пунктов.Между High-Low - 14.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 10:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 10:0,среднее расстояние между ценами Open-Close - 5.75 пунктов.Между High-Low - 15.25 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 11:0 .Бычьих- 3.Медвежьих- 1.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 11:0,среднее расстояние между ценами Open-Close - 14.5 пунктов.Между High-Low - 19.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 12:0 .Бычьих- 1.Медвежьих- 3.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 12:0,среднее расстояние между ценами Open-Close - 16.75 пунктов.Между High-Low - 25.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 13:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 13:0,среднее расстояние между ценами Open-Close - 7 пунктов.Между High-Low - 14.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 14:0 .Бычьих- 1.Медвежьих- 2.Равных - 1
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 14:0,среднее расстояние между ценами Open-Close - 2.75 пунктов.Между High-Low - 12 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 15:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 15:0,среднее расстояние между ценами Open-Close - 8.5 пунктов.Между High-Low - 14 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 16:0 .Бычьих- 0.Медвежьих- 3.Равных - 1
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 16:0,среднее расстояние между ценами Open-Close - 7.75 пунктов.Между High-Low - 18.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 17:0 .Бычьих- 3.Медвежьих- 1.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 17:0,среднее расстояние между ценами Open-Close - 6.5 пунктов.Между High-Low - 14.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 18:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 18:0,среднее расстояние между ценами Open-Close - 9 пунктов.Между High-Low - 18.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 19:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 19:0,среднее расстояние между ценами Open-Close - 8.75 пунктов.Между High-Low - 16 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 20:0 .Бычьих- 2.Медвежьих- 2.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 20:0,среднее расстояние между ценами Open-Close - 3 пунктов.Между High-Low - 10.5 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 21:0 .Бычьих- 1.Медвежьих- 3.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 21:0,среднее расстояние между ценами Open-Close - 7.25 пунктов.Между High-Low - 12 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 22:0 .Бычьих- 1.Медвежьих- 3.Равных - 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 22:0,среднее расстояние между ценами Open-Close - 7 пунктов.Между High-Low - 15 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: За расчитанный период, среди 4 баров,с временем открытия 23:0 .Бычьих- 1.Медвежьих- 2.Равных - 1
21:05:46 script_Statistics_candles_V2 USDJPY,H1: У баров с временем открытия 23:0,среднее расстояние между ценами Open-Close - 4 пунктов.Между High-Low - 8.75 пунктов.
21:05:46 script_Statistics_candles_V2 USDJPY,H1: -------------- Скрипт закончил работу --------------------
21:05:46 script_Statistics_candles_V2 USDJPY,H1: uninit reason 0
21:05:46 script_Statistics_candles_V2 USDJPY,H1: removed

Результаты работы заносим в таблицу. Договоримся, что количество бычьих баров будем заносить в колонку "Б", медвежьих - в колонку "М", бары "никаких" свечей в таблицу заносить не будем.

Час открытия 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Тип баров
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
М
Б
11.20-11.26
3 1 2 1 2 2 2 2 4 0 2 2 2 1 3 1 2 2 3 0 2 2 1 3 3 1 2 2 2 1 2 2 3 0 1 3 2 2 2 2 2 2 3 1 3 1 2 1
11.21-11.27
4 1 2 1 1 3 2 2 3 1 2 2 3 0 3 1 2 2 2 1 3 1 1 3 4 0 2 2 2 1 3 1 4 0 2 2 2 2 2 2 2 2 4 0 3 1 2 1
11.22-11.28
5 1 2 1 2 3 2 3 4 1 3 2 3 1 3 2 3 2 3 1 3 2 1 4 4 1 3 2 2 2 4 1 4 1 2 3 3 2 2
3 2 5 0 3 2 3 1
11.23-11.29
4 1 2 1 2 3 2 3 4 1 3 2 3 1 3 2 3 2 3 1 3 2 1 4 4 1 3 2 2 2 4 1 4 1 2 3 3 2 2 3 3 2 5 0 3 2 3 1
11.24-11.30
3 1 2 1 2 2 2 2 3 1 2 2 2 1 2 2 2 2 3 1 2 2 1 3 3 1 2 2 2 2 4 0 3 1 2 2 3 1 2 2 2 2 4 0 2 2 2 1
11.25-12.01
3 1 2 0 1 3 1 3 3 1 3 1 3 1 2 2 2 2 3 1 2 2 2 2 2 2 3 1 1 3 3 1 2 2 2 2 3 1 3 1 1 3 4 0 2 2 2 2
11.26-12.02
3 0 2 1 2 2 0 4 2 2 3 1 2 2 2 2 3 1 3 1 2 2 2 2 2 2 4 0 0 4 2 2 2 2 2 2 4 0 3 1 2 2 3 0 3 1 3 1
11.27-12.03
3 0 2 2 3 1 0 4 2 2 2 2 1 3 2 2 4 0 3 1 2 2 2 2 1 3 3 1 1 3 1 3 2 2 1 3 3 1 3 1 2 2 2 0 0 4 2 2
11.28-12.04
3 1 1 3 2 2 0 4 1 3 1 3 2 2 3 1 3 1 3 1 2 2 2 2 1 1 3 1 2 2 0 4 2 2 1 3 3 1 3 1 1 2 1 1 1 3 2 2
11.29-12.05
3 2 1 3 3 2 1 4 1 4 1 4 3 2 4 1 3 2 4 1 3 2 2 3 1 4 3 2 2 3 1 4 2 3 1 4 3 2 4 1 1 3 1 2 1 4 3 2
11.30-12.06
2 2 1 3 3 2 1 4 1 4 1 4 3 2 4 1 3 2 4 1 3 2 2 3 4 1 3 2 2 3 1 4 2 3 1 4 3 2 4 1 1 3 1 2 1 4 3 2
12.01-12.07
2 1 4 0 1 3 3 1 4 0 4 0 2 2 3 1 2 2 3 1 2 2 1 3 1 3 2 2 2 2 1 3 2 2 1 3 2 2 3 1 1 2 0 2 1 3 3 1
12.02-12.08
2 2 1 4 3 1 1 3 1 3 1 3 3 1 3 1 1 3 3 1 3 1 0 4 0 4 2 2 2 2 1 3 2 2 1 3 2 2 3 1 1 2 1 2 1 3 3 1

Таблица 1. Результаты работы эксперта

Ну что ж, давайте посмотрим на результаты. Ну во-первых оказалось - некоторые бары, в одно и то же время, имеют одинаковую направленность, что само по себе интересно. Обратите внимание на ячейки, подкрашенные разными цветами. Желтым цветом я подкрасил ячейки в которых бары были только медвежьи за последние 6 дней, розовым цветом закрашены ячейки, соответствующие только бычьим барам.

26 ноября мы видим, что за последние 6 дней бары с временем открытия 4, 9, и 16 часов всегда были медвежьи. Стоит предположить, что медведи сильны и сегодня, а возможно и завтра рынок будет медвежий.

27 ноября. Наш прогноз оправдался. По результатам работы скрипта видим, что за последние 6 дней в 6, 12, 16, 21 часов, свечи были только медвежьи, предполагаем, что рынок будет медвежий.

28 ноября. Наш прогноз оправдался. За последние 6 дней количество только медвежьих свечей резко уменьшилось, и только в 21 час они были полностью медвежьи. Стоит предположить, что медведи выдыхаются, и тренд будет меняться.

29,30 ноября, 1 и 2 января картина та же. Сидим в боковом тренде. Но что интересно, со 2-го числа начинают появляться только бычьи свечи, предполагаем смену тренда, в течении дня убеждаемся, что были правы.

Интересную картину будем наблюдать 5 и 6 декабря. Нет ни одного временного интервала, где были бы свечи одной направленности. Что-то должно произойти. Смотрим на терминал и с облегчением видим, что это были выходные.

7 декабря опять разнонаправленные свечи, опять ждем смену тренда.

8 декабря чисто бычьи свечи в 11 и 12 часов. На рисунке 1 тренд то вроде медвежий? Но заглянем в терминал и с удивлением видим, что примерно с 12 часов тренд начнет меняться на боковой, а с 9 декабря начнется бычий тренд.

Ну что ж. Как видим 100% верным данный метод быть не может, да и нет пока такого инструмента. Но может стать сильным подспорьем совместно с другими методами технического анализа в предсказании поведения рынка на ближайший день - два.

Заключение

При написании данной статьи я ставил перед собой три задачи:

  • Во-первых, показать необходимость изучения языка MQL4, с помощью которого Ваши возможности по анализу торговли увеличиваются неимоверно, ну и дать в руки интересующимся инструмент, для самостоятельного анализа повторения свечей на разных временных отрезках и валютных парах.
  • Во-вторых, проверить, а есть ли повторяющиеся свечи на разных отрезках в глубь истории и то что в течении нескольких дней некоторые свечи, с одинаковым временем открытия со 100% повторяемостью имеют одинаковое направление, было для меня открытие.
  • Ну и в-третьих, посмотреть, может ли смена направления свечей служить одним из инструментов по предсказанию смены направления тренда.

Понятно, что в рамках одной статьи, я не мог очень глубоко анализировать поведение свечей на разных временных графиках, да собственно, и не собирался. Каждый сам способен исследовать те пары и те таймфреймы которые ему по душе. В прикрепленном файле сам скрипт.

Спасибо.

Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (49)
[Удален] | 18 мая 2010 в 13:27
а есть что то вроде каждая свеча - n - медвежья/бычья?
[Удален] | 6 авг. 2010 в 09:28
Когда -то написал статью на очень похожую тему - "Частотный анализ японских свечей": http://apsheronsk.bozo.ru/Forex/Forex1.html
[Удален] | 5 сент. 2010 в 22:02

Хорошая статья! Автору спасибо.

Alex
Alex | 29 мар. 2011 в 03:31

Спасибо за труд, но как обычно, есть исследование фактическое, но нет мат-статистического. Ваша таблица будет постоянно изменяться с течением настоящего времени. Не так ли? Это для Вас не открытие?

Желтенькие клеточки будут превращаться в красненькие, а беленькие в желтенькие и красненькие, и наоборот, и по всякому. 100% после серии неудач плавно и незаметно превращаются в 50%, и наоборот. Нет в статье статистики в виде "$" прибыли. Так ..., обычные поиски каких-нибудь закономерностей, на которые в настоящем почему-то всегда поздно билет покупаем.

samuelrussian
samuelrussian | 12 июл. 2012 в 18:21
добрый день у кто нибуть сталкиволся ли с следующий проблемой - потщёт баров нисходящих и восходящих не точен и среднии не точны (провирял на глаз)
Инструмент "Ценовая гистограмма" (Рыночный профиль) и его реализация на MQL5 Инструмент "Ценовая гистограмма" (Рыночный профиль) и его реализация на MQL5
Рыночный профиль был разработан Питером Стидлмайером (Peter Steidlmayer), который предложил использовать альтернативное представление информации как о горизонтальном, так и о вертикальном движении рынка, что дает полностью отличный набор моделей. Он предположил, что у рынка существует основной рыночный пульс, или фундаментальная модель, которая называется цикл равновесия и неравновесия (cycle of equilibrium and disequilibrium). В данной статье я сделаю попытку дать общие понятия об упрощенной модели Рыночного профиля (Market Profile) – Ценовой Гистограмме (Price Histogram) и расскажу, как реализовал данный инструмент на MQL5.
Передача данных между индикаторами - простое решение наболевшей проблемы Передача данных между индикаторами - простое решение наболевшей проблемы
Мы хотим создать среду, которая предоставляла бы возможность обращения к показаниям индикаторов, присоединенных к тому или иному графику терминала, и обладала бы следующими свойствами: отсутствие копирования данных; минимальное вмешательство в код уже имеющихся инструментов при необходимости их «подключения»; реализация преимущественно средствами MQL (естественно, механизм DLL нам все же потребуется, однако, как мы увидим, его использование будет ограничиваться не более чем десятком строк на С++). В статье объясняется, как можно довольно просто создать в терминале MetaTrader программную среду, обеспечивающую средства для доступа к буферам индикаторов из других MQL-программ.
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными? Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.
Как написать индикатор в MQL5 Как написать индикатор в MQL5
Что представляет собою индикатор? Это набор вычисленных значений, которые мы хотим отобразить на экране монитора удобным для нас образом. Наборы значений представляются в программах в виде массивов. Таким образом, создание индикатора - это написание алгоритма, который обрабатывает одни массивы (массивы цен) и записывает результаты обработки в другие массивы (значения индикаторов). На примере создания индикатора True Strength Index в статье рассказывается, как писать индикаторы на MQL5