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

 

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

 

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...

;)

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

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

 
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.

 

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ù

 

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.