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

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


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

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


StockSharp

Фотография
Дата: 15.03.2012
Ответить


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

FinDirector

Фотография
Дата: 15.03.2012
Ответить


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

Конечно.
Спасибо:

Alexander

Фотография
Дата: 15.03.2012
Ответить


Может вам награду какую на форуме специальную сделать... [thumbup]
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy