記事についてのディスカッション - ページ 10 1...34567891011 新しいコメント Alexey Klenov 2020.08.20 11:04 #91 何が問題だったのかわかりました。最初にあなたは、プロセスの最大偏差は40であると言いました。 そしてあなたは40で計算しました。しかし、この過程には+にも-にもなる可能性があり、その結果81のバリエーション(正確には0)が生じます。 そして、X軸に2ステップで40点をプロットします。 だからこのようなグラフになるのです。 ExcelからMQLにデータを転送した。 そして標準ライブラリの機能を使ってシグマ・パラメータを選択し、Excelからあなたのグラフを繰り返しました。 その結果、あなたのコンビナトリックなプロセスには、MO 0、シグマ6.45の正規分布のプロセスが適していることがわかりました。 //+------------------------------------------------------------------+ //|NormalSimple.mq5 //|https://www.mql5.com //+------------------------------------------------------------------+ #include <Graphics\Graphic.mqh> #include <Math\Stat\Normal.mqh> #include <Math\Stat\Math.mqh> #property script_show_inputs //--- 入力パラメータ input double mean_value=0; // 数学的期待値(平均) input double std_dev=6.45; // 標準偏差 //+------------------------------------------------------------------+ //| スクリプト番組開始機能| //+------------------------------------------------------------------+ void OnStart() { double arrayTeoryX[41]= {-40,-38,-36,-34,-32,-30,-28,-26,-24,-22,-20,-18,-16,-14,-12,-10,-8,-6,-4,-2,0, 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40 }; double arrayTeoryY[41]= {0.00000009,3.63798 E-06,7.09406 E-05,0.000898581,0.008311872,0.059845479,0.349098627, 1.695621904,6.994440355,24.86912126,77.09427591,210.2571161,508.121364,1094.415245, 2110.657973,3658.473821,5716.365345,8070.162839,10311.87474,11940.06549,12537.06876, 11940.06549,10311.87474,8070.162839,5716.365345,3658.473821,2110.657973,1094.415245, 508.121364,210.2571161,77.09427591,24.86912126,6.994440355,1.695621904,0.349098627, 0.059845479,0.008311872,0.000898581,7.09406 E-05,3.63798 E-06,9.09495 E-08 }; //--- 価格チャートを表示しない ChartSetInteger(0,CHART_SHOW,false); //--- 乱数発生器を初期化する MathSrand(GetTickCount()); //--- 確率変数のサンプルを生成する long chart=0; string name="GraphicNormal"; int n=100000; // サンプル内の値の数 int ncells=41; // ヒストグラムの区間数 double x[]; // ヒストグラム・インターバル・センター double y[]; // 区間に入るサンプルの値の数 double data[]; // ランダムな値のサンプリング double max,min; // サンプルの最大値と最小値 //--- 正規分布からサンプルを得る MathRandomNormal(mean_value,std_dev,n,data); //--- ヒストグラムを作成するためのデータを計算する CalculateHistogramArray(data,x,y,max,min,ncells); /* //--- 理論曲線を構築するためのシーケンス境界とステップを取得 double step; GetMaxMinStepValues(max,min,step); step=MathMin(step,(max-min)/ncells); //--- 区間[min,max]上の理論的に計算されたデータを取得 double x2[]; double y2[]; MathSequence(min,max,step,x2); MathProbabilityDensityNormal(x2,mean_value,std_dev,false,y2); //--- スケーリング double theor_max=y2[ArrayMaximum(y2)]; double sample_max=y[ArrayMaximum(y)]; double k=sample_max/theor_max; */ /* for(int i=0; i<ncells; i++) y[i]/=k; */ //--- グラフを表示する CGraphic graphic; if(ObjectFind(chart,name)<0) graphic.Create(chart,name,0,0,0,1000,680); 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_HISTOGRAM,"MQL step 2").HistogramWidth(6); graphic.CurveAdd(arrayTeoryX,arrayTeoryY,CURVE_LINES,"Excel"); //--- そして次に、理論的な分布密度曲線をプロットしてみよう。 //graphic.CurveAdd(x2,y2,CURVE_LINES, "Theory"); //--- すべての曲線をプロットする graphic.CurvePlotAll(); graphic.Update(); double summ=0; for(int i=0; i<ArraySize(y); i++) { summ+=y[i]; } Print(「Yによる総額 + summ); } //+------------------------------------------------------------------+ //| データセットの度数を計算する| //+------------------------------------------------------------------+ bool CalculateHistogramArray(const double &data[],double &intervals[],double &frequency[], double &maxv,double &minv,const int cells=10) { if(cells<=1) return (false); int size=ArraySize(data); if(size<cells*10) return (false); minv=data[ArrayMinimum(data)]; maxv=data[ArrayMaximum(data)]; double range=maxv-minv; double width=range/cells; width=2.0; minv=-41; if(width==0) return false; ArrayResize(intervals,cells); ArrayResize(frequency,cells); //--- 区間の中心を設定する for(int i=0; i<cells; i++) { intervals[i]=minv+(i+0.5)*width; frequency[i]=0; } //--- 間隔周波数を埋める for(int i=0; i<size; i++) { int ind=int((data[i]-minv)/width); if(ind>=cells) ind=cells-1; frequency[ind]++; } return (true); } /* //+------------------------------------------------------------------+ //| シーケンス生成のための値を計算する。| //+------------------------------------------------------------------+ void GetMaxMinStepValues(double &maxv,double &minv,double &stepv) { //--- 正規化精度を得るためにシーケンスの絶対範囲を計算する double range=MathAbs(maxv-minv); int degree=(int)MathRound(MathLog10(range)); //--- 最大値と最小値を正規化する。とmin.値を指定された精度で正規化する maxv=NormaliseDouble(maxv,degree); minv=NormalizeDouble(minv,degree); //--- 与えられた精度からのシーケンス生成のステップも設定する stepv=NormalizeDouble(MathPow(10,-degree),degree); if((maxv-minv)/stepv<10) stepv/=10.; } //+------------------------------------------------------------------+ */ Maxim Romanov 2020.08.20 12:15 #92 Alexey Klenov:何が問題だったのかわかりました。当初、あなたはプロセスの最大偏差は40であると言いました。 そしてあなたは40で計算しました。しかし、プロセスには+と-の両方の能力があるので、最終的には81のバリエーション(正確には0)になります。そして、X軸に2刻みで40点をプロットします。だからこのようなグラフになる。エクセルからMQLにデータを移しました。そして標準ライブラリーの機能を使ってシグマ・パラメーターを選択し、エクセルからあなたのグラフを繰り返し、ステップ2で強制的にグループ化しました。その結果、あなたのコンビナトリックなプロセスには、MO 0、シグマ6.45の正規分布のプロセスが適していることがわかりました。 それは興味深い。そう、2ステップで-40...0...40の範囲があるんだ。たぶん、この点を記事の中で噛み砕いていなかったのだと思う。コードをありがとう。 Alexey Klenov 2020.08.21 12:42 #93 午後 青いヒストグラムは、GBPUSD の 365 日分のティック・データのみを使った実験の繰り返しです。 レンコを0.0002ポイントで40レンコ・バーでスライスしています。 ほぼ完全にエクセルからあなたの理論曲線を繰り返します。 ですから、記事の図7はうまくいきません。 Alexey Klenov 2020.08.21 12:51 #94 これがそのコードだ。 エラーを探していますが、まだ見つかっていません。 //+------------------------------------------------------------------+ //|プロジェクト名 //|著作権 2020, 会社名 //|http://www.会社名.net //+------------------------------------------------------------------+ #include <Graphics\Graphic.mqh> #include <Math\Stat\Normal.mqh> #include <Math\Stat\Math.mqh> #property script_show_inputs //--- 入力パラメータ //input double mean_value=0; // 数学的期待値(平均値) //input double std_dev=1; // 標準偏差(標準偏差) input double stepRenko=0.0002; // 連子バーのピッチ //+------------------------------------------------------------------+ //| スクリプト番組開始機能| //+------------------------------------------------------------------+ void OnStart() { //--- 価格チャートを表示しない ChartSetInteger(0,CHART_SHOW,false); //--- 乱数発生器を初期化する MathSrand(GetTickCount()); //--- 確率変数のサンプルを生成する long chart=0; string name="GraphicNormal"; int ncells=41; // ヒストグラムの区間数 double x[]; // ヒストグラム・インターバル・センター double y[]; // 区間に入るサンプルの値の数 double data[]; // ランダムな値のサンプリング double max,min; // サンプルの最大値と最小値 MqlTick realTick[]; ulong start=iTime(_Symbol,PERIOD_D1,365)*1000; // 単位:ミリ秒 ulong finish=iTime(_Symbol,PERIOD_D1,1)*1000; // 単位:ミリ秒 int countCopy=CopyTicksRange(_Symbol,realTick,COPY_TICKS_INFO,start,finish); Print("countCopy="+IntegerToString(countCopy)); Print("0 tick time ="+TimeToString(realTick[0].time)); Print("end tick time ="+TimeToString(realTick[countCopy-1].time)); int index=0; double actualStep[]; // レンコ・バー用の配列 ArrayResize(actualStep,countCopy); ArrayInitialize(actualStep,0); double priceForCheck= realTick[0].bid; actualStep[0]=0; int cnt=0; for(int i=0; i<countCopy; i++) { if(realTick[i].bid>priceForCheck+stepRenko) { int add=(int)((realTick[i].bid-priceForCheck)/stepRenko); actualStep[index]+=add; priceForCheck+=stepRenko*(double)add; cnt+=add; if(cnt>39) { index++; cnt=0; } continue; } if(realTick[i].bid<priceForCheck-stepRenko) { int add=(int)((priceForCheck-realTick[i].bid)/stepRenko); actualStep[index]-=add; priceForCheck-=stepRenko*(double)add; cnt+=add; if(cnt>39) { index++; cnt=0; } } } ArrayResize(actualStep,index+1); Print("Count index="+IntegerToString(index)); CalculateHistogramArrayItsMy(actualStep,x,y,max,min,ncells); // エクセルからのデータ double arrayTeoryX[41]= {-40,-38,-36,-34,-32,-30,-28,-26,-24,-22,-20,-18,-16,-14,-12,-10,-8,-6,-4,-2,0, 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40 }; double arrayTeoryY[41]= {0.00000009,3.63798 E-06,7.09406 E-05,0.000898581,0.008311872,0.059845479,0.349098627, 1.695621904,6.994440355,24.86912126,77.09427591,210.2571161,508.121364,1094.415245, 2110.657973,3658.473821,5716.365345,8070.162839,10311.87474,11940.06549,12537.06876, 11940.06549,10311.87474,8070.162839,5716.365345,3658.473821,2110.657973,1094.415245, 508.121364,210.2571161,77.09427591,24.86912126,6.994440355,1.695621904,0.349098627, 0.059845479,0.008311872,0.000898581,7.09406 E-05,3.63798 E-06,9.09495 E-08 }; // 理論曲線を実曲線にスケーリングする double div=100000/index; for(int i=0; i<ArraySize(arrayTeoryY); i++) { arrayTeoryY[i]/=div; } CGraphic graphic; if(ObjectFind(chart,name)<0) graphic.Create(chart,name,0,0,0,1080,580); else graphic.Attach(chart,name); //graphic.BackgroundMain(StringFormat("Normal distribution mu=%G sigma=%G stepRenko=%G",mean_value,std_dev,stepRenko)); //graphic.BackgroundMain(StringFormat("Normal distribution mu=%G sigma=%G",mean_value,std_dev)); graphic.BackgroundMainSize(16); //--- すべての曲線をプロットする graphic.CurveAdd(x,y,CURVE_HISTOGRAM,"Sample").HistogramWidth(6); graphic.CurveAdd(arrayTeoryX,arrayTeoryY,CURVE_LINES,"Excel"); //--- すべての曲線をプロットする graphic.CurvePlotAll(); graphic.Update(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool CalculateHistogramArrayItsMy(const double &data[],double &intervals[],double &frequency[], double &maxv,double &minv,const int cells=10) { minv=data[ArrayMinimum(data)]; 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]+=MathAbs(data[i]); frequency[ii]+=1.0; } return (true); } //+------------------------------------------------------------------+ Maxim Romanov 2020.08.21 13:08 #95 Alexey Klenov: こんにちは青いヒストグラムは、GBPUSDの365日分のティックデータのみを用いた実験の繰り返しです。レンコを0.0002ピップで、40レンコバーをスライスしています。ほぼ完全にエクセルからの理論曲線を繰り返しています。ですから、記事の図7はうまくいきません。 私は分析するために分ローソク足を使いました、あなたがあまりにも小さなブロックでそれらをスライスするとき、いくらかの誤差があります。私はrenkoバーを持っていません、アルゴリズムは少し違います。renkoバーでは反転ブロックを形成するのに2ピップスが必要ですが、私の場合は常に1倍です。ティック履歴を送って ください。来週試して、私が得たものをお見せします。ティックについては、アイデアとしては若干トレンディであるべきですが、実際には、ティックはソースによって異なります。例えば、いくつかのデモ口座ではティックが多すぎて、これが反転プロセスにつながります。 Alexey Klenov 2020.08.21 13:20 #96 Maxim Romanov: 分析には分足のローソク足を使いましたが、あまりに小さなブロックにスライスすると誤差が生じます。 私はrenkoバーを持っておらず、アルゴリズムが少し違います。renkoバーでは反転ブロックを形成するのに2ピップス必要ですが、私の場合は常に1倍です。 ティック履歴を送って ください。来週試して、私が得たものをお見せします。ティックについては、アイデアとしては若干トレンディであるべきですが、実際には、ティックはソースによって異なります。例えば、いくつかのデモ口座ではティックが多すぎて、これが反転プロセスにつながります。 ターミナルはティック履歴自体をダウンロードします(MT5、Alpari-MT5サーバー)。 ターミナルで Ctrl +U を押し、ticks タブですべてを行うことができます。 Reset_index 2020.09.04 12:24 #97 ストック分布の正規性は、オブザベーションの数に明らかに依存します:オブザベーションが多ければ多いほど、正規性が高くなります。より多くのオブザベーションがより正規的です。 Maxim Romanov 2020.09.04 13:04 #98 Kristian Kafarov: ストック分布の正規性は、オブザベーションの数に明らかに依存します:オブザベーションが多ければ多いほど、正規性が高くなります。同じような標本サイズを比較すべきです。 記事で示された例から、確かにそう見えるかもしれません。しかし実際には、そのような効果はありません。標本数が多ければ多いほど、より正確な結果が得られますが、分布は正規分布に近くはありません(研究において満たすべき一定の条件はありますが)。分布の性質はむしろ取引商品によって異なり、それぞれ微妙に異なる。 Maryna Shulzhenko 2020.09.22 20:22 #99 これはフラットなトレンドを分析するための興味深いアプローチである。しかし、実際にはあまり受け入れられないと思う。むしろ、この材料は別の側面に慣れるためであり、それ以上のものではない。 Enrique Enguix 2020.12.16 20:17 #100 この市場に関する洞察と説明をありがとう。 1...34567891011 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
何が問題だったのかわかりました。最初にあなたは、プロセスの最大偏差は40であると言いました。 そしてあなたは40で計算しました。しかし、この過程には+にも-にもなる可能性があり、その結果81のバリエーション(正確には0)が生じます。
そして、X軸に2ステップで40点をプロットします。
だからこのようなグラフになるのです。
ExcelからMQLにデータを転送した。
そして標準ライブラリの機能を使ってシグマ・パラメータを選択し、Excelからあなたのグラフを繰り返しました。
その結果、あなたのコンビナトリックなプロセスには、MO 0、シグマ6.45の正規分布のプロセスが適していることがわかりました。
何が問題だったのかわかりました。当初、あなたはプロセスの最大偏差は40であると言いました。 そしてあなたは40で計算しました。しかし、プロセスには+と-の両方の能力があるので、最終的には81のバリエーション(正確には0)になります。
そして、X軸に2刻みで40点をプロットします。
だからこのようなグラフになる。
エクセルからMQLにデータを移しました。
そして標準ライブラリーの機能を使ってシグマ・パラメーターを選択し、エクセルからあなたのグラフを繰り返し、ステップ2で強制的にグループ化しました。
その結果、あなたのコンビナトリックなプロセスには、MO 0、シグマ6.45の正規分布のプロセスが適していることがわかりました。
午後
青いヒストグラムは、GBPUSD の 365 日分のティック・データのみを使った実験の繰り返しです。
レンコを0.0002ポイントで40レンコ・バーでスライスしています。
ほぼ完全にエクセルからあなたの理論曲線を繰り返します。
ですから、記事の図7はうまくいきません。
これがそのコードだ。
エラーを探していますが、まだ見つかっていません。
こんにちは
青いヒストグラムは、GBPUSDの365日分のティックデータのみを用いた実験の繰り返しです。
レンコを0.0002ピップで、40レンコバーをスライスしています。
ほぼ完全にエクセルからの理論曲線を繰り返しています。
ですから、記事の図7はうまくいきません。
分析には分足のローソク足を使いましたが、あまりに小さなブロックにスライスすると誤差が生じます。
ターミナルはティック履歴自体をダウンロードします(MT5、Alpari-MT5サーバー)。
ターミナルで Ctrl +U を押し、ticks タブですべてを行うことができます。
ストック分布の正規性は、オブザベーションの数に明らかに依存します:オブザベーションが多ければ多いほど、正規性が高くなります。同じような標本サイズを比較すべきです。
記事で示された例から、確かにそう見えるかもしれません。しかし実際には、そのような効果はありません。標本数が多ければ多いほど、より正確な結果が得られますが、分布は正規分布に近くはありません(研究において満たすべき一定の条件はありますが)。分布の性質はむしろ取引商品によって異なり、それぞれ微妙に異なる。