Склейки фьючерсов - поиск швов

 

Для тестирования советника требуется избавиться от швов на склейках фьючерсов, в частности по Si.

Как узнать даты склеек, что б их исключить?

По идеи это день экспирации - но где есть список всех дней экспирации? Может можно это как то программно нащупать, что б руками не собирать информацию?


 

Вот по Si собрал http://www.moex.com/ru/contract.aspx?code=Si-12.17

Год/Квартал36912
2012 15.03.2012 15.06.2012 17.09.2012 17.12.2012
2013 15.03.2013 17.06.2013 16.09.2013 16.12.2013
2014 17.03.2014 16.06.2014 15.09.2014 15.12.2014
2015 16.03.2015 15.06.2015 15.09.2015 15.12.2015
2016 15.03.2016 15.06.2016 15.09.2016 15.12.2016
2017 16.03.2017 15.06.2017 21.09.2017 21.12.2017


Как лучше исключать эти даты?

Московская Биржа - Основные параметры срочного контракта
  • www.moex.com
Код контракта Цена Изменение, % Объем, ₽ Объем, контр. Откр. позиции Изменение Расчетная цена Исполнение Открытые позиции * Физические лица Юридические лица Итого Длинные Короткие Длинные Короткие Итоги торгов
 

Реализовал так


void OnTick()
  {
//--Исключаем экспирацию по Si
   if(Symbol()=="Si Splice")
     {
      datetime  Open_timeExp=iTime(_Symbol,0,0);
      MqlDateTime strExp;
      TimeToStruct(Open_timeExp,strExp);
      strExp.hour=0;
      strExp.min=0;
      strExp.sec=0;
      for(int i=0;i<23; i++)
        {
         if(StructToTime(strExp)==StringToTime(ExpSi(i)))
           {
            BuyNow=false;
            SellNow=false;
            break;
           }
        }
     }
  }
//////
//+------------------------------------------------------------------+
//|Массив с датами экспирации опциона Si                             |
//+------------------------------------------------------------------+
string ExpSi(int i)
  {
   string Exp[24]=
     {
      "15.03.2012 0:00",
      "15.03.2013 0:00",
      "17.03.2014 0:00",
      "16.03.2015 0:00",
      "15.03.2016 0:00",
      "16.03.2017 0:00",
      "15.06.2012 0:00",
      "17.06.2013 0:00",
      "16.06.2014 0:00",
      "15.06.2015 0:00",
      "15.06.2016 0:00",
      "15.06.2017 0:00",
      "17.09.2012 0:00",
      "16.09.2013 0:00",
      "15.09.2014 0:00",
      "15.09.2015 0:00",
      "15.09.2016 0:00",
      "21.09.2017 0:00",
      "17.12.2012 0:00",
      "16.12.2013 0:00",
      "15.12.2014 0:00",
      "15.12.2015 0:00",
      "15.12.2016 0:00",
      "21.12.2017 0:00"
     };

   return (Exp[i] );
  }
//+------------------------------------------------------------------+

Может есть более рациональный способ?

 
Aleksey Vyazmikin:

Для тестирования советника требуется избавиться от швов на склейках фьючерсов, в частности по Si.

Как узнать даты склеек, что б их исключить?

По идеи это день экспирации - но где есть список всех дней экспирации? Может можно это как то программно нащупать, что б руками не собирать информацию?


Зачем гадать?

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

 
pivomoe:

Зачем гадать?

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

 

Что-то я не понял Вашей логики...

Гадать я не предлагаю - даты экспирации собрал по Si.


 
Aleksey Vyazmikin:

 

Что-то я не понял Вашей логики...

Гадать я не предлагаю - даты экспирации собрал по Si.


от куда информация о том, что склейка происходит в последний день обращения ? Насколько я понял ты думаешь(или знаешь ) , что до какого то момента времени склейка состоит из одного фьючерса, а потом из другого. А если нет ? Откуда такая информация?
 
Кстати в свойствах символа есть последний день обращения. К нему можно получить доступ из советника.
 
pivomoe:
Кстати в свойствах символа есть последний день обращения. К нему можно получить доступ из советника.

есть, но она бесполезна для исключения склеечных спайков

например у текущего Si-9.17 это 21.09.2017


и исключать лучше не только 15-е число, но и 16-е, имхо

 
Aleksey Vyazmikin:

Реализовал так


Может есть более рациональный способ?


полагаю, можно просто исключать с 14-го по 17-е числа 3-го, 6-го, 9-го и 12-го месяцев

 
pivomoe:
от куда информация о том, что склейка происходит в последний день обращения ? Насколько я понял ты думаешь(или знаешь ) , что до какого то момента времени склейка состоит из одного фьючерса, а потом из другого. А если нет ? Откуда такая информация?

 

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

 
pivomoe:
Кстати в свойствах символа есть последний день обращения. К нему можно получить доступ из советника.

 

Как найти старые фьючерсы - в инструментах их нет.
Причина обращения: