← Назад

Время работы S#

Добрый день, всех с наступающим НГ. У меня вопрос к Михаилу: S# останавливает стратегии в 23:50. Можно как-то продлить их работу на хотя бы на 1-5 минут? Просто для того чтобы успеть получить последнюю сформированную свечку. Я их записываю в файл. Кроме того, на мой взгляд, это наиболее простой путь для получения истории без всяких сложностей ввиде сторонних БД и купайлов.

Комментарии (3)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Alexander
Alexander

dart: Добрый день, всех с наступающим НГ. У меня вопрос к Михаилу: S# останавливает стратегии в 23:50. Можно как-то продлить их работу на хотя бы на 1-5 минут? Просто для того чтобы успеть получить последнюю сформированную свечку. Я их записываю в файл. Кроме того, на мой взгляд, это наиболее простой путь для получения истории без всяких сложностей ввиде сторонних БД и купайлов.

S# сам стратегии не останавливает, это делаете вы из своего кода. скиньте те куски кода, где из OnProcess вызываете StrategyProcessResults.Stop. Наверняка где-то там и идёт проверка на время - просто подкорректируйте его.

С наступающим! :)

dart
dart Автор

Alexander: S# сам стратегии не останавливает, это делаете вы из своего кода. скиньте те куски кода, где из OnProcess вызываете StrategyProcessResults.Stop. Наверняка где-то там и идёт проверка на время - просто подкорректируйте его.

С наступающим! :) Спасибо Alexander за отклик. Я сам стратегии никак не останавливаю. Проверки времени нигде нет. В этом смысле всё как в SampleSMA: StrategyProcessResults.Stop вызывается только в случае если стратегия уже сама находится в процессе остановки if (base.ProcessState == StrategyProcessStates.Stopping) Просто файл который у меня вызывается с частотой OnProcess ( для проверки рабочего состояния стратегии) имеет последнее время обновления 23:50

Alexander, я так понял, у вас какие-то действия производятся после 23: 50? Попробую ещё проверить.

Alexander
Alexander

dart:

Alexander: S# сам стратегии не останавливает, это делаете вы из своего кода. скиньте те куски кода, где из OnProcess вызываете StrategyProcessResults.Stop. Наверняка где-то там и идёт проверка на время - просто подкорректируйте его.

С наступающим! :) Спасибо Alexander за отклик. Я сам стратегии никак не останавливаю. Проверки времени нигде нет. В этом смысле всё как в SampleSMA: StrategyProcessResults.Stop вызывается только в случае если стратегия уже сама находится в процессе остановки if (base.ProcessState == StrategyProcessStates.Stopping) Просто файл который у меня вызывается с частотой OnProcess ( для проверки рабочего состояния стратегии) имеет последнее время обновления 23:50

Alexander, я так понял, у вас какие-то действия производятся после 23: 50? Попробую ещё проверить.

Да, я сохраняю историю которая меня интересует для последующего тестирования новых стратегий.

У меня сделано следующим образом:

  1. Объявляю таймер:
private DispatcherTimer _stopRobotsTimer;
  1. Инициализирую, запускаю (при подключении к квикам):
                        _stopRobotsTimer = new DispatcherTimer {Interval = new TimeSpan(0, 30, 0)};
                        _stopRobotsTimer.Tick += StopRobotsTimerTick;
                        _stopRobotsTimer.Start();
  1. Каждые 30 минут вызывается StopRobotsTimerTick:
        private void StopRobotsTimerTick(object sender, EventArgs e)
        {
            if (_multiTrader.Trades.Count() <= 0) return;

            var lastTradeTime = _multiTrader.Trades.Last().Time;
            if (lastTradeTime.Date.AddDays(1) == DateTime.Now.Date &&
                DateTime.Now.Hour < 5)
            {
                Close();
            }
        }

Здесь просто смотрю дату последней сделки и проверяю, что сейчас новый день - в этом случае выключаю робота. Таким образом робот стабильно выключается в 0:00 - 0:29 :)

В перегруженном методе OnClosing как раз сохраняю всё что мне необходимо.

Получается что всё-таки у вас где-то останавливается стратегия. Сложно конкретно сказать не видя кода =)