Discussão do artigo "O que é uma tendência e qual estrutura o mercado se baseia: Tendência ou Lateral?" - página 8

 
Maxim Dmitrievsky:

Eu iria para o escritório do vice-ministro para um estágio de dois meses como esse.

Eu me tornaria presidente por isso.) Para aprender a ganhar dinheiro sem praticamente nenhum risco.

 

Você pode me dizer qual é a variação adotada para o gráfico de referência? A expectativa matemática é clara - 0.

 
Alexey Klenov:

Você pode me dizer qual foi a variação adotada para o gráfico de referência? A expectativa matemática é claramente 0.

Eu não calculei a variação para o benchmark. Criei a referência usando a tabela, uma parte da qual é mostrada na Figura 4. Anexei um arquivo do Excel ao artigo, que contém um exemplo de cálculo da tabela.
O benchmark é construído com a ajuda da combinatória. Ou seja, o número de combinações e a probabilidade de cada combinação cair são calculados.
 

Não consigo repetir a forma da curva teórica

Se eu pegar o sigma 3,2, caio aproximadamente em altura, mas não atinjo as quedas (nesse caso, +-12).

Se eu pegar o sigma 5,8, caio na região de (+-20), mas não caio em altura

A soma de todos os Y é igual a 100000 em ambos os casos.

Para gerar uma variável aleatória de acordo com a lei normal, usei uma função da biblioteca padrão.

MathRandomNormal

Aparentemente, o método combinatório não produz uma variante do desvio padrão de acordo com a lei normal.

....Queria repeti-lo no MQL sem fatoriais.

 
Alexey Klenov:

Falha ao replicar a forma da curva teórica

Se eu pegar o sigma 3,2, caio aproximadamente em altura, mas não atinjo as quedas (nesse caso, +-12).

Se eu usar o sigma 5,8, caio na região de (+-20), mas não caio em altura

A soma de todos os Y é igual a 100000 em ambos os casos.

Para gerar uma variável aleatória de acordo com a lei normal, usei uma função da biblioteca padrão.

MathRandomNormal

Aparentemente, o método combinatório não produz uma variante do desvio padrão de acordo com a lei normal.

....Queria repeti-lo no MQL sem fatoriais.

Na Figura 6, medi a forma da distribuição para o passeio aleatório, acho que para 100.000 amostras. Os histogramas brancos são de passeio aleatório. Acho que anexei um arquivo ao artigo, ele deve se chamar 50% ou algo parecido. Se fosse 0, então o valor anterior menos 1; se fosse 1, então o valor anterior mais 1. É assim que o gráfico de variação aleatória é construído. Basta medir os parâmetros sigma nele e usá-lo.
 
Alexey Klenov:

Para gerar uma variável aleatória de acordo com a lei normal, usei uma função da biblioteca padrão.

MathRandomNormal

Aparentemente, o método combinatório não produz uma variante do desvio padrão de acordo com a lei normal.

....I queria repeti-lo no MQL sem fatoriais.

Exemplo para a seção Distribuição normal?

Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нормальное распределение
Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нормальное распределение
  • www.mql5.com
//| Script program start function                                    | //|  Calculate frequencies for data set                              |                               //|  Calculates values for sequence generation                       |
 
Rashid Umarov:

Exemplo para a seção Distribuição normal?

A base foi tirada desse mesmo exemplo.

 
Maxim Romanov:
Na Figura 6, medi a forma da distribuição para o passeio aleatório, mais ou menos para 100.000 amostras. Os histogramas brancos são de passeio aleatório. Acho que anexei um arquivo ao artigo, ele deve se chamar 50% ou algo parecido. Se fosse 0, então o valor anterior menos 1; se fosse 1, então o valor anterior mais 1. É assim que o gráfico de variação aleatória é construído. Basta medir os parâmetros sigma nele e usá-lo.

Entendo que você obtém a quantificação dupla da série.

Na primeira vez, você quantifica por +1 -1 e, na segunda vez, quantifica essas "barras de renko" em gráficos de 40 barras.

Talvez você obtenha essa forma de "distribuição normal".

Não seria mais lógico cortar a primeira vez, como você fez, em barras renko e depois seguir o princípio das reversões direcionais?

Por exemplo, sua figura 1

+3 -1 -1 +2 -2 -2 +1 -4 +2 -2 -2 +4 e assim por diante.

Como resultado, não haverá valores no ponto zero em X (embora você possa considerar a reversão como +1 em x0).

e já realizamos a combinatória com essa série.

então podemos usar a distribuição normal de MO 0 e sigma 1 como referência.

embora eu ainda esteja pensando sobre isso...

 
Alexey Klenov:

A base foi tirada desse mesmo exemplo.

Então, mostre-me o código

 
//+------------------------------------------------------------------+
//|testNormal.mq5 |
//|AlexKl |
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "AlexKl"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
#include <Graphics\Graphic.mqh>
#include <Math\Stat\Normal.mqh>
#include <Math\Stat\Math.mqh>
input double mean_value=0;  // expectativa matemática (média)
input double std_dev=1;     // desvio padrão (desvio padrão)
void OnStart()
  {
   long chart=0;
   string name="GraphicNormal";
   double  dNormalRandom[];   // números de ponto flutuante aleatórios
   int iNormalRandom[];       // números arredondados da matriz dNormalRandom
   int n=100000;       // número de valores na amostra
   double x[];          // centros de intervalo do histograma
   double y[];          // número de valores da amostra que se enquadram no intervalo
   double max,min;      // valores máximos e mínimos na amostra
// gerar uma matriz de variáveis aleatórias de acordo com a lei normal
   MathRandomNormal(mean_value,std_dev,n,dNormalRandom);

   ArrayResize(iNormalRandom,ArraySize(dNormalRandom));
// preencha a matriz de números arredondados a partir da matriz de números aleatórios do tipo double
   for(int i=0; i<ArraySize(dNormalRandom); i++)
     {
      iNormalRandom[i]=(int)round(dNormalRandom[i]);
     }
   CalculateHistogramArrayItsMy(iNormalRandom,x,y);


//Desenho
   CGraphic graphic;
   if(ObjectFind(chart,name)<0)
      graphic.Create(chart,name,0,0,0,780,580);
   else
      graphic.Attach(chart,name);
   graphic.BackgroundMain(StringFormat("Normal distribution mu=%G sigma=%G",mean_value,std_dev));
   graphic.BackgroundMainSize(16);
//--- plotar todas as curvas
//--- e agora vamos traçar a curva de densidade de distribuição teórica
   graphic.CurveAdd(x,y,CURVE_LINES,"Theory");

//--- plotar todas as curvas
   graphic.CurvePlotAll();
   graphic.Update();
   int summ=0;
   for(int i=0; i<ArraySize(y); i++)
     {
      summ+=y[i];
     }
   Print("Total amount by Y " + summ);
  }
//+------------------------------------------------------------------+
bool CalculateHistogramArrayItsMy(const int &data[],double &intervals[],double &frequency[])
  {

   double minv=data[ArrayMinimum(data)];
   double maxv=data[ArrayMaximum(data)];
   int range=maxv-minv;
   ArrayResize(intervals,range+1);
   ArrayResize(frequency,range+1);
   for(int i=0; i<range+1; i++)
     {
      intervals[i]=minv+i;
     }
   for(int i=0; i<ArraySize(data); i++)
     {
      int ii=(MathAbs(minv)+data[i]);
      frequency[ii]+=1.0;
     }
   return (true);
  }
//+------------------------------------------------------------------+