Как подхватить в стратегии текущий размер позиции~/topic/1312/kak-podhvatit-v-strategii-tekushshii-razmer-pozitsii/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T13:49:28Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/5368/ Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это криво...2011-01-09T23:22:46Z2011-01-09T23:22:46ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">aerv <a href="https://stocksharp.ru/posts/m/5364/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это кривой.<br />Вариант со _strategy.PositionManager.StartPosition мне кажется наиболее правильным. Для вычисления текущей позиции нужно будет лишь к вычисленному по трейдам числу прибавлять это значение. Так, пожалуй, и сделаю.</div></div><br /><br />Наиболее правильный будет как раз не менять существующий алгоритм подсчета, а подсунуть псевдо-данные для вычисления, произведя некоторую эмуляцию... Сделайте наследник от QuikTrader и в нем принудительно вызовите метод <a href="http://stocksharp.com/doc/help/html/M_Ecng_Trading_Algo_BaseTrader_GetMyTrade_5_f273a04f.htm" title="http://stocksharp.com/doc/help/html/M_Ecng_Trading_Algo_BaseTrader_GetMyTrade_5_f273a04f.htm">GetMyTrade</a>. Этот метод возвращается сделку, и если она отсутсвует, то создает ее. Создавать объекты Order и MyTrade можно через new, внутри нет никакого специального подсчета.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/5364/Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Posit...2011-01-09T17:06:40Z2011-01-09T17:44:37Zaervhttps://stocksharp.ru/users/28151/info@stocksharp.ru<div class="quote"><span class="quotetitle">Mikhail Sukhov <a href="https://stocksharp.ru/posts/m/5360/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Positions. Если же все таки так, то надо самостоятельно где-то в своем коде восстанавливать текущую позицию.</div></div><br />Это мне понятно, мне непонятно:<br />как в своем коде указать стратегии, что она уже имеет позицию по бумаге и должна ее дальше "вести", в соответствии с заложенной в стратегии логикой.<br />Я ожидал нечто подобное:<br /><div class="code"><strong>Код</strong><div class="innercode">var pos = _trader.Positions.FirstOrDefault(p => p.Security.Code == _secCode);<br />_strategy = new SmaStrategy();<br />_strategy.PositionManager.Init( pos != null ? pos.CurrentValue : 0 );<br />// Или<br />_strategy.PositionManager.StartPosition = pos != null ? pos.CurrentValue : 0;<br /></div></div><br />но так нельзя, подскажите, пожалуйста, как можно.<br />Сохраненной информации о старых трейдах по этой бумаге у меня, допустим, нет.<br />Закрывать позицию вручную в терминале и потом открыть с помощью стратегии, конечно можно, но это не подходящий вариант для меня.<br /><br />Можно, наверное, MyTrade создать и добавить в Trades, но что-то не пойму как, да и способ это кривой.<br />Вариант со _strategy.PositionManager.StartPosition мне кажется наиболее правильным. Для вычисления текущей позиции нужно будет лишь к вычисленному по трейдам числу прибавлять это значение. Так, пожалуй, и сделаю.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/5360/ Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь. А может просто, в стратегии и...2011-01-08T21:40:48Z2011-01-08T21:40:48ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">aerv <a href="https://stocksharp.ru/posts/m/5354/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь.<br />А может просто, в стратегии использовать не _strategy.PositionManager.Position, а _strategy.Trader.Positions<br />?<br /></div></div><br /><br />Сразу поправлю. Strategy.Position - это позиция по стратегии. А Trader.Positions - это позиции по бумагам. Стратегий по одной и той же бумаге может быть несколько. Если у Вас не так, используйте Trader.Positions. Если же все таки так, то надо самостоятельно где-то в своем коде восстанавливать текущую позицию.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/5354/После успешного старта стратегии обнаруживаю разницу var pos = _trader.Positions.First(p => p.Securi...2011-01-06T23:01:57Z2011-01-06T23:01:57Zaervhttps://stocksharp.ru/users/28151/info@stocksharp.ruПосле успешного старта стратегии обнаруживаю разницу<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><br />var pos = _trader.Positions.First(p => p.Security == _security);<br />int tp = pos != null ? pos.CurrentValue : 0; // = 1<br />int sp = _strategy.PositionManager.Position; // = 0<br />Assert.AreEqual( tp, sp ); // Не равны<br /></div></div><br /><br />Как сделать, чтобы стратегия "подхватила" текущую позицию по бумаге?<br />Возможны (нужны) два варианта:<br /><div class="code"><strong>Код</strong><div class="innercode"><br />// Сегодня были сделки<br />_trader.MyTrades.Count(t=> t.Trade.Security == _security) > 0 <br />// Сделки были когда-то давно<br />_trader.MyTrades.Count(t=> t.Trade.Security == _security) == 0<br /></div></div><br /><br />Научите меня, пожалуйста, как поступить или поправьте, если ошибаюсь.<br />А может просто, в стратегии использовать не _strategy.PositionManager.Position, а _strategy.Trader.Positions<br />?<br />Copyright @ StockSharp Platform LLC 2010 - 2024