記事についてのディスカッション - ページ 8

 
Maxim Dmitrievsky:

私なら、副大臣の事務所で2ヶ月間、そういう見習いをする。

ノーリスクで稼ぐ方法を学ぶためにね。

 

参考グラフにどのような分散をとっているのか教えてください。数学的な期待値は明らかに-0です。

 
Alexey Klenov:

参考グラフにどのような分散をとっているのか教えてください。数学的な期待値は明らかに0です。

ベンチマークの分散は計算していません。図4にその一部を示した表を使ってベンチマークを作りました。 表の計算例を含むExcelファイルを記事に添付しました。
ベンチマークは組合せ論の助けを借りて構築されている。すなわち、組み合わせの数と、それぞれの組み合わせが外れる確率を計算する。
 

理論的な曲線の形を繰り返すことができない

シグマ3.2を取ると、高さはほぼ落ちるが、ディップ(この場合は+-12)には当たらない。

シグマ5.8を取ると、(+-20)の領域に落ちるが、高さは落ちない。

すべてのYの合計は,どちらの場合も100000に等しい.

正規則に従って確率変数を生成するために、標準ライブラリから関数を取り出した。

MathRandomNormal

どうやら組み合わせ法では、正規則に従った標準偏差の変種は生成されないようだ。

......階乗なしでMQLでそれを繰り返したかった。

 
Alexey Klenov:

理論曲線の形が再現できない

シグマ3.2を取ると、高さはほぼ落ちるが、ディップ(この場合は+-12)には当たらない。

シグマ5.8を取ると、(+-20)の領域に落ちるが、高さは落ちない。

すべてのYの合計は、どちらの場合も100000に等しい。

正規則に従った確率変数を生成するために、私は標準ライブラリから関数を取り出した。

MathRandomNormal

どうやら、組み合わせ法では正規則に従った標準偏差の変種は生成されないようだ。

...階乗を使わずにMQLで繰り返したいと思った。

図6では、ランダムウォークの分布の形状を測定している。白いヒストグラムがランダムウォークです。記事にファイルを添付したと思うのですが、50%とかいう名前だったはずです。そこでは0と1をランダムに発生させました。 0だったら前の値から1を引いた値、1だったら前の値に1を足した値です。これがランダム・ワンダー・グラフの作り方だ。その上でシグマのパラメータを測定して使うだけだ。
 
Alexey Klenov:

正規則に 従った確率変数を生成するために、標準ライブラリから関数を取り出した。

MathRandomNormal

どうやら組み合わせ法では、正規則に従った標準偏差の変種は生成されないようだ。

...階乗を使わずにMQLで繰り返したかった。

正規分布の セクションの例 ?

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

正規分布 セクションの例 ?

基礎はまさにこの例から取られた。

 
Maxim Romanov:
図6では、ランダムウォークについて、10万サンプルの分布形状を測定した。白いヒストグラムがランダムウォークです。記事にファイルを添付したと思いますが、50%とかいう名前だったはずです。そこでは0と1をランダムに生成しています。0だったら前の値から1を引いた値、1だったら前の値に1を足した値です。これがランダム・ワンダー・グラフの作り方だ。その上でシグマのパラメータを測定して使うだけだ。

系列を二重に数値化するのですね。

一度目は+1 -1で数値化し、二度目はこの「renko棒グラフ」を40本の棒グラフに数値化します。

たぶん、このような「正規分布」が得られるのでしょう。

一度目はレンコ・バーにカットし、次に方向反転の原則に従う方が論理的ではありませんか?

例えば、図1

+3 -1 -1 +2 -2 +1 -4 +2 -2 +4 といった具合です。

その結果、X上のゼロ点には値が存在しないことになります(x0で+1として反転を考えることはできますが)。

と、すでにこの級数で組み合わせ論を行っている。

であれば、MO0とシグマ1の正規分布を参考にすればよい。

まだ考え中ですが...。

 
Alexey Klenov:

根拠は、まさにこの例から取られた。

では、コードを見せてくれ

 
//+------------------------------------------------------------------+
//|testNormal.mq5
//|アレックス・クル
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "AlexKl"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
#include <Graphics\Graphic.mqh>
#include <Math\Stat\Normal.mqh>
#include <Math\Stat\Math.mqh>
input double mean_value=0;  // 数学的期待値(平均)
input double std_dev=1;     // 標準偏差
void OnStart()
  {
   long chart=0;
   string name="GraphicNormal";
   double  dNormalRandom[];   // ランダムな浮動小数点数
   int iNormalRandom[];       // 配列から丸められた数値 dNormalRandom
   int n=100000;       // サンプル内の値の数
   double x[];          // ヒストグラム・インターバル・センター
   double y[];          // 区間に入るサンプルの値の数
   double max,min;      // サンプルの最大値と最小値
// 正規則に従った確率変数の配列を生成する。
   MathRandomNormal(mean_value,std_dev,n,dNormalRandom);

   ArrayResize(iNormalRandom,ArraySize(dNormalRandom));
// double型の乱数配列から丸め数値の配列を埋める。
   for(int i=0; i<ArraySize(dNormalRandom); i++)
     {
      iNormalRandom[i]=(int)round(dNormalRandom[i]);
     }
   CalculateHistogramArrayItsMy(iNormalRandom,x,y);


//図面
   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);
//--- すべての曲線をプロットする
//--- そして次に、理論的な分布密度曲線をプロットしてみよう。
   graphic.CurveAdd(x,y,CURVE_LINES,"Theory");

//--- すべての曲線をプロットする
   graphic.CurvePlotAll();
   graphic.Update();
   int summ=0;
   for(int i=0; i<ArraySize(y); i++)
     {
      summ+=y[i];
     }
   Print(「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);
  }
//+------------------------------------------------------------------+