← Zurück

Создание роботов с помощью 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 Автор статьи: Вадим Чижов

War dieses Thema hilfreich?

Thema teilen

Kommentare (3)

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

StockSharp
StockSharp

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

FinDirector
FinDirector Autor

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

Alexander
Alexander

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