Создание роботов с помощью S#. Часть 4. Использование XAML для загрузки стратегий
							
							
						 
						
						
						
						
	
			В реальном приложении у нас будет много стратегий со своими параметрами, которые проще всего загрузить из XAML файла.
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 файла, таком как в примере из статьи 
“Создание роботов с помощью S#. Введение”.
Код
	public class StrategyLoader : FrameworkElement
	{
		public StrategyList Strategies { get; set; }
		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 поместим все настройки. В коде формы теперь нет ничего лишнего.
Автор статьи: Вадим Чижов