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

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


В реальном приложении у нас будет много стратегий со своими параметрами, которые проще всего загрузить из XAML файла. XAML — это декларативный язык разметки. Он упрощает создание пользовательского интерфейса для нашего приложения.

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

[code=csharp] 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();
	}[/code]

Получилось совсем немного кода. Тем не менее в реальном приложении у нас будет много стратегий и у каждой будет куча параметров. Чтобы не зашивать их в коде, проще всего загрузить их из XAML файла, таком как в примере из статьи [url=http://stocksharp.com/lesson/article.aspx?aid=4]“Создание роботов с помощью S#. Введение”[/url].

[code=csharp] 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> { }[/code]

Теперь изменим метод CreateStrategy нашей формы:

[code=csharp] StandardStrategy CreateStrategy() { var strategy = StrategyLoader.Load("Strategies.config").Strategies.FirstOrDefault(); return strategy; }[/code]

А в файл Strategies.config поместим все настройки. В коде формы теперь нет ничего лишнего.

[size=6][right][b]Автор статьи: Вадим Чижов[/b][/right][/size]



StockSharp

Avatar
Date: 3/15/2012
Reply


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

Thanks:

FinDirector

Avatar
Date: 3/15/2012
Reply


[quote=Alexey Gorbunov;17318]Класс, супер! Спасибо большое. Можно Ваши статьи поместить на наш сайт?[/quote] Конечно.

Thanks:

Alexander

Avatar
Date: 3/15/2012
Reply


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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy