ActionStrategy() и свечи
Atom Ответить
13.06.2011


Для работы со свечками в ActionStrategy доступны
Код
NewCandle(CandleToken)
Changed(Candle, ICandleManager)
Finished(Candle, ICandleManager)

А как получить доступ к _candleManager.CandlesFinished() ? т.е. как вызывать Action каждый раз по окончанию свечи ?
Я делаю так:
Код
When(_candleToken.NewCandle()).Do(delegate()
{
var finishedCandle = _candleManager.GetTimeFrameCandles(Security, _timeFrame, 2).FirstOrDefault();
}).MakePeriodical();

Но это явно не джедайский подход, хотелось бы что-то поэлегатнее, в идеале в духе _candleManager.CandlesFinished() - чтобы сразу получать список законченных свечек и работать с ними как-то так:
Код
When(_candleToken.NewCandleFinished()).Do(Action(Candle newCandle);


Теги:


Спасибо:




18 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 14.06.2011
Ответить


valenock Перейти
хотелось бы что-то поэлегатнее, в идеале в духе _candleManager.CandlesFinished() - чтобы сразу получать список законченных свечек и работать с ними как-то так:
Код
When(_candleToken.NewCandleFinished()).Do(Action(Candle newCandle);



Хороший фича реквест. В 3.2.1 добавлю.
Спасибо:

Alex Ander

Фотография
Дата: 10.07.2011
Ответить


Как передать в метод OnCandlesFinished сформированные свечи?

Код

this
    .When(_candleToken.CandlesFinished())
    .Do(OnCandlesFinished);
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 10.07.2011
Ответить


Alex Ander Перейти
Как передать в метод OnCandlesFinished сформированные свечи?

Код

this
    .When(_candleToken.CandlesFinished())
    .Do(OnCandlesFinished);


Код

this
    .When(_candleToken.CandlesFinished())
    .Do<IEnumerable<Candles>>(OnCandlesFinished);
Спасибо: Alex Ander

Alex Ander

Фотография
Дата: 11.07.2011
Ответить


Код

            this
                .When(base.Security.Changed())
                .Do(OnChanged);

            this
                .When(_сandleToken.CandlesFinished())
                .Do<IEnumerable<Candle>>(OnCandlesFinished);


Второе событие вызывается отлично.
А первое - ни разу не вызвалось. Оно должно вызываться при каждом изменении цены инструмента?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.07.2011
Ответить


Alex Ander Перейти
А первое - ни разу не вызвалось. Оно должно вызываться при каждом изменении цены инструмента?


При каждом изменении инструмента. А вот кода меняется сам инструмент - вопрос. Если Квик - то он никогда не меняется.
Спасибо:

Alex Ander

Фотография
Дата: 11.07.2011
Ответить


В документации https://stocksharp.ru/do...e0-aba8-0d4b93dea60e.htm есть фрагмент:

Цитата:

правило на событие изменения фьючерсного контракта (его цены):
Код

this
    .When(base.Security.Changed())
    .Do(ReHedge);


Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.07.2011
Ответить


Alex Ander Перейти
В документации https://stocksharp.ru/do...e0-aba8-0d4b93dea60e.htm есть фрагмент:

Цитата:

правило на событие изменения фьючерсного контракта (его цены):
Код

this
    .When(base.Security.Changed())
    .Do(ReHedge);




Это хеджирование опционов. И есть раздел доки для настройки Квика под опционы. В этом случае изменения будут приходить.
Спасибо: Alex Ander

Alex Ander

Фотография
Дата: 11.07.2011
Ответить


Понятно.

Тогда пример: Security.LastTrade.Price = 190000 (фьючерс RIU1)
Нужно поставить событие на условие превышения Security.LastTrade.Price уровня 190200.

Код

            this
                .When(Security.LastTradePriceMore(new Unit(200)))// или 190200?
                .Do(MyAction);


Спасибо:

Alexander

Фотография
Дата: 11.07.2011
Ответить


Alex Ander Перейти
Понятно.

Тогда пример: Security.LastTrade.Price = 190000 (фьючерс RIU1)
Нужно поставить событие на условие превышения Security.LastTrade.Price уровня 190200.

Код

            this
                .When(Security.LastTradePriceMore(new Unit(200)))// или 190200?
                .Do(MyAction);




200
Спасибо: Alex Ander

Alex Ander

Фотография
Дата: 11.07.2011
Ответить


Ни так, ни эдак MyAction не запускается. :(
Спасибо:

Alexander

Фотография
Дата: 11.07.2011
Ответить


Наверное не запущен стакан :)
Спасибо:

Alex Ander

Фотография
Дата: 11.07.2011
Ответить


Стакан не запущен, но ведь речь идет не про BestBidPriceMore/BestAskPriceMore, а про LastTradePriceMore.

А значение Security.LastTrade.Price меняется синхронно с данными в квике.


Спасибо:

Alex Ander

Фотография
Дата: 12.07.2011
Ответить


Включил экспорт стакана
Код

_trader.RegisterQuotes(_strategy.Security);


Ничего не изменилось, события не вызываются.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.07.2011
Ответить


Alex Ander Перейти
Включил экспорт стакана
Код

_trader.RegisterQuotes(_strategy.Security);


Ничего не изменилось, события не вызываются.


ITrader.SecuritiesChanged передает измененный инструмент?
Спасибо:

Alex Ander

Фотография
Дата: 12.07.2011
Ответить


Код

_trader.Connected += () =>
{

  ...

  _trader.SecuritiesChanged += securities =>
  {
     foreach (var sec in securities) MessageBox.Show(sec.Name);
  };

  ...

};


Тоже ни разу не вызывается и ничего не передается.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 12.07.2011
Ответить


Alex Ander Перейти
Тоже ни разу не вызывается и ничего не передается.


Потому что Квик транслирует изменения по таблице, а не по инструменту. В таблице что-то визуально изменяется?
Спасибо:

Alex Ander

Фотография
Дата: 12.07.2011
Ответить


Цифры в таблице Квика не меняются.
Цвет строки меняется (красный - зеленый) в соответствии с ценой.

Михаил, у меня не вызывается и LastTradePriceMore.
Хотя цена последней сделки передается правильно и регулярно.
CandlesFinished тоже работает безукоризненно.
Спасибо:

Alexander

Фотография
Дата: 12.07.2011
Ответить


Это особенность квика.
SecurityChanged не приходит, т.к. ничего физически в таблице не меняется.
В 3.2.5 были изменения немного логики работы, может поможет.

Как вариант - добавить дополнительную колонку с последней ценой инструмента, тогда SecurityChanged приходить будет.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy