В реальном приложении у нас будет много стратегий со своими параметрами, которые проще всего загрузить из 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 Автор статьи: Вадим Чижов
Kommentare (3)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Класс, супер! Спасибо большое. Можно Ваши статьи поместить на наш сайт?
Может вам награду какую на форуме специальную сделать... 👍