Закономерности движений цен: Часть 1. Ориентация цены - страница 8

 
tara:


Сначала определиться бы с тем, что есть канал. Дальше - все просто:)


Как понял в коде задаём начальный и конечный бар и наклон цены и ищем максимально-удалённые цены от данного наклона. Это конечно самый простой вариант. По моему определению канал существует если можно найти прямую линию, с которой цена касалась (не пересекаясь) по крайней мере 3 раза. Почему именно 3 раза? Потому что 2 касания значения не имеют (через 2 любые точки всегда можно провести прямую). Эта прямая может быть либо уровнем поддержки (цена верху) или сопротивления (цена внизу). Наклон может быть любым.
 
// Поиск ближайшей точки пробоя линии
void fBreakPoint(string Name                 // Имя пробоя
                ,int Bar1,double Price1      // Начать поиск
                ,double Speed                // Наклон линии
                ,int Bar2                    // Закончить поиск
                ,int& Bar,double& Price) {   // Пробой линии
   Bar=LastBar-1;
   Price=0;
   datetime Time1=Time[Bar1],
            Time2=Time[Bar2];
   if( Bar1<LastBar || Bar2<LastBar || Price1<Zero ) {
      if( РежимОтладки ) Print("***   "+Name+" - параметры пробоя: "
                    +DoubleToStr(Price1,Digits)+" ("+Bar1+"/"+TimeToStr(Time1)
                                            +")...("+Bar2+"/"+TimeToStr(Time2)+")");
      return;
   }
   int Step;
   double H, L, P;
   if( Bar2>Bar1 ) Step=1; else Step=-1;
   if( High[Bar1]-Price1>Zero
    && Price1-Low[Bar1]>Zero ) {             // Первый бар
      Bar=Bar1;
      Price=Price1;
      return;
   }
   while( Bar1!=Bar2 ) {
      H=High[Bar1];                          // Предыдущий бар
      L=Low[Bar1];
      P=Price1;
      Price1-=Step*Speed;                    // Текущий бар
      Bar1+=Step;
      if( ( High[Bar1]-Price1>Zero && P-L>Zero )
       || ( Price1-Low[Bar1]> Zero && H-P>Zero ) ) {
         Bar=Bar1;
         Price=Price1;
         return;
   }  }
   return;
}

Определение начала и окончания канала:

 
gpwr:

Как понял в коде задаём начальный и конечный бар и наклон цены и ищем максимально-удалённые цены от данного наклона. Это конечно самый простой вариант. По моему определению канал существует если можно найти прямую линию, с которой цена касалась (не пересекаясь) по крайней мере 3 раза. Почему именно 3 раза? Потому что 2 касания значения не имеют (через 2 любые точки всегда можно провести прямую). Эта прямая может быть либо уровнем поддержки (цена верху) или сопротивления (цена внизу). Наклон может быть любым.

Не люблю конкретных чисел, когда речь идет о закономерностях.

Мой основной инструмент - касательные. Как раз две точки получаются в нашем случае :(

 
Спать ушел. У нас уже за полночь:)
 
alsu:

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

С практической стороны, можно посмотреть на второй закон чуть по-другому: если мы все же фиксируем уменьшение энтропии в некий момент времени (например когда, как в данном случае, видим раскачку), то это означает, что система испытывает внешнее воздействие. Сможем максимально быстро выяснить, в какую сторону - получим приз)


на случайных будет, если сгенерировать ряд без эффектов волатильности. А если случайный ряд получить из реального сохранив волатильность, то будет так же как и для исходного. Т.е. для каждого бара с вероятностью 0.5 либо оставляем его в неизменном виде, либо зеркально отражаем.
 
Avals:

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


подкорректировал скрипт из первого поста, чтобы он считал на случайных котирах (зеркальное отображение бара с вероятностью 0.5). Тоже получаются отношения числа внутренних и внешних больше 1, но стабильно меньше чем на реальных барах.

Может в скрипте ошибся:

// Скрипт для подсчёта доли внешних и внутренних бар //
#property  copyright "Copyright © Svinotavr-2000"
#property  link      "DmitriyN"

int start()
 {
   MathSrand(TimeLocal());
   double n;                // Количество бар всего, шт
   double KolVneshBar;      // Количество внешних бар, шт
   double KolVnutrBar;      // Количество внутренних бар, шт
   double ProcentVneshBar;  // Процент внешних бар, %
   double ProcentVnutrBar;  // Процент внутренних бар, %
   double OtnoshVnutKVnesh; // Отношение числа внутренних бар к числу внешних бар, раз
   double H,L,pH,pL;
   // Берём число бар на единицу меньшее, чем всего
   n=Bars-1; 
   double lastCl=Close[Bars];
   // Цикл по всем барам
        for(int j = n; j > 0; j--)
        {      
              int rnd=MathRand();
              if (rnd>=16384) bool zerk=true; else zerk=false;
              pH=H;
              pL=L;
              if (!zerk){
                H=lastCl+(High[j]-Close[j+1]);
                L=lastCl+(Low[j]-Close[j+1]);
                lastCl=lastCl+(Close[j]-Close[j+1]);
              } else {
                H=lastCl-(Low[j]-Close[j+1]);
                L=lastCl-(High[j]-Close[j+1]);
                lastCl=lastCl-(Close[j]-Close[j+1]);
              }
               // Считаем количество внутренних бар
               if ((H < pH) && (L > pL))
               {
               KolVnutrBar=KolVnutrBar+1;
               }  
               // Считаем количество внешних бар               
               if ((H > pH) && (L < pL))
               {
               KolVneshBar=KolVneshBar+1;
               
               }      
         }
  // Считаем отношение числа внутренних бар к числу внешних бар
  OtnoshVnutKVnesh=KolVnutrBar/KolVneshBar;
  // Переводим в проценты
  ProcentVneshBar=KolVneshBar/n*100;
  ProcentVnutrBar=KolVnutrBar/n*100;
  // Формируем строки для печати
   string S0 = "\n" + "=============== Результаты расчётов ===============" + "\n" + "\n";  
   string S1 = "Исследовано бар = " + DoubleToStr(n,0)+ " шт" + "\n"; 
   string S2 = "Процент внешних бар = " + DoubleToStr(ProcentVneshBar,3) +" %" + "\n"; 
   string S3 = "Процент внутренних бар = " + DoubleToStr(ProcentVnutrBar,3)+ " %" +"\n";
   string S4 = "Отношение числа внутренних бар к числу внешних бар = " + DoubleToStr(OtnoshVnutKVnesh,2);
  // Выводим на экран     
   Comment(S0, S1, S2, S3, S4);          
 }
 

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

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

Основной вопрос - это какими прогнозирующими свойствами обладает Ваша фигура. Например, голова и плечи - чисто прогнозирующая фигура: пробили правое плечо - пошли дальше (скорее всего, причем не известно вероятность этого "скорее").

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

 
faa1947:

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

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

Основной вопрос - это какими прогнозирующими свойствами обладает Ваша фигура. Например, голова и плечи - чисто прогнозирующая фигура: пробили правое плечо - пошли дальше (скорее всего, причем не известно вероятность этого "скорее").

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


А как вы можете быть уверены в том, что сделают в след. минуту миллионы терминалов?
 
faa1947: Нас, на этом сайте, интересует только прогноз - все остальное представляет чисто спортивный интерес.

Вас тогда надо идти в Центр... гидромемет который... там прогнозы дают... или сюда:


всё таки большой, а в сказки верит :-)

 

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

Расширение диапазона: 89274(9,55%)
Сужение диапазона: 89494(9,58%)

Расширение диапазона: 5416(9,44%)
Сужение диапазона: 5550(9,67%)

Расширение диапазона: 21299(9,6%)
Сужение диапазона: 21362(9,63%)

Расширение диапазона: 12519(9,55%)
Сужение диапозона: 12423(9,48%)

Расширение диапазона: 21098(9,51%)
Сужение диапазона: 21193(9,56%)

Расширение диапазона: 16863(9,52%)
Сужение диапазона: 16974(9,58%)

Avals:

это закономерность волатильности: медленное затухание после всплеска и в результате образуется несколько внутренних баров; быстрый рост - часто за один бар и соответственно один внешний бар образуется


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

А вот тот же алгоритм для рынка РТС:

Расширение диапазона: 10597(7,67%)
Сужение диапазона: 18714(13,55%)

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