Вопрос по MarketQuotingStrategy
Atom Ответить
03.12.2010


Добрый день!
Помогите, пожалуйста, разобратьяс с MarketQuotingStrategy. Пытаюсь продать или купить фьючерс "по рынку", но не очень понимаю механизма. Что необходимо сделать для запуска этого механизма?
У меня есть вот такой код:

Ecng.Trading.Algo.Strategies.MarketQuotingStrategy strategy = new Ecng.Trading.Algo.Strategies.MarketQuotingStrategy(order, new Ecng.Trading.BusinessEntities.Unit(), new Ecng.Trading.BusinessEntities.Unit());
strategy.IsForts = true;
strategy.Interval = TimeSpan.FromTicks(1);
strategy.PriceType = Ecng.Trading.Algo.MarketPriceTypes.Opposite;
strategy.PriceDelta = 50;
ChildStrategies.Add(strategy);
strategy.Start();

но заявки не создаются

регистрацию квотирования включил
trader.RegisterQuotes(_Security);

Заранее благодарю за ответ!

Теги:


Спасибо:




16 Ответов
ustas

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


а сам order определён ?
Спасибо:

Артем

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


Добрый день!

Сам ордер определен в классе, производном от ActionStrategy... Confused Все перепробовал, никак не запускается...
Автор топика
Спасибо:

ustas

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


А Вы хотите запустить котирование с какими параметрами?

priceExchange и priceDelta создаёте, но значения Value не заданы.

И выведите лог стратегии что там ?
Спасибо:

Артем

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


Добрый день!
Благодарю за помощь!

А Вы хотите запустить котирование с какими параметрами?
- пока с любыми, пытаюсь разобраться с механизмом. не очень понимаю что делают PriceEchange, PriceDelta. Работаю с фьючерсом РТС

priceExchange и priceDelta создаёте, но значения Value не заданы.

- А где находятся Value, и для какого объекта их нужно устанавливать?

И выведите лог стратегии что там ?

- Вывел лог для MarketQuotingStrategy (строка strategy.Log +=strategy_Log), - выводится только сообщение о запуске:

StrategyName: MQS; errorState: None; msg: Стратегия запущена.

Ниже привожу еще раз код, который я пишу... - Начиная, от определения Ордера, кончая запуском MarketQuotingStrategy. Подскажите, пожалуйста, что нужно сделать (какие корректировки внести, с какой целью), чтобы MarketQuotingStrategy стала формировать заявки.

1) Определение ордера в классе, производном от ActionStrategy

Ecng.Trading.BusinessEntities.Order order = CreateOrder(Ecng.Trading.BusinessEntities.OrderDirections.Buy, _Security.LastTrade().Price, volume);

2) Регистрация по рынку

order.ExtensionInfo = new Dictionary<Object, Object>();
order.ExtensionInfo.Add(Ecng.Trading.Quik.DdeOrderColumns.ClientCode, ClientCode);


SlippageManager.RegisterSlippage(order);

Ecng.Trading.Algo.Strategies.MarketQuotingStrategy strategy = new Ecng.Trading.Algo.Strategies.MarketQuotingStrategy(order, new Ecng.Trading.BusinessEntities.Unit(), new Ecng.Trading.BusinessEntities.Unit());
strategy.IsForts = true;
strategy.Interval = TimeSpan.FromTicks(1);
strategy.PriceType = Ecng.Trading.Algo.MarketPriceTypes.Opposite;
strategy.PriceDelta = 50;
strategy.IsParallel = true;
strategy.PriceExchange = 5;
strategy.Log +=strategy_Log;
ChildStrategies.Add(strategy);

strategy.Start();
Автор топика
Спасибо:

Mikhail Sukhov

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


Артем


И выведите лог стратегии что там ?

- Вывел лог для MarketQuotingStrategy (строка strategy.Log +=strategy_Log), - выводится только сообщение о запуске:

StrategyName: MQS; errorState: None; msg: Стратегия запущена.


А класс StrategyManager где нибудь используете?
Спасибо:

Артем

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


Да, базова стратегия _MyStrategy(из которой запускаю квотирование) предварительно добавлена в strategyManager

strategyManager.Register(_MyStrategy, portfolio, _Security);

Но я не использую метод OnProcess, не знаю может быть это важно... У меня в классе _MyStrategy есть метод Process, который я вызываю при появлении новой сделки по инструменту. У меня нет необходимости в итерационной обработке. В справке написано, что strategy.Start(); не нужно вызывать, т.к. есть автоматическая связка с классом-родителем. Но поскольку я не использую strategy OnProcess, вызываю strategy.Start(); принудительно
Автор топика
Спасибо:

Mikhail Sukhov

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


Артем
Да, базова стратегия _MyStrategy(из которой запускаю квотирование) предварительно добавлена в strategyManager

strategyManager.Register(_MyStrategy, portfolio, _Security);

Но я не использую метод OnProcess, не знаю может быть это важно... У меня в классе _MyStrategy есть метод Process, который я вызываю при появлении новой сделки по инструменту. У меня нет необходимости в итерационной обработке. В справке написано, что strategy.Start(); не нужно вызывать, т.к. есть автоматическая связка с классом-родителем. Но поскольку я не использую strategy OnProcess, вызываю strategy.Start(); принудительно


Если родительская стратегия не работает, то и дочерняя так же не будет работать.

Цитата:
Таким образом, вызывать метод Strategy.Start() можно только для тех стратегий, которые являются корневыми (Strategy.ParentStrategy равен null).
Спасибо:

Артем

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


Сделал запуск базовой стратегии прямо в конструкторе, сам метод OnProcess переопределил с вечным состоянием Continue. Теперь в логе видно, что дочерние стратегии стали выполняться и что-то пытаться делать. Но у всех возникает ошибка "Коллекция котировок пуста", в стакане дофигища всяческих котировок. Подскажите, пожалуйста, что не так делаю?
Стакан:


1) Ошибка
Name: MQS; errorState: Error; msg: System.ArgumentException: Коллекция котировок пуста.
Имя параметра: quotes
в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(IEnumerable`1 quotes, Order currentOrder)
в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(MarketDepth depth, OrderDirections orderDirection, Order currentOrder)
в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(Security security, OrderDirections orderDirection, Order currentOrder)
в Ecng.Trading.Algo.Strategies.MarketQuotingStrategy.GetNewPrice()
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qiRcAHlpbxRjZjyUrS0Iw1A==()

2) запуск базовой стратегии
public NazarActionStrategy()
{
this.PnLManager.Init();
this.PositionManager.Init();
this.Log += strategy_Log;

this.Interval = TimeSpan.FromTicks(1);
this.Start();

}

protected override Ecng.Trading.Algo.Strategies.StrategyProcessResults OnProcess()
{
return Ecng.Trading.Algo.Strategies.StrategyProcessResults.Continue;
}
Автор топика
Спасибо:

Mikhail Sukhov

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


Артем
Сделал запуск базовой стратегии прямо в конструкторе, сам метод OnProcess переопределил с вечным состоянием Continue. Теперь в логе видно, что дочерние стратегии стали выполняться и что-то пытаться делать. Но у всех возникает ошибка "Коллекция котировок пуста", в стакане дофигища всяческих котировок. Подскажите, пожалуйста, что не так делаю?


Стакан:


Вот он как раз и нужен для котирования. Экспортируете его?
Спасибо:

Артем

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


Да, стакан экспортирую...
самым первым делом сделал
trader.RegisterQuotes(_Security);
Автор топика
Спасибо:

ustas

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


Артем

...
protected override Ecng.Trading.Algo.Strategies.StrategyProcessResults OnProcess()
{
return Ecng.Trading.Algo.Strategies.StrategyProcessResults.Continue;
}


похоже я на эти грабли уже наступал

надо

Код
protected override StrategyProcessResults OnProcess()
{
base.OnProcess();
return StrategyProcessResults.Continue;
}
Спасибо:

Артем

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


Цитата:
Последние 10 сообщений(В обратном порядке)
ustas Дата: 7 декабря 2010 г. 11:26:21
Артем написал:

...
protected override Ecng.Trading.Algo.Strategies.StrategyProcessResults OnProcess()
{
return Ecng.Trading.Algo.Strategies.StrategyProcessResults.Continue;
}


похоже я на эти грабли уже наступал

надо


Цитата:
protected override StrategyProcessResults OnProcess()
{
base.OnProcess();
return StrategyProcessResults.Continue;
}


Нет, к сожалению, не помогло... Стакан мне кажется не читается... Экспорт по DDE запущен, котировки идут, но коллекция пустая... Не пойму почему
Автор топика
Спасибо:

Артем

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


попробовал сделать обработку QuotesChanged, но событие никогда не срабатывает, хотя стакан меняется.Confused

После этого кода, лог не выводится

trader.RegisterQuotes(_Security);

trader.QuotesChanged += (marketDepth) => {
Globals.Сообщить(marketDepth.Last().BestAsk.ToString(),Globals.СтатусСообщения.Инфо);
};
Автор топика
Спасибо:

ustas

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


Артем
попробовал сделать обработку QuotesChanged, но событие никогда не срабатывает, хотя стакан меняется.Confused

После этого кода, лог не выводится

trader.RegisterQuotes(_Security);

trader.QuotesChanged += (marketDepth) => {
Globals.Сообщить(marketDepth.Last().BestAsk.ToString(),Globals.СтатусСообщения.Инфо);
};


А _Security то само заполняется?
Verifier не ругается?
Спасибо:

Артем

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


Цитата:
А _Security то само заполняется?

да, заполнено.

Перед регистрацией квотирования стоит проверка
if (_Security != null)
{trader.RegisterQuotes(_Security);

trader.QuotesChanged += (marketDepth) => {
Globals.Сообщить(marketDepth.Last().BestAsk.ToString(),Globals.СтатусСообщения.Инфо);
};
}

Цитата:
Verifier не ругается?


- я скрин-шот приложил, как стакан выглядит... Я сейчас пытаюсь понять как в Verifier стакан проверить
Автор топика
Спасибо:

Артем

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


Стакан починил... Нужно, чтобы в нем были только колонки Продажа-Цена-Покупка... У меня были перед этими ключевыми колонками еще вские разные добавлены, поэтому событие не срабатывало.
После этого котирование тоже заработало. Всем огромнейшее спасибо!
Автор топика
Спасибо:


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

loading
clippy