API 4.2.2.15. Странная ошибка
Atom Ответить
26.02.2014


Котирование запускаю так:
Код
                var quotingStrategy = new MyMarketQuotingStrategy(direction, absVolume)
                {
                    DisposeOnStop = true,
                    WaitAllTrades = true,
                    Volume = absVolume,
                    BestPriceOffset = new Unit(3, UnitTypes.Step, Security),
                };

                quotingStrategy.WhenStarted().Do(() => Log.InfoFormat("Мое котирование {0} запущено Started", quotingStrategy.Guid)).Once().Sync(_syncObject).Apply(quotingStrategy);
                quotingStrategy.WhenStopped().Do(() => Log.InfoFormat("Мое котирование {0} остановлено Stopped", quotingStrategy.Guid)).Once().Sync(_syncObject).Apply(quotingStrategy);
                quotingStrategy.WhenNewMyTrades().Do(trades =>
                {
                    foreach (var myTrade in trades)
                        quotingStrategy.TradesVolume += myTrade.Trade.Volume;

                    if (quotingStrategy.TradesVolume == quotingStrategy.Volume)
                    {
                        var volumeSum = 0m;
                        var volumedPriceSum = 0m;

                        foreach (var theTrade in quotingStrategy.MyTrades.Select(myTrade => myTrade.Trade))
                        {
                            volumeSum += theTrade.Volume;
                            volumedPriceSum += theTrade.Volume * theTrade.Price;
                        }

                        var transactionAveragePrice = volumedPriceSum / volumeSum;
                        Log.InfoFormat("Мое котирование {0} остановлено по сделкам", quotingStrategy.Guid);
                    }
                }).Sync(_syncObject).Apply(quotingStrategy);
                quotingStrategy.WhenOrderChanged().Do(order =>
                {
                    Log.DebugFormat("Мое котирование {0}. OnOrderChanged State: {1}, Order: {2}",
                        quotingStrategy.Guid, order.State, order);

                    if (order.State == OrderStates.Done || order.State == OrderStates.Failed)
                    {
                        Log.InfoFormat("Мое котирование {0}. Заявка {1} исполнена", quotingStrategy.Guid, order);
                    }
                }).Sync(_syncObject).Apply(quotingStrategy);

                ChildStrategies.Add(quotingStrategy);
quotingStrategy.WhenStopped() не срабатывает никогда. Котирование останавливается не по завершению процесса котирования, а при остановке родительской стратегии.

Теги:


Спасибо:




3 Ответов
esper

Фотография
Программист
Дата: 26.02.2014
Ответить


vk37 Перейти
quotingStrategy.WhenStopped() не срабатывает никогда. Котирование останавливается не по завершению процесса котирования, а при остановке родительской стратегии.

1.
Код
.Apply(quotingStrategy)
для правила остановки скорее всего и не будет работать, т.к. правило должно сработать когда стратегия остановится, но для остановленной стратегии все правила удаляются. Правильнее сделать Apply(this).

2. Ошибка из под спойлера появляется стабильно? Можете привести S# дебаг лог?
Спасибо:

vk37

Фотография
Курсы
Дата: 26.02.2014
Ответить


Цитата:
для правила остановки скорее всего и не будет работать, т.к. правило должно сработать когда стратегия остановится, но для остановленной стратегии все правила удаляются.
Бог с ним, с правилом. Просто стратегия котирования не останавливается по окончании работы. В версиях 4.1 останавливалась.
Более подробный лог:
Или нужно debug режим логгирования включить?
Автор топика
Спасибо:

vk37

Фотография
Курсы
Дата: 26.02.2014
Ответить


Цитата:
Правильнее сделать Apply(this).
В этом случая ошибка из спойлера тоже возникает. Котирование по завершению процесса котирования в некоторых случаях останавливается, а в некоторых нет. Когда останавливается, то правило WhenStopped тоже срабатывает.

Цитата:
Ошибка из под спойлера появляется стабильно?
Не всегда. Иногда.
Автор топика
Спасибо:


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

loading
clippy