﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Как подхватить в стратегии текущий размер позиции</title>
  <id>~/topic/1312/kak-podhvatit-v-strategii-tekushshii-razmer-pozitsii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-07T06:46:55Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1312" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/5368/</id>
    <title type="text">aerv: Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это ...</title>
    <published>2011-01-09T23:22:46Z</published>
    <updated>2011-01-09T23:22:46Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5364)" rel="nofollow" target="_blank"&gt;aerv&lt;/a&gt;:&lt;/strong&gt;
Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это кривой.
Вариант со _strategy.PositionManager.StartPosition мне кажется наиболее правильным. Для вычисления текущей позиции нужно будет лишь к вычисленному по трейдам числу прибавлять это значение. Так, пожалуй, и сделаю.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Наиболее правильный будет как раз не менять существующий алгоритм подсчета, а подсунуть псевдо-данные для вычисления, произведя некоторую эмуляцию... Сделайте наследник от QuikTrader и в нем принудительно вызовите метод &lt;a href="http://stocksharp.com/doc/help/html/M_Ecng_Trading_Algo_BaseTrader_GetMyTrade_5_f273a04f.htm"&gt;GetMyTrade&lt;/a&gt;. Этот метод возвращается сделку, и если она отсутсвует, то создает ее. Создавать объекты Order и MyTrade можно через new, внутри нет никакого специального подсчета.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5364/</id>
    <title type="text">Mikhail Sukhov: Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, использу...</title>
    <published>2011-01-09T17:06:40Z</published>
    <updated>2011-01-09T17:44:37Z</updated>
    <author>
      <name>aerv</name>
      <uri>https://stocksharp.ru/users/28151/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5360)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Positions. Если же все таки так, то надо самостоятельно где-то в своем коде восстанавливать текущую позицию.
Это мне понятно, мне непонятно:
как в своем коде указать стратегии, что она уже имеет позицию по бумаге и должна ее дальше &amp;quot;вести&amp;quot;, в соответствии с заложенной в стратегии логикой.
Я ожидал нечто подобное:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;var pos = _trader.Positions.FirstOrDefault(p =&amp;gt; p.Security.Code == _secCode);
_strategy = new SmaStrategy();
_strategy.PositionManager.Init( pos != null ? pos.CurrentValue : 0 );
// Или
_strategy.PositionManager.StartPosition = pos != null ? pos.CurrentValue : 0;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;но так нельзя, подскажите, пожалуйста, как можно.
Сохраненной информации о старых трейдах по этой бумаге у меня, допустим, нет.
Закрывать позицию вручную в терминале и потом открыть с помощью стратегии, конечно можно, но это не подходящий вариант для меня.&lt;/p&gt;
&lt;p&gt;Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это кривой.
Вариант со _strategy.PositionManager.StartPosition мне кажется наиболее правильным. Для вычисления текущей позиции нужно будет лишь к вычисленному по трейдам числу прибавлять это значение. Так, пожалуй, и сделаю.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5360/</id>
    <title type="text">aerv: Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь. А может просто, в страте...</title>
    <published>2011-01-08T21:40:48Z</published>
    <updated>2011-01-08T21:40:48Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5354)" rel="nofollow" target="_blank"&gt;aerv&lt;/a&gt;:&lt;/strong&gt;
Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь.
А может просто, в стратегии использовать не _strategy.PositionManager.Position, а _strategy.Trader.Positions
?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Сразу поправлю. Strategy.Position - это позиция по стратегии. А Trader.Positions - это позиции по бумагам. Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Positions. Если же все таки так, то надо самостоятельно где-то в своем коде восстанавливать текущую позицию.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5354/</id>
    <title type="text">После успешного старта стратегии обнаруживаю разницу var pos = _trader.Positions.First(p =&amp;gt; p.Securi...</title>
    <published>2011-01-06T23:01:57Z</published>
    <updated>2011-01-06T23:01:57Z</updated>
    <author>
      <name>aerv</name>
      <uri>https://stocksharp.ru/users/28151/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;После успешного старта стратегии обнаруживаю разницу&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
var pos = _trader.Positions.First(p =&amp;gt; p.Security == _security);
int tp = pos != null ? pos.CurrentValue : 0;  // = 1
int sp = _strategy.PositionManager.Position; // = 0
Assert.AreEqual( tp, sp ); // Не равны

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Как сделать, чтобы стратегия &amp;quot;подхватила&amp;quot; текущую позицию по бумаге?
Возможны (нужны) два варианта:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
// Сегодня были сделки
_trader.MyTrades.Count(t=&amp;gt; t.Trade.Security == _security) &amp;gt; 0  
// Сделки были когда-то давно
_trader.MyTrades.Count(t=&amp;gt; t.Trade.Security == _security) == 0

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь.
А может просто, в стратегии использовать не _strategy.PositionManager.Position, а _strategy.Trader.Positions
?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>