9

この質問は、この質問の続きです

私の目標は、株価データの転換点を見つけることです。

これまでのところ:

ここで説明されているように、アンドリュー・バーネット・トンプソン博士の助けを借りて、中心化された5点法を使用して、平滑化された価格セットを微分しようとしました.

データセットを平滑化するために、ティックデータの EMA20 を使用します。

チャート上の各点について、一次導関数 (dy/dx) を取得します。ターニング ポイントの 2 つ目のグラフを作成します。dy/dx が [-some_small_value] と [+some_small_value] の間にあるたびに、このグラフにポイントを追加します。

問題は次のとおりです。本当のターニング ポイントがわかりません。何か近いものがあります。[some_small_value] に応じて、ポイントが多すぎたり少なすぎたりします

dy/dx が負から正に変わったときにポイントを追加する 2 つ目の方法を試しましたが、これもポイントが多すぎます。これはおそらく、ティック データの EMA (1 分の終値ではなく) を使用しているためです。

3 番目の方法は、データ セットを n 個のポイントのスライスに分割し、最小ポイントと最大ポイントを見つけることです。これは正常に動作します (理想的ではありません) が、遅れています。

誰にもより良い方法がありますか?

出力の2枚の写真を添付し​​ました(1次導関数とnポイントの最小/最大)

ここに画像の説明を入力 ここに画像の説明を入力

4

4 に答える 4

4

二次導関数を考慮に入れることができます。つまり、(一次導関数に)さらに評価する必要があります(y_{i-1} + y_{i+1} - 2y_i) / (dx)²。これが特定のしきい値を上回っている場合は最大値があり、下回っている場合は最小値があり、それ以外の場合は破棄できます。これは、極値(y' = 0)を見つける方法を使用し続ける多くのポイントを破棄する必要があります。これは、この条件が鞍点にも有効であるためです。

于 2012-01-11T11:31:51.253 に答える
1

これは単なるアイデアであり、別の角度からのアイデアであり、おそらく非常に悪いアイデアですが、差別化が機能していないため、このようなことは考えられる可能性があります.

最初に、意味のある最小の X 軸間隔を決定する必要があります。あなたの図では、これが小さすぎると、バンプから誤検知が発生します。これは、データを平滑化するという考え方と概念的に似ています。この間隔を dx と呼びます。

次に、サイズ dx のスライディング ウィンドウを使用して、曲線に対応する移動平均曲線を生成します。これを行うには、さまざまな方法が考えられます (統計的な外れ値を削除する、ウィンドウ内のポイントを増減するなど)。この曲線を g(x) と呼び、元の曲線を f(x) と呼びます。さらに、g(x) を計算するために使用するスライディング ウィンドウ内のデータの変動性の尺度を与える曲線 h(x) を作成します (間隔からいくつかのポイントを使用している場合、標準偏差は正常に機能するはずです)。

ここで、c_m(x) = |f(x) - g(x)| の形式の曲線の計算を開始します。- m * h(x)。m = 1 から開始できます。c_m(x) が正の点 x は、ローカルの最小値/最大値の候補です。ヒット数に応じて、m を増やしたり減らしたりすることができます。これは二分探索に似た方法で行うことができます: より多くのポイントが必要な場合は m = (min + m) / 2 を作成し、より少ないポイントが必要な場合は m = (max + m) / 2 を作成します (最小値とそれに応じて最大)。

そこで、私が提案している例を示します。次のシリーズがあるとします。

f(x) = [  1,   2,   4,   3,   2,   3,   6,   7,   8,   7, 
          5,   4,   3,   2,   2,   3,   2,   3,   5,   8,   9]

dx = 5 を選択します。x の周囲の点の単純平均を取ることによって g(x) を構築します。

g(x) = [2.3, 2.5, 2.4, 2.8, 3.6, 4.2, 5.2, 6.2, 6.6, 6.2, 
        5.4, 4.2, 3.2, 2.8, 2.4, 2.4, 3.0, 4.2, 5.4, 6.3, 7.3]

h(x) = [1.2, 1.1, 1.0, 0.7, 1.4, 2.4, 2.3, 1.7, 1.0, 1.5,
        1.9, 1.7, 1.2, 0.7, 0.5, 0.6, 1.1, 2.1, 2.7, 2.4, 1.7]

m = 1 の場合、次のようになります。

c(x) = [0.1, xxx, 0.6, xxx, 0.2, xxx, xxx, xxx, 0.4, xxx,
        xxx, xxx, xxx, 0.1, xxx, 0.0, xxx, xxx, xxx, xxx, 0.0]

実際、これはかなりうまくいったようです。自由に考えを共有してください。平均値定理を考えると、これは多かれ少なかれ微分と同等である可能性があることに注意してください。

于 2012-01-11T15:20:44.937 に答える