← Atrás

Стратегия и выставленные заявки

При запуске стратегии она начинает прокачивать весь список заявок заново. Как то можно внутри стратегии подождать когда все старые заявки будут прокачены?

¿Le resultó útil este tema?

Compartir tema

Comentarios (29)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Alexander
Alexander

Коннектор какой?

frontman
frontman Autor

PlazaTrader

Alexander
Alexander

frontman: PlazaTrader

Ревизиями пользуйтесь. См. sample

frontman
frontman Autor

Пользуюсь. И сегодня вы мне про них рассказали. Но почему то если навешивать обработчик на событие ITrader.NewOrders вне стратегии, то через это событие поступают действительно новые заявки. Но после запуска стратегии она начинает прокачивать все заявки заново.

Alexander
Alexander

frontman: Пользуюсь. И сегодня вы мне про них рассказали. Но почему то если навешивать обработчик на событие ITrader.NewOrders вне стратегии, то через это событие поступают действительно новые заявки. Но после запуска стратегии она начинает прокачивать все заявки заново.

через Strategy.NewOrders проходят заявки только те, которые

  1. были посланы через данный ITrader (событие NewOrders)
  2. выставлены через саму стратегию
frontman
frontman Autor

Вот я и интересуюсь может для стратегии есть какой то свой механизм) И еще не пойму нафига она вообще все заявки прокачивает. Ее же должны интересовать только те заявки которые в пределах ее самой были созданы...

frontman
frontman Autor

Смотрите как я узнал что она качает сначало старые заявки. Я создал стратегию и подключил логирование:

_```csharp strategy = new MyStrategy { Security = security, Trader = trader, Portfolio = portfolio, Name = "Мое", Volume = 1 }; var logManager = new LogManager(); logManager.Sources.Add(_strategy); logManager.Listeners.Add(new GuiLogListener(logControl1)); _strategy.Start();


После вызова метода Start() мне стратегия сама начинает выводить(хотя я явно это не указывал)   
все новые счета. Вот лог


Мое 28.09.2011 14:26:55.410 		Обработка Limit заявки 0 на Buy с номером 5220740060.
Мое 28.09.2011 14:28:35.832 		Обработка Limit заявки 0 на Sell с номером 5220777508.
Мое 28.09.2011 14:28:13.910 		Стратегия остановлена.
Мое 28.09.2011 14:28:13.910 		Стратегия останавливается.
Мое 28.09.2011 14:27:26.441 		Обработка Limit заявки 0 на Buy с номером 5220753688.
Мое 28.09.2011 14:27:14.566 		Обработка Limit заявки 0 на Sell с номером 5220748381.
Мое 28.09.2011 14:27:12.504 		Обработка Limit заявки 0 на Sell с номером 5220747517.
Мое 28.09.2011 14:27:12.301 		Обработка Limit заявки 0 на Sell с номером 5220747107.
Мое 28.09.2011 14:26:46.973 		Обработка Limit заявки 0 на Sell с номером 5220735427.
Мое 28.09.2011 14:26:43.535 		Стратегия запущена.

Alexander
Alexander

frontman: Смотрите как я узнал что она качает сначало старые заявки. Я создал стратегию и подключил логирование:

_```csharp strategy = new MyStrategy { Security = security, Trader = trader, Portfolio = portfolio, Name = "Мое", Volume = 1 }; var logManager = new LogManager(); logManager.Sources.Add(_strategy); logManager.Listeners.Add(new GuiLogListener(logControl1)); _strategy.Start();

> 
> После вызова метода Start() мне стратегия сама начинает выводить(хотя я явно это не указывал)
> все новые счета. Вот лог
> 
> 
> Мое 28.09.2011 14:26:55.410 		Обработка Limit заявки 0 на Buy с номером 5220740060.
> Мое 28.09.2011 14:28:35.832 		Обработка Limit заявки 0 на Sell с номером 5220777508.
> Мое 28.09.2011 14:28:13.910 		Стратегия остановлена.
> Мое 28.09.2011 14:28:13.910 		Стратегия останавливается.
> Мое 28.09.2011 14:27:26.441 		Обработка Limit заявки 0 на Buy с номером 5220753688.
> Мое 28.09.2011 14:27:14.566 		Обработка Limit заявки 0 на Sell с номером 5220748381.
> Мое 28.09.2011 14:27:12.504 		Обработка Limit заявки 0 на Sell с номером 5220747517.
> Мое 28.09.2011 14:27:12.301 		Обработка Limit заявки 0 на Sell с номером 5220747107.
> Мое 28.09.2011 14:26:46.973 		Обработка Limit заявки 0 на Sell с номером 5220735427.
> Мое 28.09.2011 14:26:43.535 		Стратегия запущена.


Стратегия их обрабатывает, но не добавляет в свои сделки.
Обрабатывает - т.к. их содержит Trader.


Чтобы убедиться и закрыть вопрос - распечатайте Strategy.Orders.
frontman
frontman Autor

Заметьте что даже после остановки стратегии заявки продолжают приходить) ITrader в данной программе не исп больше)

frontman
frontman Autor

Внутри стратегии и правила и больше нет вообще ни какой логики

 base.OnStarting();

this.When(Security.MarketDepthChanged())
    .Do<MarketDepth>(MarketDepthChanged);

 his.When(this.StrategyNewOrder())
    .Do<Order>(order =>
                     this.AddOrderInfoLog(order, "Выставлена"));
frontman
frontman Autor

Нет. тут я даже ничего против не говорю собственно) Вы правы)

frontman
frontman Autor

Первоначальный вопрос был в другом. Но ваш ответ мне понятен вполне.. Спасибо.

Alexander
Alexander

frontman: Первоначальный вопрос был в другом. Но ваш ответ мне понятен вполне.. Спасибо.

Можно сделать отметку запуска стратегий и дождаться пока перестанут приходить order со временем меньше вашего. Всё от вашей выдумки зависит.

frontman
frontman Autor

)) Спасибо. Я просто спрашиваю т.к библиотека StockSharp достаточно большая и мало ли что там уже есть)

frontman
frontman Autor

А и еще насчет Ревизии... Может как нибудь оформить эти методы в библиотеку?) Ну они реально нужные...

Alexander
Alexander

frontman: А и еще насчет Ревизии... Может как нибудь оформить эти методы в библиотеку?) Ну они реально нужные...

Я не знаю о чем вы, но если напишите код и расскажите для чего он нужен - можно включить, почему нет. Ревизии плазой поддерживаются, пользуйтесь на здоровье :)

frontman
frontman Autor

Нет я о том что для того что бы ими восп мне пришлось вот сколько всего написать

private IEnumerable<PlazaStream> RevisionStreams
        {
            get
            {
                return new[]
				{
					_trader.StreamRegistry.CommonFutureStream,
					_trader.StreamRegistry.SessionContentsFutureStream,
					_trader.StreamRegistry.CommonOptionStream,
					_trader.StreamRegistry.SessionContentsOptionStream,
					_trader.StreamRegistry.PortfoliosStream,
					_trader.StreamRegistry.PositionsStream,
					_trader.StreamRegistry.DealFutureStream,
					_trader.StreamRegistry.DealOptionStream,
					_trader.StreamRegistry.OrdersLogFutureStream,
					_trader.StreamRegistry.OrdersLogOptionStream,
					_trader.StreamRegistry.SessionFutureStream
				};
            }
        }

        private const string _revFile = "revisions.xml";

        private void SaveRevisions()
        {
            lock (_revFile)
                new XmlSerializer<IEnumerable<int>>().Serialize(RevisionStreams.Select(s => s.Revision), _revFile);
        }

        private void LoadRevisions()
        {
            if (File.Exists(_revFile))
            {
                try
                {
                    int[] revs;

                    lock (_revFile)
                        revs = new XmlSerializer<IEnumerable<int>>().Deserialize(_revFile).ToArray();

                    var index = 0;

                    foreach (var stream in RevisionStreams)
                    {
                        System.Diagnostics.Trace.WriteLine("{0} LoadRevisions {1}".Put(stream.Table.Name, revs[index]));
                        stream.Revision = revs[index++];
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Ошибка в файле " + _revFile, MessageBoxButton.OK, MessageBoxImage.Error);
                    File.Delete(_revFile);
                }
            }
        }
frontman
frontman Autor

Ну не написать а скопипастить... Но тем не менее))

Alexander
Alexander

Это вроде копипаст, не требовало написания. :)

  1. у всех разные наборы стримов
  2. все по-разному хотят их хранить - кто-то в бд, кто-то в xml, кому-то вообще не надо.
  3. кто-то просто устанавливает нужный параметр стримам чтоб не качались.
frontman
frontman Autor

Alexander: ... 3) кто-то просто устанавливает нужный параметр стримам чтоб не качались.

Коль уж написали... Т.е. я так понял некоторые потоки можно отключить? А подскажите как?)

Alexander
Alexander

frontman:

Alexander: ... 3) кто-то просто устанавливает нужный параметр стримам чтоб не качались.

Коль уж написали... Т.е. я так понял некоторые потоки можно отключить? А подскажите как?)

StartStream \ StopStream или сделать себе метод похожий на старт только фьючерсных потоков - StartFutureExport

Но я писал о свойстве RequestType для стримов. Предвосхищая вопрос - см. документация плазы для подробностей. :)

frontman
frontman Autor

Все понял. Спасибо)

Alexander
Alexander

frontman: Все понял. Спасибо)

Повторюсь что уже неоднократно говорил - проект Plaza открытый и если нужны изменения - вносите.

frontman
frontman Autor

Нет целесообразность так же важна. Вот в данном случае это не целесообразно...

frontman
frontman Autor

Ага. Понял. а вот как быть например со стратегией? Она сама экспорт запускает. Я правильно понял? Как ее заставить качать только нужное?)

frontman
frontman Autor

Или я не правильно понял?) Я теперь сомневаюсь уже)

Alexander
Alexander

Посмотрите примеры. Стратегия берёт данные из ITrader. Никакой экспорт она не запускает, это разные модули.

frontman
frontman Autor

Все спасибо. Ухожу в себя)))

frontman
frontman Autor

А то я вас запилил уже))