KimIVの便利な機能 - ページ 47 1...404142434445464748495051525354...128 新しいコメント Prival 2008.09.10 09:30 #461 こう言われれば同じなんですけどね。 for (int i=0; i<r; i++) { Y[i]=Close[i+1]; X[i]=i; } Array_LR(X, Y); for (i=0; i<r; i++) { SetArrow(170, Blue, "arr"+i+r, Time[i+1], Y[i]); } 確かに、どちらのバリエーションもドットは正確に重なってはいません。しかし、これはSetArrow()の特殊性である可能性が高いです。 以下は写真です。 Igor Kim 2008.09.10 10:15 #462 Prival писал (а)>> 確かに、両バリエーションのポイントは正確に重なってはいません。しかし、これはSetArrow()の機能である可能性が高いです。 いいえ、これはOBJ_ARROWグラフィカルオブジェクトの機能です。重心で固定するのではなく、上部の境界の真ん中で固定するのです。 Igor Kim 2008.09.15 10:37 #463 ArrayMo()関数です。 Modu関数は、分布密度曲線の最大値を返します。この関数は、以下のオプションパラメータを受け付ける。 x- 数値系列の値の配列. d- 数値系列の値の精度、小数点以下の桁数。 //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 21.06.2008 | //| Описание : Возвращает Моду - максимум кривой плотности распределения. | //+----------------------------------------------------------------------------+ //| Параметры: | //| x - массив значений числового ряда | //| d - точность значений числового ряда, количество знаков после запятой | //+----------------------------------------------------------------------------+ double ArrayMo(double& x[], int d=4) { double e, s=0; double m[][2]; // временный массив: // столбец 1 - количество значений // столбец 2 - значения int i, k=ArraySize(x); int n; // номер строки временного массива m int r; // количество строк во временном массиве m if (k>0) { for (i=0; i<k; i++) { e=NormalizeDouble(x[i], d); n=ArraySearchDouble(m, e); if (n<0) { r=ArrayRange(m, 0); ArrayResize(m, r+1); m[r][0]++; m[r][1]=e; } else m[n][0]++; } ArraySort(m, WHOLE_ARRAY, 0, MODE_DESCEND); s=m[0][1]; } else Print("ArrayMo(): Массив пуст!"); return(s); } Igor Kim 2008.09.15 10:39 #464 ArrayMo()関数の使用例です。 現在のチャートの過去1000本程度のバーの中で、最も頻繁に発生する高値の レベルを決定します。 #define R 1000 void start() { double a[R]; for (int i=0; i<R; i++) a[i]=High[i]; Message(ArrayMo(a, 4)); } SZY. ArrayMo()関数をテストするスクリプトを添付します。 ファイル: test_arraymo.mq4 5 kb Igor Kim 2008.09.15 12:13 #465 b-Array 関数ライブラリの全容が公開され、配列を扱うことができるように設計されています。 Prival 2008.09.15 14:13 #466 もう一つ、共分散の計算があります //+----------------------------------------------------------------------------+ //| Автор : Сергей Привалов aka Prival, Skype: privalov-sv | //+----------------------------------------------------------------------------+ //| Версия : 11.09.2008 | //| Описание : Рассчет ковариации массива cvar(X,Y) | //+----------------------------------------------------------------------------+ //| Параметры: | //| X - массив значений числового ряда, ось X | //| Y - массив значений числового ряда, ось Y | //+----------------------------------------------------------------------------+ double cvar(double &X[], double &Y[]) { double mo_X = 0, mo_Y = 0, res = 0; int i,N=ArraySize(X); if(N>1 && ArraySize(Y)==N) { for( i = 0; i < N; i ++ ) { mo_X +=X[i]-X[0]; mo_Y +=Y[i]; } mo_X /=N; mo_Y /=N; for( i = 0; i < N; i ++ ) res +=(X[i]-mo_X)*(Y[i]-mo_Y); res /=N; } else Print("cvar(): Недостаточное количество элементов ряда! N=", N, " или не совпадает размерность"); return(res); を修正しました。 TheXpert 2008.09.15 15:09 #467 Prival писал (а)>> もう一つ、共分散の計算があります をライブラリに追加します。配列(行列)の定義はもっとたくさんあるのですが。でも、徐々に埋めていくことになると思います。 いくつか質問があります。 1.mo_XYとは? 2.XによるMOの蓄積のラインでは mo_X +=X[i]-X[0]; なぜX[0]を取り上げるのか? 3.なぜアレイXを発注する必要があるのか? Prival 2008.09.15 15:32 #468 1.mo_XYを削除し、異なる計算オプションを確認することができます。これは、悪いバリアントが残っているんです。 2.引用したこのアルゴリズムは、Time[]がXとして入ってきても、計算でエラーが出る可能性が少ないです。大きな数字の掛け算は、徐々に誤差が蓄積され、それが現れてきます。このため,X[0]を減算してXを原点に移動させる(追加)。 3.考えすぎて、順番が狂っていたのかもしれません。 要は、Xに入力された値がYに対応することです これから訂正します。 Prival 2008.09.15 16:53 #469 mo_X += X[0]; // 忘れてたかも 。 これは不要な操作です。ダブルチェックが可能です。 Prival 2008.09.15 18:13 #470 TheXpert писал (а)>> 私はそうは思いません。 不信感を抱くのが鉄則です。どの数学のパッケージでもいいので、確認してみてください。その結果を掲載します。今すぐMathCadeでやってみる。 1...404142434445464748495051525354...128 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こう言われれば同じなんですけどね。
確かに、どちらのバリエーションもドットは正確に重なってはいません。しかし、これはSetArrow()の特殊性である可能性が高いです。
以下は写真です。
確かに、両バリエーションのポイントは正確に重なってはいません。しかし、これはSetArrow()の機能である可能性が高いです。
いいえ、これはOBJ_ARROWグラフィカルオブジェクトの機能です。重心で固定するのではなく、上部の境界の真ん中で固定するのです。
ArrayMo()関数です。
Modu関数は、分布密度曲線の最大値を返します。この関数は、以下のオプションパラメータを受け付ける。
ArrayMo()関数の使用例です。
現在のチャートの過去1000本程度のバーの中で、最も頻繁に発生する高値の レベルを決定します。
SZY. ArrayMo()関数をテストするスクリプトを添付します。b-Array 関数ライブラリの全容が公開され、配列を扱うことができるように設計されています。
もう一つ、共分散の計算があります
を修正しました。
もう一つ、共分散の計算があります
をライブラリに追加します。配列(行列)の定義はもっとたくさんあるのですが。でも、徐々に埋めていくことになると思います。いくつか質問があります。
1.mo_XYとは?
2.XによるMOの蓄積のラインでは
1.mo_XYを削除し、異なる計算オプションを確認することができます。これは、悪いバリアントが残っているんです。
2.引用したこのアルゴリズムは、Time[]がXとして入ってきても、計算でエラーが出る可能性が少ないです。大きな数字の掛け算は、徐々に誤差が蓄積され、それが現れてきます。このため,X[0]を減算してXを原点に移動させる(追加)。
3.考えすぎて、順番が狂っていたのかもしれません。 要は、Xに入力された値がYに対応することです
これから訂正します。
これは不要な操作です。ダブルチェックが可能です。
私はそうは思いません。
不信感を抱くのが鉄則です。どの数学のパッケージでもいいので、確認してみてください。その結果を掲載します。今すぐMathCadeでやってみる。