Проверка некоторых мифов: "Как торгуется азиатская сессия, так весь день и пойдет торговля"

Игорь | 18 декабря, 2009

Введение

Здравствуйте! Как человек, уже почти год пытающийся что-то заработать на Форексе и сливший при этом уже не один небольшой депозит, думаю, имею право слегка поумничать на эту тему.

Ни для кого не открою большого секрета, что весь технический анализ, если отбросить словоблудие, по сути, сводится к поиску закономерностей. Если вы установили, что с 95 % вероятностью в новолуние, ровно в полночь, доллар начинает дешеветь и делает это до первых петухов, то вы, естественно, делаете ставки в это время.

Бродя по разным околофорексным форумам в поисках крупиц информации, которую можно было бы использовать в реальной торговле, я не раз встречал различные утверждения, которые выдавались за непреложные аксиомы. На MTV есть неплохая передача – «Разрушители легенд», где на практике проверяется правдивость общеизвестных истин.

Вот и я тоже решил проверить некоторые изречения, которые выдаются за  «непреложные» всяческими форексными или скорее "околофорексными" гуру. Сегодня проверим следующее утверждение:

«Как торгуется азиатская сессия, так и пройдет вся остальная торговля в этот день».

Старик Эйнштейн утверждал, что все в этом мире относительно. В этом легко убедиться, стоит только начать конкретизировать какое-либо утверждение. Проблемы относительности начинаются прямо сразу же — с определения точного времени. Вы можете назвать точные часы азиатской торговли? Уверены?

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


Регион Город Зимнее время
Open
Зимнее время
Close
Летнее время
Open
Летнее время
Close
ASIA Токио
Гонконг
Сингапур
03:00
04:00
04:00
11:00
12:00
12:00
04:00
05:00
04:00
12:00
13:00
12:00
EUROPE Франкфурт
Цюрих
Париж
Лондон
9:00
9:00
9:00
10:00
17:00
17:00
17:00
18:00
09:00
09:00
09:00
10:00
17:00
17:00
17:00
18:00
AMERICA Нью-Йорк
Чикаго
16:00
17:00
24:00
01:00
16:00
17:00
24:00
01:00
PACIFIC Веллингтон
Сидней
00:00
01:00
08:00
09:00
00:00
01:00
08:00
09:00

Таб.1. Расписание торговых сессий на основных мировых биржах

Как видим, технически Азия торгуется с 3 часов утра до 12 часов дня — зимой и с 4 утра до 13.00 — летом. Но в 9.00 открывается европейская сессия, и процессы начинают перекрываться. Так что кристально чистая азиатская сессия покрывает только промежуток с 3.00 до 9.00.

Следующий фактор помех — серверное время. У разных ДЦ оно может быть разным (и совсем не обязательно совпадать с московским), да и переходы на зимнее и летнее время есть не везде. Для чистоты эксперимента проверим и так, и эдак.

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

Для начала предлагаю посмотреть на нижеследующий график (рис 1). С помощью индикатора – «i-Sessions» Игоря Кима он раскрашен в разные цвета по времени сессий. Наиболее темным цветом я раскрасил время с 3.00 до 13.00  (время азиатской торговли). Посветлее - Европа (с 9.00 до 18.00), самая светлая — Америка (с 16.00 до 24.00).

Рис 1. График NZDUSD с указанием сессий

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

Итак, мы напишем эксперта «1- Session» для следующих задач.

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

Код эксперта я постарался максимально подробно откомментировать.

//+------------------------------------------------------------------+
//|                                                    1-Session.mq4 |
//|                              Copyright © 2009, Игорь Александров |
//|                                                sydiya@rambler.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Игорь Александров"
#property link      "sydiya@rambler.ru"

//---- Входные параметры

extern string  Open_session="01:00";   // Время открытия исследуемой сессии 
extern string  Close_session="10:00";  // Время закрытия исследуемой сессии
extern int Day_kol_vo=50;              // Кол-во дней  для исследования
extern int Hour_kol_vo=15;             // Кол-во часов после конца сессии для исследования
extern int Profit=20;                  // Проверяемый уровень профита

//-----------------------------------------------------------------
string Symb;                           // Название финанс. инструмента, на котором стоит эксперт
//----------------------------Стартуем--------------------------------

int start()
  {                                    // общая открывающая скобка
   int  Shift_open_H1,                 // Номер часового бара с
                                       // тем же временем открытия что и дневной
   Shift_open_bars_session,            // Номер часового бара, с которого начинается сессия

   Shift_close_bars_session,           // Номер часового бара, на котором заканчивается сессия 

   STOP_LEVER=0;                       // Минимальное расстояние для TP и SL

   double Open_bars_session,           // Цена открытия первого бара сессии
   Close_bars_session,                 // Цена закрытия последнего бара сессии
   Vira_session,                       // Наибольшая цена за время сессии
   Total_TP=0,                         // Счетчик срабатываний тейк профитов
   Total_SL=0,                         // Счетчик срабатываний стоплоссов 
   Total_day=0,                        // Кол-во исследуемых дней при старте советника
   Total_SL_TP=0,                      // Счетчик пустых сессий              
   Maina_session;                      // Наименьшая цена за время сессии

   datetime Time_open_day,             // Время открытия i-того бара

   Time_open_session,                  // Время начала исследуемой сессии в формате datatime          
   Time_close_session;                 // Время закрытия исследуемой сессии в формате datatime 

   string String_open_H1;              // Время открытия первого часового бара в исследуемый день 
                                       // в формате строки "yyyy.mm.dd"                     
   bool   Session_buy=false,           // Флаг бычьей сессии
   Session_sell=false;                 // Флаг медвежьей сессии                    
   Symb=Symbol();                      // Название фин.инстр.
   STOP_LEVER=MarketInfo(Symb,MODE_STOPLEVEL);   //Минимальное расстояние для TP и SL

   for(int i=Day_kol_vo;i>0;i --) //Цикл перебора дневных таймфремов
     { //Открывающая скобка цикла переборов дневных баров
      Total_day++;                            //Счетчик кол-ва исследуемых дней 

      Time_open_day=iTime(Symb,PERIOD_D1,i); //Запрашиваем время открытия дневного i-того бара   
      Shift_open_H1=iBarShift(Symb,PERIOD_H1,Time_open_day,false); //Запрашиваем номер часового бара с
                                                                   //тем же временем открытия, что и дневной  

      String_open_H1=TimeToStr(Time_open_day,TIME_DATE);  // Преобразовываем время открытия
                                                          // первого часового бара в исследуемый день 
                                                          // из формата datatime в формат строки "yyyy.mm.dd"

      // Запрашиваем время начала исследуемой сессии в формате datatime 
      Time_open_session=StrToTime(String_open_H1+" "+Open_session); 

      // Запрашиваем номер часового бара, с которого начинается сессия 
      Shift_open_bars_session=iBarShift(Symb,PERIOD_H1,Time_open_session,false); 

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

      // Запрашиваем номер часового бара, на котором заканчивается сессия 
      Shift_close_bars_session=iBarShift(Symb,PERIOD_H1,Time_close_session,false); 

      // Запрашиваем цену открытия первого бара сессии
      Open_bars_session=iOpen(Symb,PERIOD_H1,Shift_open_bars_session); 

      // Запрашиваем цену закрытия последнего бара сессии 
      Close_bars_session=iClose(Symb,PERIOD_H1,Shift_close_bars_session); 

      Vira_session=iHigh(Symb,PERIOD_H1,
      iHighest(Symb,PERIOD_H1,MODE_HIGH,(Shift_open_bars_session-Shift_close_bars_session),Shift_close_bars_session));
      // Находим максимальную цену за время сессии

      Maina_session=iLow(Symb,PERIOD_H1,
      iLowest(Symb,PERIOD_H1,MODE_LOW,(Shift_open_bars_session-Shift_close_bars_session),Shift_close_bars_session));
      //Находим минимальную цену за время сессии

      if(Open_bars_session>Close_bars_session)
        {
         Session_buy=false;
         Session_sell=true;//Цена открытия больше цены закрытия,
                           //сессия -медвежья       
        }
      if(Open_bars_session<Close_bars_session)
        {
         Session_buy=true;
         Session_sell=false;//Цена открытия меньше цены закрытия,
                            //сессия -бычья 
        }
      if(Open_bars_session==Close_bars_session)
        {
         Session_buy=false;
         Session_sell=false;//Цена открытия равна цене закрытия,
                            //сессия -никакая 
        }
      int PEREBOR=0;                       //Счетчик часов (Проверка кода) 
      for(int j=Shift_close_bars_session;j>Shift_close_bars_session-Hour_kol_vo;j --)//Цикл перебора 
         //часовых тайфремов в i-тый день
        {  //Открывающая скобка цикла перебора часовых баров

         PEREBOR++;                           //Счетчик часов (Проверка кода)

         if(Session_buy==true && Session_sell==false) //Если сессия бычья
           {
            // если максимальная ена часового бара больше цены закрытия сессии плюс (Профит+Мин.растояние)
            if(iHigh(Symb,PERIOD_H1,j-PEREBOR)>(Close_bars_session+(Profit+STOP_LEVER)*Point))
              {
               Total_TP++;     //Срабатывает счетчик тейкпрофитов

               break;          //Прерывается цикл перебора часовых баров
              }
              // Если минимальная цена часового бара меньше минимальной цены за сессию
              if(iLow(Symb,PERIOD_H1,j-PEREBOR)<Maina_session)
            
              {
               Total_SL++;     //Срабатывает счетчик стоплоссов

               break;          //Прерывается цикл перебора часовых баров
              }

           }
         if(Session_buy==false && Session_sell==true) //Если сессия медвежья
           {
            //если максимальная цена часового бара больше максимальной цены за сессию
            if(iHigh(Symb,PERIOD_H1,j-PEREBOR)>Vira_session)
         
              {
               Total_SL++;     //Срабатывает счетчик стоплоссов

               break;          //Прерывается цикл перебора часовых баров
              }
            //если минимальная цена часового бара меньше цены закрытия сессии минус (Профит+Мин.растояние)
            if(iLow(Symb,PERIOD_H1,j-PEREBOR)<(Close_bars_session-(Profit+STOP_LEVER)*Point))
              {
               Total_TP++;     //Срабатывает счетчик тейкпрофитов

               break;          //Прерывается цикл перебора часовых баров
              }
           }
         if(Session_buy==false && Session_sell==false) //Если сессия никакая
           {
            Total_SL_TP++;     //Срабатывает счетчик 
            break;          //Прерывается цикл перебора часовых баров
           }

        } //Закрывающая скобка цикла перебора часовых баров
      double Pro_Total_TP=(Total_TP/Total_day)*100,//Вероятность срабатывания тейкпрофитов
      Pro_Total_SL=(Total_SL/Total_day)*100,//Вероятность срабатывания стоплоссов
      Pro_Total_SL_TP=(Total_SL_TP/Total_day)*100; //Вероятность пустых сессий 
      int
      Total_no=Total_day-Total_SL-Total_TP-Total_SL_TP; //Не сработал не ТР не СЛ
      double
      Pro_Total_no=(Total_no/Total_day)*100;            //Вероятность что не сработает не ТР не СЛ
      Comment("Проверенно ",Total_day," дней","\n",
              "Время открытия сессий  ",Open_session," Время закрытия сессий ",
              Close_session," Кол-во проверяемых часов после сессии ",Hour_kol_vo," Профит ",Profit,"\n",
              "Из них тейк профит срабатывал ",Total_TP," раз","\n",
              "Из них стоп лосс срабатывал ",Total_SL," раз","\n",
              "Из них пустых сессий было ",Total_SL_TP," раз","\n",
              "Не сработал не тейк профит, не стоп лосс ",Total_no," раз","\n",
              "Вероятность срабатывания тейк профитов ",Pro_Total_TP," %","\n",
              "Вероятность срабатывания стоп лоссов ",Pro_Total_SL," %","\n",
              "Вероятность пустых сессий ",Pro_Total_SL_TP," %","\n",
              "Вероятность не срабатывания не ТР, не СЛ ",Pro_Total_no," %");

     } //Закрывающая скобка цикла перебора дневных баров

   return(0);

  }                                        //-общая закрывающая скобка

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

STOP_LEVER – это минимальное расстояние, на котором вашим ДЦ разрешено ставить ордер от существующей цены по данной валютной паре. Запрашивается программно, самим ничего вводить не надо.

Реальный уровень Тейк Профита, задаваемый вами в эксперте с помощью параметра «Profit», всегда будет чуточку дальше от цены на величину STOP_LEVEL, для разных ДЦ и финансовых пар она разная. Сделано это для того, чтобы получить как можно более реальные результаты, ведь если вы, например, захотите выставить ордер по золоту с 5 пунктами профита (в реале), то это вряд ли вам удастся. Минимальное расстояние от цены для этого инструмента, которое я видел – это 50 пунктов.

Теперь о Стоп Лоссах. В принципе, можно просто посчитать вероятность срабатывания тейк профита при выставлении его в сторону движения цены, заданной во время сессии. Но это, согласитесь, как-то ненаучно и неполно. Не менее важно и интересно знать, сколько   ордеров мы бы закрыли не только с прибылью, но и с убытком.

Давайте посмотрим еще раз на картинку (рис 1). Из нее видно следующее. Если азиатская сессия в целом была бычья, то цена до следующей азиатской сессии не опускается ниже уровня минимальной цены за рассматриваемую сессию. На рис. 1 вертикальными линиями отмечена сессия 4 ноября 2009 года с 3.00 до 13.00. Видно, что в целом она бычья, т.е. цена открытия меньше цены закрытия, уровень Стоп Лосса – это минимальная цена за сессию. Если сессия медвежья, то уровень Стоп Лосса – это максимальная цена за сессию.

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

Итак, передаваемые в эксперт параметры (те, которые можно менять на вкладке "Свойства"):

Рис 2. Параметры эксперта

Open session – время открытия сесси. 

Close_session – время закрытия сессии.

Day_kol_vo – количество дней в глубину истории (т.е. если стоит цифра 50, то эксперт будет вести свои расчеты за 50 последних дней, слишком глубоко советую не копать).

Hour_kol_vo – количество часов. Этим параметром вы задаете количество часов, прошедших после окончания сессии, на которые эксперт будет смотреть. В прилагаемых далее данных я выставлял количество часов до следующей сессии. Если исследуем время с 3.00 до 13.00, то до следующей такой же сессии – 14 часов.

Profit расстояние в пунктах от цены на которой закончилась сессия. Уровень виртуального тейк профита.

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

Соответственно, для стоп лоссов – количество их срабатываний за исследуемое количество дней, деленное на количество этих дней, умноженное на 100.

Для пустых сессий расчет производится аналогично.

Еще пару слов по установке и работе самого эксперта. Сначала, как обычно, загружаем эксперта в папку экспертов и компилируем. Потом устанавливаем его на любой таймфрейм (предпочтительно на часовой), выставляем интересующее нас время и другие параметы, о которых говорилось выше, и разрешаем ему торговать. Никаких ставок он делать не будет (у него нет таких функций). Его задача —  просто выводить информацию в левый верхний угол  (сколько дней посчитано, какие у него стоят параметры, сколько раз сработал ТР, сколько SL, сколько было никаких сессий, с какой вероятностью срабатывал ТР, с какой — SL).

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

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

Ну а теперь, собственно, о том, зачем все это затевалось. Посмотрите на нижеследующую табличку. Составлялась она по данным эксперта 1-Session несколько дней назад, т.е. 10 ноября. Глубоко не копал, взял историю за последние 50 дней. Время для определения, какую ставку делать (покупать–продавать) бралось с 3.00-13.00 (этот промежуток полностью охватывает азиатскую сессию). С 3.00-9.00 мы наблюдали чистую Азию, без Европы, и с 9.00 до 13.00 — "параллельные выступления".

3.00-13.00

3.00-13.00

3.00-13.00

3.00-9.00

3.00-9.00

3.00-9.00

9.00-13.00

9.00-13.00

9.00-13.00

Профит-5

Профит-15
Профит-25
Профит-5
Профит-15
Профит-25
Профит-5
Профит-15
Профит-25
USDJPY Сработал тейк профит %
74
58
50
78
64
52
70
52
44
USDJPY Сработал стоп лосс %
24
36
44
22
36
48
30
48
56
USDJPY Сессия никакая %
2
2
2
0
0
0
0
0
0
USDJPY Ничего не сработало %
0
4
4
0
0
0
0
0
0
EURUSD Сработал тейк профит %
100
72
64
68
62
54
76
66
62
EURUSD Сработал стоп лосс %
0
28
36
32
38
46
24
34
38
EURUSD Сессия никакая %
0
0
0
0
0
0
0
0
0
EURUSD Ничего не сработало %
0
0
0
0
0
0
0
0
0
GBPJPY Сработал тейк профит %
72
62
54
72
66
50
78
64
56
GBPJPY Сработал стоп лосс %
28
34
42
28
34
50
22
34
42
GBPJPY Сессия никакая %
0
0
0
0
0
0
0
0
0
GBPJPY Ничего не сработало %
0
4
4
0
0
0
0
2
2
NZDUSD Сработал тейк профит %
80
66
56
74
58
50
68
58
46
NZDUSD Сработал стоп лосс %
20
34
42
24
40
48
30
40
52
NZDUSD Сессия никакая %
0
0
0
2
2
2
2
2
2
NZDUSD Ничего не сработало %
0
0
0
0
0
0
0
0
0

Таблица 2. Итоговая таблица вероятностей (%).

Как видите, тейк-профиты тоже были выставлены невысоко 5, 15 и 25 пунктов.

Выводы

Собственно из таблицы 2 видно, что разговоры о том, что «как торгуется Азиатская сессия, так пройдет и весь день» - никакой основы под собой не имеют, по крайней мере по этим четырем парам за последние 50 дней.

Вероятность срабатывания тейк профитов в 5 пунктов с вероятностью 60-70 % в данной ситуации я расматриваю как вероятность при подбрасывании монетки.

EURUSD — 100 % при 5 пунктах профита. То есть, если бы я последние 50 дней в 13.00 делал ставку, в зависимости от того, как торговалась Азия, с небольшим тейкпрофитом в 5 пунктов, то я бы всегда выигрывал. Что могу сказать — очень жаль что я этого не знал раньше. Хотя для пипсовщиков это советую использовать как дополнительную информацию, т.к. копание в более глубокую историю – 100 и более дней — дает не столь однозначные результаты.

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

Прикрепленные файлы – индикатор TradeSession.mq4 (может быть, кто-то тоже кто захочет разукрасить свой терминал) и сам эксперт 1- Session.mq4.