﻿<?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">Как оптимизировать скорость тестирования?</title>
  <id>~/topic/3936/kak-optimizirovat-skorost-testirovaniya/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-19T18:05:45Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3936" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/27216/</id>
    <title type="text">Спасибо, Иван! Ваши советы очень помогают! </title>
    <published>2013-08-29T07:43:16Z</published>
    <updated>2013-08-29T07:43:16Z</updated>
    <author>
      <name>Bond</name>
      <uri>https://stocksharp.com/users/26882/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Спасибо, Иван! Ваши советы очень помогают! [thumbup] </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27215/</id>
    <title type="text">Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для по...</title>
    <published>2013-08-29T07:28:23Z</published>
    <updated>2013-08-29T07:28:23Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.com/users/26984/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Bond &lt;a href="https://stocksharp.com/posts/m/27191/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Добрый день!&lt;br /&gt;Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?&lt;br /&gt;Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться)&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Многое зависит от того какое тестирование Вы хотите провести, протестировать некоторую стратегию, с уже определенными параметрами на большой истории, или Вам надо подобрать параметры для своей стратегии.&lt;br /&gt;Т.е. есть возможность распараллелить по двум направлениям: первый - поделить всю историю на отрезки и для каждого запустить полноценную инфраструктуру; второй - сформировать пакеты параметров стратегий и для каждого пакета запустить свою инфраструктуру, этот вариант продемонстрирован в примере SampleHistoryTestingParallel, входящим в &lt;a href="http://www.stocksharp.com/login.aspx?ReturnUrl=%252fproducts%252fdownload%252f" title="http://www.stocksharp.com/login.aspx?ReturnUrl=%252fproducts%252fdownload%252f"&gt;архив S#&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Для реализации обоих схем, не обязательно, даже, навыки работы с многопоточностью в C#, большая часть распараллеливания будет сделана неявно.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Bond &lt;a href="https://stocksharp.com/posts/m/27191/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;В примере:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_1120540901f043358f4615c8576ad227');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_1120540901f043358f4615c8576ad227' style='display:none'&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 periods = new[]
{
    new Triple&amp;lt;int, int, Color&amp;gt;(80, 10, Colors.DarkGreen),
    new Triple&amp;lt;int, int, Color&amp;gt;(70, 8, Colors.Red),
    new Triple&amp;lt;int, int, Color&amp;gt;(60, 6, Colors.DarkBlue),
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

foreach (var period in periods)
{
    // создаем тестовый инструмент, на котором будет производится тестирование 
    var security = new Security
    {
......

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...&lt;/div&gt;&lt;/div&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 periods = new[]
{
    new Triple&amp;lt;int, int, Color&amp;gt;(80, 10, Colors.DarkGreen),
    new Triple&amp;lt;int, int, Color&amp;gt;(70, 8, Colors.Red),
    new Triple&amp;lt;int, int, Color&amp;gt;(60, 6, Colors.DarkBlue),
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;каждый элемент списка (например первый:80, 10, Colors.DarkGreen), это параметры стратегии, которые мы хотим проверить, т.о. у нас имеется три пакета параметров, которые мы хотим проверить/протестировать.&lt;br /&gt;Далее в коде мы создаем три абсолютно независимых направления, вплоть до того, что трейдер у нас будет разный (свой в каждом направлении), но при этом источник данных (хранилище storageRegistry) у нас одно.&lt;br /&gt;И поскольку, S# активно использует возможности многопоточности (в своей реализации, в библиотеках), то все эти три направления будут работать в разных не зависимых потоках, которые в свою очередь будут распределены автоматически, средствами операционной системы, на разные процессоры, по возможности.&lt;br /&gt;Таким образом, не оперируя явно потоками. мы можем распараллеливать тестирование.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/27191/</id>
    <title type="text">Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для по...</title>
    <published>2013-08-28T07:18:47Z</published>
    <updated>2013-08-28T18:24:06Z</updated>
    <author>
      <name>Bond</name>
      <uri>https://stocksharp.com/users/26882/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Добрый день!&lt;br /&gt;Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти?&lt;br /&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 periods = new[]
{
    new Triple&amp;lt;int, int, Color&amp;gt;(80, 10, Colors.DarkGreen),
    new Triple&amp;lt;int, int, Color&amp;gt;(70, 8, Colors.Red),
    new Triple&amp;lt;int, int, Color&amp;gt;(60, 6, Colors.DarkBlue),
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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;

foreach (var period in periods)
{
    // создаем тестовый инструмент, на котором будет производится тестирование 
    var security = new Security
    {
......

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>