Распознаем образы ( риторическая тема ) - страница 9

 

Действительно, как заметил Debugger, помимо самих образов, интересна вероятность их завершения (или вероятность выхода из паттерна).

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

 

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

Т.е. с EWA имхо есть некотрые заморочки, поскольку существут досточно много трактовок определения начала/завершения волн разных уровней.

Лично мне ближе "по-духу" свечные паттерны и фигуры (пробои треугольников и т.п.), которые видят практически все. Хотя, по большому счету, тот же самый пробой треугольника думаю можно определить и в терминах EWA и в терминах свечных паттернов (например, NR4).

 
DDFedor:

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


Почему ключевым словом в названии темы является "риторический"

Образы->Паттерны->Только ЗигЗаг

А распознавание кусочно-линейного графика (кодирование векторов + фуззи выше/длиннее), массива из четырех ... короче свечей и их взаимного положения (ограниченное число комбинаций, особенно с тем же фуззи) и "образа броуновского движения" (типа черный квадрат - здесь была геометрическая фигура) это три совершенно разные вещи.

Да и то, что "образы ЗигЗага" более ... информативны тоже не факт.

А все почему - дистанционная коллективная работа АКА Лебедь (черный), рак и щука (не на "сц" )

;)

 

Распознавание паттернов с помощью зигзага не учитывает контекст. Из-за этого будет шум (1) - некоторые паттерны будут ложными.

Также некоторые паттерны не будут найдены из-за того, что зигзаг может отметить коррекционный участок. Лучи зигзага на коррекционном участке могут не учитываться алгоритмом поиска паттернов. Это также шум (2).

Необходима фильтрация точки входа после нахождения паттерна, чтобы отфильтровать шум (1). Фильтром могут быть, например, различные индикаторы...

Для устранения шума (2) необходимо изощряться при составлении алгоритма поиска паттернов. При этом также может возникнуть вариант шума (1). Назовем этот вариант шум (3).

Шум (1) можно попытаться сгладить попыткой создания волнового анализа, а это - на настоящий момент в большой степени субъективизм.

 
А есть какая нибудь статистика или работы что здесь рыба косяком ходит  . Автор топика понятно он на заказ работает,а  копать просто так потому что есть лопата .......
 
DDFedor:

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


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

 

extern double ExtDepth  = 12; // шаг зигзага
extern double Lot       = 1;  // лот
extern double Accuracy  = 95; // точность совпадения в %
extern int    SL_TP     = 2;  // соотношение SL к TP

double ZZ;

int start()
{
   double SL, TP, zz, zz0, zz1, zz2, zz3;
   bool BUY, SELL;
  
   for (int i=0; i<1000; i++) // ищем 4 точки зигзага
     {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, 5, 3, 0, i);
      if (zz!=0 && zz!=EMPTY_VALUE) 
        {
         if (zz0==0)           {zz0=zz; continue;} 
         if (zz1==0 && zz0!=0) {zz1=zz; continue;}
         if (zz2==0 && zz1!=0) {zz2=zz; continue;} 
         if (zz3==0 && zz2!=0) {zz3=zz; break;}    
        }
     }
  
  if (zz0!=0 && ZZ!=zz2) // если образовался новый луч ЗЗ 
    {
     if (zz2>zz1 && zz2>zz3) // если ЗЗ образовал /\-фигуру то проверяем точность совпадения в %
         {
         if ((zz2-zz1)/(zz2-zz3)*100>Accuracy && (zz2-zz1)/(zz2-zz3)*100<200-Accuracy) 
           // например если Accuracy = 98 то разность ног ЗЗ должна попадать в диапозон от 98% до 102%
           BUY = true; // если двойное дно найдено покупаем
         } 
    
     // Тоже самое для двойной вершины
     if (zz2<zz1 && zz2<zz3 && (zz2-zz1)/(zz2-zz3)*100>Accuracy && (zz2-zz1)/(zz2-zz3)*100<200-Accuracy) SELL = true;
     // Как видим все условие образования двойной вершины умещается в одну строчку :))
    }
   if ( BUY ) // покупаем
    {
     SL = zz1-Point;           // стоп ставим на дно
     TP = Ask+(Ask-SL)*SL_TP;  // т.п. в SL_TP раз больше чем с.л.
     SL = NormalizeDouble(SL, Digits);
     TP = NormalizeDouble(TP, Digits);
     OrderSend( Symbol(), OP_BUY, Lot, Ask, 20, SL, TP );
     ZZ=zz2; // запомним значения ЗЗ чтобы больше сделок на этой ноге не открывать
    }
  if ( SELL ) // продаем
    {
     SL = zz1+(Ask-Bid)+Point; // стоп ставим на вершину
     TP = Bid-(SL-Bid)*SL_TP;  // т.п. в SL_TP раз больше чем с.л.
     SL = NormalizeDouble(SL, Digits);
     TP = NormalizeDouble(TP, Digits);
     OrderSend(Symbol(), OP_SELL, Lot, Bid, 20, SL, TP );
     ZZ=zz2; // запомним значения ЗЗ чтобы больше сделок на этой ноге не открывать
    }
   return(0);
}
Файлы:
 
RomanS:


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


А дальше. :)

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

А если обзовете Ваш паттерн, например, ДВ (и оформите его в виде функции), потом "сколько-то там индейцев" (3И) и т.п., то из файла сможете вытащить данные типа "перед сигналами на покупку чаще бывали ДВ" или наоборот, "после ДВ чаще бывала продажа".

Именно увидев эти "чаще" я и ... охладел к ... "распознаванию".

ЗЫ. "Моя версия учителя"

extern int     PredictLeadB    = 5;     //Число баров "предсказания"
extern int     LevelTrend     = 60;     //Выше этого - "сильное движение"
extern int     LevelFlat      = 30;     //Выше этого - "так себе бвижение", а ниже - на заборе
extern double  LevelFC        = 2.0;    //Грубо говря скорость/просадка (из кода ясно)
    
. . .

  {//Содержимое "Trade"
   int BarHigh  = iHighest(NULL, 0, MODE_HIGH, pPredictLead, Shift - pPredictLead);
   int BarLow   = iLowest(NULL, 0, MODE_LOW, pPredictLead, Shift - pPredictLead);
   double fHigh = iHigh(NULL, 0, BarHigh);
   double fLow  = iLow(NULL, 0, BarLow);
   double dLow  = (fLow - cClose) / Point;
   double dHigh = (fHigh - cClose) / Point;
   double fLevelFC;

   if(MathAbs(dHigh) > MathAbs(dLow))
    if(dLow == 0.00) 
     if(dHigh > 0)
      fLevelFC = 9999;
     else
      fLevelFC = -9999;
    else
     fLevelFC = dHigh / dLow;
   else
    if(dHigh == 0.00) 
     if(dLow > 0)
      fLevelFC = 9999;
     else
      fLevelFC = -9999;
    else
     fLevelFC = dLow / dHigh; 

   int signalTrade = 0;
   int fBar = Shift;
   if(dHigh > pLevelTrend && MathAbs(fLevelFC) > pLevelFC)
   {
    signalTrade = 2;
    fBar = BarHigh;
   }
   if(dLow < -1 * pLevelTrend && MathAbs(fLevelFC) > pLevelFC)
   {
    signalTrade = -2;
    fBar = BarLow;
   }
   if(dHigh > pLevelFlat && dLow > -1 * pLevelFlat && signalTrade == 0)
   {
    signalTrade = 1;
    fBar = BarHigh;
   }
   if(dLow < -1 * pLevelFlat && dHigh < pLevelFlat && signalTrade == 0)
   { 
    signalTrade = -1;
    fBar = BarLow;
   }
. . .
ФилеВрите(кодПаттерна, signalTrade);

В таком случае (для подобного "учителя"), сделав циклы по внешним переменным, (что у меня и было в коде, поэтому переменные имеют другие названия), можно будет оценить не только сам факт "предугадывания" сигнала, но и некоторые его качественные характеристики.

Главное помнить, что "эта" наука на то и лже (в месте, которое зовется "хфорекс"!!!), что "трисигмы" не катят ;)

ЗЫ. Shift - это как раз для скрипта - на Shift'вом баре в прошлом "распознаем" паттерн, а в будущее от него (Shift'вого бара) - оцениваем сигнал.

 
gip:
Определить удачный он или нет, я обычно могу примерно за двое суток. Для начала достаточно простого словесного описания.

Величие зашкаливает

 
hhohholl:

Величие зашкаливает


  Что к чему? Какое отношение имеет величие к определению по методике результативности паттерна?

Или ты думаешь, что простое тестирование может хоть как-то сравниться с обработкой в экспертной системе? 

 
gip:


  Что к чему? Какое отношение имеет величие к определению по методике результативности паттерна?

Или ты думаешь, что простое тестирование может хоть как-то сравниться с обработкой в экспертной системе? 

Вадим, что подразумеваете под "экспертной системой", что она умеет?
Причина обращения: