Les régularités des mouvements de prix : 1ère partie. Orientation des prix

 

J'ai décidé de déplacer les messages dans un fil séparé...

1. Tout a commencé lorsque je relisais le livre de Williams et que j'ai décidé de vérifier la part des barres intérieures sur le graphique. J'ai ensuite décidé de comparer la portion des barres intérieures et extérieures et, en conséquence, j'ai détecté le schéma suivant : la portion des barres intérieures est plus élevée que la portion des barres extérieures.

Laissez-moi vous rappeler ce que sont les barres intérieures et extérieures :

Dans la capture d'écran ci-dessus : la barre B de la barre A est externe et la barre F de la barre R est interne.

Un script simple a été écrit pour la recherche dans ce domaine :

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

int start()
 {
   double n;                // Количество бар всего, шт
   double KolVneshBar;      // Количество внешних бар, шт
   double KolVnutrBar;      // Количество внутренних бар, шт
   double ProcentVneshBar;  // Процент внешних бар, %
   double ProcentVnutrBar;  // Процент внутренних бар, %
   double OtnoshVnutKVnesh; // Отношение числа внутренних бар к числу внешних бар, раз
   // Берём число бар на единицу меньшее, чем всего
   n=Bars-1; 
   // Цикл по всем барам
        for(int j = 0; j < n; j++)
        {      
               // Считаем количество внешних бар
               if ((High[j+1] < High[j]) && (Low[j+1] > Low[j]))
               {
               KolVneshBar=KolVneshBar+1;
               }  
               // Считаем количество внутренних бар
               if ((High[j+1] > High[j]) && (Low[j+1] < Low[j]))
               {
               KolVnutrBar=KolVnutrBar+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);          
 }

Exemple de résultat du script :

2. Puis, en suivant cette logique, j'ai décidé d'étudier la relation entre les triangles internes et externes. J'ai appelé les triangles internes "fading" et les triangles externes "flaring".
À cette fin, j'ai écrit un script simple :

// Скрипт для подсчёта соотношения чисел затухающих и разгорающихся треугольников //
// Skript OtnoshZatRazTreug, июнь 2012
// Примечание: скрипт может немного подвисать на ТФ M1.
#property  copyright "Copyright © Svinotavr-2000"
#property  link      "DmitriyN"

int start()
 { 
   // Декларация
   double DliPer;           // Длительность периода исследования, лет
   double n;                // Количество бар, шт
   double KolZatTre;        // Количество затухающих треугольников, шт
   double KolRazTre;        // Количество разгорающихся треугольников, шт   
   double OtnoshZatRaz;     // Отношение числа затухающих треугольников к числу разгорающихся, раз
   double Pogreshnost;      // Погрешность исследования, %
   // Берём число бар на 5 меньшее, чем всего
   n=Bars-5; 
        // Цикл по всем барам
        for(int j = 0; j < n; j++)
        {             
               // Считаем количество ЗАТУХАЮЩИХ треугольников    ===========              
               
               // Проверяем, являются ли High баров после начального бара (j+5) 
               // _ меньше либо равными High начального бара (j+5)
               if (High[j+5] >= High[j+4]) {
               if (High[j+5] >= High[j+3]) {
               if (High[j+5] >= High[j+2]) {
               if (High[j+5] >= High[j+1]) {
               if (High[j+5] >= High[j])   {
               // Проверяем, являются ли Low баров после начального бара (j+5) 
               // _ больше либо равными Low начального бара (j+5)
               if (Low[j+5] <= Low[j+4])   {
               if (Low[j+5] <= Low[j+3])   {
               if (Low[j+5] <= Low[j+2])   {
               if (Low[j+5] <= Low[j+1])   {
               if (Low[j+5] <= Low[j])     {
               KolZatTre=KolZatTre+1;               
               }}}}}  }}}}}
               
               // Считаем количество РАЗГОРАЮЩИХСЯ треугольников ===========                
               
               // Проверяем, являются ли High баров после начального бара (j+5) 
               // _ больше либо равными High начального бара (j+5)
               if (High[j+5] <= High[j+4]) {
               if (High[j+5] <= High[j+3]) {
               if (High[j+5] <= High[j+2]) {
               if (High[j+5] <= High[j+1]) {
               if (High[j+5] <= High[j])   {
               // Проверяем, являются ли Low баров после начального бара (j+5) 
               // _ меньше либо равными Low начального бара (j+5)
               if (Low[j+5] >= Low[j+4])   {
               if (Low[j+5] >= Low[j+3])   {
               if (Low[j+5] >= Low[j+2])   {
               if (Low[j+5] >= Low[j+1])   {
               if (Low[j+5] >= Low[j])     {
               KolRazTre=KolRazTre+1;               
               }}}}}  }}}}}                          
         }
  // Вычисляем длительность периода истории исследования (календарный)
  DliPer = n*Period()/(1440*365);         
  // Считаем отношение числа затухающих треугольников к разгорающимся
  OtnoshZatRaz=KolZatTre/KolRazTre;
  // Вычисляем погрешность расчётов
  Pogreshnost=(1/(KolZatTre) + 1/(KolRazTre))*100;
  // Формируем строки для печати
   string S0 = "\n" + "================= Результаты расчётов =================" + "\n" + "\n";  
   string S1 = "Исследовано бар = " + DoubleToStr(n,0)+ " шт" + "\n";
   string S2 = "Длительность периода исследования = " + DoubleToStr(DliPer,1)+ " лет" + "\n";
   string S3 = "Погрешность расчётов = " + DoubleToStr(Pogreshnost,3)+ " %"+ "\n";  
   string S4 = "Отношение числа затухающих треугольников к разгорающимся = " + DoubleToStr(OtnoshZatRaz,3)+ " раз";
  // Выводим строки на экран     
   Comment(S0, S1, S2, S3, S4);          
 }

Le script ci-dessus a analysé des triangles de taille six (6) barres. Dans ce script, une façon très simple de calculer l'erreur de calcul a été ajoutée.

Un exemple du résultat du script :

Laissez-moi vous rappeler ce que sont les triangles évasés et évasés. Exemple d'un triangle estompé (1) et d'un triangle évasé (2) :

1). 2).

 

3. Ensuite, j'ai décidé d'augmenter le nombre de barres dans les triangles à 7, donc j'ai refait un peu le script :

// Скрипт для подсчёта соотношения чисел затухающих и разгорающихся треугольников //
// Skript OtnoshZatRazTreug, июнь 2012
// Примечание: скрипт может немного подвисать на ТФ M1.
#property  copyright "Copyright © Svinotavr-2000"
#property  link      "DmitriyN"
//#property show_inputs     

int start()
 { 
   // Декларация
   double DliPer;           // Длительность периода исследования, лет
   double n;                // Количество бар, шт
   double KolZatTre;        // Количество затухающих треугольников, шт
   double KolRazTre;        // Количество разгорающихся треугольников, шт   
   double OtnoshZatRaz;     // Отношение числа затухающих треугольников к числу разгорающихся, раз
   double Pogreshnost;      // Погрешность исследования, %
   // Берём число бар на 6 меньшее, чем всего
   n=Bars-6; 
        // Цикл по всем барам
        for(int j = 0; j < n; j++)
        {             
               // Считаем количество ЗАТУХАЮЩИХ треугольников    ===========              
               
               // Проверяем, являются ли High баров после начального бара (j+5) 
               // _ меньше либо равными High начального бара (j+5)
               if (High[j+6] >= High[j+5]) {
               if (High[j+6] >= High[j+4]) {
               if (High[j+6] >= High[j+3]) {
               if (High[j+6] >= High[j+2]) {
               if (High[j+6] >= High[j+1]) {
               if (High[j+6] >= High[j])   {
               // Проверяем, являются ли Low баров после начального бара (j+5) 
               // _ больше либо равными Low начального бара (j+5)
               if (Low[j+6] <= Low[j+5])   {
               if (Low[j+6] <= Low[j+4])   {
               if (Low[j+6] <= Low[j+3])   {
               if (Low[j+6] <= Low[j+2])   {
               if (Low[j+6] <= Low[j+1])   {
               if (Low[j+6] <= Low[j])     {
               KolZatTre=KolZatTre+1;               
               }}}}}}  }}}}}}
               
               // Считаем количество РАЗГОРАЮЩИХСЯ треугольников ===========                
               
               // Проверяем, являются ли High баров после начального бара (j+5) 
               // _ больше либо равными High начального бара (j+5)
               if (High[j+6] <= High[j+5]) {
               if (High[j+6] <= High[j+4]) {
               if (High[j+6] <= High[j+3]) {
               if (High[j+6] <= High[j+2]) {
               if (High[j+6] <= High[j+1]) {
               if (High[j+6] <= High[j])   {
               // Проверяем, являются ли Low баров после начального бара (j+5) 
               // _ меньше либо равными Low начального бара (j+5)
               if (Low[j+6] >= Low[j+5])   {
               if (Low[j+6] >= Low[j+4])   {
               if (Low[j+6] >= Low[j+3])   {
               if (Low[j+6] >= Low[j+2])   {
               if (Low[j+6] >= Low[j+1])   {
               if (Low[j+6] >= Low[j])     {
               KolRazTre=KolRazTre+1;               
               }}}}}}  }}}}}}                          
         }
  // Вычисляем длительность периода истории исследования (календарный)
  DliPer = n*Period()/(1440*365);         
  // Считаем отношение числа затухающих треугольников к разгорающимся
  OtnoshZatRaz=KolZatTre/KolRazTre;
  // Вычисляем погрешность расчётов
  Pogreshnost=(1/(KolZatTre) + 1/(KolRazTre))*100;
  // Формируем строки для печати
   string S0 = "\n" + "================= Результаты расчётов =================" + "\n" + "\n";  
   string S1 = "Исследовано бар = " + DoubleToStr(n,0)+ " шт" + "\n";
   string S2 = "Длительность периода исследования = " + DoubleToStr(DliPer,1)+ " лет" + "\n";
   string S3 = "Погрешность расчётов = " + DoubleToStr(Pogreshnost,3)+ " %"+ "\n";  
   string S4 = "Отношение числа затухающих треугольников к разгорающимся = " + DoubleToStr(OtnoshZatRaz,3)+ " раз"+ "\n";
   string S5 = "Число затухающих треугольников = " + DoubleToStr(KolZatTre,0)+ " шт"+ "\n";
   string S6 = "Число разгорающихся треугольников = " + DoubleToStr(KolRazTre,0)+ " шт";
  // Выводим строки на экран     
   Comment(S0, S1, S2, S3, S4, S5, S6);          
 }

Un exemple du résultat du script :



Vous conviendrez que la différence de 23,1 fois avec une précision de calcul d'un peu plus de 2% peut difficilement être appelée une régularité.

Quelle conclusion peut-on tirer de tout cela ? La conclusion est que le prix a une orientation (direction).

Il est tout à fait possible que si le prix est inversé, les résultats obtenus par de nombreux conseillers experts seront très différents et très probablement en faveur des traders :

Si cela vous intéresse, lisez, réfléchissez, expérimentez...
Si vous voulez vérifier ce modèle sur un graphique avec des incréments aléatoires se trouvant dans la distribution normale - allez-y :)
Si quelqu'un a une critique constructive (constructive, pas sans discernement) ou des suggestions - je serai heureux de les écouter.

 

de ces derniers - très probablement ce que vous appelez des triangles en fondu et même sur la montre - est juste une diminution sessionnelle de la volatilité des chandeliers :-)

et de plus, vous avez jusqu'à présent - pour ainsi dire - trouvé les points de référence - mais au-delà - le comportement des barres (direction du mouvement) - sera environ 50/50... par conséquent, tout ceci n'a aucune valeur pratique :-) (sans tenir compte de MM :-) IMHO.

 
DmitriyN:

Si quelqu'un a des critiques constructives (constructives, pas sans discernement) ou des suggestions, je serai heureux de les écouter.

Si vous recherchez des modèles dans le forex, alors soyez décent :

Si vous recherchez un modèle, soyez décent. 1. Indiquez les données d'une société de courtage ou comparez les données de différentes sociétés de courtage, car pour moi, les modèles de filtres sont de peu d'intérêt.

2) N'indiquez pas seulement une paire de devises et un TF, mais mieux - dans le tableau à nouveau différentes paires et différents TF.

Si nous avons une telle table, nous pouvons en parler...

;)

 
avatara:
J'aurai, un peu plus tard, besoin de temps pour cela. Dans ce cas - Alpari DC.
Correction des erreurs ci-dessus.
 

Je pense que si vous cherchez des triangles dans les croisements, il y en aura encore plus comme SGDJPY.

Malheureusement, je n'ai pas beaucoup d'expérience avec ces exotiques.

 
Tableau 1 : Paire - EURUSD | Compte démo| Cotations Alpari | Triangles à 7 barres

Cadre temporel
Ratio, fois
Précision, %
Période de l'histoire, années
М1
2,185
0,003
8,3
М5
3,849
0,038
8,9
М15
9,569
0,313
8,9
М30
14,39
0,836
8,9
Н1
23,17
2,268
8,9


Au TF H4, l'erreur devient inacceptable - pas assez de données.
Le nombre de triangles qui s'évanouissent est de 143, et le nombre de triangles qui s'évanouissent est de 1 (un) par histoire de 9 ans.

Il est fort probable que la méthode de calcul de la précision et l'algorithme de formalisation des triangles devront être revus.

 

Et si nous compliquons un peu plus votre script, nous pouvons vérifier la fréquence temporelle des triangles

par exemple, au cours d'un mois, d'une semaine ou d'un jour de négociation.

Je pense que l'utilisation pratique serait plus

 

Tableau 2 : Paire - GBPUSD | compte démo| cotations Alpari | triangles à 7 barres

Délai de réalisation
Ratio, fois
Précision, %
Période historique, années
M1
2,844
0,004
8,1
M5
4,289
0,041
8,8
M15
7,688
0,243
8,9
M30
10,84
0,642
8,9
H1
17,25
1,793
8,9

Sur le TF H4, l'erreur est importante - environ 17,3%. Le nombre de triangles sur les historiques de 9 ans est de 161 pcs /6 pcs = 26,8 fois.

 
DmitriyN:

J'ai décidé de déplacer les messages dans un fil distinct...

1. J'ai commencé par relire le livre de Williams et j'ai décidé de vérifier la part des barres intérieures sur le graphique. J'ai ensuite décidé de comparer la part des bars intérieurs et extérieurs et, en conséquence, j'ai détecté le schéma suivant : la part des bars intérieurs est plus élevée que celle des bars extérieurs.

Cela est évident même sans aucune expérience.

quels peupliers sont plus "intérieurs" ou "extérieurs" ? bien sûr "intérieurs" !

Parce que ceux de l'extérieur sont les plus grands, et les grands, longs peupliers... ugh, les barres - évidemment moins statistiquement que les petites, courtes. Les longues bougies sont moins fréquentes. Des courts plus souvent.

Un modèle ? Oui.

Et maintenant, faites attention à la question : Et qu'est-ce que cela nous donne ?

la réponse : un filet !

recette d'enrichissement :

Nous prenons une petite barre dans la chaîne de rétrécissement, et mettons le filet des deux côtés, avec une recharge, plus loin - plus de recharge. Dans la direction de qui le premier jouera dans le profit - il a gagné.

 
DmitriyN:

2. Puis, en suivant cette logique, j'ai décidé d'étudier le rapport entre les triangles internes et externes. J'ai dit que les triangles intérieurs étaient amortis et que les triangles extérieurs étaient évasés.
Un script simple a été écrit à cet effet :


Il serait également bon de recueillir des statistiques sur la taille aux points de ces triangles, et très bien sur le temps (jours) de leur formation.

Je vais supposer que les triangles qui s'estompent se produisent sur les nouvelles.