← Назад

Создание роботов с помощью 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 поместим все настройки. В коде формы теперь нет ничего лишнего.

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

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

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

StockSharp
StockSharp

Класс, супер! Спасибо большое. Можно Ваши статьи поместить на наш сайт?

FinDirector
FinDirector Автор

Alexey Gorbunov: Класс, супер! Спасибо большое. Можно Ваши статьи поместить на наш сайт? Конечно.

Alexander
Alexander

Может вам награду какую на форуме специальную сделать... 👍