Sync
Atom Ответить
05.09.2013


Почему возникает ошибка при компиляции (до этого красным ничего не подчёркивается), когда я добавляю к правилу .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'.

Теги:


Спасибо:




22 Ответов
IvanB

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


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

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


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. Всё равно проблема осталась.
power.jpg 197,5KB (0)
Автор топика
Спасибо:

IvanB

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


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

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


IvanB Перейти
[quote=Buratino;27318]
В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...)
Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.


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

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

IvanB

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


Buratino Перейти
IvanB Перейти
[quote=Buratino;27318]
В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...)
Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.


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

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

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

Спасибо:

Buratino

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


IvanB Перейти
Buratino Перейти
IvanB Перейти
[quote=Buratino;27318]
В данном случае надо добавить пространство имен Wintellect.PowerCollections (using ...)
Если проблема осталась, то пришлите проект со всем библиотеками, которые используете на почту iv_qul@list.ru.


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

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

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



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

IvanB

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


Buratino Перейти

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

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

Спасибо:

Buratino

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


IvanB Перейти
Buratino Перейти

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

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



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

IvanB

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


Buratino Перейти
IvanB Перейти
Buratino Перейти

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

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



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


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

Buratino

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


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

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

Buratino

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


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

Mikhail Sukhov

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


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

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


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

Buratino

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


Михаил Сухов Перейти
Buratino Перейти
Вопрос по обновлённой версии.

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


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


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

Buratino

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


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

Цитата:

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

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

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

Mikhail Sukhov

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


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


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

Buratino

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


Михаил Сухов Перейти
Buratino Перейти
Проблема на 4.1.18 есть точно. На 4.1.19 попробую.


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


Да. Или Failed.
Автор топика
Спасибо:

Mikhail Sukhov

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


Buratino Перейти
Михаил Сухов Перейти
Buratino Перейти
Проблема на 4.1.18 есть точно. На 4.1.19 попробую.


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


Да. Или Failed.


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

Buratino

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


Михаил Сухов Перейти
Buratino Перейти
Михаил Сухов Перейти
Buratino Перейти
Проблема на 4.1.18 есть точно. На 4.1.19 попробую.


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


Да. Или Failed.


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


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

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

Mikhail Sukhov

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


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


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

Buratino

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


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

IvanB

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


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

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


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

Код

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();
                }
            }
        }
    }
}

Автор топика
Спасибо:


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

loading
clippy