﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">О новом интерфейсе IMarketDataProvider</title>
  <id>~/topic/306/o-novom-interfeise-imarketdataprovider/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T11:08:09Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=306" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/207/</id>
    <title type="text">Достаточно тихо прошло нововведение интерфейса IMarketDataProvider. Тем не менее, сама фича очень ва...</title>
    <published>2014-09-25T21:47:11Z</published>
    <updated>2016-08-15T23:43:10Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Достаточно тихо прошло нововведение &lt;a href="http://stocksharp.com/forum/4694/Poluchieniie-level1-s-pomoshch-iu-IMarketDataProvider/" title="http://stocksharp.com/forum/4694/Poluchieniie-level1-s-pomoshch-iu-IMarketDataProvider/"&gt;интерфейса IMarketDataProvider&lt;/a&gt;. Тем не менее, сама фича очень важна, так как она меняет использование самого старого класса - &lt;b&gt;Security&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Как известно, класс &lt;b&gt;Security&lt;/b&gt;, олицетворяющий собой финансовый инструмент, имеет просто огромное количество полей (классические OHLC, лучшие котировки, последную сделки, греки опционов и многое другое). Пользоваться этим получается достаточно удобно:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
// получение цены последней сделки
var lastTradePrice = sber.LastTrade == null ? (decimal?)null : sber.LastTrade.Price;

// получение открытого интереса по РИ
var oi = ri.OpenIntereset;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;И чудесным образом подключение к торговой системе через XXXConnector обновляет эти данные. Но в этой красоте скрывается один серьезный недостаток. А что если у нас 2, или даже, 3, поключения (причем, некоторые из них могут быть вполне виртуальными, как &lt;b&gt;HistoryEmulationConnector&lt;/b&gt;)? И все они транслируют данные по многим одинаковым инструментам. Какое подключение будет обновлять данные?&lt;br /&gt;&lt;br /&gt;Ответ простой - все одновременно. И мы получаем кашу, если мы используем единые объекты для разных подключений. По-умолчанию, подключения создают отдельные объекты &lt;b&gt;Security&lt;/b&gt;. Тогда перезапись данных невозможно. Но получается другая проблема - разные объекты для одного и того же инструмента.&lt;br /&gt;&lt;br /&gt;В итоге родилась идея, чтобы хранить изменяющиеся поля в подключении (точнее, реализации IMarketDataProvider), а константные (код, дата экспирации, шаг цены и т.д.) оставить в классе &lt;b&gt;Security&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Спешу сразу успокоить - по-умолчанию все работает в классическом режиме. При обновлении вам не нужно &amp;quot;доводить напильником&amp;quot; старый и проверенный код. Но чтобы получить возможность использовать один объект в разных подключения - просто включите &lt;a href="http://stocksharp.com/forum/4694/Poluchieniie-level1-s-pomoshch-iu-IMarketDataProvider/" title="http://stocksharp.com/forum/4694/Poluchieniie-level1-s-pomoshch-iu-IMarketDataProvider/"&gt;соответствующие режимы&lt;/a&gt;. Вот как будет выкглядеть старые код на новый лад:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
// получение цены последней сделки
var lastTradePrice = myStrategy.GetSecurityValue&amp;lt;decimal?&amp;gt;(sber, Level1Fields.LastTradePrice);

// получение открытого интереса по РИ
var oi = myStrategy.GetSecurityValue&amp;lt;decimal?&amp;gt;(ri, Level1Fields.OpenIntereset);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Конечно же, это несколько сложнее, чем предыдущий код. Но тем самым будет упрощено взаимодействие с параллельным тестированием и работой стратегий. И да, в &lt;a href="http://stocksharp.com/products/studio/" title="http://stocksharp.com/products/studio/"&gt;Студии&lt;/a&gt; нужно использовать, конечно же, последний вариант. Есть повод для осмысления и модернизации.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>