← Zurück

Создание роботов с помощью S#. Введение

Решил написать несколько простых статей о том, как можно разрабатывать роботов с использованием библиотеки S#. В саму библиотеку уже входят примеры, но они достаточно простые и их нельзя использовать в реальном приложении.

Предложенная архитектура робота включает следующие особенности:

  • Интерфейс в стиле METRO UI.
  • Паттерн MVVM для написания интерфейса робота.
  • Корректная обработка исключительных ситуаций.
  • Робот позволяет запускать множество различных стратегий на разных торговых системах, разных портфелях и разных инструментах, с различными параметрами, а также позволяет задавать все эти настройки в конфигурационном XML-файле (достаточная гибкость).
  • Хранение состояния робота.
  • Абсолютно компактный и тривиальный код. Приведу пример конфигурационного файла. В этом примере задается одна стратегия StrikeStrategy. Для нее задается Quik в качестве торговой системы, задается портфель, инструмент RIM2. Для получения исторических данных устанавливается провайдер, получащий данные с ФИНАМа; у него установлены свойства на получение дневных данных по инструменту RIM2. Свое состояние стратегия хранит в ветке реестра Software\FinDirector\StrikeStrategy. Размер позиции равен 20% от капитала в портфеле. Стратегия работает на 5-минутках.
<FinDirector:StrategyLoader
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:FinDirector="clr-namespace:FinDirector;assembly=FinDirector"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:System="clr-namespace:System;assembly=mscorlib"
 xmlns:Implementation="clr-namespace:FinDirector.Algo.Implementation;assembly=FinDirector.Algo"
 xmlns:Strategies="clr-namespace:FinDirector.Algo.Strategies;assembly=FinDirector.Algo">

 <FinDirector:StrategyLoader.Resources>
   <Implementation:QuikTraderBuilder x:Key="MyQuik" Title="Мой Quik"
     Path="***" Login="***" Password="***" />
   <Implementation:PortfolioSelector x:Key="MyFortsPortfolio" Title="Пенсионный фонд кота Мурзика"
     PortfolioName="***" />

   <!--RIM2 FinamSecurityCode-->
   <System:Int32 x:Key="FinamRTSCode">80996</System:Int32>
   <Implementation:SecuritySelector x:Key="fRTS"
     SecurityCode="RIM2" />
   <Implementation:SecuritySelector x:Key="Si"
     SecurityCode="SiM2" />
 </FinDirector:StrategyLoader.Resources>

 <FinDirector:StrategyLoader.Strategies>

   <Strategies:StrikeStrategy
     TraderBuilder="{StaticResource MyQuik}"
     PortfolioSelector="{StaticResource MyFortsPortfolio}"
     SecuritySelector="{StaticResource fRTS}"
     TimeFrame="0:5:0">
     <Strategies:StrikeStrategy.HistoryCandleProvider>
       <Implementation:FinamHistoryCandleProvider TimeFrame="1.0:0:0" FinamSecurityCode="{StaticResource FinamRTSCode}" />
     </Strategies:StrikeStrategy.HistoryCandleProvider>
     <Strategies:StrikeStrategy.SettingsProvider>
       <Implementation:RegistrySettingsProvider SubKey = "Software\FinDirector\StrikeStrategy" />
     </Strategies:StrikeStrategy.SettingsProvider>
     <Strategies:StrikeStrategy.VolumeSizer>
       <Implementation:MarginVolumeSizer Ratio="0.2" />
     </Strategies:StrikeStrategy.VolumeSizer>
   </Strategies:StrikeStrategy>

 </FinDirector:StrategyLoader.Strategies>

</FinDirector:StrategyLoader>

:[:::right Автор статьи — Вадим Чижов

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

foRs
foRs

прикольно получилось, а можешь скинуть пример реализации ввиде исходника

FinDirector
FinDirector Autor

foRs: прикольно получилось, а можешь скинуть пример реализации ввиде исходника Всем, кто пришлет свои граали дам исходники целиком!😀

VassilSanych
VassilSanych

Реестр - не самое лучшее место для хранения состояния. Лучше уж сервис какой и/или БД (MSSQL. У провайдера SQLite тоже проблемы с параллельным доступом).


А вообще - засада. Где статья? Тут только реклама себя любимого в качестве разработчика.

neighbour
neighbour

Так и не понял можно ли получить исходники? S# еще не до конца изучил и такой проект был бы очень полезен. Если да, то можно скинуть на мыло neighbour1985@mail.ru. Спасибо!

Геннадий Ванин (Gennady Vanin)

Странно... я месяц назад просил через ЛС и оставлял там Email, а сейчас вообще не нахожу никаких ЛС...

Если можно, то я бы тоже хотел бы получить: gennadiyvanin чебурашка gmail точка com