← Назад

Тестирование стратегий, написанных на S#

Доброго времени, странно, почему здесь нет ниодной темы в этом разделе. Кто как тестирует те стратегии, которые Вы реализовали с помощью S# ? Какими решениями пользуемся?

p.s. я так понимаю это делать можно только через openquant?

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

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

dart
dart

iRoot: Доброго времени, странно, почему здесь нет ниодной темы в этом разделе. Кто как тестирует те стратегии, которые Вы реализовали с помощью S# ? Какими решениями пользуемся?

p.s. я так понимаю это делать можно только через openquant? Да почему, в S# и тестируйте. Потом легче будет стратегию в реальную торговлю переносить. Здесь главный вопрос в чём данные хранить, в какой БД. Ну да, и по времени это занимает побольше чем в Омеге или Ами.

iRoot
iRoot Автор

тогда нужно писать некую специальную систему для тестирования? или как вобще делают это гуру роботостроения на s# ? :)

dart
dart

не знаю как это делают гуру. Я просто считываю данные из БД, проверяю выполнились ли условия на куплю-продажу и всё. Соответственно все необходимые данные записываю. Вообще, такое тестирование это, так скажем, "тонкая" настройка. Первоначально тестирование провожу в популярных прогах: Омега, ВЛД, Ами.

Хотя конечно неправильно говорить что тестирую в S#, вернее на C#. Поскольку S# это АПИ к торговым терминалам. Здесь же это АПИ не используется.

iRoot
iRoot Автор

Тогда получается нужно написать стратегию на том же си шаре под влд. Потом протестировать, потом перевести на s# ... И что то дальше с этим делать :) а вдруг допустил ошибку где... Отразится на реальном счете, либо на Демо.

dart
dart

iRoot: Тогда получается нужно написать стратегию на том же си шаре под влд. Потом протестировать, потом перевести на s# ... И что то дальше с этим делать :) а вдруг допустил ошибку где... Отразится на реальном счете, либо на Демо. абсолютно без разницы на чём тестировать. Я например влд не использую и не буду. Думаете, то что влд на с# - потом легче будет на s# перевести? Абсолютно нет. А ошибку да, можно допустить. Потому и тестировать надо.

iRoot
iRoot Автор

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

  1. у вас появилась задумка по стратегии
  2. появился вопрос, а как она будет работать на длительном промежутке, не сливает ли?
  3. задумались протестировать на истории (хотя много есть фактов того, что это в принципе и не нужно делать, но будем считать что мы хотим :) ) где вы делаете этот шаг? реализовываете алгоритм на C# + S#, создаете некую программку, которая будет переваривать историю и тестировать самостоятельно? или делаете это в какой-то программе отдельной?
  4. подключаете к демо счету, некоторое время тестируете стратегию там.
  5. если все хорошо, выпускаете зверя в суровую реальность

м?

dart
dart
  1. без демо. На реальном счете одним контрактом
iRoot
iRoot Автор

ментя интересует больше третий пункт :-)

dart
dart

iRoot: ментя интересует больше третий пункт :-) сам всё пишу, никаких чудо-прог у меня нет

iRoot
iRoot Автор

спасибо Вам за информацию и обсуждения данной темы :-)

Greene-nsk
Greene-nsk

Нормально можно и на влд писать. Переделывать на s# не сложно - надо будет только Alert сгенеренные влд сконвертировать в Order (s#). А потом уже их запихать в класс, производный от TimeFrameStrategy. Конвертить примерно так:


        static public Order AlertToOrder(Alert a)
        {
            OrderDirections orderDirection;

            switch (a.AlertType)
            {
                case TradeType.Buy:
                    orderDirection = OrderDirections.Buy;
                    break;
                case TradeType.Short:
                    orderDirection = OrderDirections.Sell;
                    break;
                default:
                    Log.OutErrorFatal("Такое направление не поддерживается: " + a.AlertType);
                    return null;
            }

            OrderTypes orderType;
            double price = 0.0;
            StopCondition stopCond = null;

            switch (a.OrderType)
            {
                case OrderType.Limit:
                    orderType = OrderTypes.Limit;
                    price = a.Price;
                    break;
                case OrderType.Market:
                    orderType = OrderTypes.Market;
                    break;
                case OrderType.Stop:
                    orderType = OrderTypes.Conditional;
                    stopCond = new SmartStopCondition
                    {
                        IsOneDay = false,
                        StopPrice = a.Price,
                    };
                    break;
                default:
                    Log.OutErrorFatal("Такой тип не поддерживается: " + a.OrderType);
                    return null;
            }


            return new Order
            {
                Type = orderType,
                Portfolio = Const.Portfolio,
                Volume = a.Shares,
                Price = price,
                Security = SecurityByName(a.Symbol),
                Direction = orderDirection,
                StopCondition = stopCond,
            };

        }

Mikhail Sukhov
Mikhail Sukhov

iRoot: Доброго времени, странно, почему здесь нет ниодной темы в этом разделе. Кто как тестирует те стратегии, которые Вы реализовали с помощью S# ? Какими решениями пользуемся?

p.s. я так понимаю это делать можно только через openquant?

Обновлю тему. Для тех, кто еще не в курсе, в S# 3.0 появилась возможность тестирования на истории.