Автоматический запуск стратегии по указанному времени~/topic/4184/avtomaticheskii-zapusk-strategii-po-ukazannomu-vremeni/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T06:45:20Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/28574/Спасибо, Иван! Полезная вещь. Правильно ли я понимаю, что теперь, чтобы остановить стратегию по расп...2013-12-01T05:47:54Z2013-12-01T05:47:54ZIvanBhttps://stocksharp.ru/users/26984/info@stocksharp.ru<div class="quote"><span class="quotetitle">shos <a href="https://stocksharp.ru/posts/m/28560/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">Спасибо, Иван! <br />Полезная вещь.<br /><br />Правильно ли я понимаю, что теперь, чтобы остановить стратегию по расписанию, нужно в метод<br /><br /><span style="color:blue">public void CheckStatus(Object stateInfo)<br /> {<br /> var dtNow = DateTime.Now;<br /> if (_dtSelected.TimeOfDay < dtNow.TimeOfDay)<br /> {<br /> _firstStrategy.Start();<br /> }}</span><br /><br />прописать условие уже для <span style="color:blue">_firstStrategy.Stop();</span> ?<br />Можно же использовать этот же таймер?<br /></div></div><br />Да, все верно.<br /><br /><div class="quote"><span class="quotetitle">shos <a href="https://stocksharp.ru/posts/m/28560/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />И еще, собственно, главный вопрос: если возникнет необходимость, при работе приложения, в автоматическом<br />включении и выключении стратегии более одного раза (без моего участия), допустим чтобы она часик покурила, а потом снова включилась, <br />то можно ли просто внести расписание в код?<br />Правильно ли будет создать несколько констант вместо <span style="color:blue">_dtSelected</span>, запустить таймер<br />(пусть даже без использования кнопок) и расставить условия на включение и выключение?<br />У меня пока нет тямы, чтобы разбираться с Quartz, поэтому сейчас чем проще, тем для меня понятнее.<br />Я пока еще в одной переменной путаюсь, а библиотеки для меня пока что где-то в 4-м измерении [biggrin] </div></div><br />Да, верно понимаете. Создаете несколько переменных по подобию <span style="color:blue">_dtSelected</span>, например: <span style="color:blue">_dtStartFirstSelected</span>, <span style="color:blue">_dtStopFirstSelected</span>, <span style="color:blue">_dtStartSecondSelected</span>, <span style="color:blue">_dtStopSecondSelected</span> (в данном случае, судя по именам переменных, предполагается два рабочих интревала стратегии в течении дня), и соответственно задать условия и действия в методе CheckStatus.<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/28560/Спасибо, Иван! Полезная вещь. Правильно ли я понимаю, что теперь, чтобы остановить стратегию по расп...2013-11-29T20:47:36Z2013-11-29T20:47:36Zshoshttps://stocksharp.ru/users/39109/info@stocksharp.ruСпасибо, Иван! <br />Полезная вещь.<br /><br />Правильно ли я понимаю, что теперь, чтобы остановить стратегию по расписанию, нужно в метод<br /><br /><span style="color:blue">public void CheckStatus(Object stateInfo)<br /> {<br /> var dtNow = DateTime.Now;<br /> if (_dtSelected.TimeOfDay < dtNow.TimeOfDay)<br /> {<br /> _firstStrategy.Start();<br /> }}</span><br /><br />прописать условие уже для <span style="color:blue">_firstStrategy.Stop();</span> ?<br />Можно же использовать этот же таймер?<br /><br />И еще, собственно, главный вопрос: если возникнет необходимость, при работе приложения, в автоматическом<br />включении и выключении стратегии более одного раза (без моего участия), допустим чтобы она часик покурила, а потом снова включилась, <br />то можно ли просто внести расписание в код?<br />Правильно ли будет создать несколько констант вместо <span style="color:blue">_dtSelected</span>, запустить таймер<br />(пусть даже без использования кнопок) и расставить условия на включение и выключение?<br />У меня пока нет тямы, чтобы разбираться с Quartz, поэтому сейчас чем проще, тем для меня понятнее.<br />Я пока еще в одной переменной путаюсь, а библиотеки для меня пока что где-то в 4-м измерении [biggrin] Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/28502/Может появиться необходимость автоматического запуска стратегии в указанное время в течении дня, поэ...2013-11-28T16:15:20Z2013-11-28T16:15:20ZIvanBhttps://stocksharp.ru/users/26984/info@stocksharp.ruМожет появиться необходимость автоматического запуска стратегии в указанное время в течении дня, поэтому здесь мы рассмотрим самый простой способ реализации автозапуска стратегии по времени.<br /><br /><br />Ключевым элементом будет таймер, который будут периодически сверять текущее время и выбранное время старта стратегии, объявляем переменную таймера в классе окна:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
public partial class MainWindow : Window
{
private System.Threading.Timer _timer;
...
</pre>
</div></div><br /><br />Объявим переменную типа DateTime, которая будет хранить время, когда нужно запустить стратегию, объявляем на том же уровне что и таймер:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
public partial class MainWindow : Window
{
private System.Threading.Timer _timer;
private DateTime _dtSelected;
...
</pre>
</div></div><br /><br />И для удобства создадим на форме (окне) элемент выбора времени:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:xml">
<xctk:TimePicker Height="20" Width="100" x:Name="tpTime" />
</pre>
</div></div> <br />в данном случае взят TimePicker из Xceed.Wpf.Toolkit:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:xml">
xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"</pre>
</div></div><br />заметим, что этот контрол имеет имя tpTime, далее мы будем обращаться к нему по этому имени.<br /><br />Теперь нам надо создать экземпляр этого таймера, указать ему метод, который будет периодически вызываться, и запустить таймер, для этого создадим кнопку, и укажем действие по нажатию:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private void AutoStartStrategyClick(object sender, RoutedEventArgs e)
{
if (tpTime.Value == null)
{
MessageBox.Show("Время запуска стратегии не выбрано");
return;
}
_dtSelected = tpTime.Value.Value;
_timer = new Timer(CheckStatus, null, 0, 1000);
}
</pre>
</div></div><br /><br />И реализуем метод CheckStatus:<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
public void CheckStatus(Object stateInfo)
{
var dtNow = DateTime.Now;
if (_dtSelected.TimeOfDay < dtNow.TimeOfDay)
{
_firstStrategy.Start();
}
}
</pre>
</div></div><br /><br />Это минимум и немного больше, для того чтобы создать автоматический запуск стратегии по времени.<br /><br />Есть специальные библиотеки, которые предоставляют большие возможности по работе с расписанием, например Quartz. Quartz позволяет создавать разного рода расписания, достаточно удобно и просто, если разобраться в его работе.Copyright @ StockSharp Platform LLC 2010 - 2024