uma estratégia comercial baseada na Teoria da Onda de Elliott - página 28

 
Também, sobre os cálculos. Recentemente pensei na necessidade de usar a função de densidade de distribuição normal, mas ainda não comecei. Também pensei em como fazer isso, seja usando uma função complicada ou um método tabular, estava mais inclinado a preencher a tabela em Excel com milésimos (ou dez milésimos) incrementos e salvá-la como um arquivo txt contendo o código mq4 para preencher uma grande variedade. Agora, graças ao Vladislav, ele também economiza recursos da CPU.
No geral, aprendi muitas coisas úteis. :)
 
<br/ translate="no"> Um de seus axiomas é que existe uma trajetória verdadeira (ou seja, uma única), que é determinada pelo processo de otimização. Como uma única trajetória pode resultar em múltiplos canais?


Desculpe novamente pelas respostas tardias. Quando se aproxima uma trajetória, nunca se pode saber o quanto uma aproximação descreve melhor a trajetória em si, se ela estiver no mesmo intervalo de confiança. E, consequentemente, todas as aproximações que se enquadram no intervalo de confiança podem ser assumidas como equivalentes. Em princípio, este é o caso. Para fazer uma previsão a partir de um conjunto de aproximações possíveis (geralmente não se satisfaz o critério de seleção, pois os limites de erro são definidos), é melhor escolher a "mais" ótima, por assim dizer. Ao estudar o algoritmo, percebi mais uma peculiaridade - embora as aproximações sejam diferentes, as previsões são as mesmas na grande maioria dos casos. Mais uma vez, lembro que a trajetória em si não é necessária e não estou procurando por ela. Quanto aos canais - a singularidade dos canais está relacionada ao "grau de detalhe" (vamos chamá-lo assim) das estruturas em estudo. Assim, se houver tendências, podemos identificar as zonas de recuo e estimar as probabilidades de término de tendências, quebras de zonas de inversão, etc. Ou apenas para identificar as áreas de incerteza, quando é melhor não entrar no mercado. Além disso, você deve sempre lembrar sobre as limitações de tamanho da amostra, caso contrário o resultado terá uma taxa de incerteza muito alta.

Boa sorte e boas tendências.
 
Caro Vladislav!

Tenho um mal-entendido em relação ao cálculo do coeficiente de Hurst.
No caso da regressão linear, temos 2 variantes de cálculo S e R.

Variante 1.
S - podemos calcular como a soma das diferenças de desvio ao longo de toda a extensão da linha de regressão linear.
Significa:

S=0.0;
for (n=0; n<Period; n++) { S+ = MathPow( Close[n] - (a+b*n) , 2); }
S=MathSqrt( S / Período );

E podemos calcular R como a diferença entre o desvio máximo e mínimo ao longo de toda a linha da regressão linear.
Ou seja:

pMax=0,0; pMin=0,0;
for (n=0; n<Period; n+++)
{
dc=Close[n] - (a+b*n);
if ( dc > pMax) pMax = dc;
if ( dc < pMin) pMin = dc
}
R=MathAbs( pMax - pMin);

Opção 2.
Podemos calcular S relativo à última barra usando iStdDev( ) a partir do conjunto de indicadores técnicos padrão. Mas neste caso teremos S calculado em relação à última barra, o que equivale ao cálculo de S relativo ao valor no meio de uma linha de regressão linear.

E R - como a diferença entre os valores máximo e mínimo na projeção horizontal:

pMax=Highest[Highest(NULL,0,MODE_HIGH,Period,i)];
pMin=Low[Lowest(NULL,0,MODE_Low,Period,i)];

o que não é muito correto, seria mais correto usar MODE_CLOSE se inicialmente usarmos Close.

Tanto quanto sei, a segunda variante é usada em seu caso? Ou devo estar enganado?

Então minha pergunta é: Qual variante é mais correta para um cálculo mais preciso do coeficiente de Hurst?

Obrigado antecipadamente por sua resposta - Alexander.
 
Todas as aproximações que se enquadram no intervalo de confiança podem ser consideradas equivalentes

Obrigado, Vladislav, de alguma forma eu não levei este ponto em consideração. Mas é realmente verdade. Isto significa que, de fato, não temos vários canais, mas toda uma gama delimitada por linhas com o ângulo máximo e mínimo.
Deve-se ter sempre em mente as limitações de tamanho da amostra, caso contrário o resultado terá demasiada incerteza

Não estou bem certo de que incerteza você está falando. No entanto, a outra coisa é clara para mim. A amostra deve definir um canal de regressão, e um canal de regressão é um canal de tendência. Se juntarmos tanto a tendência quanto o plano em uma amostra, tal amostra dificilmente nos daria algo útil. Portanto, enfrentamos o problema de dividir o mercado em fases e, mais importante ainda, de identificar a tendência e o flat nas fases iniciais, ou seja, no mercado real. Na minha opinião, esta é uma tarefa muito pouco trivial.
 
Privet,
Kartinka mne napomnila standartnyj indikator kanalov, vot i spomnil svoju razrabotku kokda iskal filtra dlia ods4iota kokda na4inajetsia bolshyjje volny Elliota - po Standart Deviation formule:



Vot kod mojevo indikatora:

//+------------------------------------------------------------------+
//|                                                   StdDevChan.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                      irc://irc.omnitel.net/forex |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Blue

//---- input parameters
extern int       PriceBars=350;
extern int       Shift;
extern bool      Comments=false;

double Support[];
double StdDev[];
double Resistance[];

//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void SetObject(string ObjName,int ObjType,datetime ObjTime1,double ObjPrice1,datetime ObjTime2=0,double ObjPrice2=0,color ObjColor=Red,int ObjSize=1,int ObjStyle=STYLE_SOLID,datetime ObjTime3=0,double ObjPrice3=0)
{

if (ObjectFind(ObjName) != -1) ObjectDelete(ObjName);
ObjectCreate(ObjName, ObjType, 0,ObjTime1 , ObjPrice1, ObjTime2, ObjPrice2, ObjTime3, ObjPrice3);
ObjectSet(ObjName,OBJPROP_COLOR,ObjColor); 
ObjectSet(ObjName,OBJPROP_STYLE,ObjStyle); 
ObjectSet(ObjName,OBJPROP_WIDTH,ObjSize); 
}


int init()
  {
//---- indicators
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Resistance);
   SetIndexDrawBegin(0,0);
   SetIndexEmptyValue(0,0);
   SetIndexShift(0,0);
   SetIndexLabel(0,"Standart Deviation Support-");
//----
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,StdDev);
   SetIndexDrawBegin(1,0);
   SetIndexEmptyValue(1,0);
   SetIndexShift(1,0);
   SetIndexLabel(1,"Standart Deviation");
//----
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Support);
   SetIndexDrawBegin(2,0);
   SetIndexEmptyValue(2,0);
   SetIndexShift(2,0);
   SetIndexLabel(2,"Standart Deviation Resistance+");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counter,counter2;
   double DevAvg=0;
   double DevPlus1=0;
   double DevMinus1=0;
   double DevPlusStart=0;
   double DevMinusStart=0;
   double DevAvgStart=0;
   double DevPlusEnd=0;
   double DevMinusEnd=0;
   double DevAvgEnd=0;
   double DevPlus2=0;
   double DevMinus2=0;
   double DevAvg1=0;
   double DevAvg2=0;
   double PriceDiff;
   double deviance,Max,Min;
   int DrawBegin = Shift;   
   int DrawEnd;
   int counted_bars=IndicatorCounted();
   DrawEnd=Bars-counted_bars;
   
   if ( DrawEnd < DrawBegin + PriceBars) DrawEnd = DrawBegin + PriceBars;
   
   if (Bars < (PriceBars * 2 + Shift)) return(0);
   
   for (counter=DrawBegin-1;counter<=DrawEnd;counter++)
   {
   deviance=iMA(Symbol(),Period(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,counter);
   Max=High [Highest (NULL,0,MODE_HIGH,PriceBars,counter)];
   Min=Low [Lowest (NULL,0,MODE_LOW,PriceBars,counter)];
   //DevAvg=MathPow((Max + Min + deviance) / 3,2);  
   DevAvg=(Max + Min + deviance) / 3;  

   for (counter2=(PriceBars + counter);counter2 >=counter;counter2--)
   {
   PriceDiff = (Max + Min + Open[counter2]) / 3;
   deviance+= MathPow((PriceDiff - DevAvg),2);   
   }

   // Calculate average deviation
   deviance = deviance / (PriceBars + 1);
   DevAvg = MathSqrt(deviance/Point) * Point; 

   // Calculate deviation channel starting/current average deviation prices
   DevAvg1 = (DevPlus1 + DevMinus1 + (Max + Min + Open[PriceBars + counter]) / 3) / 3;

   // Calculate deviation channel +/- starting points
   DevPlus1 = (Min+Max + Open[PriceBars + counter]) / 3 + DevAvg;
   DevMinus1 = (Min+Max + Open[PriceBars + counter]) / 3 - DevAvg;     

  // Calculate deviation channel current +/- points
   DevPlus2 = (Max + DevAvg1) / 2 + DevAvg;
   DevMinus2 = (Min + DevAvg1) / 2 - DevAvg;

   DevAvg2 = (DevPlus2 + DevMinus2 + (Max + Min + DevAvg1) / 3) / 3;
   
   Resistance[counter]=DevMinus2;
   Support[counter]=DevPlus2;
   StdDev[counter]=DevAvg2;   
   //if (counter == DrawEnd && Symbol() == "EURUSD" ) Print ("DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);

   if (counter == DrawBegin)
   {
   DevPlusEnd=Resistance[counter];
   DevMinusEnd=Support[counter];
   DevAvgEnd=StdDev[counter];
//   if (Symbol() == "EURUSD" ) Print ("DrawBegin=",DrawBegin," DrawEnd=",DrawEnd," DevMinus2=",DevMinus2," DevPlus2=",DevPlus2," DevAvg2=",DevAvg2);
   }      
   
   if (counter == DrawBegin + PriceBars)
   {
   DevPlusStart=Resistance[counter];
   DevMinusStart=Support[counter];
   DevAvgStart=StdDev[counter];
   }      

   }
//----

   if (Comments) Comment(Symbol()," DevAvg=",DevAvg," DevAvgStart=",DevAvgStart," DevAvgEnd=",DevAvgEnd," DevPlusStart=",DevPlusStart," DevPlusEnd=",DevPlusEnd," DevMinusStart=",DevMinusStart," DevMinusEnd=",DevMinusEnd);
   //Draw channel
   SetObject(Symbol()+"_StdDev+",OBJ_TREND,Time[PriceBars + Shift],DevPlusStart,Time[Shift],DevPlusEnd,Blue,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev+","Standart Deviation Resistance", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDev-",OBJ_TREND,Time[PriceBars + Shift],DevMinusStart,Time[Shift],DevMinusEnd,Red,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDev-","Standart Deviation Support", 8, "Arial", Green);
   SetObject(Symbol()+"_StdDevAvg",OBJ_TREND,Time[PriceBars + Shift],DevAvgStart,Time[Shift],DevAvgEnd,White,1,STYLE_SOLID);
   ObjectSetText(Symbol()+"_StdDevAvg","Standart Deviation Average", 8, "Arial", Green);
   
   return(0);
  }
//+------------------------------------------------------------------+
 
2 ANG3110 Na verdade, eu já respondi a esta pergunta acima. Vou responder novamente - o último - porque também sou preguiçoso ;). O desvio padrão deve ser calculado em relação à aproximação e aos preços efetivamente obtidos. Se você aproximar os preços de fechamento por um muving, então deve ser a diferença entre Klose e o valor do muving em cada barra. E você pode usar o algoritmo padrão - iStdDev( ). Se por um canal de regressão linear, então entre o valor da linha de regressão e a klose. Se por qualquer outra coisa, então a diferença é entre o valor da função aproximada e o valor realmente obtido. Se você se aproximar de algo mais, como a rentabilidade dos negócios, então você deve selecionar outras variáveis. Eu não uso iStdDev( ) em meus cálculos.

o que não é muito correto, seria mais correto usar MODE_CLOSE se inicialmente usarmos Close.

A chave aqui é: se contado inicialmente pelo Close

2Yurixx Em relação à incerteza - se o número de graus de liberdade em uma amostra for insuficiente, sua convergência não pode ser estimada de forma confiável e, portanto, você pode aplicar métodos de análise estatística a uma amostra divergente que são aplicáveis apenas a amostras convergentes. Conseqüentemente, o resultado é incerto.

PS Aqui o termo "amostra" foi usado para significar uma distribuição. Ou seja, seria mais correto dizer "o número de graus de liberdade de uma amostra afeta o grau de confiabilidade na determinação da convergência de uma distribuição válida para essa amostra". Métodos válidos para distribuições convergentes podem ser aplicados a distribuições divergentes (ou a distribuições sem fato conhecido de convergência).

Boa sorte e boa sorte com as tendências.
 
Privet,

Vot po4emu ja dal kod svojevo indikatora - ras4ioty idut po po po po po vsem parametram:

   deviance=iMA(Símbolo(),Período(),PriceBars,0,MODE_SMA,PRICE_MEDIAN,contador); Máximo=Alto [Máximo (NULL,0,MODE_HIGH,PriceBars,contador)]; Mínimo=Baixo [Mínimo (NULL,0,MODE_LOW,PriceBars,contador)]; DevAvg=(Máximo + Mínimo + desvio) / 3;



Smotrite indikator i probuite na grafik :-D

 
Caro Vladislav! <br/ translate="no">
Tenho um mal-entendido sobre o cálculo do coeficiente de Hurst.
Em caso de regressão linear, temos 2 variantes de cálculo S e R.


Agora esta é uma pergunta interessante :)
Suponha que tenhamos um canal de regressão linear, por exemplo, ascendente, que satisfaça o critério de convergência RMS. Por um lado, se o canal for ascendente, o RMS calculado sobre as barras incluídas nele tenderá a 1,0 (como o turno é evidente). Por outro lado, se calcularmos RMS relativamente à linha de regressão (removendo assim o turno), então RMS tenderá a 0,5, porque o RMS está próximo da distribuição normal. Acho que todos deveriam verificar isso por si mesmos (é muito mais interessante dessa forma).
 
Eu não pude resistir e modifiquei o roteiro do solandr. A inclusão da extração RMS é mais correta usando iStdDevOnArray embutido, uma vez que a divisão por (número de poderes-1) é razoável apenas para amostras de até 30 elementos.
//+------------------------------------------------------------------+
//|                                                     Herst-II.mq4 |
//|                             solandr (обработал напильником Rosh) |
//|                       http://www.metaquotes.ru/forum/6839/page11 |
//+------------------------------------------------------------------+
#property copyright "solandr (обработал напильником Rosh)"
#property link      "http://www.metaquotes.ru/forum/6839/page11"
#property show_inputs

extern int start_bar=500;
extern int end_bar=0;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
double viborka[];
int size_of_array,i;

size_of_array=start_bar-end_bar+1;
ArrayResize(viborka, size_of_array);
for(i=size_of_array-1;i>=0;i--) viborka[i]=Open[i+end_bar];

double S_A=iMAOnArray(viborka,0,size_of_array,0,MODE_SMA,0);
Print("Среднее арифметическое выборки = ",DoubleToStr(S_A,8));

double S=iStdDevOnArray(viborka,0,size_of_array,MODE_SMA,0,0);

Print("СКО выборки (размах) = ",DoubleToStr(S,8));

double pMax=viborka[ArrayMaximum(viborka)];
double pMin=viborka[ArrayMinimum(viborka)];

double R=pMax-pMin;
Print("pMin = ",pMin," pMax = ",pMax, " R = ",R);

double Hrst;
if( (R>0)&&(S>0)) Hrst = MathLog(R/S)/MathLog(size_of_array*0.5);
Print("Хёрст = ",DoubleToStr(Hrst ,8));
  
  return(0);
}
//+------------------------------------------------------------------+



A pesquisa extrema se baseia em dados brutos, não em posições e quebras.

Portanto, o critério é um pouco diferente:

2006.05.28 14:53:08 Herst EURUSD,M15: removido<br/ translate="no"> 2006.05.28 14:53:08 Herst EURUSD,M15: Hearst = 0.27582880
2006.05.28 14:53:08 Herst EURUSD,M15: pMin = 1.2691 pMax = 1.2892 R = 0.0201
28 14:53:08 Herst EURUSD,M15: Amostragem RMS (spread) = 0,00438062
2006.05.28 14:53:08 Herst EURUSD,M15: Variância de amostragem = 0,00001919
2006.05.28 14:53:08 Herst EURUSD,M15: Média de amostragem = 1,27924631
2006.05.28 14:53:06 Herst EURUSD,M15: carregado com sucesso
2006.05.28 14:52:59 Herst-II EURUSD,M15: removido
2006.05.28 14:52:59 Herst-II EURUSD,M15: Hurst = 0,26196806
2006.05.28 14:52:59 Herst-II EURUSD,M15: pMin = 1,2696 pMax = 1,2882 R = 0,0186
2006.05.28 14:52:59 Herst-II EURUSD,M15: Amostra RMS (spread) = 0,00437625
2006.05.28 14:52:59 Herst-II EURUSD,M15: Amostra Média = 1,27924631
2006.05.28 14:52:59 Herst-II EURUSD,M15: carregado com sucesso
2006.05.28 14:52:54 Compilação 'Herst-II'

 
Caro Vladislav!
Obrigado por sua resposta abrangente.