1

私は「定量的金融」でこの質問をしようとしましたが、取引よりもプログラミングに関する質問なので、これはより良い場所のようです

インターフェイスをどのように宣言しIndicatorますか?「インジケーター」をモデル化する正しい方法は何でしょうか?

私はc#を使用しており、次Indicatorのようにインターフェイスを宣言したいと思います。

interface Indicator
{
    double Value { get; }
    event Action<Void> ValueUpdated;
}

またはおそらくこのように:

interface Indicator
{
    event Action<Double> ValueUpdated;
}

私は「純粋な価格」も些細な指標と考えています。

class PriceIndicator : Indicator {
    PriceIndicator(string ticker) {
        ....
    }
}

MAの例:

class MovingAverage : Indicator {
    private PriceIndicator price;

    public MovingAverage(PriceIndicator price, int period) {
        ....
    }

    // when price.ValueUpdated event occurs need to recalculate MA and raise ValueUpdated event
}

どう思いますか?どんな提案でも大歓迎です!

4

3 に答える 3

0

私はこのようなものを持っているでしょう

public interface IIndicator
{
      double Calculate();
}

したがって、構成されているインジケーターは次のようになります。

public class CompositeIndicator: IIndicator
{
     private MovingAverage _ma;

     public CompositeIndicator(/* your parameters here */)
     {
         _ma = new MovingAverage();
     }

     public double Calculate()
     {
         var mavalue = _ma.Calculate();
         //do more stuff
         return mavalue;
     }
}

次に、計算する必要のあるすべての指標を知っているコンポーネントは、価格が変更されるたびにこのメソッドを呼び出し、それをチャートまたは他の場所に反映します。

実際、この問題はすでに多くの既存のアプリケーションで解決されています。確認できる例として、Ninjatrader(C#で実装)またはMetatrader(cで実装)があります。

于 2011-12-11T14:57:25.183 に答える
0

私の理解では、市場データで何か興味深いことが起こった後、インジケーターは何らかのアクションを実行する必要があります。これは、インターフェイスがすべての興味深いイベントでアラートを発する必要があることを意味します。これらは、純粋な市場データ イベントまたは他のインジケーターによってトリガーされるイベントである可能性があります。市場データ イベントを受け取り、システムの他の部分によって解釈されるイベントを返す、非常に単純なインターフェイスを用意するだけです。このイベントは、大きな内部イベント キューにディスパッチされます。

 interface Indicator {
     Event processEvent(MarketDataEvent e);
 } 

したがって、MarketDataEvents のストリームは、市場から直接、または他のインジケーターから取得され、processEvent メソッド内で特定のしきい値または条件が満たされると、メソッドは null 以外のイベントを返し、内部にデプロイされます。そうしないと、このメソッドは単に null 値を返します。

于 2013-10-15T09:58:39.233 に答える