Урок 1. Быстрый старт StockSharp!

Урок 1. Быстрый старт StockSharp!
Atom
4/13/2013
IvanB


Видео-уроки:
Основной урок:

[vk]http://vk.com/video_ext.php?oid=-66650972&id=167466607&hash=c6ed55fcd6fec380&hd=3[/vk]

Введение в StockSharp.Studio:



В данном уроке настроим Вашу торговую платформу и напишем первого торгового робота!

Выбрать свою платформу:
  1. Quik.Реальный Quik лучше получать у каждого брокера отдельно. Получить демо.
  2. SmartCOM. Работает как служба, не требует графической платформы для ручной торговли. Получить демо.
  3. Альфа-Директ. Демо можно получить только имея реальный счет [blink]
  4. Plaza II. Получить демо (написать письмо, отвечают оперативно). Примерно выглядеть должно оно так.
  5. Fusion/BlackWood. Уточнение: платформа для торговли не требуется. Получить демо
  6. Transaq. Если клиент Финама, логин/пароль можно получить в личном кабинете. Transaq абсолютно бесплатный.


Настройка/запуск торговой платформы для робота:
  1. Quik(видео)
  2. Transaq (вебинар/видео)
  3. BlackWood (вебинар/видео)


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

Основные концепции StockSharp

  • Продукты StockSharp
  • Архитектура StockSharp

Коннекторы

  • Обзор коннекторов
  • Специфика передачи данных коннекторов

Создание простого приложения

  • Подключение к торговой платформе
  • Получение портфелей и торговых инструментов
  • Отправление первых заявок


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


Документация:
  1. S# основная документация
  2. Исходные коды S#


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

Изменения в проектах:
plaza.png 10 KB (503)



Thanks:


dij1

Avatar
Date: 10/28/2013
Reply


Во-первых, не работает метод initialize - его использование приводит к ошибке.
Во-вторых, несмотря на наличия необходимой библиотеки, не работает метод guiAsync, может он как-то поменялся в последних версиях?

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

http://imageshack.com/a/img706/6022/dqjq.png
http://imageshack.com/a/img163/3573/gl8h.png

В третьих, все, что качается с командного сервера, не получается открыть через дизайнер. Стоит VB2012 c 7-м решарпером.

Все необходимые библиотеки (такие же, как и в видео) присутствуют.
Thanks:

Самунджян Артем

Avatar
Date: 10/29/2013
Reply


dij1

Во-первых, не работает метод initialize - его использование приводит к ошибке.
Во-вторых, несмотря на наличия необходимой библиотеки, не работает метод guiAsync, может он как-то поменялся в последних версиях?


Кстати, а Вы открывали спойлер "Изменения в проектах"? Там очень четко описано, что поменялось в новых версиях. Потому как наши проекты обновляются вместе с последними версиями S#, следовательно некоторые из названий методов немного меняются. Но на самом деле общая концепция остается полностью такой же.

Возможно вы добавили не все нужные библиотеки в свой проект.
Thanks:

dij1

Avatar
Date: 10/29/2013
Reply


Артем, ответил выше (изменил пост).
Thanks:

Sid

Avatar
Date: 2/5/2014
Reply


StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Указанная транзакция по указанному классу не найдена: "TQBR".
Thanks:

devruss

Avatar
Date: 2/5/2014
Reply


Вот так должен выглядеть код для урока 1 со всеми изменениями при переходе на S# 4.2.2.x

В TFS для урока 1 лежит еще проект QuikKiller, но я не нашел к нему видео, оно есть?

Code

using System.ComponentModel;
using System.Linq;
using System.Windows;
using Ecng.Xaml;
using StockSharp.Algo;
using StockSharp.BusinessEntities;
using StockSharp.Quik;

namespace L1.Start
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //Коннектор к торговой платформе
        private Connector _trader;

        public MainWindow()
        {
            InitializeComponent();
        }
        
        //Подключение к терминалу Quik
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            //создаём Quik трейдера, передавая в конструктор место расположения нашего терминала
            _trader = new QuikTrader(QuikTerminal.GetDefaultPath());

            //подписываемся на событие появление новых инструментов
            _trader.NewSecurities += securities => this.GuiAsync(() =>
            {
                //заполняем коллекцию у нашего выпадающего списка (ComboBox)
                cbSecurities.ItemsSource = _trader.Securities;
            });

            //подписываемся на событие появления новых портфелей
            _trader.NewPortfolios += portfolios => this.GuiAsync(() =>
            {
                //заполняем коллекцию у нашего выпадающего списка (ComboBox)
                cbPortfolios.ItemsSource = _trader.Portfolios;
            });

            //подписываемся на событие подключения, как только подлючимся, сразу запустим экспорт
            _trader.NewOrders += orders => this.GuiAsync(() =>
            {
                //указываем количество зарегистрированных заявок
                tbOrdersCount.Text = _trader.Orders.Count().ToString();
            });

            //подписываемся на событие подключения, как только подлючимся, сразу запустим Экспорт
            _trader.Connected += () => _trader.StartExport();

            // подключаемся к Quik 
            _trader.Connect();


        }

        private void BuyClick(object sender, RoutedEventArgs e)
        {
            //если экземпляр трейдера не был создан - выходим
            if (_trader == null)
                return;

            //создаём ордер
            var order = new Order()
            {
                Connector = _trader,                                    //шлюз к торговой системе (трейдер)
                Portfolio = cbPortfolios.SelectedItem as Portfolio,     //портфель, указанный пользователем
                Security = cbSecurities.SelectedItem as Security,       //инструмент, указанный пользователем
                Volume = 1,                                             //количество контрактов в заявке
                Price = decimal.Parse(tbPrice.Text),                    //цена заявки
                Direction = OrderDirections.Buy                         //направление заявки
            };

            //регистрируем ордер
            _trader.RegisterOrder(order);
        }
        
        //Закрытие окна
        private void WindowClosing(object sender, CancelEventArgs e)
        {
            //если экземпляр трейдера был создан
            if (_trader != null)
            {
                //Прекратить экспорт данных
               _trader.StopExport();
               //Разорвать соединение с торговой системой
               _trader.Disconnect();
            }
        }
    }
}
Thanks: Artur

Izida

Avatar
Date: 2/14/2014
Reply


Из урока 1
Проект StockSharpStart запускается без ошибок, но нажатие кнопки Connect ни к чему не приводит (инструменты и портфели остаются недоступными).
Проект QuikKiller запускается без ошибок, но нажатие кнопки Connect выдает ошибку "Лицензия не поддерживает QuikTrader".

Из урока 2
Проект MarketDepths_Trades запускается без ошибок, кнопка Connect при нажатии сразу превращяется в серую Disconnect, но инструменты и портфели остаются недоступными, а при нажатии на кнопку Get Stream Data возникает ошибка:
An unhandled exception of type 'System.ArgumentNullException' occurred in StockSharp.Algo.dll
Additional information: Значение не может быть неопределенным.

В чем могут быть причины?
Thanks:

Mikhail Sukhov

Avatar
Date: 2/14/2014
Reply


Izida

Проект QuikKiller запускается без ошибок, но нажатие кнопки Connect выдает ошибку "Лицензия не поддерживает QuikTrader".


Попробуйте обновить S#.API. И скажите свой номер лицензии, пожалуйста.
Thanks:

Izida

Avatar
Date: 2/15/2014
Reply


Спасибо! В личном кабиненте выяснилось, что истекла лицензия, буду генерировать новую.
Thanks:

Sid

Avatar
Date: 2/25/2014
Reply


А кто-нибудь из учеников пробовал переводить эти примеры на другие коннекторы?
Меня вот например интересует Транзак. С секцией ММВБ работает корректно.
А вот с ФОРТС прикол какой-то. Инструменты видит не как SIH4@FUT, а как SIH4@TEST например.
И заявка поданная из терминала так же.
SIH4@TEST 848185375 25.02.2014 11:06:46 35700 1 Sell
Соответственно заявка через коннектор не проходит с ошибкой "Инструмент не найден ('seccode'=SiH4, 'board='TEST)"

Это что-то в коннекторе или искать причину у брокера ?
Почему везде TEST ?
Снимок.PNG 17 KB (744)
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy