торговля: как объявить интерфейс «Индикатор» - PullRequest
1 голос
/ 11 декабря 2011

Я пытался задать этот вопрос в «количественных финансах», но, похоже, это лучшее место, потому что вопрос больше о программировании, чем о торговле

Как вы объявляете Indicator интерфейс? Как правильно моделировать «Индикатор»?

Я использую c # и хочу объявить Indicator интерфейс следующим образом:

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

или, возможно, даже так:

interface Indicator
{
    event Action<Double> ValueUpdated;
}

Я считаю "чистую цену" также тривиальным показателем:

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

Пример МА:

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 голосов
/ 15 октября 2013

Насколько я понимаю, Индикатор должен выполнить какое-то действие после чего-то интересного, как это произошло в рыночных данных. Это означает, что интерфейс должен быть предупрежден обо всех интересных событиях, это могут быть события чисто рыночных данных или события, вызванные другими индикаторами. У меня просто очень простой интерфейс, который принимает событие рыночных данных и возвращает какое-то событие в интерпретацию какой-либо другой части системы. Это событие будет отправлено в большую внутреннюю очередь событий.

 interface Indicator {
     Event processEvent(MarketDataEvent e);
 } 

Таким образом, поток MarketDataEvents поступает либо непосредственно из рынка, либо из какого-либо другого индикатора, а затем, когда определенный метод или условие удовлетворяются в рамках метода processEvent, метод возвращает ненулевое событие для развертывания. во внутреннюю очередь событий, иначе этот метод просто вернул бы нулевые значения.

0 голосов
/ 11 декабря 2011

У меня было бы что-то вроде этого

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 #) илиМетатрейдер (реализовано с помощью c)

...