StockSharp
0
All posts from StockSharp
  StockSharp in StockSharp,

Создание роботов с помощью Stock#. Часть 4. Использование XAML для загрузки стратегий

К настоящему моменту мы уже проделали большую работу по разделению бизнес-логики от UI и теперь можем в форме писать кода типа:

StandardStrategy strategy;

StandardStrategy CreateStrategy()
{
    var strategy = new StrikeStrategy()
    {
        TraderBuilder = new QuikTraderBuilder()
        {
            Path = "***",
            Login = "***",
            Password = "***"
        },
        PortfolioSelector = new PortfolioSelector()
        {
            PortfolioName = "***"
        },
        SecuritySelector = new SecuritySelector()
        {
            SecurityCode = "RIM2"
        },
        HistoryCandleProvider = new FinamHistoryCandleProvider()
        {
            TimeFrame = TimeSpan.FromHours(1),
            FinamSecurityCode = 80996
        },
        SettingsProvider = new RegistrySettingsProvider()
        {
             SubKey = @"Software\FinDirector\StrikeStrategy"
        },
        VolumeSizer = new MarginVolumeSizer()
        {
             Ratio = 0.2,
             MaxCapital = 1000000
        },
        TimeFrame = TimeSpan.FromMinutes(5)
    };
    return strategy;
}
 
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    strategy = CreateStrategy();
}
 
protected override void OnClosed(EventArgs e)
{
    base.OnClosed(e);
    if (strategy != null && strategy.TraderBuilder != null)
        strategy.TraderBuilder.Dispose();
}
 
private void btnStart_Click(object sender, RoutedEventArgs e)
{
    if (strategy.ProcessState == ProcessStates.Stopped)
        Task.Factory.StartNew(strategy.Start);
}
 
private void btnStop_Click(object sender, RoutedEventArgs e)
{
    strategy.Stop();
}
Получилось совсем немного кода. Тем не менее в реальном приложении у нас будет много стратегий и у каждой будет куча параметров. Чтобы не зашивать их в коде, проще всего загрузить их из XAML файла, таком как в примере из статьи “Создание роботов с помощью Stock#. Введение”.
 
public class StrategyLoader : FrameworkElement
{
    public StrategyList Strategies { getset; }
 
    public StrategyLoader()
    {
        Strategies = new StrategyList();
    }
 
    public static StrategyLoader Load(string location)
    {
        return (StrategyLoader)XamlReader.Load(new XmlTextReader(location));
    }
}
 
[Serializable]
public class StrategyList : List<StandardStrategy> { }
Теперь изменим метод CreateStrategy нашей формы:
 
StandardStrategy CreateStrategy()
{
    var strategy = StrategyLoader.Load("Strategies.config").Strategies.FirstOrDefault();
    return strategy;
}
А в файл Strategies.config поместим все настройки. В коде формы теперь нет ничего лишнего.
 
Автор статьи — Вадим Чижов
Оригинал статьи размещен на сайте StockSharp.