← Back

Sync

Почему возникает ошибка при компиляции (до этого красным ничего не подчёркивается), когда я добавляю к правилу .Sync(_locker) инициализированный как

private readonly SyncObject _locker = new SyncObject();

А в итоге: Error 1 The type 'Wintellect.PowerCollections.CollectionBase`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'PowerCollections, Version=1.0.2224.30206, Culture=neutral, PublicKeyToken=8d05ee679e87a45f'.

Comments (22)

Login or Create account, Log in or register to leave a comment

IvanB
IvanB

Buratino: Почему возникает ошибка при компиляции (до этого красным ничего не подчёркивается), когда я добавляю к правилу .Sync(_locker) инициализированный как

private readonly SyncObject _locker = new SyncObject();

> 
> А в итоге:
> *Error	1	The type 'Wintellect.PowerCollections.CollectionBase`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'PowerCollections, Version=1.0.2224.30206, Culture=neutral, PublicKeyToken=8d05ee679e87a45f'.*

Вероятнее всего, в Вашем проекте отсутствует сборка PowerCollections.dll, добавьте ее в раздел References.
Buratino
Buratino Author

IvanB:

Buratino: Почему возникает ошибка при компиляции (до этого красным ничего не подчёркивается), когда я добавляю к правилу .Sync(_locker) инициализированный как

private readonly SyncObject _locker = new SyncObject();

> >
> > А в итоге:
> > *Error	1	The type 'Wintellect.PowerCollections.CollectionBase`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'PowerCollections, Version=1.0.2224.30206, Culture=neutral, PublicKeyToken=8d05ee679e87a45f'.*
> 
> Вероятнее всего, в Вашем проекте отсутствует сборка PowerCollections.dll, добавьте ее в раздел References.

Не слышал раньше про неё, в уроках вроде бы синхронизация без неё была.
А что-то надо добавлять в using? Типа *Wintellect.PowerCollections.CollectionBase* или *StockSharp.PowerCollections.CollectionBase*. Всё равно проблема осталась.
IvanB
IvanB

Buratino:

IvanB:

Buratino: Почему возникает ошибка при компиляции (до этого красным ничего не подчёркивается), когда я добавляю к правилу .Sync(_locker) инициализированный как

private readonly SyncObject _locker = new SyncObject();

> > >
> > > А в итоге:
> > > *Error	1	The type 'Wintellect.PowerCollections.CollectionBase`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'PowerCollections, Version=1.0.2224.30206, Culture=neutral, PublicKeyToken=8d05ee679e87a45f'.*
> >
> > Вероятнее всего, в Вашем проекте отсутствует сборка PowerCollections.dll, добавьте ее в раздел References.
> 
> Не слышал раньше про неё, в уроках вроде бы синхронизация без неё была.
> А что-то надо добавлять в using? Типа *Wintellect.PowerCollections.CollectionBase* или *StockSharp.PowerCollections.CollectionBase*. Всё равно проблема осталась.

В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...)
Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.
Buratino
Buratino Author

Buratino: В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...) Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.

В примере урока 6 такая библиотека вообще не подключена, но переменная SyncObject _mainlock используется. Может дело в сборке? Я делаю на базе 4.1.9, а там уже 4.1.16. Тогда это возвращает нас в тему обновления. Сегодня сделаете пример/шаблон, который бы позволял начинать писать робота не с реализации коннектора, а торговой логики? Я протестирую и отпишусь, вышлю солюшн, если и после обновления синхронизация будет выдавать ошибку.

Пока я использую блок lock (_locker). Можно ли его считать аналогом? У меня такое ощущение, что я его использую не к месту, т.к., например, заявки иногда идут дуплетом.

IvanB
IvanB

IvanB:

Buratino: В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...) Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.

В примере урока 6 такая библиотека вообще не подключена, но переменная SyncObject _mainlock используется. Может дело в сборке? Я делаю на базе 4.1.9, а там уже 4.1.16. Тогда это возвращает нас в тему обновления. Сегодня сделаете пример/шаблон, который бы позволял начинать писать робота не с реализации коннектора, а торговой логики? Я протестирую и отпишусь, вышлю солюшн, если и после обновления синхронизация будет выдавать ошибку.

Пока я использую блок lock (_locker). Можно ли его считать аналогом? У меня такое ощущение, что я его использую не к месту, т.к., например, заявки иногда идут дуплетом. По большому счету, SyncObject не отличается от обычного object. Обновление уроков на последнюю версию библиотеки S# будет переведено в течении текущих выходных дней, но следует заметить, что в этом случае видео не будет полностью соответствовать предоставляемым проектам.

Buratino
Buratino Author

Buratino:

IvanB:

Buratino: В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...) Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.

В примере урока 6 такая библиотека вообще не подключена, но переменная SyncObject _mainlock используется. Может дело в сборке? Я делаю на базе 4.1.9, а там уже 4.1.16. Тогда это возвращает нас в тему обновления. Сегодня сделаете пример/шаблон, который бы позволял начинать писать робота не с реализации коннектора, а торговой логики? Я протестирую и отпишусь, вышлю солюшн, если и после обновления синхронизация будет выдавать ошибку.

Пока я использую блок lock (_locker). Можно ли его считать аналогом? У меня такое ощущение, что я его использую не к месту, т.к., например, заявки иногда идут дуплетом. По большому счету, SyncObject не отличается от обычного object. Обновление уроков на последнюю версию библиотеки S# будет переведено в течении текущих выходных дней, но следует заметить, что в этом случае видео не будет полностью соответствовать предоставляемым проектам.

Ну да, конечно. Его и не надо привязывать к урокам. Нужна именно заготовка для начала работы (без углубления на начальном этапе в особенности безопасного соединения), а не обучения.

IvanB
IvanB

Buratino: Ну да, конечно. Его и не надо привязывать к урокам. Нужна именно заготовка для начала работы (без углубления на начальном этапе в особенности безопасного соединения), а не обучения. В проектах уроков все есть. Разве что версия S# используется не последняя на данный момент. Думаю, сделаем так, проекты уроков не будут изменяться, проекты оберток коннектора и их использование будут переведены на последнюю версию S# и опубликованы на сервере. Правильно?, Вам это подходит?

Buratino
Buratino Author

IvanB:

Buratino: Ну да, конечно. Его и не надо привязывать к урокам. Нужна именно заготовка для начала работы (без углубления на начальном этапе в особенности безопасного соединения), а не обучения. В проектах уроков все есть. Разве что версия S# используется не последняя на данный момент. Думаю, сделаем так, проекты уроков не будут изменяться, проекты оберток коннектора и их использование будут переведены на последнюю версию S# и опубликованы на сервере. Правильно?, Вам это подходит?

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

IvanB
IvanB

Buratino:

IvanB:

Buratino: Ну да, конечно. Его и не надо привязывать к урокам. Нужна именно заготовка для начала работы (без углубления на начальном этапе в особенности безопасного соединения), а не обучения. В проектах уроков все есть. Разве что версия S# используется не последняя на данный момент. Думаю, сделаем так, проекты уроков не будут изменяться, проекты оберток коннектора и их использование будут переведены на последнюю версию S# и опубликованы на сервере. Правильно?, Вам это подходит?

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

Проект простой заготовки робота опубликован, путь: $/StockSharp Lessons/StockSharp.Edu/Additional/SampleRobot

Buratino
Buratino Author

Вопрос по обновлённой версии.

Насколько я вижу, теперь нельзя узнать, есть ли отправленные, но находящиеся ещё "в пути", заявки с помощью PendingOrders.Any(). Ок, заменим на Orders.Any(o => o.State != OrderStates.Pending). Но даже если и так, то статус у заявки продолжает оставаться Pending даже после того, как она наконец "пришла", т.е. зарегистрировалась либо failed.

Mikhail Sukhov
Mikhail Sukhov

Buratino: Вопрос по обновлённой версии.

Насколько я вижу, теперь нельзя узнать, есть ли отправленные, но находящиеся ещё "в пути", заявки с помощью PendingOrders.Any(). Ок, заменим на Orders.Any(o => o.State != OrderStates.Pending). Но даже если и так, то статус у заявки продолжает оставаться Pending даже после того, как она наконец "пришла", т.е. зарегистрировалась либо failed.

А можете проверить на последней версии? Потому что схожую ошибку мы уже лечили, и, возможно, простое обновление, решит ошибку.

Buratino
Buratino Author

Михаил Сухов:

Buratino: Вопрос по обновлённой версии.

Насколько я вижу, теперь нельзя узнать, есть ли отправленные, но находящиеся ещё "в пути", заявки с помощью PendingOrders.Any(). Ок, заменим на Orders.Any(o => o.State != OrderStates.Pending). Но даже если и так, то статус у заявки продолжает оставаться Pending даже после того, как она наконец "пришла", т.е. зарегистрировалась либо failed.

А можете проверить на последней версии? Потому что схожую ошибку мы уже лечили, и, возможно, простое обновление, решит ошибку.

Проблема на 4.1.18 есть точно. На 4.1.19 попробую. У товарища тут хотел спросить по поводу всего этого, но ветка readonly.

Mikhail Sukhov
Mikhail Sukhov

Buratino: Проблема на 4.1.18 есть точно. На 4.1.19 попробую.

Давайте еще раз про проблему. Вы хотите сказать, что у вас состояние заявки не переходит и Pending в Active или Done? Я правильно понял вашу ситуацию?

Buratino
Buratino Author

Михаил Сухов:

Buratino: Проблема на 4.1.18 есть точно. На 4.1.19 попробую.

Давайте еще раз про проблему. Вы хотите сказать, что у вас состояние заявки не переходит и Pending в Active или Done? Я правильно понял вашу ситуацию?

Да. Или Failed.

Mikhail Sukhov
Mikhail Sukhov

Buratino:

Михаил Сухов:

Buratino: Проблема на 4.1.18 есть точно. На 4.1.19 попробую.

Давайте еще раз про проблему. Вы хотите сказать, что у вас состояние заявки не переходит и Pending в Active или Done? Я правильно понял вашу ситуацию?

Да. Или Failed.

Вы пробовали скачать архив, распаковать и запустить Sample (если вы используете Quik). В нем так же отображаются только два состояния? Лучше проверить на наши скомпилированных примерах (чтобы не было проблем с кэшрированными библиотеками от других версий).

Buratino
Buratino Author

Михаил Сухов:

Buratino:

Михаил Сухов:

Buratino: Проблема на 4.1.18 есть точно. На 4.1.19 попробую.

Давайте еще раз про проблему. Вы хотите сказать, что у вас состояние заявки не переходит и Pending в Active или Done? Я правильно понял вашу ситуацию?

Да. Или Failed.

Вы пробовали скачать архив, распаковать и запустить Sample (если вы используете Quik). В нем так же отображаются только два состояния? Лучше проверить на наши скомпилированных примерах (чтобы не было проблем с кэшрированными библиотеками от других версий).

В посте 10 дана ссылка на проект на базе которого и проверялось. Библиотек перед этим никаких не заменял.

И как проверять на уже скомпилированных примерах для QUIK, как вылавливать нужную точку остановки и баг, менять код?..

Mikhail Sukhov
Mikhail Sukhov

Buratino: И как проверять на уже скомпилированных примерах для QUIK, как вылавливать нужную точку остановки и баг, менять код?..

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

Buratino
Buratino Author

Можно ли как-то по-срочному вернуть коллекцию PendingOrders в StockSharp.Algo.Strategies ? А то и не туда и не сюда: со старой версией библиотеки, но с PendingOrders уже работать нельзя, а в новой баг со сменой статуса заявки.

Buratino
Buratino Author

Судя по указанной в документации версии апдейта, ничего не поменялось. Упоминания о возврате PendingOrders тоже нет.

OrderStates - перечисление StockSharp - платформа для торговых роботов

Состояния заявки.

Пространство имён: StockSharp.BusinessEntities Сборка: StockSharp.BusinessEntities (в StockSharp.BusinessEntities.dll) Версия: 4.1.16.1 (4.1.16.1)

Buratino
Buratino Author

Но ведь В посте 10 дана ссылка на проект на базе которого и проверялось. Библиотек перед этим никаких не заменял.

IvanB
IvanB

Buratino: Но ведь В посте 10 дана ссылка на проект на базе которого и проверялось. Библиотек перед этим никаких не заменял.

Посмотрите проект $/StockSharp Lessons/StockSharp.Edu/Additional/Lesson_last_version_ss/01/StockSharpStart в частности следующий код:


            //подписываемся на событие подключения, как только подлючимся, сразу запустим экспорт
            _trader.NewOrders += orders => this.GuiAsync(() =>
                {
                    //указываем количество зарегистрированных заявок
                    tbOrdersCount.Text = _trader.Orders.Count().ToString();
                    
                    Debug.WriteLine("Getting orders: {0}", orders.Count());
                    foreach (var order in orders)
                    {
                        Debug.WriteLine("Order State: {0}; {1}", order.State, order.ToString());
                    }
                });

            _trader.OrdersChanged += orders =>
                {
                    Debug.WriteLine("Changed orders: {0}", orders.Count());
                    foreach (var order in orders)
                    {
                        Debug.WriteLine("+Order State: {0}; {1}", order.State, order.ToString());
                    }
                };

Данный код демонстрирует, как получать новые заявки и их изменения, полагаю, это то, что Вам нужно.

Buratino
Buratino Author

Да, я сегодня в указанный выше пример вставил вот такой смешной код. Показывает пендинги корректно. Надо побольше узнать о таком явлении как кеширование библиотек и попробовать заново всё сделать.


using System;
using System.Linq;
using System.Threading;
using System.Windows;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Quik;
using StockSharp.TraderConnection;

namespace SampleRobot
{
    public partial class MainWindow
    {
        public QuikTrader Trader { get; private set; }

        public MainWindow()
        {
            InitializeComponent();

            var quikPath = QuikTerminal.GetDefaultPath()

            InterFace.SafeConnection = new SafeConnection(Trader = new QuikTrader(quikPath));
        }

        private void Button_Click_1(object sender, System.Windows.RoutedEventArgs e)
        {
            InterFace.SafeConnection.Trader.RegisterMarketDepth(InterFace.SelectedSecurity);
            var strategy = new MyStrategy
            {
                Portfolio = InterFace.SelectedPortfolio,
                Security = InterFace.SelectedSecurity,
                Trader = InterFace.SafeConnection.Trader
            };
            strategy.Start();
        }

        private class MyStrategy : Strategy
        {
            protected override void OnStarted()
            {

                MyMethod();
                base.OnStarted();
            }

            private void MyMethod()
            {
                while (true)
                {
                    var order = this.BuyAtLimit(2000, 1);
                    RegisterOrder(order);
                    MessageBox.Show(order.State + " \n Pending is "
                        + (order.State == OrderStates.Pending)
                         + " \n Всего Pending is " + Orders.Count(o => o.State == OrderStates.Pending));

                    Thread.Sleep(5000);
                    MessageBox.Show(order.State + " \n Pending is "
                        + (order.State == OrderStates.Pending)
                         + " \n Всего Pending is " + Orders.Count(o => o.State == OrderStates.Pending));
                    CancelActiveOrders();
                }
            }
        }
    }
}