Recognising images ( rhetorical theme ) - page 9

 

Indeed, as Debugger pointed out, in addition to the patterns themselves, the probability of pattern completion (or the probability of pattern exit) is interesting.

The classification of patterns is quite broad, so first we should decide which patterns we want to consider here (wave patterns, candlestick patterns, shapes, ...).

 

It seems to me that it is better to analyse the patterns that most market participants see and interpret in the same way.

I.e. with EWA imho there are some difficulties, because there are quite a lot of interpretations of determining the beginning/end of waves of different levels.

Personally, I prefer "in spirit" candlestick patterns and figures (breakdowns of triangles, etc.), that practically everyone can see. But I think the same break of a triangle can be determined in terms of EWA and candlestick patterns (for example, NR4).

 
DDFedor:

I have a suggestion. maybe someone would be willing to post a pattern for dissection (description)? a simple one, but sufficient enough to show by example how to find (define) the pattern itself, how to find confirmations of the pattern, how to implement the signal(s). it is possible that considering such an example in a "live broadcast" may move someone to move on.


Why the key word in the topic title is "rhetorical"

Images->Patterns->ZigZag Only

And recognising a piecewise linear graph (vector coding + fuzzy above/longer), an array of four ... shorter candlesticks and their mutual position (limited number of combinations, especially with the same fuzzy) and "Brownian motion image" (like a black square - here was a geometric figure) are three completely different things.

And the fact that "ZigZag images" are more ... informative is not a fact either.

And all why - remote collective work AKA Swan (black), crawfish and pike (not on "ss" )

;)

 

Pattern recognition with a zigzag does not take context into account. Because of this there will be noise (1) - some patterns will be false.

Also, some patterns will not be found because the zigzag may mark a correction section. The zigzag rays in the correction area may not be taken into account by the pattern search algorithm. This is also noise (2).

It is necessary to filter the entry point after finding the pattern to filter out the noise (1). The filter can be, for example, various indicators...

In order to eliminate noise (2) it is necessary to elaborate the pattern finding algorithm. In this case a variant of noise (1) may also occur. Let's call this variant noise (3).

Noise (1) can be smoothed by trying to create a wave analysis, which at the moment is very subjective.

 
Is there any statistics or work that fish are shoaling here? The author of this topic understandably works on commission, but he just digs because he has a shovel .......
 
DDFedor:

I have a suggestion. perhaps someone would be willing to post a pattern for dissection (description)? a simple one, but enough to show by example how to find (define) the pattern itself, how to find confirmations of the pattern, how to implement the signal(s). it is possible that consideration of such an example in a "live broadcast" may move someone to move on.


a simple, I would even say, primitive algorithm for finding a double top (bottom) do not kick me for the code, I'm just learning, I'm putting out the code just to share the algorithm, it is interesting to know how someone finds these tops.

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);
}
Files:
 
RomanS:


I would even say a primitive algorithm for finding a double top (bottom), don't blame me for the code, I am just learning, I am just sharing the algorithm, it is interesting to know how someone finds these tops.


And then. :)

I.e. you insert your fragment into the script. There you also insert a "teacher" looking into the future and, by running through the history, create a file containing "Pattern - Teacher Signal". After that, in Excel, see with what frequency after the pattern what signals appeared.

And if you enumerate your pattern, for example, DV (and form it as a function), then "some Indians" (3I), etc., from the file you can pull out data such as "there were more DV before buying signals" or vice versa, "there were more sales after DV".

It was seeing these "more often" that made me ... ... cooled down to ... "recognition".

ZS. "My version of the teacher".

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);

In that case (for such a "teacher"), by making loops on external variables, (which is what I had in my code, so variables have other names), it will be possible to evaluate not only the fact of "prediction" of the signal, but also some of its qualitative characteristics.

The main thing to remember is that "this" science is false (in a place called "xforex"!!!), that "trisigmas" don't roll ;)

SZY. Shift - it's just for the script - on Shift's bar in the past we "recognize" a pattern, and in the future from it (Shift's bar) - we evaluate the signal.

 
gip:
I can usually tell if it's successful or not in about two days. A simple verbal description is enough to get you started.

Greatness is off the charts.

 
hhohholl:

Greatness is off the charts


What to what? What does greatness have to do with determining pattern performance by methodology?

Or do you think that simple testing can in any way compare with processing in an expert system?

 
gip:


What to what? What does greatness have to do with determining by method the effectiveness of a pattern?

Or do you think that simple testing can in any way compare to processing in the expert system?

Vadim, what do you mean by "expert system", what can it do?
Reason: