Не получается получить BestAsk и BestBid цены

Не получается получить BestAsk и BestBid цены
Atom
2/24/2015
Zabik


Написал небольшую программу, которая коннектится к Quik, подгружает мои портфели и два необходимых мне инструмента: VTBR и SBER, а так же позволяет купить/продать данные бумаги по рынку.

Все было хорошо, пока мне не понадобились BestAsk.Price и BestBid.Price. Причем чтобы я не делал: пытался присвоить цену переменной или купить/продать по бестбид/аск цене - получаю ошибку:

Error

Вот мой код, что я делаю не так?

Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Net;
using System.Security;

using MoreLinq;

using Ecng.Common;
using Ecng.Collections;
using Ecng.ComponentModel;
using Ecng.Serialization;
using Ecng.Xaml;

using StockSharp.Quik;
using StockSharp.Algo;
using StockSharp.BusinessEntities;
using StockSharp.Fix;
using StockSharp.Logging;
using StockSharp.Messages;
using StockSharp.Quik.Lua;


namespace Robot
{    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        
        private static Security _sber;
        private static Security _vtbr;                
        private QuikTrader CommonRobot1;
        
        private void Connect_Click(object sender, RoutedEventArgs e)
        {
            CommonRobot1 = new QuikTrader
            {
                LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
                LuaLogin = "quik",
                LuaPassword = "quik".To<SecureString>()
            };            

            CommonRobot1.NewPortfolios += portfolios => this.GuiAsync(() =>
                {
                    portf.ItemsSource = CommonRobot1.Portfolios;                    
                });
            
            CommonRobot1.NewSecurities += securities => this.GuiAsync(() =>
            {                
                _sber = securities.FirstOrDefault(s => s.Id == "SBER@TQBR");
                _vtbr = securities.FirstOrDefault(s => s.Id == "VTBR@TQBR");                
                financial.Items.Add(_sber);
                financial.Items.Add(_vtbr);                
            });

            CommonRobot1.Connected += () =>
            {
                CommonRobot1.StartExport();
            };

            CommonRobot1.Connect();
        }

        private void Buy_Click(object sender, RoutedEventArgs e)
        {
            int vol;

            if (String.IsNullOrEmpty(volume.Text))
                vol = 1;
            else
                vol = int.Parse(volume.Text);

            var order = new Order
            {
                Portfolio = (Portfolio)portf.SelectedItem,
                Security = _vtbr, //(Security)financial.SelectedItem,
                Volume = vol,
                Price = _vtbr.BestBid.Price,
                //Type = OrderTypes.Market,
                Direction = Sides.Buy,
            };

            CommonRobot1.RegisterOrder(order);
        }

        private void Sell_Click(object sender, RoutedEventArgs e)
        {
            int vol;

            if (String.IsNullOrEmpty(volume.Text))
                vol = 1;
            else
                vol = int.Parse(volume.Text);

            var order = new Order
            {
                Portfolio = (Portfolio)portf.SelectedItem,
                Security = (Security)financial.SelectedItem,
                Volume = vol,
                Type = OrderTypes.Market,
                Direction = Sides.Sell,
            };

            CommonRobot1.RegisterOrder(order);
        }        
    }
}

Tags:


Thanks:


< 1 2 
Иван З.

Avatar
Date: 3/2/2015
Reply


Thanks: Zabik

Zabik

Avatar
Date: 3/2/2015
Reply


Ну что же, получилось с горем пополам, и то через одно место:

Code
private void _result_Click(object sender, RoutedEventArgs e)
        {
            var security_sber = SecurityPicker.Securities.FirstOrDefault(s => s.Id == "SBER@TQBR");
            _lasttrade_sber.Text = security_sber.LastTrade.Price.ToString();
            var security_vtbr = SecurityPicker.Securities.FirstOrDefault(s => s.Id == "VTBR@TQBR");
            _lasttrade_vtbr.Text = security_vtbr.LastTrade.Price.ToString();
        }


Т.е. цепляю дынные из самой таблицы (как они там появляются для меня остается загадкой). Осталось теперь понять куда запихать этот код, чтобы данные приходили в реальном времени, а не только на момент нажатия _result.
Thanks:

Zabik

Avatar
Date: 3/2/2015
Reply


Все, всем спасибо!

Code

private void _result_Click(object sender, RoutedEventArgs e)
        {
            var trader = MainWindow.Instance.Trader;
            trader.MarketDepthsChanged += depths => this.GuiAsync(() =>
            {
                depths.ForEach(d =>
                {
                    var security_sber = SecurityPicker.Securities.FirstOrDefault(s => s.Id == "SBER@TQBR");
                    _lasttrade_sber.Text = security_sber.LastTrade.Price.ToString();
                    var security_vtbr = SecurityPicker.Securities.FirstOrDefault(s => s.Id == "VTBR@TQBR");
                    _lasttrade_vtbr.Text = security_vtbr.LastTrade.Price.ToString();
                });
            });
            
        }


Не знаю как, но работает правильно. Так что даже разбираться не буду [laugh]
Thanks:

Renat

Avatar
Date: 11/29/2020
Reply


[confused]
Thanks:
< 1 2 

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

loading
clippy