Добрый день! Помогите, пожалуйста, разобратьяс с 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);
Заранее благодарю за ответ!
Comentários (16)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
а сам orderопределён ?
Добрый день!
Сам ордер определен в классе, производном от ActionStrategy... 🤨 Все перепробовал, никак не запускается...
А Вы хотите запустить котирование с какими параметрами?
priceExchange и priceDelta создаёте, но значения Value не заданы.
И выведите лог стратегии что там ?
Добрый день! Благодарю за помощь!
А Вы хотите запустить котирование с какими параметрами?
priceExchange и priceDelta создаёте, но значения Value не заданы.
StrategyName: MQS; errorState: None; msg: Стратегия запущена.
Ниже привожу еще раз код, который я пишу... - Начиная, от определения Ордера, кончая запуском MarketQuotingStrategy. Подскажите, пожалуйста, что нужно сделать (какие корректировки внести, с какой целью), чтобы MarketQuotingStrategy стала формировать заявки.
Ecng.Trading.BusinessEntities.Order order = CreateOrder(Ecng.Trading.BusinessEntities.OrderDirections.Buy, _Security.LastTrade().Price, volume);
order.ExtensionInfo = new Dictionary<Object, Object>(); order.ExtensionInfo.Add(Ecng.Trading.Quik.DdeOrderColumns.ClientCode, ClientCode);
А класс StrategyManager где нибудь используете?
Да, базова стратегия _MyStrategy(из которой запускаю квотирование) предварительно добавлена в strategyManager
strategyManager.Register(_MyStrategy, portfolio, _Security);
Но я не использую метод OnProcess, не знаю может быть это важно... У меня в классе _MyStrategy есть метод Process, который я вызываю при появлении новой сделки по инструменту. У меня нет необходимости в итерационной обработке. В справке написано, что strategy.Start(); не нужно вызывать, т.к. есть автоматическая связка с классом-родителем. Но поскольку я не использую strategy OnProcess, вызываю strategy.Start(); принудительно
Если родительская стратегия не работает, то и дочерняя так же не будет работать.
Сделал запуск базовой стратегии прямо в конструкторе, сам метод OnProcess переопределил с вечным состоянием Continue. Теперь в логе видно, что дочерние стратегии стали выполняться и что-то пытаться делать. Но у всех возникает ошибка "Коллекция котировок пуста", в стакане дофигища всяческих котировок. Подскажите, пожалуйста, что не так делаю? Стакан:
Ошибка 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==()
запуск базовой стратегии public NazarActionStrategy() { this.PnLManager.Init(); this.PositionManager.Init(); this.Log += strategy_Log;
protected override Ecng.Trading.Algo.Strategies.StrategyProcessResults OnProcess() { return Ecng.Trading.Algo.Strategies.StrategyProcessResults.Continue; }
Вот он как раз и нужен для котирования. Экспортируете его?
похоже я на эти грабли уже наступал
надо
Да, стакан экспортирую... самым первым делом сделал trader.RegisterQuotes(_Security);
Нет, к сожалению, не помогло... Стакан мне кажется не читается... Экспорт по DDE запущен, котировки идут, но коллекция пустая... Не пойму почему
попробовал сделать обработку QuotesChanged, но событие никогда не срабатывает, хотя стакан меняется.🤨
После этого кода, лог не выводится
trader.RegisterQuotes(_Security);
trader.QuotesChanged += (marketDepth) => { Globals.Сообщить(marketDepth.Last().BestAsk.ToString(),Globals.СтатусСообщения.Инфо); };
А _Security то само заполняется? Verifier не ругается?
Перед регистрацией квотирования стоит проверка if (_Security != null) {trader.RegisterQuotes(_Security);
trader.QuotesChanged += (marketDepth) => { Globals.Сообщить(marketDepth.Last().BestAsk.ToString(),Globals.СтатусСообщения.Инфо); }; }
Стакан починил... Нужно, чтобы в нем были только колонки Продажа-Цена-Покупка... У меня были перед этими ключевыми колонками еще вские разные добавлены, поэтому событие не срабатывало. После этого котирование тоже заработало. Всем огромнейшее спасибо!