Kill Gap - "склейка" котировок

 
Вы никогда не ловили себя на желании взять ножницы, вырезать послепраздничный (или приключившийся после выходных) гэп и склеить котировки? )))
Индикаторы, попав на такой гэп (а это м.б. сотня пп. и более), впадают в прострацию (аж стрелки гнутся) на длину своего расчета (для индикаторов с КИХ). Для индикаторов с БИХ все м.б. гораздо хуже. Короче, пока "стрелки распрямятся" и индикаторы станут адекватными, они наваляют кучу левых сигналов для экспертов. Оно надо?

Вот что получилось с "ножницами и клеем". На чарте подцеплены МА, RSI и ATR в двух вариантах - c гэпом (красный) и без (синий). Параметр Gap - порог, за которым разрыв между Open и предыдущим Close будет идентифицирован как гэп.


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

Естественно, гэп гэпу рознь. Есть гэпы, которые несут в себе полезную информацию, которая м.б. обработана индикаторами, о чем подробно написано у Швагера, например. Я же имею ввиду "гэпища", которые образовались или из-за технических причин - не все ДЦ обеспечивают непрерывность котировок, или же из-за объективных - у "них" праздники, выходные, а что-то произошло, и т.п., и размер гэпа превышает разумный для внутридневного тайм-фрейма.

Ну, вот еще полосы Боллинджера в обычном и безгэповом исполнении. // Ха, с убитым гэпом их, наверно, стоит называть "полосы Диллинджера" )))
Внизу, для справки стандартная девиация (Болинжер ведь на основе станд.девиации строится).
 
Что тут можно сказать? Жжоте, батенька, как обычно в принципе.
Не идеально, но однозначно лучше, чем по умолчанию.
 
Ну так в индюках надо заменить Close[i+1] на Open[i], и все нормализуется.
 
leman >>:
Ну так в индюках надо заменить Close[i+1] на Open[i], и все нормализуется.

Мдя? А остальные ценовые массивы как замените - High[], Low[], Close[]? Там еще много "камней". Смещение куда денете? Сдвиг уже посчитанного безгэпового результата к ценам, например?

Впрочем, все уже реализовано. И даже не вчера.

Любой индикатор можно за пару минут переделать в "безгэповый". Вот рыба:

//........................................
//........................................
extern int Gap=0; // порог идентификации гэпа в пп.
   double gp;

double   ExtMapBuffer[],
         // массивы буферов безгэповых котировок
         CloseG[],
         HighG[],
         LowG[],
         OpenG[];

// инициализация
void init() { 
   //........................................
   //........................................
   gp=Gap*Point;
   // буферы безгэповых котировок
   SetIndexBuffer(1,CloseG); 
   SetIndexBuffer(2,HighG); 
   SetIndexBuffer(3,LowG); 
   SetIndexBuffer(4,OpenG); 
  }

void start() {
   //........................................
   //........................................
   // цикл пересчета
   for(int i=limit; i>=0; i--) { 
      double base=Gap(limit,i); // создание безгэповых котировок и вычисление смещения
      //........................................
      //........................................
      //double ind= 
      //ExtMapBuffer[]=ind-base; // для окна инструмена
      //ExtMapBuffer[]=ind;      // для собственного подокна
     }   
  }

// Kill Gap )))
double Gap(int limit, int i) {
   static double base; // смещение, корректирующая гэп
   double gap=Close[i+1]-Open[i]; // гэп
   if(MathAbs(gap)>gp) base+=gap; // вычисление смещения
   if(i==limit && i>1) base=0; // инициализация
   if(Gap==0) base=0; // стандартный режим
   // заполнение буферов безгповыми котировками
   CloseG[i]=base+Close[i];
   HighG[i] =base+High[i];
   LowG[i]  =base+Low[i];
   OpenG[i]  =base+Open[i];
   return(base);
  }
Достаточно заменить в индикаторе все Close на CloseG (и если необходимо для расчета остальные обращения к цен.массивам), вставить нужные куски кода и все.
===
Хотя в нектр. случаях можно обойтись без дополнительных массивов. Вот как, например, в MACD - см. аттач.
Файлы:
imacd.g.mq4  3 kb
 
Svinozavr >>:

Мдя? А остальные ценовые массивы как замените - High[], Low[], Close[]? Там еще много "камней". Смещение куда денете? Сдвиг уже посчитанного безгэпового результата к ценам, например?

Впрочем, все уже реализовано. И даже не вчера.

Любой индикатор можно за пару минут переделать в "безгэповый". Вот рыба:

Достаточно заменить в индикаторе все Close на CloseG (и если необходимо для расчета остальные обращения к цен.массивам), вставить нужные куски кода и все.

Возможно, но в RSI не учитываются H и L, мне кажется Вы усложняете вопрос. ИМХО.

 
leman >>:

Возможно, но в RSI не учитываются H и L, мне кажется Вы усложняете вопрос. ИМХО.

Выше добавил, пока вы отвечали.

Но в общем случае, нужны ВСЕ котировки. Например, для Stochastic'а, нужны 3 из 4-х. И т.п. Для параболика - 2. Я просто сделал общую рыбу.

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

 
Svinozavr >>:

Мдя? А остальные ценовые массивы как замените

баз тиков - сложно. слишком мало данных.

 
JavaDev >>:

баз тиков - сложно. слишком мало данных.

Мало для чего?

 
Svinozavr >>:

Выше добавил, пока вы отвечали.

Но в общем случае, нужны ВСЕ котировки. Например, для Stochastic'а, нужны 3 из 4-х. И т.п. Для параболика - 2. Я просто сделал общую рыбу.

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



Я согласен, конечно в разных индикаторах по разному. Надо с этим разобраться на досуге.

 
для "реалтайма" - для генерации баров, прогноза тенденций, анализа работы эксперта....
бары хороши только для визуального анализа, для компа этого или слишком много или слишком мало...
Случайный отскок в начале/конце бара даёт совсем другое,чем должно быть... и это не редкость...
 
JavaDev >>:
для "реалтайма" - для генерации баров, прогноза тенденций, анализа работы эксперта....
бары хороши только для визуального анализа, для компа этого или слишком много или слишком мало...
Случайный отскок в начале/конце бара даёт совсем другое,чем должно быть... и это не редкость...

Не вполне понял. Индикаторы работают в реал-тайме и на тестере.

Используемое предыдущее Close относится уже к истории - оно было перед праздниками или выходными. А текущее Open (на открытии после перерыва) по определению неизменно. Естественно, от докачки котировок никто не застрахован, но это относится ко всем без исключения индикаторам.

Не вижу проблемы.

Причина обращения: