欢迎光临散文网 会员登陆 & 注册

股票量化交易软件:连续前行优化5自动优化器项目概述和GUI的创建

2023-07-10 12:18 作者:bili_45793681098  | 我要投稿

项目结构概览

由于本文还有一个部分会专述 C#,因此赫兹股票量化开始研究其文件结构:


编辑


下面附带的解决方案包含两个项目。 在第一篇文章中研究了它们当中之一,在后面的文章中分析了之二。这个项目是自动优化器。


编辑

鉴于项目拥有 GUI,因此这回再次用到 MVVM(模式l视图视图模型)方式。 项目模板已被划分为相应的板块。 由于项目逻辑应在模型部分中实现,因此与项目图形部分无关的类回位于 Model 子目录中,以后会进一步切分目录。


  • 负责管理目录和终端目录取向的类位于Model/DirectoryManagers 文件夹中。

  • 文件管理类则位于 Model/FileReaders 之下。

  • 含有优化逻辑的对象,和相应的实例化类则位于 Model/OptimizationManagers 之下

  • 管理终端及其配置文件的对象则位于 Model/Terminal 之下


取自前一篇文章中的对象已被修改,赫兹股票量化就从它开始。 对于所有不太熟悉前一部分的人来说,该讲述也将很有用。


创建应用程序的图形部分

赫兹股票量化进入到图形界面。 早前,赫兹股票量化曾研究过一种利用 C# 语言为 MetaTrader 5 创建附加组件的方法,以及利用 DLL 和 OnTimer 回调与智能交易系统的功能相结合的方法。 在当前的实现中,自动优化器将在终端外部实现。 现在,它作为外部优化管理器运行,并模仿交易员的操作,启动优化并处理结果。 甚而,由于避免了在同一台计算机上运行的多个终端同时进行优化,且将自动优化器实现为单例应用程序,赫兹股票量化可以绝对掌控计算机上安装的所有终端,包括正运行优化器的计算机。 在之前的项目中,这台计算机无法受控。

这就是为什么当前项目没有完全作为 DLL 来实现,但现在自动优化器项目被切分为一个 DLL 和一个可执行文件。


编辑切换为居中

从上面的屏幕截图可以看出,项目窗口由 Header, Footer 和h含有两个选项卡的 TabControl 组成:Settings 和 Reports。 无论在中央部分中选择了哪个选项卡,都不会更改窗口的页眉部分和页脚,从而可轻易访问位于这些部分的所有控制元素。

窗口的页眉部分是经由以下 XAML 标记创建的:

<Grid>        <Grid.ColumnDefinitions>                <ColumnDefinition/>                <ColumnDefinition/>        </Grid.ColumnDefinitions>        <WrapPanel Margin="2">            <Label Content="Optimisation:"/>            <ComboBox Width="200"                      ItemsSource="{Binding SelectedOptimisationNames,UpdateSourceTrigger=PropertyChanged}"                      SelectedItem="{Binding SelectedOptimisation}"                      SelectedIndex="0"                      IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"/>            <Button Content="Load"                    Margin="2,0,0,0"                    Width="34"                    Command="{Binding LoadResults}"                    IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"/>        </WrapPanel>        <WrapPanel HorizontalAlignment="Right"                   Margin="2"                   Grid.Column="1">            <Label Content="Terminal:"/>            <ComboBox Width="200"                      SelectedIndex="{Binding SelectedTerminalIndex}"                      ItemsSource="{Binding Terminals,UpdateSourceTrigger=LostFocus}"                      IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"/>        </WrapPanel> </Grid>

Grid 容器包含所考虑区域中所有可用的控制元素,它被划分为 2 列。 以下元素倍添加到第一列:参数名称(Optimisation),包含可用优化列表的组合框,以及优化加载按钮。 第二列包含参数名称,和含有可用终端 ID 的下拉列表。

表示图形窗口页脚(带有 ProgressBar)的 Grid 容器拥有类似的结构:

<Grid Grid.Row="2">        <Grid.ColumnDefinitions>                <ColumnDefinition Width="150"/>                <ColumnDefinition/>        </Grid.ColumnDefinitions>        <Label Content="{Binding Status, UpdateSourceTrigger=PropertyChanged}"/>        <ProgressBar Grid.Column="1"                     Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}"                     Minimum="0"                     Maximum="100"/> </Grid>

它将该区域划分为 2 部分,并限制了第一部分的大小。 结果就是,ProgressBar 占用了最大的容器部分。 进而,整体窗口宽度有变化的情况下 ProgressBar 的宽度会与之相适。 根据 XAML 标记规则,所有这三个组件都放置在 <Window/> 容器中。

<Window x:Class="Metatrader_Auto_Optimiser.AutoOptimiser"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:vm="clr-namespace:Metatrader_Auto_Optimiser.View_Model"        xmlns:v="clr-namespace:Metatrader_Auto_Optimiser.View"        mc:Ignorable="d"        Title="Auto Optimiser" Height="500" Width="1200"        MinHeight="500" MinWidth="1200">    <Window.DataContext>        <vm:AutoOptimiserVM/>    </Window.DataContext>    ... </Window>

此容器定义名称空间引用:


  • Metatrader_Auto_Optimiser.View_Model,当用户有动作(ViewModel),其内存储的回调会指示程序如何响应。

  • Metatrader_Auto_Optimiser.View,当双击 ListView 对象,其内存储的类会把事件转换为命令。 这是将事件与 ViewModel 的 ICommand 接口结合操作所要求的。


此外,设置以下窗口大小:最小尺寸,和程序启动时窗口的初始打开尺寸。 然后,利用上述包含 ViewModel 名称空间的别名,为图形界面安装 DataContext。

面板的中央部分由一个包含 2 个选项卡的 TabControl 元素组成。 它作为主要部分,是赫兹股票量化的图形元素的“实体”。 “Settings” 选项卡的结构如下:


编辑切换为居中

此选项卡也划分为三个部分。 该选项卡的上层部分含有一个面板,允许您设置自动优化器要保存的报告参数。 它还包括资产名称的选择,和更新 *set 文件的按钮。 “Settings” 选卡的中层部分包含优化器设置,和自动优化器处理时期望的过滤和排序参数的选项。 最后一部分允许设置智能交易系统参数,并选择优化和前向验证日期。 为了更加便捷,GridSplitter 元素位于前两个部分之间。 通过拖动它,可以调整这些选项卡的大小。 当您需要为机器人填写一长列优化参数时,这特别方便。

赫兹股票量化查看一下 “Settings” 选卡第一部分的标记代码:

<Grid>        <Grid.ColumnDefinitions>                <ColumnDefinition/>                <ColumnDefinition Width="100"/>        </Grid.ColumnDefinitions>        <WrapPanel HorizontalAlignment="Left"                VerticalAlignment="Bottom">        <Label Content="Select Optimiser:"/>        <ComboBox Width="150"                IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"                ItemsSource="{Binding Optimisers}"                SelectedIndex="{Binding SelectedOptimiserIndex}"/>        <Button Content="GUI"                Command="{Binding ShowOptimiserGUI}"                IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"/>        <Label Content="Directory prefix:"/>        <TextBox Width="150"                IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"                Text="{Binding DirPrefix}"/>        <ComboBox Width="100"                Margin="2,0,0,0"                SelectedIndex="0"                ItemsSource="{Binding FileFillingType}"                IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"                SelectedItem="{Binding FileWritingMode}"/>        <Label Content="Asset name:"/>        <TextBox Width="100"                IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"                Text="{Binding AssetName}"/>        <Button Content="Update (*.set) file"                Margin="2,0,0,0"                IsEnabled="{Binding EnableMainTogles}"                Command="{Binding UpdateSetFile}"/>        </WrapPanel>        <Button Content="Start/Stop"                Grid.Column="2"                Margin="2"                Command="{Binding StartStopOptimisation}"/> </Grid>

所描述的部分包括被切分开的两列。 第一列的宽度可以动态更改; 第二列的宽度则是固定的,等于 100 个像素。 第一列包括面板中的所有控件。 所有这些元素都在 WrapPanel 中提供,允许一个接一个地排列元素。 首先到达的是负责自动优化器选择和设置的控件。 这之后是与优化报告的文件夹命名相关的参数,以及报告的生成方式(覆盖写入,追价)。 最后一部分是所优化资产名称的规范,以及刷新机器人参数 *set 文件的按钮。 “Start/Stop” 按钮占据固定宽度的列,该按钮可启动和停止优化的起点。

“Settings” 选项卡的第二部分亦切分为两部分。


编辑切换为居中

第一部分包含优化器设置参数列表的 ListView。 在此,参数的名称和数值,与终端中的优化程序设置字段相对应。 第二部分包含数据排序和过滤系数的规范。 这些列还含有 GridSplitter 元素,该元素分隔了所描述的区域。 创建元素的代码很简单,故在此勿需赘述。 完整的代码附带于下。 该选项卡的下层与上层完全相似,唯一的例外是包含优化日期的右侧被切分为两部分。 第一部分所含控件用于将数据添加到列表。 第二部分用于显示创建的列表。


股票量化交易软件:连续前行优化5自动优化器项目概述和GUI的创建的评论 (共 条)

分享到微博请遵守国家法律