Le regolarità dei movimenti dei prezzi: Parte 1. Orientamento al prezzo

[Eliminato]  

Ho deciso di spostare i post in un thread separato...

1. Tutto è iniziato quando stavo rileggendo il libro di Williams e ho deciso di controllare la quota di barre interne sul grafico. Poi ho deciso di confrontare la porzione di barre interne ed esterne e, come risultato, ho rilevato il seguente schema: la porzione di barre interne è superiore a quella delle barre esterne.

Lasciate che vi ricordi cosa sono le barre interne ed esterne:

Nella schermata qui sopra: la barra B per la barra A è esterna e la barra F per la barra R è interna.

Un semplice script è stato scritto per la ricerca in questo settore:

// Скрипт для подсчёта доли внешних и внутренних бар //
#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);          
 }

Esempio del risultato dello script:

2. Poi, seguendo questa logica, ho deciso di indagare la relazione tra triangoli interni ed esterni. Ho chiamato i triangoli interni "fading" e i triangoli esterni "flaring".
A questo scopo ho scritto un semplice script:

// Скрипт для подсчёта соотношения чисел затухающих и разгорающихся треугольников //
// 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);          
 }

Lo script di cui sopra ha analizzato triangoli di dimensioni sei (6) barre. In questo script è stato aggiunto un modo molto semplice per calcolare l'errore di calcolo.

Un esempio del risultato dello script:

Lasciate che vi ricordi cosa sono i triangoli sfumati e svasati. Esempio di un triangolo attenuante (1) e di un triangolo svasato (2):

1). 2).

[Eliminato]  

3. Poi, ho deciso di aumentare il numero di barre nei triangoli a 7, quindi ho rifatto un po' lo 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 esempio del risultato dello script:



Dovreste essere d'accordo che la differenza di 23,1 volte con una precisione di calcolo di poco più del 2% difficilmente può essere chiamata una regolarità.

Quale conclusione si può trarre da tutto questo? La conclusione è che il prezzo ha un orientamento (direzione).

È abbastanza possibile che se il prezzo è invertito, i risultati ottenuti da molti Expert Advisors saranno molto diversi e molto probabilmente saranno a favore dei trader:

Se sei interessato - leggi, pensa, sperimenta...
Se volete controllare questo modello su un grafico con incrementi casuali nella distribuzione normale - fate pure :)
Se qualcuno ha una critica costruttiva (costruttiva, non indiscriminata) o suggerimenti - sarò felice di ascoltare.

 

di quest'ultimo - molto probabilmente quello che chiamate triangoli in dissolvenza e anche sull'orologio - è solo una diminuzione Sessionale della volatilità delle candele :-)

e inoltre, avete finora - per così dire - trovato i punti di riferimento - ma al di là di essi - il comportamento delle barre (direzione del movimento) - sarà circa 50/50... quindi - tutto questo non ha alcun valore pratico :-) (senza considerare MM :-) IMHO.

 
DmitriyN:

Se qualcuno ha qualche critica costruttiva (costruttiva, non indiscriminata) o suggerimenti, sarei felice di ascoltare.

Se stai cercando dei modelli nel forex, allora sii decente:

Se stai cercando un modello, sii decente. 1.Indica i dati di una società di intermediazione o confronta i dati di diverse società di intermediazione, poiché per me, i modelli di filtri sono di scarso interesse.

2) Indicare non solo una coppia di valute e un TF, ma meglio - nella tabella di nuovo diverse coppie e diversi TF.

Se abbiamo un tavolo simile, possiamo parlarne...

;)

[Eliminato]  
avatara:
Io, un po' più tardi, avrò bisogno di tempo per questo. In questo caso - Alpari DC.
Corretti gli errori di cui sopra.
[Eliminato]  

Penso che se si cercano i triangoli nei cross ce ne saranno ancora di più come ad esempio SGDJPY

Purtroppo non ho molta storia con queste esotiche

[Eliminato]  
Tabella 1: Coppia - EURUSD | Conto demo| Quotazioni Alpari | Triangoli a 7 barre

Timeframe
Rapporto, volte
Precisione, %
Periodo storico, anni
М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


A TF H4 l'errore diventa inaccettabilmente grande - non ci sono abbastanza dati.
Il numero di triangoli in dissolvenza è 143, e il numero di triangoli in dissolvenza è 1 (uno) per storia di 9 anni.

Molto probabilmente il metodo di calcolo della precisione e l'algoritmo di formalizzazione dei triangoli dovranno essere rivisti.

[Eliminato]  

E se complichiamo ancora un po' il tuo script, possiamo controllare la frequenza temporale dei triangoli

per esempio all'interno di un mese commerciale, una settimana, un giorno

imho l'uso pratico sarebbe più

[Eliminato]  

Tabella 2: Coppia - GBPUSD | conto demo| quotazioni Alpari | triangoli a 7 barre

Arco temporale
Rapporto, volte
Precisione, %
Periodo storico, anni
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

Su TF H4 l'errore è grande - circa il 17,3%. Il numero di triangoli sulle storie di 9 anni è 161 pz /6 pz = 26,8 volte.

 
DmitriyN:

Ho deciso di spostare i messaggi in un thread separato...

1. Ho iniziato rileggendo il libro di Williams e ho deciso di controllare la quota di barre interne sul grafico. Poi ho deciso di confrontare la quota di barre interne ed esterne e, come risultato, ho rilevato il seguente schema: la quota di barre interne è superiore alla quota di barre esterne.

Questo è ovvio anche senza esperimenti.

Quali pioppi sono più "dentro" o "fuori"? naturalmente "dentro"!

Perché quelli esterni sono i grandi, e i grandi e lunghi pioppi... ugh, barre - ovviamente meno statisticamente di quelle piccole e corte. Le candele lunghe sono meno frequenti. Più spesso quelli brevi.

Un modello? Sì.

E ora prestate attenzione alla domanda: E cosa ci dà questo?

la risposta: una rete!

ricetta di arricchimento:

Prendiamo una piccola barra nella catena di restringimento, e mettiamo la rete ad entrambi i lati, con una ricarica, più lontano - più ricarica. Nella cui direzione il primo giocherà nel profitto - ha vinto.

 
DmitriyN:

2. Poi, seguendo questa logica, ho deciso di indagare il rapporto tra triangoli interni ed esterni. Ho chiamato i triangoli interni smorzati e i triangoli esterni svasati.
Un semplice script è stato scritto per questo scopo:


Sarebbe anche bene raccogliere statistiche sulle dimensioni nei punti di questi triangoli, e molto bene sul tempo (giorni) della loro formazione.

Presumo che i triangoli in dissolvenza si verifichino sulle notizie.