← 戻る

GetSecurityValue

Здравствуйте. S# 5.0 и Quik 8, Windows 10 Pro, WS 2019, .NET 4.8 FW. Пытаюсь получить значение маркет-данных для инструмента:

private Security testSecurity; 
        private string isin = "RU000A0JU286";

        private void Test_Click(object sender, RoutedEventArgs e)
        {
            foreach (var sec in connector.Securities) 
            {
                if (sec.Code == isin && sec.Board == ExchangeBoard.MicexEqob && sec.Currency == CurrencyTypes.RUB)
                {
                    connector.SubscribeLevel1(sec); 
                    testSecurity = sec;
                }
            }
            Trace.TraceInformation($"> testSecurity {testSecurity.Code} / значение {connector.GetSecurityValue(testSecurity, Level1Fields.PriceStep)}");
            Trace.TraceInformation($"> testSecurity {testSecurity.Code} / значение {connector.GetSecurityValue(testSecurity, Level1Fields.BestBid)}");
        }

Результат null, что не так?

このトピックは参考になりましたか?

トピックを共有

コメント (8)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Support
Support

Добрый день

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

Алексей
Алексей 著者

Support: Добрый день

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

Уважаемый Support, а можно как-то подробнее отвечать? С вариантом кода или примерами. Всё таки это платная поддержка, в учебном курсе к сожалению этот вопрос не освещался, документация без примеров.

Алексей
Алексей 著者

Событие происходит, параметры приходят, как их получить? connector.GetSecurityValue(testSecurity, Level1Fields.Yield) ? testSecurity.Yield ? У меня везде null.

private void Test_Click(object sender, RoutedEventArgs e) { foreach (var sec in connector.Securities) { if (sec.Code == isin && sec.Board == ExchangeBoard.MicexEqob && sec.Currency == CurrencyTypes.RUB) { testSecurity = sec;
                connector.Level1Received += (p, r) =>
                {
                    Trace.TraceInformation($"> p {p}");
                    Trace.TraceInformation($"> r {r}");

                    Trace.TraceInformation($"> GetSecurityValue {connector.GetSecurityValue(testSecurity, Level1Fields.Duration)}");
                    Trace.TraceInformation($"> GetSecurityValue {connector.GetSecurityValue(testSecurity, Level1Fields.Yield)}");

                    Trace.TraceInformation($"> testSecurity {testSecurity.Yield}");
                };

                connector.SubscribeLevel1(testSecurity);
                break;
            }
        }
    }
Support
Support

Данные поля не поддерживаются коннектором Quik.

Алексей
Алексей 著者

Support: Данные поля не поддерживаются коннектором Quik.

Как не поддерживаются? Если при срабатывании события (connector.Level1Received += (p, r) =>) приходит сообщение где содержутся эти параметры. Как мне их достать (Yield, Duration) из сообщения или еще откуда?

Trace 29.04.2020 23:59:28 +03:00 Info > r Level1Change,T(L)=2020/04/29 23:59:28.499,T(S)=2020/04/29 23:59:28.462,Sec=RU000A0JU286@EQOB,Changes=[PriceStep, 0.01],[BestBidPrice, 100.63],[BestBidVolume, 5],[BestAskPrice, 102],[BestAskVolume, 36],[BidsVolume, 6934],[AsksVolume, 5062],[OpenPrice, 100.56],[LowPrice, 100.56],[HighPrice, 102.4],[ClosePrice, 102.55],[Change, -0.15],[LastTradePrice, 102.4],[LastTradeVolume, 9],[HighBidPrice, 102.4],[LowAskPrice, 100.56],[VWAP, 101.66],[Yield, -1.4],[AccruedCouponIncome, 0.05],[Volume, 60],[MinPrice, 61.53],[MaxPrice, 143.57],[Duration, 90],[IssueSize, 3500000],[Turnover, 12199],[CouponValue, 4.14],[CouponPeriod, 91],[MarketPriceYesterday, 100.68],[MarketPriceToday, 100.7],[VWAPPrev, 102.87],[YieldVWAP, 1.54],[YieldVWAPPrev, -3.08],[BidsCount, 46],[AsksCount, 5],[TradesCount, 6],[CouponDate, 07/27/2020 21:00:00 +00:00],[State, Trading]

Алексей
Алексей 著者

Да вы можете писать подробнее? Я ВАМ ДЕНЬГИ ПЛАЧУ!!! Какие поля еще не поддерживаются? Где это надо смотреть?

Алексей
Алексей 著者

И третий вопрос. Что значит на GitHub, в релизе к S#5 данная надпись: "(feature) QuikLua. Securities. FaceValue, Dividend, Duration, CouponDate, CouponPeriod, CouponValue, MarketPriceToday, MarketPriceYesterday, YieldVWAP, YieldVWAPPrev, VWAPPrev translation added."?

Support
Support

Вы можете использовать следующий подход:

Security sber = ...
var sberId = sber.ToSecurityId();

connector.Level1Received += (s, l) =>
{
  if (l.SecurityId == sberId)
  {
    var duration = (decimal?)l.Changes.TryGetValue(Level1Fields.Duration); // метод расширение из Ecng.Collections
    if (duration != null)
    {
       // дюрация установлена
    }
  }
};

Level1 данные - это данные с изменениями. Если поле не меняется, то level1 не будет содержать данные в следующем сообщении. Мы не копим изменения в целях оптимизации памяти. Если вам необходимо сохранять это данные для последующего анализа, вам нужно сохранять их куда-то в собственные словари.

Коннектор QUIK транслирует множество Level1. Но далеко не все что есть. Level1 поля сделаны для всех коннкторов, включая не классические биржевые. Мы не можем описывать доступность всех полей для всех коннекторов. На данный момент это технически невозможно.