3

質問の表現が不十分でしたら申し訳ありませんが、最善を尽くします。

U が値で、T が時間のような型 (または私が推測するもの) である、時間を含む値のシーケンスがある場合Observable[(U,T)]、自動リセットのワンタッチ バリアである演算子をどのように記述できますか? 、 の場合は無音ですabs(u_n - u_reset) < barrierが、バリアに触れると吐き出しt_n - t_reset、その時点で もリセットされますu_reset = u_n

つまり、このオペレーターが受け取る最初の値がベースラインになり、何も出力しません。それ以降、ストリームの値を監視し、そのうちの 1 つがベースライン値を超える (上または下) とすぐに、経過時間 (イベントのタイムスタンプによって測定) を発行し、ベースラインをリセットします。これらの時間は、ボラティリティの高頻度推定値を形成するために処理されます。

参考までに、 http: //www.amazon.com/Volatility-Trading-CD-ROM-Wiley/dp/0470181990で概説されているボラティリティ推定器を作成しようとしています。 )、固定バリア量のバリアを突破するのにかかる時間を繰り返し測定します。

具体的には、これは既存の演算子を使用して記述できますか? 状態がどのようにリセットされるかについては少し固執していますが、1 つはワンショットで、もう 1 つはそのワンショットを作成し続ける 2 つのネストされたオペレーターを作成する必要があるかもしれません... 1つは手作業ですが、独自の発行者などを作成する必要があります.

ありがとう!

4

1 に答える 1

5

例のアルゴリズムと変数を完全には理解していませんが、必要に応じflatMapてヒープ状態と戻り値empty()を使用できます。just()

int[] var1 = { 0 };
source.flatMap(v -> {
    var1[0] += v;
    if ((var1[0] & 1) == 0) {
       return Observable.just(v);
    }
    return Observable.empty();
});

複数のコンシューマーのためにシーケンスごとの状態が必要な場合はdefer、すべてを実行できます。

Observable.defer(() -> {
    int[] var1 = { 0 };
    return source.flatMap(v -> {
        var1[0] += v;
        if ((var1[0] & 1) == 0) {
           return Observable.just(v);
        }
        return Observable.empty();
    });
}).subscribe(...);
于 2015-09-01T20:50:01.367 に答える