交易:你如何声明`指标'界面

时间:2011-12-11 13:35:59

标签: c# trading algorithmic-trading domain-data-modelling

我试图在“定量金融”中提出这个问题,但似乎这是更好的地方,因为更多关于编程而不是交易的问题

您如何声明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
}
你怎么看?欢迎任何建议!

2 个答案:

答案 0 :(得分: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实现)

答案 1 :(得分:0)

就我的理解而言,指标应该在市场数据中发生的有趣事情之后执行一些操作。这意味着必须在所有有趣事件上提醒界面,这些事件可能是纯粹的市场数据事件或由其他指标触发的事件。我只是有一个非常简单的接口,它接受市场数据事件并返回一些事件由系统的其他部分解释。此事件将被分派到一个大型内部事件队列。

 interface Indicator {
     Event processEvent(MarketDataEvent e);
 } 

因此MarketDataEvents流直接来自市场或来自其他指标,然后一旦满足特定阈值或条件满足processEvent方法,该方法将返回要部署的非null事件到内部事件队列,否则此方法只返回空值。