国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

股票量化:赫茲量化中自動(dòng)優(yōu)化器的邏輯部分與圖形綁定

2023-11-01 16:33 作者:大牛啊呢  | 我要投稿

ViewModel 類與圖形層的交互

如前所述,ViewModel 是應(yīng)用程序的圖形部分與軟件邏輯實(shí)現(xiàn)之間的連接器。 它是程序圖形表述,其實(shí)現(xiàn)應(yīng)用程序邏輯調(diào)用,并針對(duì)應(yīng)用程序邏輯部分的回調(diào)在圖形上做出反應(yīng)。 相應(yīng)地,來(lái)自 ViewModel 部分的公開屬性對(duì)應(yīng)于應(yīng)用程序圖形部分中的每個(gè)可編輯字段。 這些屬性可以是 getter(只讀),在這種情況下不能在圖形中更改;也可以是 setter,如此即可覆蓋隱藏在此屬性后面的對(duì)象。 在前面的部分里,我們已經(jīng)詳細(xì)研究過數(shù)據(jù)綁定技術(shù)。 故此,我在這里僅提供一些示例。?

文本字段是通過可讀寫權(quán)限的屬性進(jìn)行連接。 舉例,考慮一個(gè)字段,該字段指示正在執(zhí)行優(yōu)化的資產(chǎn)名稱。 該字段的 XAML 標(biāo)記極其簡(jiǎn)單。

<TextBox Width="100"???????? IsEnabled="{Binding EnableMainTogles, UpdateSourceTrigger=PropertyChanged}"???????? Text="{Binding AssetName}"/>

除了設(shè)置文本窗口的寬度外,它還含有字段 IsEnabled 和 Text。 第一個(gè)設(shè)置該字段是否可編輯。 如果將其設(shè)置為 true,則該字段可編輯。 如果為 false,則該字段被鎖定。 “Text” 字段包含在此字段中輸入的文本。 然后,每個(gè)結(jié)構(gòu)都有一對(duì)花括號(hào)。 其內(nèi)容設(shè)置對(duì)象與特定公共屬性的連接,而屬性來(lái)自在 “Binding” 參數(shù)之后指定的 ViewModel 類。

后還可以跟一定數(shù)量的參數(shù)。 例如,UpdateSourceTrigger 參數(shù)指示此應(yīng)用程序的圖形部分的更新方法。 在我們的示例中使用的值(PropertyChanged)表示,僅當(dāng)觸發(fā) ViewModel 類中的 OnPropertyChanged 事件時(shí),圖形部分才會(huì)更新,并且在 “Binding” 參數(shù)之后指定傳遞的名稱(在本例中為 “EnableMainTogles”) 。

如果 “Text” 參數(shù)并未與字符串綁定,而是綁定 double 型參數(shù),則此字段中僅允許數(shù)字。 如果綁定到 int 類型,則只允許整數(shù)型。 換言之,此實(shí)現(xiàn)能夠依據(jù)需求設(shè)置輸入值的類型。

在 ViewModel 部分里,字段顯示如下:

IsEnabled 參數(shù):

/// <summary>/// If the switch = false, then the most important fields are not available/// </summary>public bool EnableMainTogles { get; private set; } = true;

以及 Text 參數(shù):

/// <summary>/// Name of the asset selected for tests / optimization/// </summary>public string AssetName { get; set; }

如您所見,它們兩個(gè)都即可寫入也可讀取數(shù)據(jù)。 僅有的區(qū)別在于 EnableMainTogles 屬性僅提供來(lái)自 AutoOptimiserVM 類的寫入訪問權(quán)限(即,來(lái)自其自身),因此無(wú)法從外部對(duì)其進(jìn)行編輯。

如果我們研究任何數(shù)據(jù)集合,譬如舉例來(lái)說(shuō),前向驗(yàn)證優(yōu)化結(jié)果列表,則它所對(duì)應(yīng)的屬性包含數(shù)值列表。 我們來(lái)研究一個(gè)含前向驗(yàn)證結(jié)果的表格:

<ListView ItemsSource="{Binding ForwardOptimisations}"??????????SelectedIndex="{Binding SelectedForwardItem}"??????????v:ListViewExtention.DoubleClickCommand="{Binding StartTestForward}"> ????<ListView.View> ????????<GridView>????????????<GridViewColumn Header="Date From" ????????????????????????????DisplayMemberBinding="{Binding From}"/> ????????????<GridViewColumn Header="Date Till" ????????????????????????????DisplayMemberBinding="{Binding Till}"/> ????????????<GridViewColumn Header="Payoff" ????????????????????????????DisplayMemberBinding="{Binding Payoff}"/> ????????????<GridViewColumn Header="Profit pactor" ????????????????????????????DisplayMemberBinding="{Binding ProfitFactor}"/> ????????????<GridViewColumn Header="Average Profit Factor" ????????????????????????????DisplayMemberBinding="{Binding AverageProfitFactor}"/> ????????????<GridViewColumn Header="Recovery factor" ????????????????????????????DisplayMemberBinding="{Binding RecoveryFactor}"/> ????????????<GridViewColumn Header="Average Recovery Factor" ????????????????????????????DisplayMemberBinding="{Binding AverageRecoveryFactor}"/> ????????????<GridViewColumn Header="PL" ????????????????????????????DisplayMemberBinding="{Binding PL}"/> ????????????<GridViewColumn Header="DD" ????????????????????????????DisplayMemberBinding="{Binding DD}"/> ????????????<GridViewColumn Header="Altman Z score" ????????????????????????????DisplayMemberBinding="{Binding AltmanZScore}"/> ????????????<GridViewColumn Header="Total trades" ????????????????????????????DisplayMemberBinding="{Binding TotalTrades}"/> ????????????<GridViewColumn Header="VaR 90" ????????????????????????????DisplayMemberBinding="{Binding VaR90}"/> ????????????<GridViewColumn Header="VaR 95" ????????????????????????????DisplayMemberBinding="{Binding VaR95}"/> ????????????<GridViewColumn Header="VaR 99" ????????????????????????????DisplayMemberBinding="{Binding VaR99}"/> ????????????<GridViewColumn Header="Mx" ????????????????????????????DisplayMemberBinding="{Binding Mx}"/> ????????????<GridViewColumn Header="Std" ????????????????????????????DisplayMemberBinding="{Binding Std}"/> ????????</GridView> ????</ListView.View></ListView>

從標(biāo)記中可以看出,ListView 類型表是表格類本身的引用。 接下來(lái)是創(chuàng)建網(wǎng)格,即會(huì)在其中存儲(chǔ)數(shù)據(jù),和數(shù)據(jù)列。 提到所創(chuàng)建的類引用,我指的是 ListView 類。 這種看似簡(jiǎn)單的 XAML 標(biāo)記代表了一種相當(dāng)復(fù)雜,且經(jīng)過深思熟慮的機(jī)制,該機(jī)制允許利用標(biāo)記語(yǔ)言描述類,并操控類對(duì)象。 我們與 AutoOptimiserVM 類關(guān)聯(lián)的所有字段都是這些類的屬性。 在上面的表格示例中,我們處理了三個(gè)類:


  • ListView — System.Windows.Controls.ListView.

  • GridView — System.Windows.Controls.GridView,它是從 System.Windows.Controls.ViewBase 派生的,因此可用作 ListView 類 View 屬性的初始化類。

  • GridViewColumn — System.Windows.Controls.GridViewColumn.


ListView 類的 ItemsSource屬性代表由表格構(gòu)成的元素集合。 將此屬性與 ViewModel 的集合連接后,我們?yōu)?Window 類提供了一種 DataContext,該 DataContext 要在表格中操作。 由于我們正在談?wù)撘粋€(gè)表格,因此代表集合的表格必須由含有每個(gè)表格公開屬性的類構(gòu)成。 將 ItemsSource 屬性與 ViewModel 的屬性綁定在一起之后,該屬性表示一個(gè)帶有數(shù)據(jù)的表格,我們可以將每列與給定表格中的所需列值進(jìn)行綁定。 此外,該表格還含有?SelectedIndex 屬性和 ViewModel 中的 SelectedForwardItem?屬性的連接。 ViewModel 需要知道用戶在此表格中所選擇的行。

在 ViewModel 部分中,與表格呈現(xiàn)綁定的屬性實(shí)現(xiàn)如下:

/// <summary>/// Selected forward tests/// </summary>public ObservableCollection<ReportItem> ForwardOptimisations { get; } = new ObservableCollection<ReportItem>();

C# 標(biāo)準(zhǔn)庫(kù)中的 ObservableCollection 類是一個(gè)對(duì)象,用于通知圖形有關(guān)修改的信息。 這是因?yàn)樵擃愐呀?jīng)含所提到的事件,并在每次更新其元素列表時(shí)都會(huì)調(diào)用它。 至于其余的,它是標(biāo)準(zhǔn)的數(shù)據(jù)集合。

SelectedForwardItem?屬性執(zhí)行若干角色:它在所選表格行上存儲(chǔ)數(shù)據(jù),并作為行選擇回調(diào)。

/// <summary>/// Selected forward pass/// </summary>private int _selectedForwardItem;public int SelectedForwardItem { ????get => _selectedForwardItem;????set ????{ ????????_selectedForwardItem = value;????????if (value > -1) ????????{ ????????????FillInBotParams(model.ForwardOptimisations[value]); ????????????FillInDailyPL(model.ForwardOptimisations[value]); ????????????FillInMaxPLDD(model.ForwardOptimisations[value]); ????????} ????} }?

由于該屬性用作回調(diào),因此(在我們的示例中)期望針對(duì)所設(shè)置的數(shù)值做出特別反應(yīng),故此 setter 必須包含此反應(yīng)的實(shí)現(xiàn),并作為函數(shù)。 由此,屬性值存儲(chǔ)在私密變量中。 若要從該變量接收數(shù)值,我們可從取值器(getter)直接訪問它。 若要設(shè)置一個(gè)值,在賦值器(setter)中將數(shù)值存儲(chǔ)在 "value" 變量里。'value' 變量沒有題標(biāo),在 C# 語(yǔ)言里作為設(shè)置數(shù)值的特定別名。 如果 “value” 大于-1,則在“結(jié)果”選項(xiàng)卡中填充其他相關(guān)表格,這些表格會(huì)根據(jù)所選行進(jìn)行更新。 這些表格包含交易機(jī)器人參數(shù),平均利潤(rùn),交易日的虧損,以及盈虧的最高/最低值。 需要在 “if” 條件下執(zhí)行檢查,如果因?yàn)樗x表項(xiàng)索引為 -1,則意味著表格為空,因此不需要填充相關(guān)表格。 AutoOptimiserVM 類代碼中提供了調(diào)用方法的實(shí)現(xiàn)。

此處是類的實(shí)現(xiàn),優(yōu)化結(jié)果也含有說(shuō)明行。

/// <summary>/// Class - a wrapper for a report item (for a graphical interval)/// </summary>class ReportItem { ????/// <summary>????/// Constructor????/// </summary>????/// <param name="item">Item</param>????public ReportItem(OptimisationResult item) ????{ ????????result = item; ????} ????/// <summary>????/// Report item????/// </summary>????private readonly OptimisationResult result; ????public DateTime From => result.report.DateBorders.From; ????public DateTime Till => result.report.DateBorders.Till; ????public double SortBy => result.SortBy; ????public double Payoff => result.report.OptimisationCoefficients.Payoff; ????public double ProfitFactor => result.report.OptimisationCoefficients.ProfitFactor; ????public double AverageProfitFactor => result.report.OptimisationCoefficients.AverageProfitFactor; ????public double RecoveryFactor => result.report.OptimisationCoefficients.RecoveryFactor; ????public double AverageRecoveryFactor => result.report.OptimisationCoefficients.AverageRecoveryFactor; ????public double PL => result.report.OptimisationCoefficients.PL; ????public double DD => result.report.OptimisationCoefficients.DD; ????public double AltmanZScore => result.report.OptimisationCoefficients.AltmanZScore; ????public int TotalTrades => result.report.OptimisationCoefficients.TotalTrades; ????public double VaR90 => result.report.OptimisationCoefficients.VaR.Q_90; ????public double VaR95 => result.report.OptimisationCoefficients.VaR.Q_95; ????public double VaR99 => result.report.OptimisationCoefficients.VaR.Q_99; ????public double Mx => result.report.OptimisationCoefficients.VaR.Mx; ????public double Std => result.report.OptimisationCoefficients.VaR.Std; }


股票量化:赫茲量化中自動(dòng)優(yōu)化器的邏輯部分與圖形綁定的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
大余县| 巴中市| 新宁县| 新巴尔虎右旗| 金溪县| 安岳县| 蓬安县| 沂水县| 崇义县| 紫阳县| 凤庆县| 富民县| 盐亭县| 肥城市| 乌海市| 青铜峡市| 博湖县| 沙坪坝区| 临邑县| 棋牌| 普宁市| 康平县| 同仁县| 宜章县| 兴城市| 元谋县| 胶州市| 龙岩市| 拜泉县| 西乌珠穆沁旗| 新河县| 安乡县| 凉山| 团风县| 饶阳县| 株洲市| 曲阳县| 吴江市| 常熟市| 桐乡市| 赣州市|