Баг в классе Strategy~/topic/2621/bag-v-klasse-strategy/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T12:40:24Zhttps://stocksharp.com/images/logo.pnghttps://stocksharp.com/posts/m/18454/Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...2012-04-20T09:25:27Z2012-04-20T09:25:27Zra81https://stocksharp.com/users/16581/info@stocksharp.com<div class="quote"><span class="quotetitle">OvcharenkoVI <a href="https://stocksharp.com/posts/m/18453/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">ra81 <a href="https://stocksharp.com/posts/m/18452/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">Alexander Mukhanchikov <a href="https://stocksharp.com/posts/m/18450/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Перечитал 3 раза, если честно, то не понял.<br />Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)</div></div><br />В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние ProcessState == Stopping???</div></div><br /><br />Ну то что при остановке базовой стратегии останавливаются все дочерние - так и должно быть, разве нет?</div></div><br />Суть вопроса не в этом, а в том что если стратегия уже стояла, нафиг она еще раз останавливается? :)Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/18453/Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...2012-04-20T09:21:33Z2012-04-20T09:21:33ZOvcharenkoVIhttps://stocksharp.com/users/390/info@stocksharp.com<div class="quote"><span class="quotetitle">ra81 <a href="https://stocksharp.com/posts/m/18452/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">Alexander Mukhanchikov <a href="https://stocksharp.com/posts/m/18450/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Перечитал 3 раза, если честно, то не понял.<br />Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)</div></div><br />В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние ProcessState == Stopping???</div></div><br /><br />Ну то что при остановке базовой стратегии останавливаются все дочерние - так и должно быть, разве нет?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/18452/Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...2012-04-20T09:08:37Z2012-04-20T09:08:37Zra81https://stocksharp.com/users/16581/info@stocksharp.com<div class="quote"><span class="quotetitle">Alexander Mukhanchikov <a href="https://stocksharp.com/posts/m/18450/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Перечитал 3 раза, если честно, то не понял.<br />Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)</div></div><br />В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние ProcessState == Stopping???Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/18450/Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...2012-04-20T08:47:46Z2012-04-20T08:47:46ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.comПеречитал 3 раза, если честно, то не понял.<br />Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/18444/Все относится к релизу 4.0.22, вполне вероятно что и дальше тоже. Путем изысканий пришел к выводу та...2012-04-20T08:24:13Z2012-04-20T08:24:13Zra81https://stocksharp.com/users/16581/info@stocksharp.comВсе относится к релизу 4.0.22, вполне вероятно что и дальше тоже.<br /><br />Путем изысканий пришел к выводу такому:<br /><br />У меня есть стратегия, которая перед тем как совсем остановиться, пытается отменить все свои ордера активные. Проверка происходит в методе<br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
public override void Stop()
{
if (this.HaveActiveStopOrders())
{
this.AddInfoLog("Стратегия имеет активные ордера, пробуем отменить их.");
this.GuarantyCancelOrders(new [] {_stopOrder});
this
.When(_stopOrder.Canceled())
.Do(o =>
{
this.AddInfoLog("Активные ордера отменены, останавливаем стратегию.");
Stop();
});
return;
}
base.Stop();
}</pre>
</div></div><br /><br />GuarantyCancelOrders использует стратегию для отмены ордеров. По факту при выполнении сего метода в нашу стратегию подключается дочерняя стартегия, которая отменяет ордера достаточно надежно. Что именно происходит НЕ так? Вот пример другого кода, только уже в методе OnStopping<br /><br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
public override void OnStopping()
{
if (this.HaveActiveStopOrders())
{
this.AddInfoLog("Стратегия имеет активные ордера, пробуем отменить их.");
this.GuarantyCancelOrders(new [] {_stopOrder});
this
.When(_stopOrder.Canceled())
.Do(o =>
{
this.AddInfoLog("Активные ордера отменены, останавливаем стратегию.");
Stop();
});
return;
}
base.OnStopping();
}</pre>
</div></div><br />Этот код приведет к тому что для дочерних стратегий из метода GuarantyCancelOrders будет вызван только метод OnStopping без вызова метода OnStarting. Ну а если вы при запуске делаете инициализацию чего либо, то легко можете получить исключение если работаете с этими объектами в завершающих методах. Это связано я полагаю с тем что в дочернюю стратегию передается статус родительской. А в родительской будет Stopping. Отсюда стартовый метод не выполняется, НО вот завершающий метод почему-то выполняется. Что мне кажется не совсем правильно. Если стратегия собственно еще и не была запущена, то с какого лешего выполнять метод OnStopping??? Ну вот как-то так :). По идее если стратегия добавляемая как дочерняя в статусе Stopped, то статус может измениться только на Starting или в этом духе. Есь даж паттерн такой :).<br /><br />Надеюсь понятно изложил. А то кажется слегка запутанно.Copyright @ StockSharp Platform LLC 2010 - 2024