Урок 4. Свечи, графики, история
Atom Ответить
01.05.2013


Видео-уроки (основное):
Свечи, индикаторы, стратегия, метки, вывод на график




Видео-уроки (экстра):
Создание и работа с кластерными свечками

[vk]http://vk.com/video_ext.php?oid=-66650972&id=167470847&hash=05646cb903828f2e&hd=3" frameborder="0">

Темы занятия:

Свечи (S# документация)
  1. Получение свечей из торгового терминала
  2. Вывод свечного графика

Индикаторы (S# документация)
  1. Создание простого собственного индикатора
  2. Вывод графика индикатора

Стратегия (S# документация)
  1. Получение заявок и сделок
  2. Вывод меток заявок и сделок на график

Работа с графиком (SciChart)
  1. Работа с областями графика
  2. Создание и использование графических элементов

Создание модуля для получения исторических данных
Создание сборки с получением исторических свечей, отрисовкой графиков и запуском стратегии
Выводим свечной график в S#.Studio


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

Полезные ссылки:
Свечи, документация

Вложения:
Скачать проекты

Изменения в проектах:

Теги:


Спасибо:




59 Ответов
< 1 2 3  >
IvanB

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


Bond Перейти
На картинке в начале урока цвета свечей должны быть в точности наоборот.
Или поменяйте местамы цены открытия и закрытия свечи.


Благодарим за информацию.
Автор топика
Спасибо:

Prival

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


Урок №4
если назначить CandlesDownloadUsing запускаемым проектом, то выдается ошибка
Ошибка 2 Имя "PendingOrders" отсутствует в текущем контексте
...\StockSharp Lessons\StockSharp.Edu\04_lesson (Candles, Charts, Historical data)\CandlesDownloadUsing\BollingerStrategy.cs 29 79 CandlesDownloadUsing

если строку

return Orders.Count(o => o.State != OrderStates.Done) == 0 && PendingOrders.Count() == 0;

записать вот так
return Orders.Count(o => o.State != OrderStates.Done) == 0; // && PendingOrders.Count() == 0;

то запускается.

Причем это единственное что смог запустить в 4-ом уроке. Ни одно решение не запускается. Прикладываю скрин
00.jpg 370 KB (2)
Спасибо:

Prival

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


На видео создается проект CandlesChartProject
но его нет в исходном коде, там что то другое

Спасибо:

IvanB

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


Prival Перейти
На видео создается проект CandlesChartProject
но его нет в исходном коде, там что то другое



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

IvanB

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


Prival Перейти
Урок №4
если назначить CandlesDownloadUsing запускаемым проектом, то выдается ошибка
Ошибка 2 Имя "PendingOrders" отсутствует в текущем контексте
...\StockSharp Lessons\StockSharp.Edu\04_lesson (Candles, Charts, Historical data)\CandlesDownloadUsing\BollingerStrategy.cs 29 79 CandlesDownloadUsing

если строку

return Orders.Count(o => o.State != OrderStates.Done) == 0 && PendingOrders.Count() == 0;

записать вот так
return Orders.Count(o => o.State != OrderStates.Done) == 0; // && PendingOrders.Count() == 0;

то запускается.

Причем это единственное что смог запустить в 4-ом уроке. Ни одно решение не запускается. Прикладываю скрин


Какую версию библиотеки S# используете?
Автор топика
Спасибо:

Prival

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


Цитата:

Какую версию библиотеки S# используете?


немного не понял вопрос. Там же вроде в проект добавлены все библиотеки. Я ничего не добавлял. Запускал какие есть
Скажите какие библиотеки (*.dll) мне посмотреть и как у них определить версию ?
Спасибо:

IvanB

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


Prival Перейти
Цитата:

Какую версию библиотеки S# используете?


немного не понял вопрос. Там же вроде в проект добавлены все библиотеки. Я ничего не добавлял. Запускал какие есть
Скажите какие библиотеки (*.dll) мне посмотреть и как у них определить версию ?


Я имею в виду библиотеки S#, эти библиотеки имеют префикс StockSharp.* , например StockSharp.Algo.dll.
Посмотреть версию можно, либо в обозревателе файлов Windows, для этого выбираем пункт Свойства -> Подробно и смотрим поле Версия продукта. Можно посмотреть версию с VS, для этого нужно выбрать интересующую библиотеку в обозревателе проекта (каталог References) и в окне Свойств (Properties) смотрим поле Version.
Автор топика
Спасибо:

Prival

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


Все равно что то не то... или я делаю что то не так, прилагаю скрин


если выбираю StockShap.Edu.sln то эти проекты в Обозревателе решений не появляются.

1. Урок CandlesChartProject появился
2. Версия StockSharp.Algo 4.1.16.1 версия среды выполнения 4.1.16.1
Спасибо:

IvanB

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


Prival Перейти
Все равно что то не то... или я делаю что то не так, прилагаю скрин


если выбираю StockShap.Edu.sln то эти проекты в Обозревателе решений не появляются.

1. Урок CandlesChartProject появился
2. Версия StockSharp.Algo 4.1.16.1 версия среды выполнения 4.1.16.1


Техническая ошибка, проверьте, теперь проект CandlesChartProject должен быть в уроке 4.
Автор топика
Спасибо:

Bond

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


UsilaDobry Перейти
И таким способом
Код
foreach (var candle in GetHistoryCandles())
{
   ProcessCandle(null, candle);
}

и таким способом
Код
GetHistoryCandles().ForEach(ProcessCandle);

история выводится корректно, и свечи и индикаторы, но склейка получается неправильная...
например при выводе реальной свечи на 10 минутном графике после свечи 12:10 рисуется свеча 12:45, потом после Finished становится свечой 12:20.
Также в месте склейки искажаются индикаторы...На истории индикаторы переходят из одного дня в другой плавно, а в месте склейки идёт явный разрыв значений...
Что можно придумать...?


Добрый день UsilaDobry! Обратил внимание на ваш скриншот. Любопытная реализация приложения. Тестер и работа в риалтайме одновременно. Плюс выделение графика в отдельную вкладку. Очень интересно как вы реализовали очистку графика и отображение подсказок и меток на графике! Если это не большой секрет будет здорово, если вы поделитесь опытом реализации и по возможности фрагментами кода. Спасибо!
Спасибо:

MenDel

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


Всем привет!
Столкнулся с проблемой, вылетает ошибка.
Сделки выводятся на график, но в любой момент вылетает ошибка.

Код такой же как и в примере.
Если убрать эту строчку this.GuiAsync(() => Chart.ProcessCandle(_chartCandleEkement, candle)); то ошибка пропадает,
следовательно она возникает при выводе.

И такой нюанс.
В примере добавлено using StockSharp.Xaml;
А у меня так не работает, пришлось написать using StockSharp.Xaml.Charting;
Почему так?






И еще вопрос, почему в примере одно окно со свечками, а у меня получилось два, а свечки в нижнем
Спасибо:

Николай

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


Присоединяюсь к MenDel,

Выдается ошибка (На видео это время 28:50) :

An unhandled exception of type 'System.ArgumentNullException' occurred in StockSharp.Xaml.dll

Ругается на эту строку:
Код
Chart.ProcessCandle(_chartCandleElement, candle)




P.S.

При попытке запустить скаченный оригинал, также выдается ошибка: An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll

И ругается на код:

Код
Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
                    {
                        {_chartCandleElement, candle},
                        {_chartIndicatorSmaElement, chartValueSma},
                        {_chartIndicatorMyElement, chartValueMy}
                    })
Спасибо:

IvanB

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


Все должно работать:
http://gyazo.com/3702a3a815cdf7cef566ad0f27113aed

Попробуйте следующее:
в контекстном меню (прав кнопкой мыши) каталога StockSharp.Edu на tfs выбираем Advanced -> Get Specific Version... и там как на скриншоте, затем Get.
http://gyazo.com/ed9dcb73299268e01a446292db534aec

Таким образом мы загрузим последнюю версию файлов с сервера.
Автор топика
Спасибо:

Николай

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


Иван, спасибо за комментарий.

Начал разбираться в своей ошибке, и обнаружил следующее:

Код
        private void GetCandlesClick(object sender, RoutedEventArgs e)
        {
            _chartCandleElement = new ChartCandleElement();
            _chartArea.Elements.Add(_chartCandleElement);
            RunProcessGetCandles();
        }


Это так как должно быть, однако в видео был пропущен момент написания кода:

Код
       
            _chartCandleElement = new ChartCandleElement();
            _chartArea.Elements.Add(_chartCandleElement);         


Т.е. те кто будет писать по уроку код получит следующее:

Код
        private void GetCandlesClick(object sender, RoutedEventArgs e)
        {
                       RunProcessGetCandles();
        }


Возможно это нужно будет пометить в тексте самого урока для пользователей.

Также хотел задать вопрос по коду ConnectionInterFace.Main Можешь скинуть код функции Main, т.к. ты ее применяешь в уроках, для отсоединения, однако в References StockSharp.WpfConnectionInterface не могу найти.

Спасибо:

IvanB

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


Спасибо за замечание.
Свойство Main в ConnectionInterFace нам не нужно более, т.к. мы сделали следующее:
Код

        /// <summary>
        /// Событие завершения загрузки данного контрола
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="routedEventArgs"></param>
        void InterFace_Loaded(object sender, RoutedEventArgs routedEventArgs)
        {
            //Получить родительское окно
            var window = Window.GetWindow(Parent);
            if (window != null)
                window.Closed += delegate
                    {
                        if (_safeConnection != null)
                            _safeConnection.DisConnectSafe();
                    };
        }

Тем самым избавились от необходимости идентификации дополнительного свойства.
Автор топика
Спасибо:

Maxim

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


Здравствуйте.
Не отображается последняя свеча текущего дня и ее изменения (подключение через TransaqConnector). Я использую StockSharp API 4.2.1.7. Подскажите, пожалуйста, что делать...

Код:
Код
 
private void RunProcessGetCandles()
        {
            _candleManager = new CandleManager(interFace.SafeConnection.Trader);
            var security = interFace.SelectedSecurity;
            var timeFrame = TimeSpan.FromMinutes(5);
            _candleSeries = new CandleSeries(typeof (TimeFrameCandle), security, timeFrame);
            _candleSeries.ProcessCandle += Draw;
            _candleManager.Start(_candleSeries);
        }

        private void Draw(Candle candle)
        {
            var candleBounds = ((TimeSpan) candle.Arg).GetCandleBounds(_candleSeries.Security);
            if (candle.State == CandleStates.Finished || candle.OpenTime >= candleBounds.Min)
            {
                this.GuiAsync(() => Chart.ProcessCandle(_chartCandleElement, candle));
            }
            
        }

        private void InitChart()
        {
            Chart.IsAutoScroll = true; 
            _chartArea = new ChartArea();
            Chart.Areas.Add(_chartArea);
            _chartCandleElement = new ChartCandleElement();
            _chartArea.Elements.Add(_chartCandleElement);
        }

        private void WindowLoaded(object sender, RoutedEventArgs e)
        {
            InitChart();
        }
Спасибо:

IvanB

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


Попробуйте обновить время через интернет на вашем компьютере
Автор топика
Спасибо:

Maxim

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


IvanB Перейти
Попробуйте обновить время через интернет на вашем компьютере



Не помогло. Пробовал также время на пару минут раньше устанавливать. Черная стрелка с ценой последней сделки вообще отсутствует в области графика.
Спасибо:

IvanB

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


Maxim Перейти
IvanB Перейти
Попробуйте обновить время через интернет на вашем компьютере



Не помогло. Пробовал также время на пару минут раньше устанавливать. Черная стрелка с ценой последней сделки вообще отсутствует в области графика.


Тогда попробуйте сделать так:
Код

        private void Draw(Candle candle)
        {
            this.GuiAsync(() => Chart.ProcessCandle(_chartCandleElement, candle)); 
        }


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

Maxim

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


Цитата:

Тогда попробуйте сделать так:
Код:

private void Draw(Candle candle)
{
this.GuiAsync(() => Chart.ProcessCandle(_chartCandleElement, candle));
}


код выводит абсолютно все свечи, если заработает, то проблема с расхождением времени приходящих свечей и вашего ПК.


То же самое...Не отображается
Спасибо:

Maxim

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


В проекте Transaq > Sample тоже не выводится текущая свеча.
А вот в проекте Quik > SampleCandles все Ok!
Спасибо:

Maxim

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


Могу, если надо, видео с экрана куда-нибудь выложить...
Спасибо:

IvanB

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


Maxim Перейти
В проекте Transaq > Sample тоже не выводится текущая свеча.
А вот в проекте Quik > SampleCandles все Ok!


Попробуйте так:
Код

_candleManager.Processing += Draw;

при этом заголовок метода Draw нужно изменить:
Код

private void Draw(CandleSeries series, Candle candle)
Автор топика
Спасибо:

JaguarFX

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


Судя по всему в библиотеке StockSharp.Xaml версии 4.1.2.7 уже нет компонента SciChart, о котором рассказывается в видео-уроке.
Прошу подсказать какой компонент теперь его заменил, и внести эту информацию в раздел "Изменения в проектах".

Разобрался: необходимо подключать библиотеку StockSharp.Xaml.Charting и использовать элемент Chart.
Спасибо:

JaguarFX

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


Николай Перейти
Присоединяюсь к MenDel,

Выдается ошибка (На видео это время 28:50) :

An unhandled exception of type 'System.ArgumentNullException' occurred in StockSharp.Xaml.dll

Ругается на эту строку: [code=csharp]Chart.ProcessCandle(_chartCandleElement, candle)


Присоединяюсь к замечанию Mendel и Николая,
уже месяц прошел с даты публикации ошибки , но ошибка все равно не исправлена.

У меня VS2012 более подробную информацию об ошибке - проблема в том что, не найдены символы для библиотеки Abt.Controls.SciChart.Wpf.2.2 (см. детали на скрин-шоте).
S#ChartError-1.jpg 318 KB (1)
Спасибо:
< 1 2 3  >

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

loading
clippy