Техподдержка S#. Логи чата в Телеграм.

Техподдержка S#. Логи чата в Телеграм.
Atom
24.11.2014
William B


Привет Всем!

В этой теме мы будем размещать логи чата активной Техподдержки в Телеграм.

Активная Техподдержка - это услуга, которая доступна всем пользователям платформы StockSharp и предназначена для тех, кто хочет быстро решить возникший вопрос или найти ошибку в собственном роботе. Наши специалисты разберут ситуацию и помогут найти оптимальное решение.

Услугу активной Техподдержки можно получить в подарок вместе с Полным или Расширенным курсом обучения либо приобрести отдельно.

Для покупателей курса, даже после истечения вашего срока Техподдержки, логи чата остаются доступны в нашей группе обучения.

По всем вопросам приобретения обучающих курсов либо активной Техподдержки обращайтесь в

Скайп: AlgoTradingRus E-mail: lesson@stocksharp.com

business-guidelines1.jpg 261 KB (2171)

Теги:


Спасибо:


< 1 2 3 4  > >>
William B

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


Активная техподдержка 29 декабря 2014 - 08 января 2015 г.

Владимир (vow001) Русаков, [29.12.14 11:04] Добрый день, возвращаясь к вопросу получения свечей через DDE с Quik через ProcessCandle, выяснил, что свечи получаются только по акциям, по фьючерсам событие не срабатывает и свечи не приходят. С чеи это может быть связано? (таблицу Все сделки (Таблица всех сделок) настроил, там значения по фьючерсам показываются)

Сергей Гаврилов, [29.12.14 13:29] В инструменты (текущая таблица) фьючерс добавлен?

Владимир (vow001) Русаков, [29.12.14 13:34] Да, добавлен (и в таблицу Инструменты, и в Текущая таблица)

Сергей Гаврилов, [29.12.14 13:35] ваш код выложите..

Владимир (vow001) Русаков, [29.12.14 13:48] такой же, как в Видео-уроке 3. Часть 1. Стратегии.

Владимир (vow001) Русаков, [29.12.14 13:49] [ Document : 29122014.txt ]

Сергей Гаврилов, [29.12.14 13:56] Вы уверены, что именно через DDE подключаетесь?

Владимир (vow001) Русаков, [29.12.14 14:00] Да, все как в уроках описано, я последовательно делаю

Сергей Гаврилов, [29.12.14 14:24] Чтобы подключиться через DDE вот такой код должен быть.. ConnectionInterFace.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()) );

Сергей Гаврилов, [29.12.14 14:25] Посмотрите в терминале у Вас скрипт Lua включен?

Сергей Гаврилов, [29.12.14 14:32] Владимир, еще вопрос... Вы референсы на 4.2.43 поменяли?

Владимир (vow001) Русаков, [29.12.14 14:48] Да, я использую ссылки версии 4.1. Но сейчас вроде бы по RiZ5 свечи стали появляться. Спасибо, дальше пока сам буду разбираться.

Сергей Гаврилов, [29.12.14 14:53] Для Aleksey Ukraintsev: Для работы с разными таймфремами нужно создать для каждого таймфрейма свою CandleSeries.. Каждая серия запускается отдельно при помощи метода CandleManager.Start. Обработать серии можно или в отдельных событиях Series.ProcessCandle или в candlemanager.Processing.

Сергей Гаврилов, [29.12.14 14:56] _series = new CandleSeries(typeof(TimeFrameCandle), _lkoh, TimeSpan.FromMinutes(1)); _series5 = new CandleSeries(typeof(TimeFrameCandle), _lkoh, TimeSpan.FromMinutes(5));

_series.ProcessCandle += candle => { Console.WriteLine("минутка"); };

_series5.ProcessCandle += candle => { Console.WriteLine("пятиминутка"); };

_candlemanager.Processing += (series, candle) => { if ((TimeSpan)candle.Arg == TimeSpan.FromMinutes(1)) { Console.WriteLine("минутка"); } if ((TimeSpan)candle.Arg == TimeSpan.FromMinutes(5)) { Console.WriteLine("пятиминутка"); } };

_candlemanager.Start(_series); _candlemanager.Start(_series5);

Алексей (kvazar) Украинцев, [29.12.14 21:47] Сергей, спасибо попробую

Сергей Гаврилов, [31.12.14 13:46] С Новым Годом! 🌲

Денис (rtDen), [05.01.15 09:56] С наступившим всех!

Алексей (kvazar) Украинцев, [06.01.15 22:25] С Наступающим Рождеством!

Сергей Гаврилов, [06.01.15 22:25] 🌲

Александр Спирин, [08.01.15 18:17] Здравствуйте! Можете подсказать урок/пример, в котором показано, как вести журнал стратегии? - хочется увидеть реестр заявок, сделок и позиций. Заранее спасибо.

Александр Спирин, [08.01.15 18:20] Или хотя бы S#-классы, которые могут быть полезны...

Сергей Гаврилов, [08.01.15 18:27] В уроке №5 "BollindgerBandsRobot" показано логгирование стратегии в специальном окне private readonly LogManager _logManager; //окно для мониторинга торговой системы private readonly MonitorWindow _monitor = new MonitorWindow();

Александр Спирин, [08.01.15 18:28] Сергей, да, я видел окно, но как мне получить журнал в файл? - типа eXcel'я...

Сергей Гаврилов, [08.01.15 18:28] В уроке №8 "Testing" показано как использовать специальное окно для отображения заявко и сделок..

Александр Спирин, [08.01.15 18:29] И смое интересное - как мне собрать сделки в позицию? - PnL можно подсчитать лишь в рамках позиции, отдельные сделки не помогут...

Сергей Гаврилов, [08.01.15 18:29] понятно, тогда чуть попозже я Вам примерный код напишу, там нужно просто слушателя на файловый вывод поменять..

Александр Спирин, [08.01.15 18:29] да, спасибо, - жду.

Александр Спирин, [08.01.15 19:49] Чергей

Александр Спирин, [08.01.15 19:50] Сергей, а позвольте общий вопрос: мне прислали план обучения (https://vk.com/pages?oid=-66650972&p=План обучения ( https://vk.com/pages?oid=-66650972&p=%D0%9F%D0%BB%D0%B0%D0%BD%20%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F )) - я его прошёл. Мой\вопрос: что дальше?

Сергей Гаврилов, [08.01.15 19:51] В смысле что дальше?

Сергей Гаврилов, [08.01.15 19:51] Робота пока не сможете написать?

Александр Спирин, [08.01.15 19:53] Это обучение - это всё, что S# хотел мне рассказать о том, как им пользоваться? Например, я не нашёл ни одного видео про S#.Studio, ни слова не услышал про то, что такое S#.Shell и как им пользоваться...

Сергей Гаврилов, [08.01.15 19:59] Там же около 40 различных видео лежит..

Сергей Гаврилов, [08.01.15 20:01] Shell - это оболочка из которой Вы можете запустить и протестировать готовые стратегии..

Сергей Гаврилов, [08.01.15 20:01] Про S#.Studio ничего не могу сказать, не знаю...

Валерий Песчинский, [08.01.15 20:02] Вопрос по поводу документации: подскажите, когда появится нормальная, своевременно обновляемая документация по стокшарпу?

Сергей Гаврилов, [08.01.15 20:06] Репост ответа Михаила на этот вопрос "Основная задача на 2015 год. 12:05:42 AM Но документация для первого старта актуальна более чем на 80 процентов."

Валерий Песчинский, [08.01.15 20:12] Это понятно, что задача на 2015 год. Вопрос в том, когда эта задача выполнится? К примеру по смарткому, 100% документации неактуально (имею ввиду раздел коннекторы--Смартком). Мне просто непонятен вот какой момент, я заплатил деньги за актуальное обучение, техподдержку. По факту - видео старые, часть методов неактуально. При просмотре видео и повторяя сказанное в нем в коде, приходится еще искать по форуму изменения. Документация не обновляется. Когда обновится, срок суппорта истечет..

Сергей Гаврилов, [08.01.15 20:16] Примеры с изменениями под 4.2.43 и описанием отличий от видео будет выложены совсем скоро 1-2 дня

Сергей Гаврилов, [08.01.15 20:20] По поводу видео я с Вами не согласен. Практически все видео актуальные, за исключением небольших изменений в библиотеке.. Но библиотека обновляется каждый месяц, невозможно каждый месяц снимать новое видео..

Валерий Песчинский, [08.01.15 20:22] 1 видео в месяц - вполне посильная задача, я считаю. Но да ладно.

Денис (rtDen), [08.01.15 20:22] А видео вообще снимать не надо. Обучающие материалы написанные текстом намного удобнее видео

Валерий Песчинский, [08.01.15 20:23] Ну да, или текст

Сергей Гаврилов, [08.01.15 20:24] Насчет текста Вы наверно правы..

Александр Спирин, [08.01.15 20:36] Поддерживаю идею с текстом - это и использовать проще, и сделать быстрее.

Александр Спирин, [08.01.15 20:37] Однока про S#.Shell - кроме самого проекта какое-то описание/видео имеется?

Сергей Гаврилов, [08.01.15 20:37] Для Alexander Spirin. ///

/// Создаем и запускаем стратегию /// private void InitStrategy() {

//создаем экземпляр стратегии var bs = new BollingerBandsStrategy(_bollingerIndicator, _rocIndicator,_maIndicator,_ma1Indicator,_series,TakeprofitParam,StoplossParam) ;

//добавляем источник информации трейдера _logManager.Sources.Add(bs);

// Создаем новый "слушатель" для записи в файл var fl = new FileLogListener("{0}{1:00}{2:00}.txt".Put(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day));

// Если нужно, чтобы в файл писались сообщения только от этой стратегиии, настраиваем фильтр fl.Filters.Add(msg => msg.Source == bs);

// добавляем слушатель в список "слушателей" _logManager.Listeners.Add(fl);

Connection.SafeConnection.Trader.RegisterMarketDepth(bs.Security);

//подписываем ся на собятия появления новых сделок и заявок по данной стратегии bs.NewMyTrades += DrawTrades; bs.OrderRegistered += DrawOrders;

//запускаем стратегию bs.Start(); }

Александр Спирин, [08.01.15 20:39] Сергей, спасибо за пример кода.

Сергей Гаврилов, [08.01.15 20:39] Я вставил пример как настроить слушателей, метод InitStrategy из проекта BollingerBandsRobot

Александр Спирин, [08.01.15 20:40] Да я понял ))

Сергей Гаврилов, [08.01.15 20:43] Коллеги. Я изучал за последние годы много всяких API и технологий.. И для себя вывел, что самый лучший способ - это начать делать свой маленький проект и по ходу дела разбираться с ньюансами... А пытаться сначала изучить все, а потом начать делать..... На это годы уйдут..

Александр Спирин, [08.01.15 21:10] Сергей, мне для стратегии нужны уровни - поддержки и сопротивления, в смысле пики и впадины. Есть в S# какие-то классы, которые могут мне помочь определить уровни? Я нашёл лишь Highest и Lowest, но что они делают я понял слабо (? определяют максимальное значение из предоставленных ?)

Александр Спирин, [08.01.15 21:43] Прошу предоставить мне доступ к репозиториям StockSharp - пользователь spirin.alexander@gmail.com. Заранее спасибо.

Спасибо:

William B

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


Активная техподдержка 09 января 2015 - 10 января 2015 г.

Сергей Гаврилов, [09.01.15 01:38] // Насколько я знаю, простых путей тут нет:

// Возвращает максимальную цену 20 последних свечей var highest = _series.GetCandles(20).Max(c => c.HighPrice);

// Возвращает свечу с максимальной ценой из 20 последних свечей var highestcandle = _series.GetCandles(20).Aggregate((prev, next) => next.HighPrice > prev.HighPrice ? next : prev);

// Возвращает индекс свечи с максимальной ценой из 20 последних свечей var highestindex = _series.GetCandles(20).ToList().IndexOf(highestcandle);

Сергей Гаврилов, [09.01.15 01:42] Можете на базе этих примеров, написать для себя методы расширения для CandleSeries, тогда код будет проще..

Александр Спирин, [09.01.15 12:48] Да, спасибо за примеры. Я в примерах нашёл вполне для меня подходящий привод для Смарткома, поэтому могу перейти к стратегии. И сразу возникает вопрос об оптимизации: что в S# есть в помощь оптимизатору? Выглядит так, что S#.Studio, но она выглядит такой развесистой...

Александр Спирин, [09.01.15 13:00] Сергей, и ещё вопрос: я размер позиции определяю в зависимости от дневных потерь (речь идёт о торговде внутри дня), и мне необходим класс, реализующий управление рисками - есть в S# класс, реализующий что-то подобное, на что я мог бы опереться?

Сергей Гаврилов, [09.01.15 13:09] Оптимизация - оптимизация параметров стратегии?

Александр Спирин, [09.01.15 13:11] Да, оптимизация параметров стратегии.

Сергей Гаврилов, [09.01.15 13:14] думаю, что нет.. Здесь принцип тестирования другой..

Сергей Гаврилов, [09.01.15 13:15] зато более реальный

Александр Спирин, [09.01.15 13:15] А можете кратко рассказать о приниципе? - это оччень интересно!

Сергей Гаврилов, [09.01.15 13:22] тут дело в другом, в тестерах, где есть оптимизация, данные представляют как вектор, точки входа как вектор, а затем с этими векторами оперируют...За счет этого достигается высокая скорость, но теряется реальность..

Сергей Гаврилов, [09.01.15 13:27] В s# вы тестите фактически на тиках, т.е. реальность выше, но скорость ниже..

Сергей Гаврилов, [09.01.15 13:29] понятно объяснил или нет?

Александр Спирин, [09.01.15 13:30] Да, с приниципами тестирвоания - понятно. А с управлением рисками посоветуете что-нибудь?

Сергей Гаврилов, [09.01.15 13:34] а в управлении рисками Вам нужно, чтобы параметры специфические расчитывались, отимальное ф и т.п.?

Александр Спирин, [09.01.15 13:42] Говоря о сути, мне хочется максимально вписаться в методологию S# - поменьше выписывать своего, побольше использовать готового. Говоря о деталях - есть размер потерь, допустимый для одного торгового дня, и есть потери, уже сделанные в этот день к настоящему моменту: требуется рассчитать размер позиции, исходя из цены открытия, целевой цены и риска в этой позиции. Но, повторюсь, вопрос не в том, как это вычислить, а в том, есть ли в S# любой готовый класс, выполняющий управление рисками: после получения сигнала на открытия позиции, но до регистрации заявки, необходимо обращение к классу управления рисками, который вычислит размер позиции.

Сергей Гаврилов, [09.01.15 13:50] есть набор рисковых правил, которые зажигают событие при определенном условии риска, типа pnl меньше определенного значения, или размер позы больше определеного значения

Александр Спирин, [09.01.15 13:51] т.е. методологически управление рсиками реализуется не классом, а набором правил?

Сергей Гаврилов, [09.01.15 13:51] классов, которые бы реализовывали определенную методику управления риском - нет..

Сергей Гаврилов, [09.01.15 13:52] методик

Александр Спирин, [09.01.15 13:53] Спасибо, с управлением рисками - понятно.

Александр Спирин, [09.01.15 13:55] Сергей, ещё вопрос: у меня стратегия входит в позицию стоп-заявкой, и такие стоп-зафвки расставляются по многим инструментам: ежели по одному инструменту позиция открывается, то по всем другим стоп-заявки снимаются. Вопрос: есть ли какой пример, реализующий (любую) работу сразу с несколькими инструментами?

Сергей Гаврилов, [09.01.15 14:06] Таких примеров точно нет, сразу как это сделать ответить не могу, нужно подумать

Александр Спирин, [09.01.15 14:08] Я был бы признателен за совет в части архитектуры - здесь, конечно, требуется понимание S# большее, чем есть у меня.

Сергей Гаврилов, [09.01.15 14:09] кстати о рисках, в стратегии есть рискменеджер и риск правила в него добавляютя

Сергей Гаврилов, [09.01.15 14:10] позиции сразу по нескольким инструментам могут быть открыты?

Александр Спирин, [09.01.15 14:10] в данном случае - нет (интересно, конечно, но не сейчас)

Александр Спирин, [09.01.15 14:14] " в стратегии есть рискменеджер..." - в классе Strategy я виду PositionManager и SlippageManager, других не вижу.

Сергей Гаврилов, [09.01.15 14:14] т.е. если поза по одному из инструментов открылась, то мы удалили стоп заявки и больше за этими инструментами не следим, когда позу закрыли, начинаем все сначала...

Сергей Гаврилов, [09.01.15 14:16] stocksharp.algo.rick

Сергей Гаврилов, [09.01.15 14:16] risk

Александр Спирин, [09.01.15 14:20] [ Photo ]

Александр Спирин, [09.01.15 14:20] Его нет в документации...

Александр Спирин, [09.01.15 14:21] А пример к нему есть какой-нибудь?

Александр Спирин, [09.01.15 14:22] "т.е. если поза по одному из инструментов открылась, то мы удалили стоп заявки и больше за этими инструментами не следим, когда позу закрыли, начинаем все сначала..." - да, именно так. Но в отсутствии позиции надо наблюдать за несколькими инструментами.

Сергей Гаврилов, [09.01.15 14:23] у вас версия s# какая?

Сергей Гаврилов, [09.01.15 14:32] но все равно, riskrules больше направлены на выполнение действий: закрыть позу, остановить стратегию, а не на управление размером позы

Александр Спирин, [09.01.15 14:33] что касается документации, то на снимке - страница с сайта... а вообще-то 4.2.42

Сергей Гаврилов, [09.01.15 19:24] Используйте offline документацию из загрузки 4.2.43 - она более актуальна

Мария Крень, [10.01.15 16:21] Добрый вечер! Такой вопрос у меня возник. После запуска робота я выбираю инструмент. Регистрирую его ... trader.RegisterSecurity(security); trader.RegisterTrades(security);

Последняя сделка видна и все отлично.

Потом я хочу использовать другой инструмент. Я делаю trader.UnRegisterSecurity(security); trader.UnRegisterTrades(security);

А потом регистрирую следующий элемент, но lasttrade для него пустой. Подскажите, пожалуйста, что я делаю не так?

Мария Крень, [10.01.15 16:22] инструмент*

Мария Крень, [10.01.15 16:22] В таблице, в квике сделки есть по обоим инстументам.

Сергей Гаврилов, [10.01.15 16:23] С Новым Годом!

Мария Крень, [10.01.15 16:23] Спасибо, и Вас!

Сергей Гаврилов, [10.01.15 16:26] А сделки в событии NewTrades идут?

Мария Крень, [10.01.15 16:27] после какого события? После перерегистрации?

Сергей Гаврилов, [10.01.15 16:27] да

Мария Крень, [10.01.15 16:33] Сейчас проверю)

Сергей Гаврилов, [10.01.15 16:57] Возможно это баг.. Я такой ситуацией сталкивался, когда после UnRegisterTrades невозможно снова перезапустить тот же инструмент. Я в этом случае просто отписывался от события.. Но с другим инструментов это не прокатит..

Мария Крень, [10.01.15 16:58] Я что-то не понимаю как NewTrades посмотреть... просто точку останова на события поставить или как?

Сергей Гаврилов, [10.01.15 16:59] конечно..

Сергей Гаврилов, [10.01.15 16:59] На обработчик..

Мария Крень, [10.01.15 17:00] Дада, просто у меня до туда не доходит

Мария Крень, [10.01.15 17:01] Он сразу с ошибкой падает, что trader null

Мария Крень, [10.01.15 17:04] Так что не понятно что делать

Сергей Гаврилов, [10.01.15 17:04] А без UnregisterSecurity ошибки, как я понял нет?

Мария Крень, [10.01.15 17:05] Есть

Мария Крень, [10.01.15 17:06] Все равно lasttrade не появляются

Сергей Гаврилов, [10.01.15 17:09] код можно посмотреть?

Мария Крень, [10.01.15 17:11] Да, сейчас

Мария Крень, [10.01.15 17:14] var trader = MainWindow.Instance.Trader; foreach (var security in MainWindow.Instance.Trader.RegisteredSecurities) { trader.UnRegisterSecurity(security); trader.UnRegisterTrades(security); } foreach (var instr in MainWindow.Instance._securitiesWindow.SecurityPicker.Securities) { if (TexBoxSec.SelectedItem == instr.Code) GlobalCore.Core.CurSec = instr; } trader.RegisterSecurity(GlobalCore.Core.CurSec); trader.RegisterTrades(GlobalCore.Core.CurSec);

foreach ( var pf in MainWindow.Instance._portfoliosWindow.PortfolioGrid.Portfolios) TexBoxPf.Items.Add(pf);

Сергей Гаврилов, [10.01.15 17:19] Это из примера код или Ваш?

Мария Крень, [10.01.15 17:19] мой, но он не особо отличается

Сергей Гаврилов, [10.01.15 17:20] А какой пример?

Мария Крень, [10.01.15 17:20] Кстати

Мария Крень, [10.01.15 17:20] В примере все тоже странно работает

Мария Крень, [10.01.15 17:21] Когда я жму кнопку level 1 он начинает отображать информаци по инструменту, а потом отключаю левел 1 и выбираю другой инструмент и не срабатывает

Сергей Гаврилов, [10.01.15 17:21] Это какой пример?

Мария Крень, [10.01.15 17:21] Sample

Сергей Гаврилов, [10.01.15 17:26] Сейчас посмотрю, но как я говорил, с Unregister - это скорее всего баг..

Мария Крень, [10.01.15 17:26] окай

Спасибо:

William B

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


Активная техподдержка 11 января 2015 - 14 января 2015 г.

Сергей Гаврилов, [11.01.15 07:46] Unregister(ы) вообще не останавливают поступление данных.. Послал эту ошибку в BagTracker..

Mikhail, [11.01.15 09:28] Ишью закрыта. Это ошибка или ложная проблема?

Сергей Гаврилов, [11.01.15 11:56] Ошибка. Нечаянно дубликат сделал, а как удалить не нашел.

Александр Спирин, [13.01.15 12:45] Здравствуйте! Помогите написать свой индикатор - не получается. Наследуюсь от класса LengthIndicator (ибо будет возвращаться одно числовое значение), поэтому метод OnProcess приобретает следующее описание: protected override IIndicatorValue OnProcess(IIndicatorValue input). Теперь хочу вернуть число типа decimal (return -1;) - и получаю ошибку компилятора - он не может преобразовать. Как мне это преодолеть?

Сергей Гаврилов, [13.01.15 14:35] Попробуйте так: return new DecimalIndicatorValue(Decimal value);

Сергей Гаврилов, [13.01.15 14:42] Т.е. тип, который вы возвращаете, должен реализовывать интерфейс IIndicatorValue..

Александр Спирин, [13.01.15 17:21] Сергей, спасибо - помогло.

Александр Спирин, [13.01.15 17:25] Ещё одно затруднение у меня: взял проект SampleSmartSMA, скопировал его в другую директорию, и стал дописывать под свои нужды - он компилироваться перестал: в методе private void MakeMarketOrder(Sides direction, decimal volume) { var price = direction == Sides.Buy ? Security.GetMarketDepth().BestAsk.Price : Security.GetMarketDepth().BestBid.Price; var order = this.CreateOrder(direction, price, volume); RegisterOrder(order); } метод GetMarketDepth() - не распознаётся компилятором, а текст ошибки такой: Error 1 'StockSharp.BusinessEntities.Security' does not contain a definition for 'GetMarketDepth' and no extension method 'GetMarketDepth' accepting a first argument of type 'StockSharp.BusinessEntities.Security' could be found (are you missing a using directive or an assembly reference?) C:\Users\Александр\Documents\Visual Studio 2012\Projects\My\SampleSmartSMA\SuhovBandsStrategy.cs 266 50 SampleSmartSMA

Александр Спирин, [13.01.15 17:26] Сколько я не проверял, состав библиотек в Reference проекта не изменился...

Александр Спирин, [13.01.15 17:26] Что бы это могло значить?

Сергей Гаврилов, [13.01.15 17:27] Насчет шаблона для Вашей стратегии... В репозитарии stosksharp.visualstudio.com я делаю проект с примером шаблона BasketMarketRulesTemplate. Он пока еще не работает, но сам принцип можете посмотреть..

Сергей Гаврилов, [13.01.15 17:28] У класса Security есть свойства BestAsk/BestBid ими пользуйтесь

Александр Спирин, [13.01.15 17:28] Спасибо - я обязательно посмотрю. Только доуступа к репозитарию у меня нет (( - я и писал сюда, и писал письмо на lesson@ - не помогает. Можете мне предоставить доступ? - spirin.alexander@gmail.com

Сергей Гаврилов, [13.01.15 17:28] метод GetMarketDepth теперь к классу Connector прикручен..

Сергей Гаврилов, [13.01.15 17:30] Доступами не я занимаюсь это или Михаил или Юрий..

Александр Спирин, [13.01.15 17:36] Я напишу ещё раз.

Александр Спирин, [13.01.15 17:36] Сергей, снова что-то непонятное - компилтор не может найти файл с иконкой (тескт ошибки такой: Error 1 Error generating Win32 resource: Error reading icon 'c:\Users\Александр\Documents\Visual Studio 2012\references\stocksharp.ico' — The system cannot find the path specified. C:\Users\Александр\Documents\Visual Studio 2012\Projects\My\SampleSmartSMA\obj\Debug\SampleSmartSMA.exe SampleSmartSMA

Александр Спирин, [13.01.15 17:37] действительно, её и нет по этому пути - я вовсе удалил иконку из проекта, а ошибка остаётся...

Сергей Гаврилов, [13.01.15 17:37] Там проблема в другом мелкосовт денег за репозитарий хочет..

Александр Спирин, [13.01.15 17:37] Эо вполне в его стиле, но жить-то как?

Yury Basangov, [13.01.15 17:39] Поэтому мы и перешли на выгрузку примеров.

Yury Basangov, [13.01.15 17:40] В принципе можем дать доступ, но готовы ли вы за это платить? По сути вопрос то в этом, для нас нет ничего невозможного.

Александр Спирин, [13.01.15 17:41] Это новая для меня постановка вопроса. А какова альтернатива?

Yury Basangov, [13.01.15 17:42] Альтернатива это примеры в группе ВК. В целом они идентичны тому что есть в репозитарии

Александр Спирин, [13.01.15 17:44] [ Photo ]

Александр Спирин, [13.01.15 17:44] "Мы сами неместные..." - ссылку можете дать? Я не могу найти примеры

Сергей Гаврилов, [13.01.15 17:46] Александр, репозитарий - это вообще-то инструмент для совместной разработки.. Он Вам в принципе не нужен.

Сергей Гаврилов, [13.01.15 17:49] Если Вы хотите для себя использовать систему контроля версий TFS, то можете просто зарегить свой аккаунт и свой проект.. Это будет бесплатно..

Сергей Гаврилов, [13.01.15 17:49] А этот пример, когда доделаю, выложу или здесь или в VK..

Александр Спирин, [13.01.15 17:52] Да я не против, просто во многих местах на сайте написано ( и в видео-презентации на youtube) сказано, что доcтуп к исходникам даётся через репозитарий, и для получения доступа... - так я и начал делать. Раз по-другому - договорились, буду делать по-другому. Только объясните, как именно - не могу я найти в группе ВК примеры... И поясните, как я могу увидеть исходные коды самого S# - это имеет значение.

Сергей Гаврилов, [13.01.15 17:53] В VK ищите раздел Документы..

Сергей Гаврилов, [13.01.15 17:54] Доступа к исходным кодам самого S# нет...

Александр Спирин, [13.01.15 17:55] ок, хотя бы с этим понятно.

Александр Спирин, [13.01.15 17:56] Есть! - нашёл Документы... - там большой архив - его качать?

Сергей Гаврилов, [13.01.15 17:57] В принципе когда со стратегиями будете на "ты", Вам нужно будет Shell изучить (он с исходниками)... и в него свои стратегии вставлять..

Сергей Гаврилов, [13.01.15 17:58] То что с OL - это архив ордер-логов..

Сергей Гаврилов, [13.01.15 17:59] Обновленные примеры в StockSharp.Edu.4.2.43.7z

Александр Спирин, [13.01.15 17:59] да, я понял, что Shell предназначен для этого, только мне его даже скомпилировать не удаётся - пока: доберусь позже.

Сергей Гаврилов, [13.01.15 17:59] Вот именно пока не заморачивайтесь..

Александр Спирин, [13.01.15 18:00] так а что мне делать с этим ico-файлом, которого компилятор найти не может, хотя его и в проекте-то нет?

Сергей Гаврилов, [13.01.15 18:02] Вы в поиске в "Пуск" попробуйте это файл найти

Сергей Гаврилов, [13.01.15 18:03] и вставьте туда, куда он просит..

Александр Спирин, [13.01.15 18:04] Да что его искать - он известно где, в папке References, рядом с библиотеками лежит... Вот только в проекте мне не удаётся изменить путь к нему: финальная попытка - я просто удалил его из проекта - и получил ошибку при компиляции. Ч то ещё можно попробовать?

Александр Спирин, [13.01.15 18:04] Спасибо, с архивом получилось.

Сергей Гаврилов, [13.01.15 18:06] Это пример, который с поставкой S# идет?

Александр Спирин, [13.01.15 18:09] Да - это пример для Смарткома - SampleSmartSMA

Сергей Гаврилов, [13.01.15 18:19]

  1. В свойствах проекта проверьте путь к этой иконке

Сергей Гаврилов, [13.01.15 18:20] На закладке Application

Сергей Гаврилов, [13.01.15 18:21] 2. Потом проверьте свойства иконки в самом проекте

Сергей Гаврилов, [13.01.15 18:22] Должно быть так Build Action = Resource

Сергей Гаврилов, [13.01.15 18:23] И путь также в свойствах иконки проверьте..

Владимир (vow001) Русаков, [13.01.15 22:27] Добрый вечер, подскажите, пожалуйста, можно ли как-нибудь при создании заявок в Квик указывать проскальзывание?

Сергей Гаврилов, [13.01.15 23:27] Нет...

Сергей Гаврилов, [13.01.15 23:30] Вы же сами можете указать в лимитке цену лучшей котировки +- смещение цены..

Владимир (vow001) Русаков, [13.01.15 23:31] А, ясно. Спасибо

Денис (rtDen), [14.01.15 09:27] Добрый день!

Денис (rtDen), [14.01.15 09:27] Как сделать в стратегии чтоб какое-нибудь правило вызывалось постоянно (аналог таймера)?

Денис (rtDen), [14.01.15 09:28] По моему в уроках что-то такое было, но не могу вспомнить сейчас

Денис (rtDen), [14.01.15 11:40] не понимаю как until работает

Денис (rtDen), [14.01.15 11:40] есть код:

Денис (rtDen), [14.01.15 11:40] в стратегии

Денис (rtDen), [14.01.15 11:40] protected override void OnStarted() { this.AddInfoLog("Старт пресчета позиции"); this.WhenStarted() .Do(() => this.AddInfoLog("ttt")) .Until(() => false) .Apply(this); base.OnStarted(); }

Денис (rtDen), [14.01.15 11:40] почему в лог "ttt" выводится один раз только?

Сергей Гаврилов, [14.01.15 11:49] так стратегия только один раз стартует

Денис (rtDen), [14.01.15 11:50] да, я уже догадался - until это доп условие для выключение правила, а не зацикливание обработчика в do

Денис (rtDen), [14.01.15 11:50] а что по поводу первого вопроса

Денис (rtDen), [14.01.15 11:51] про "таймер"

Сергей Гаврилов, [14.01.15 11:51] Так просто таймер сделать и надо..

Сергей Гаврилов, [14.01.15 11:51] Или цикл...

Сергей Гаврилов, [14.01.15 11:51] Другого способа нет..

Денис (rtDen), [14.01.15 11:53] ок, почему то думал, что в примерах был какой-то механизм для этого

Денис (rtDen), [14.01.15 11:53] сделаю циклом

Сергей Гаврилов, [14.01.15 11:54] циклом можно, но цикл будет жрать много ресурсов..

Денис (rtDen), [14.01.15 11:54] ну я же слип вставлю

Денис (rtDen), [14.01.15 11:54] обработчик же в отдельном потоке вызывается?

Сергей Гаврилов, [14.01.15 11:55] это зависит от того в каком потоке событие зажгли..

Сергей Гаврилов, [14.01.15 11:56] А события правила?

Денис (rtDen), [14.01.15 11:56] хм..ясно

Денис (rtDen), [14.01.15 11:57] не понял вопрос..

Денис (rtDen), [14.01.15 11:57] хочу сделать стратегию для пересчета моей позиции

Сергей Гаврилов, [14.01.15 11:57] какой обработчик?

Денис (rtDen), [14.01.15 11:58] сейчас думаю в на событие правила стратегии started в обработчике запустить бесконечный цикл с обсчетом

Денис (rtDen), [14.01.15 11:58] и слипом в конце цикла

Сергей Гаврилов, [14.01.15 11:59] А зачем этот цикл, когда есть правило на изменение позиции..

Денис (rtDen), [14.01.15 11:59] позиция не меняется

Сергей Гаврилов, [14.01.15 12:00] а чего пересчитывать, если не поменялась?

Денис (rtDen), [14.01.15 12:00] это опционная позиция, меняется цена БА, волатильность на бирже

Денис (rtDen), [14.01.15 12:01] а это вывод в терминал, суммарных греков и еще разных показателей

Денис (rtDen), [14.01.15 12:01] сейчас работает просто в отдельном потоке, вот решил оформить код в виде стратегии

Сергей Гаврилов, [14.01.15 12:04] Просто цикл не есть good practice

Денис (rtDen), [14.01.15 12:05] а какой вариант?

Сергей Гаврилов, [14.01.15 12:06] поза все равно меняется от каких-то условий, вот по этим событиям и вызывай пересчет..

Денис (rtDen), [14.01.15 12:06] поза не меняется

Денис (rtDen), [14.01.15 12:06] а условия которые меняется напозу - наоборот происходят постоянно, цена фьюча непрерывно ходит

Денис (rtDen), [14.01.15 12:07] мне наоборот не надо так часто персчитывать

Денис (rtDen), [14.01.15 12:07] достаточно раз в пару секунд

Денис (rtDen), [14.01.15 12:07] не вижу, чем тут плох цикл

Сергей Гаврилов, [14.01.15 12:07] тогда таймер - это лучше цикла..

Денис (rtDen), [14.01.15 12:07] =) дак таймер это тот же цикл

Yury Basangov, [14.01.15 12:08] привяжи к событию изменение цены фьюча больше чем на х% от последнего значения и тогда вызывай пересчет.

Yury Basangov, [14.01.15 12:08] зачем каждый чих то персчитывать

Сергей Гаврилов, [14.01.15 12:08] В нем не надо ставить цикл, он сам вызовется в фоновом потоке..

Денис (rtDen), [14.01.15 12:09] меняется не только цена фьюча, меняются цены всех опционов, и их волатильности

Сергей Гаврилов, [14.01.15 12:11] Sleep работу потока останавливает..., а таймер, который из theading в фоновом потоке работает и никаких циклов и доп потоков городить не надо..

Сергей Гаврилов, [14.01.15 12:12] он ресурсов меньше съест..

Денис (rtDen), [14.01.15 12:13] собственно у меня и был вопрос - обработчик события в отдельном потоке вызывается всегда или нет

Сергей Гаврилов, [14.01.15 12:14] события правила?

Денис (rtDen), [14.01.15 12:14] да

Денис (rtDen), [14.01.15 12:14] ну если он вывзывается из того же потока, где зарейзили событие, то лучше естестественно запустить обсчет в отдельном потоке

Денис (rtDen), [14.01.15 12:14] а на счет того - заюзать таймер или руками создать фоновый поток и в нем цикл запустить - это практически одно и то же

Сергей Гаврилов, [14.01.15 12:15] в отдельном, но в этом же потоке и другие события приходят..

Денис (rtDen), [14.01.15 12:15] таймер работат точно также, выполняет действие и вызывает слип в своем потоке

Денис (rtDen), [14.01.15 12:16] разница в том, что таймер запускается в потоке из пула, а не создает новый, но при единичном экземпляре - это не важно совершенно

Сергей Гаврилов, [14.01.15 12:16] таймер на более низком уровне арботает, он все равно будет эффективнее..

Денис (rtDen), [14.01.15 12:24] ок, пусть будет таймер )

Сергей Гаврилов, [14.01.15 12:25] И код будет проще..

Сергей Гаврилов, [14.01.15 12:37] Кстати, в зацикленных потоках, наверно лучше не sleep, а WhiteOne пользовать..

Денис (rtDen), [14.01.15 12:39] а разблокировать поток откуда?

Сергей Гаврилов, [14.01.15 12:39] С аргументом

Денис (rtDen), [14.01.15 12:39] а.. да, там же время можно передать

Денис (rtDen), [14.01.15 12:42] может лучше... как-то не задумывался об этом

Денис (rtDen), [14.01.15 12:44] надо будет почитать на досуге, про низкоуровеные различия таймеров, слипов, вэйтов и т.д.

Денис (rtDen), [14.01.15 12:45] надеюсь дойдут руки когда-нибудь до этого

Александр Спирин, [14.01.15 21:02] помогите pls нарисовать ленту Боллинджера на графике:

  • рисуется вызовами var bollValue = candle.State == CandleStates.Finished ? new ChartIndicatorValue(_strategy.BollBands, _strategy.BollBands.Process(candle)) : null; _chart.Draw(candle.OpenTime, new Dictionary<IChartElement, object> { { _candlesElem, candle }, { _bollingerElem, bollValue }, { _suppLevelsElem, suppValue }, { _restLevelsElem, restValue }, });
  • создаётся так: _bollingerElem = new ChartIndicatorElement { Title = "Bollinger Bands", //Indicator = new RateOfChange Color = Colors.ForestGreen }; _area.Elements.Add(_bollingerElem);
  • падает с икслючением "не поддерживается": System.NotSupportedException was unhandled by user code

Что с этим делать?

Сергей Гаврилов, [14.01.15 21:03] Скачай новые примеры из VK, там по другому рисуется..

Александр Спирин, [14.01.15 21:04] ок, спасибо - сейчас посмотрю...

Александр Спирин, [14.01.15 21:11] угу, всё понял - спасибо!

Спасибо:

William B

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


Активная техподдержка 15 января 2015 - 20 января 2015 г.

Сергей Гаврилов, [15.01.15 12:15] 2:55:01 PM Sergey Dvortsov

Александр Спирин, [15.01.15 12:17] Приветствую! Не получается в методе MainAlgorithm стратегии определить, последняя пришла свечка из серии или нет - вызовы не компилируются:

Александр Спирин, [15.01.15 12:17] var timeFrame = (TimeSpan)_series.Arg; - это нормально,

Александр Спирин, [15.01.15 12:18] а следующий - var time = timeFrame.GetCandleBounds(_series.Security).Min - timeFrame; - получаю ошибки компилятора: Error 2 Argument 2: cannot convert from 'StockSharp.BusinessEntities.Security' to 'System.DateTime' C:\Users\Александр\Documents\Visual Studio 2012\Projects\My\SampleSmartSMA\SuhovBandsStrategy.cs 95 50 SampleSmartSMA

и

Error 1 'System.TimeSpan' does not contain a definition for 'GetCandleBounds' and the best extension method overload 'StockSharp.Algo.Candles.CandleHelper.GetCandleBounds(System.TimeSpan, System.DateTime)' has some invalid arguments C:\Users\Александр\Documents\Visual Studio 2012\Projects\My\SampleSmartSMA\SuhovBandsStrategy.cs 95 24 SampleSmartSMA

Что я делаю не так?

Сергей Гаврилов, [15.01.15 12:20] для работы с разными таймфремами нужно создать для каждого таймфрейма свою CandleSeries.. Каждая серия запускается отдельно при помощи метода CandleManager.Start. Обработать серии можно или в отдельных событиях Series.ProcessCandle или в candlemanager.Processing. 2:57:44 PM _series = new CandleSeries(typeof(TimeFrameCandle), _lkoh, TimeSpan.FromMinutes(1)); _series5 = new CandleSeries(typeof(TimeFrameCandle), _lkoh, TimeSpan.FromMinutes(5));

_series.ProcessCandle += candle => { Console.WriteLine("минутка"); };

_series5.ProcessCandle += candle => { Console.WriteLine("пятиминутка"); };

_candlemanager.Processing += (series, candle) => { if ((TimeSpan)candle.Arg == TimeSpan.FromMinutes(1)) { Console.WriteLine("минутка"); } if ((TimeSpan)candle.Arg == TimeSpan.FromMinutes(5)) { Console.WriteLine("пятиминутка"); } };

_candlemanager.Start(_series); _candlemanager.Start(_series5);

Александр Спирин, [15.01.15 12:22] понял, попробую.

Сергей Гаврилов, [15.01.15 12:35] Метод TimeFrame.GetCandleBounds(Security) больше не используется, нужно использовать одну из новых перегрузок // TimeFrame.GetCandleBounds(DateTime), TimeFrame.GetCandleBounds(DateTime, ExchangeBoard), TimeFrame.GetCandleBounds(DateTime, WorkingTime)

Сергей Гаврилов, [15.01.15 12:36] var candleBounds = timeFrame.GetCandleBounds(Trader.GetMarketTime(_candleSeries.Security));

Александр Спирин, [15.01.15 12:37] Компилятор не понимает, что такое Trader - я в методе стратегии нахожусь...

Сергей Гаврилов, [15.01.15 12:38] Это пример..

Александр Спирин, [15.01.15 12:38] а по-другому я DateTime могу получить?

Сергей Гаврилов, [15.01.15 12:38] текущую дату вставь и все

Александр Спирин, [15.01.15 12:42] так работает, но что будет, если у меня на рабочей станции время разойдётся с торговой площадкой?

Сергей Гаврилов, [15.01.15 12:43] тогда из коннектора время получай, как я показал

Сергей Гаврилов, [15.01.15 12:44] var time = timeFrame.GetCandleBounds(Connector.GetMarketTime(Security)).Min - timeFrame; //находим время предпоследней свечк

Александр Спирин, [15.01.15 12:45] спасибо, так работает.

Александр Спирин, [15.01.15 12:54] Сергей, а как реализовать скользящий стоп-лосс? Из уроков я вынес, что для этого нужно использовать дочернюю стратегию stoploss, но где-то говорилось, что при изменении уровня цены её надо останавливать и перезапускать с новой ценой - вот это как делается?

Александр Спирин, [15.01.15 12:54] Моежт в примерах это есть?

Сергей Гаврилов, [15.01.15 12:55] Нет в примерах нет..

Сергей Гаврилов, [15.01.15 12:59] Если коротко, то в родительской стратегии создаете правило на повление новых сделок.. В этом правиле при появлении новых условий удаляете StopLoss из дочерних стратегий и добавляете новую с новй ценой..

Александр Спирин, [15.01.15 13:02] Почти понятно, но как удалить StopLoss из дочерних стратегий (её ещё и остановить надо, наверное?)

Сергей Гаврилов, [15.01.15 13:03] да. сначала остановить надо..

Сергей Гаврилов, [15.01.15 13:04] Стратегию удалить или заявку?

Александр Спирин, [15.01.15 13:06] Ммм... какую заявку? - StopLoss же стоп-заявок не ставит, не правда ли? Вы написали: "...удаляете StopLoss из дочерних стратегий..." - да, так как её удалить? и как её остановить перед удалением?

Сергей Гаврилов, [15.01.15 13:07] ChaildStrategies.Remove(Strategy)

Александр Спирин, [15.01.15 13:07] А остановить как?

Сергей Гаврилов, [15.01.15 13:21] Strategy.Stop

Сергей Гаврилов, [15.01.15 13:23] Это на всякий случай, скорее всего стратегия автоматически останавливается при удалении..

Сергей Гаврилов, [15.01.15 13:24] Посмотрите пример про арбитражную стратегию... Там показано как добавляют/удаляют дочерние стратегии..

Александр Спирин, [15.01.15 16:18] Я не нашёл в примере остановку для стратегии через Stop() - там такой вызов:ChildStrategies.Any(f => f is FastOrderStrategy && ((FastOrderStrategy) f).StrategySignal == FastStrategySignals.Exit);

  • он останавливает дочернюю стратегию?

Сергей Гаврилов, [15.01.15 16:19] Там показано, как их добавлять и удалять..

Александр Спирин, [15.01.15 16:20] Я смотрю на файл ArbitrageStrategy.cs из 6-го примера - это то, о чём Вы говорите?

Сергей Гаврилов, [15.01.15 16:22] но из этой или другой похожей конструкции Вы можете вернуть стратегию и вызвать метод Stop

Александр Спирин, [15.01.15 16:27] что-то такое? var sls = (StopLossStrategy)ChildStrategies.FirstOrDefault(s => s is StopLossStrategy); if( sls != null ) sls.Stop();

Сергей Гаврилов, [15.01.15 16:28] Или так или прямо в этой конструкции стоп

Александр Спирин, [15.01.15 16:33] А как Stop вызвать из эой конструкции? - код ChildStrategies.FirstOrDefault(s => s is StopLossStrategy && s.Stop()); не пропускает компилятор (не могу, говорит, оператор && применить к bool и void)

Сергей Гаврилов, [15.01.15 16:36] Там еще одну лямбду надо вставить..

Сергей Гаврилов, [15.01.15 16:49] ChildStrategies.FirstOrDefault(f => f is FastOrderStrategy).Stop();

Сергей Гаврилов, [15.01.15 16:49] С лямбдой я погорячился..

Александр Спирин, [15.01.15 16:50] Спасибо.

Сергей Гаврилов, [15.01.15 16:50] Но

Сергей Гаврилов, [15.01.15 16:52] Но, возможно, что это лишняя операция.. Скорее всего она сама останавливается, когда мы ее удаляем..

Сергей Гаврилов, [15.01.15 17:00] Вот такое правило для для дочерней стратегии сделай Strategy.WhenStopped() и посмотри возникает это событие после удаления без явной остановки или нет..

Александр Спирин, [15.01.15 17:02] А из какого поля правильно брать объём - Volume или LeftVolume (для StoppLoss-стратегии)?

Сергей Гаврилов, [15.01.15 17:06] Чего то я такого свойсва не нашел..

Сергей Гаврилов, [15.01.15 17:08] Вообще-то LeftVolume - это неисполненный остаток объема

Александр Спирин, [15.01.15 17:10] Мне Visual Studio подсказал... Дело в том, что по-уму-то надо дождаться остановки, и только когда она остановится спрашивать, какой объём остался - такой и защищать.

Владимир (vow001) Русаков, [16.01.15 13:53] Добрый день, подскажите пжл, какие существуют состояния у создаваемых в Квике заявок (по-моему, активна, исполнена и ещё какие-то) и с помощью какого события можно отслеживать изменения статуса заявки?

Сергей Гаврилов, [16.01.15 14:08] Там несколько событий OrdersRegisterFailed, NewOrders, OrdersChanged , и др..

Сергей Гаврилов, [16.01.15 14:09] OrdersCancelFailed

Сергей Гаврилов, [16.01.15 14:09] Со стопами - отдельные события..

Сергей Гаврилов, [16.01.15 14:10] Это события класса Connector

Владимир (vow001) Русаков, [16.01.15 14:11] Ясно, А как понять, что заявка исполнена? WhenRegistred?

Сергей Гаврилов, [16.01.15 14:11] А тебе событие для правила нужно..

Сергей Гаврилов, [16.01.15 14:13] Order.WhenMatched, Order.WhenPartiallyMatched

Сергей Гаврилов, [16.01.15 14:15] Плюс событие для сделки - Order.WhenNewTrades

Владимир (vow001) Русаков, [16.01.15 14:17] Спасибо, сейчас тогда в документации найду описание этих событий

Мария Крень, [17.01.15 20:59] Здравствуйте, подскажите есть ли переменная описывающая минимально и максимально возможную цену в Квике для инструмента?

Мария Крень, [17.01.15 21:00] это же тоже самое чтои верхний лимит и нижний?

Мария Крень, [17.01.15 21:04] Почему он по умолчанию ноль?

Сергей Гаврилов, [18.01.15 00:58] Если Вы под максимальной/минимальной ценой подразумеваете границы изменения цены внутри торговой сессии, то да, это и есть верхний/нижний лимит

Сергей Гаврилов, [18.01.15 01:02] Вот так попробуйте baseTrader.RegisterSecurity(Security); // Пробуем "научить" Квик-Трейдер правильно выставлять маркет-ордера при работе с фьючерсами //baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice); //baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);

Александр Спирин, [18.01.15 12:35] Приветствую! Не получается свой индикатор на графике нарисовать - помогите pls: создаю графический элемент так: _suppLevelsElem1 = new ChartIndicatorElement { Title = "Support Level 1", Color = Colors.Red, StrokeThickness = 1 }; _area.Elements.Add(_suppLevelsElem1);

Добавляю на график так: var sv1 = _strategy.SuppLevels.GetFirstLevel(candle.HighPrice); var suppValue1 = (sv1 != -1) ? new ChartIndicatorValue(_strategy.SuppLevels, sv1) : null;

var dict = new Dictionary<IChartElement, object> { {_candlesElem, candle}, {_upBandElem, upBandValue}, {_lowBandElem, lowBandValue}, { _suppLevelsElem1, suppValue1 }, }; _chart.Draw(candle.OpenTime, dict);

И получается, что рисуется он у меня с отставанием (уровень возникает после большой красной свечи с длинными тенями в 18:45). Что я делаю не так?

Александр Спирин, [18.01.15 12:37] [ Photo ]

Александр Спирин, [18.01.15 12:38] А на графике получается вот что:

Александр Спирин, [18.01.15 12:38] Метод GetFirstLevel() фактически возвращает -1, пока уровень не возник.

Сергей Гаврилов, [18.01.15 16:14] Для начала нужно, просто вывести время и значения идикатора в лог или в окно Output и посмотреть корректно он расчитывается или нет

Александр Спирин, [18.01.15 21:33] Напечатал: вижу, что первое значение получено в 15-го 10:05, а на графике оно отражено в 14-го, в 21:45 01/14/2015 21:00:00 +03:00: supp. level = -1 01/14/2015 21:05:00 +03:00: supp. level = -1 01/14/2015 21:10:00 +03:00: supp. level = -1 01/14/2015 21:15:00 +03:00: supp. level = -1 01/14/2015 21:20:00 +03:00: supp. level = -1 01/14/2015 21:25:00 +03:00: supp. level = -1 01/14/2015 21:30:00 +03:00: supp. level = -1 01/14/2015 21:35:00 +03:00: supp. level = -1 01/14/2015 21:40:00 +03:00: supp. level = -1 01/14/2015 21:45:00 +03:00: supp. level = -1 01/14/2015 21:50:00 +03:00: supp. level = -1 01/14/2015 21:55:00 +03:00: supp. level = -1 01/15/2015 10:00:00 +03:00: supp. level = -1 01/15/2015 10:05:00 +03:00: supp. level = 73140 01/15/2015 10:10:00 +03:00: supp. level = 73140 01/15/2015 10:15:00 +03:00: supp. level = 73140 01/15/2015 10:20:00 +03:00: supp. level = 73140 01/15/2015 10:25:00 +03:00: supp. level = 73140

Александр Спирин, [18.01.15 21:34] [ Photo ]

Сергей Гаврилов, [18.01.15 21:43] Индикатор секретный?

Александр Спирин, [18.01.15 21:43] да нет...весь код показать?

Сергей Гаврилов, [18.01.15 21:44] В атачменте скиньте..

Александр Спирин, [18.01.15 21:45] [ Document : class.cs ]

Сергей Гаврилов, [18.01.15 21:47] Сами данные откуда берете?

Александр Спирин, [18.01.15 21:50] Это переделанный пример SampleSmartSma - мне кажется, что Вы быстрее поймёте, заглянув в код примера, чем слушать моё бормотание...

Сергей Гаврилов, [18.01.15 21:51] ок

Александр Спирин, [18.01.15 21:51] private void ProcessCandle(Candle candle) { if (candle.State == CandleStates.Finished) { _strategy.Atr.Process(candle); _strategy.SuppLevels.Process(candle); _strategy.RestLevels.Process(candle); }

_strategy.BollBands.Process(new DecimalIndicatorValue(candle.ClosePrice) { IsFinal = candle.State == CandleStates.Finished }); var upBandValue = new ChartIndicatorValue(_strategy.BollBands, _strategy.BollBands.UpBand.GetCurrentValue()); var lowBandValue = new ChartIndicatorValue(_strategy.BollBands, _strategy.BollBands.LowBand.GetCurrentValue());

var sv1 = _strategy.SuppLevels.GetFirstLevel(candle.HighPrice); var suppValue1 = (sv1 != -1) ? new ChartIndicatorValue(_strategy.SuppLevels, sv1) : null; Debug.Print("{0}: supp. level = {1}", candle.OpenTime, sv1); //var suppValue1 = new ChartIndicatorValue(_strategy.BollBands, _strategy.BollBands.LowBand.GetCurrentValue()-100);

var dict = new Dictionary<IChartElement, object> { {_candlesElem, candle}, {_upBandElem, upBandValue}, {_lowBandElem, lowBandValue}, { _suppLevelsElem1, suppValue1 }, //{ _suppLevelsElem2, new ChartIndicatorValue(_strategy.SuppLevels, _strategy.SuppLevels.GetFirstLevel(candle.HighPrice)) }, //{ _restLevelsElem1, new ChartIndicatorValue(_strategy.RestLevels, candle.ClosePrice+100) }, //{ _restLevelsElem2, new ChartIndicatorValue(_strategy.RestLevels, candle.ClosePrice+100) }, }; _chart.Draw(candle.OpenTime, dict); }

Сергей Гаврилов, [19.01.15 14:32] Смотрите, Метод GetFirstLevel() возвращает -1, но не факт ChartIndicatorValue в этот момент Null, ведь на графике у вас в этот момент рисуется линия индикатора, а ее не должно быть вообще

Сергей Гаврилов, [19.01.15 15:32] Алексей, можете весь проект скинуть?

Александр Спирин, [19.01.15 17:53] [ Document : SampleSmartSMA.zip ]

Александр Спирин, [19.01.15 17:54] Так и мне непонятно всё, как индикатор рисуется... Я просто делал как в примере, не особо вдаваясь в детали, но теперь придётся )

Александр Спирин, [19.01.15 18:54] Сергей, а можете пояснить (чуть отвлекаясь в сторону) что минимально нужно сделать, чтобы у нструмента появился Open Interest? - когда на старте я получаю инструменты, он равен 0, а мне хочется отобрать из всех инструментов те, у которых он достаточно велик. Достаточно будет подписаться на получение котировок? - мне чем меньше усилий, чем лучше. Спасибо.

Сергей Гаврилов, [19.01.15 18:58] Если честно, я никогда OI не использовал... Но, думаю, что достаточно только подписаться на инструмент.. Дело в том, что в нативном Смарткоме никаких

Сергей Гаврилов, [19.01.15 18:59] никаких специальных функция для получения OI нет, и если он его транслирует OI должен появиться в свойствах инструмента..

Алексей (AlexGP) Плотников, [19.01.15 19:09] У меня почему-то: storageRegistry.GetTradeStorage(Security).Load(Nullable, Nullable) возвращает данные на сутки раннее, при этом: – storageRegistry.GetTradeStorage(Security).Load(DateTime date) и – (IEnumerable) storageRegistry.GetTradeStorage(Security).Load(DateTime date) работают корректно. Что я не так делаю?

Александр Спирин, [19.01.15 19:16] а подписаться на инструмент - это Security.WhenChanged?

Сергей Гаврилов, [19.01.15 19:19] Вы учли то момент, что Гидра грузит данные с лагом в прошлое?

Сергей Гаврилов, [19.01.15 19:20] на инструмент вы подписываетесь при помощи Connector.RegisterSecurity(Security)

Алексей (AlexGP) Плотников, [19.01.15 19:32] Я вообще не использую IConnector, нет такого кода т.к. чистый эксперимент со StorageRegistry. Если бы дело было в «..Гидра грузит данные с лагом в прошлое…» то и

  • storageRegistry.GetTradeStorage(Security).Load(DateTime date),
  • (IEnumerable) storageRegistry.GetTradeStorage(Security).Load(DateTime date), отрабатывали бы соответствующее. В общем вопрос на повестке…

Сергей Гаврилов, [19.01.15 19:33] Про коннектор это не вам..\

Алексей (AlexGP) Плотников, [19.01.15 19:33] да, уже понял... ))

Сергей Гаврилов, [19.01.15 19:35] Я просто имел ввиду, что если Вы грузите совсем последние данные, то текущая дата может не прийти, т.к. ее нет в Гидре, если так грузится любой диапазон, то это нужно вроверять..

Сергей Гаврилов, [19.01.15 19:40] To Alex P: у Вас какая версия Гидры?

Алексей (AlexGP) Плотников, [19.01.15 19:51] Очень даже не совсем последние, а вполне себе исторические, т.к. коннектора к реальному шлюзу нет за неимением шлюза как такового (пока разбираюсь с библиотекой). Версия Гидры 4.2.50.0. Но дело-то не в Гидре. Имеем разную реакцию методов класса и методов расширения на одинаковые данные. Если нужно проверить, то: «надо, так надо…» Может я что-то не так делаю (как и спросил в первом сообщении), либо глюк…

Сергей Гаврилов, [19.01.15 19:53] Конечно, так быть не должно. проверим..

Алексей (AlexGP) Плотников, [19.01.15 20:00] Ок

Александр Спирин, [19.01.15 23:35] "на инструмент вы подписываетесь при помощи Connector.RegisterSecurity(Security)" - а в ответ должно событие Connector.SecuritiesChanged срабатывать?

Сергей Гаврилов, [19.01.15 23:37] Да.

Спасибо:

Сергей Гаврилов

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


Лог техподдержки за 28.02.2016 https://vk.com/wall-66650972_32

Спасибо:

Сергей Гаврилов

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


Лог техподдержки за 29.02.2016 https://vk.com/wall-66650972_33

Спасибо:

Сергей Гаврилов

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


Лог техподдержки за 2.03.2016 https://vk.com/wall-66650972_34

Спасибо:

Сергей Гаврилов

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


Лог техподдержки за 3.03.2016 https://vk.com/wall-66650972_35

Спасибо:

Сергей Гаврилов

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


Лог техподдержки за 4.03.2016 https://vk.com/wall-66650972_36

Спасибо:

Maniac

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


Обычным пользователем это недоступно? "Вы не можете просматривать стену этого сообщества."

Спасибо:
< 1 2 3 4  > >>

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

loading
clippy