我试图在“定量金融”中提出这个问题,但似乎这是更好的地方,因为更多关于编程而不是交易的问题
您如何声明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
}
你怎么看?欢迎任何建议!
答案 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事件到内部事件队列,否则此方法只返回空值。