亚洲综合国产一区二区三区-亚洲综合激情另类专区-亚洲综合精品一区二区三区中文-亚洲综合免费-国产成人黄网址在线视频-国产成人教育视频在线观看

您的位置:互聯(lián)網(wǎng) > 正文

股票量化交易軟件:連續(xù)前行優(yōu)化第八部分程序改進和修復(fù)

來源: 時間:2023-07-07 13:59:17

添加日期自動完成

以前的程序版本分階段輸入日期,從而進行前行和歷史優(yōu)化,這很不方便。 而這一回,我實現(xiàn)了所需時間范圍的自動輸入。 功能的細節(jié)可以描述如下。 所選時間間隔應(yīng)自動分為前行優(yōu)化和歷史優(yōu)化。 兩種優(yōu)化類型的步驟都是固定的,并在間隔拆分之前已設(shè)置完畢。 每個新的前行范圍必須在上一個范圍之后的第二天開始。 歷史間隔的偏移(重疊)等于前行窗口的步長。 與歷史優(yōu)化不同,前行優(yōu)化不會重疊,它們實現(xiàn)了連續(xù)的交易歷史。


(資料圖片僅供參考)

為了實現(xiàn)該任務(wù),我決定將此功能轉(zhuǎn)移到一個單獨的圖形窗口之中,并令其獨立于主界面,彼此不直接相關(guān)。 結(jié)果就是,赫茲股票量化得到以下對象層次結(jié)構(gòu)。

赫茲股票量化來研究一下此功能如何連接,并查看其實現(xiàn)示例。 赫茲股票量化從創(chuàng)建擴展的圖形界面開始,即,圖表上的所有內(nèi)容來自 AutoFillInDateBorders 對象,該對象代表圖形窗口,及以下。 該圖片示意 GUI 元素,XAML 標記,以及由 AutoFillInDateBordersVM 類呈現(xiàn)的 ViewModel 部分中的字段。

如您所見,GUI 包括三個主要部分。 其中包括兩個日歷,用來輸入優(yōu)化期開始和結(jié)束日期;指定前行和歷史間隔邊界的表格;以及 “Set” 按鈕,單擊該按鈕會將指定范圍劃分為相應(yīng)的歷史和前行窗口。 屏幕截圖中的表格包含重復(fù)的三行,實際上只有兩行:第一行負責(zé)歷史日期范圍,第二行設(shè)置前行范圍。

表格中的 “Value” 是相應(yīng)優(yōu)化類型的步數(shù),以天為單位的。 例如,如果歷史間隔的值是 360 天,而前行值是 90,則意味著日歷中指定的時間間隔將分為 360 天的歷史優(yōu)化間隔,和 90 天的前行間隔。 每個下一個歷史優(yōu)化窗口的開始將依據(jù)前行間隔步數(shù)平移。

class AutoFillInDateBordersM : IAutoFillInDateBordersM{ ? ?private AutoFillInDateBordersM() { } ? ?private static AutoFillInDateBordersM instance; ? ?public static AutoFillInDateBordersM Instance() ? ?{ ? ? ? ?if (instance == null) ? ? ? ? ? ?instance = new AutoFillInDateBordersM(); ? ? ? ?return instance; ? ?} ? ?public event Action<List<KeyValuePair<OptimisationType, DateTime[]>>> DateBorders; ? ?public void Calculate(DateTime From, DateTime Till, uint history, uint forward) ? ?{ ? ? ? ?if (From >= Till) ? ? ? ? ? ?throw new ArgumentException("Date From must be less then date Till"); ? ? ? ?List<KeyValuePair<OptimisationType, DateTime[]>> data = new List<KeyValuePair<OptimisationType, DateTime[]>>(); ? ? ? ?OptimisationType type = ; ? ? ? ?DateTime _history = From; ? ? ? ?DateTime _forward = (history + 1); ? ? ? ?DateTime CalcEndDate() ? ? ? ?{ ? ? ? ? ? ?return type == ? _(history) : _(forward); ? ? ? ?} ? ? ? ? ?while (CalcEndDate() <= Till) ? ? ? ?{ ? ? ? ? ? ?DateTime from = type == ? _history : _forward; ? ? ? ? ? ?(new KeyValuePair<OptimisationType, DateTime[]>(type, new DateTime[2] { from, CalcEndDate() })); ? ? ? ? ? ?if (type == ) ? ? ? ? ? ? ? ?_history = _(forward + 1); ? ? ? ? ? ?else ? ? ? ? ? ? ? ?_forward = _(forward + 1); ? ? ? ? ? ?type = type == ? : ; ? ? ? ?} ? ? ? ?if ( == 0) ? ? ? ? ? ?throw new ArgumentException("Can`t create any date borders with set In sample (History) step"); ? ? ? ?DateBorders?.Invoke(data); ? ?}}

窗口數(shù)據(jù)的模型類是運用單例范式(Singletone pattern)編寫的對象。 這樣可以繞開擴展的圖形窗口,令主窗口的 ViewModel 部分與數(shù)據(jù)模型進行交互。 在有趣的方法當中,對象僅包含“Calculate” ,用來計算日期范圍,并在完成上述過程后調(diào)用 事件。 事件接收一對數(shù)值集合作為參數(shù),其中鍵值是所分析間隔的類型(前行或歷史優(yōu)化),而其值是一個包含兩個 DateTime 值的數(shù)組。 第一個表示所選間隔的開始日期,而第二個表示結(jié)束日期。

該方法會在一個循環(huán)中計算日期范圍,備選是更改計算窗口的類型(前行或歷史)。 首先,歷史窗口類型設(shè)置為所有計算的起點。 在循環(huán)開始之前還設(shè)置了每種窗口類型的初始日期值。 在循環(huán)的每次迭代中,使用嵌套函數(shù)計算所選窗口類型的邊界極值,然后依據(jù)極值范圍日期驗證該值。 如果日期超界,那么此為循環(huán)退出條件。 優(yōu)化窗口范圍是在循環(huán)里形成的。 然后,更新下一個窗口開始日期和窗口類型切換器。

所有操作之后,如果未發(fā)生任何錯誤,則利用所傳遞日期范圍調(diào)用事件。 所有進一步的動作均由類來執(zhí)行。 按下 “Set” 按鈕回調(diào)可啟動上述方法的執(zhí)行。

為赫茲股票量化的擴展而建立的數(shù)據(jù)模型工廠以最簡單的方式實現(xiàn):

class AutoFillInDateBordersCreator{ ? ?public static IAutoFillInDateBordersM Model => ();}

基本上,當我們調(diào)用 “Model” 靜態(tài)屬性時,我們持續(xù)引用數(shù)據(jù)模型對象的同一實例,然后將其強制轉(zhuǎn)換為接口類型。 我們在主窗口的 ViewModel 部分中用到此事實。

public AutoOptimiserVM(){ ? ?... ? ? += Model_DateBorders; ? ?....}~AutoOptimiserVM(){ ? ?... ? ? -= Model_DateBorders; ? ?....}

在主窗口 ViewModel 對象的構(gòu)造函數(shù)和析構(gòu)函數(shù)之中,赫茲股票量化都可不用存儲指向該類實例的指針,但調(diào)用它則要通過靜態(tài)數(shù)據(jù)模型工廠。 請注意,主窗口的 ViewModel 部分實際上配合所研究的類一起操作,但無需知道該類是這樣操作的。 因為在類構(gòu)造函數(shù)和析構(gòu)函數(shù)中之外,其他任何地方都未提及引用了該對象。 訂閱所提到的事件后,在回調(diào)時,首先清空所有先前輸入的日期范圍,然后在循環(huán)中添加經(jīng)事件傳遞來的新日期范圍,一次一個。 在集合中添加日期范圍的方法也已在主圖形界面的 ViewModel 端實現(xiàn)。 看起來像這樣:

void _AddDateBorder(DateTime From, DateTime Till, OptimisationType DateBorderType){ ? ? ? ?try ? ?{ ? ? ? ?DateBorders border = new DateBorders(From, Till); ? ? ? ?if (!(x => == DateBorderType).Any(y => == border)) ? ? ? ?{ ? ? ? ? ? ?(new DateBordersItem(border, _DeleteDateBorder, DateBorderType)); ? ? ? ?} ? ?} ? ?catch (Exception e) ? ?{ ? ? ? ?(); ? ?}}

DateBorder 對象的創(chuàng)建包裝在 “try-catch” 構(gòu)造當中。 這樣做是因為對象構(gòu)造函數(shù)里可能會發(fā)生異常,且必須以某種方式處理它。 我還添加了 ClearDateBorders 方法:

ClearDateBorders = new RelayCommand((object o) =>{ ? ?();});

它可以快速刪除所有輸入的日期范圍。 在以前的版本中,每個日期都需要分別刪除,這對于大量日期而言是不便的。 在之前存在的日期范圍控制的相同代碼行中添加了 GUI 主窗口按鈕調(diào)用所講述的新創(chuàng)內(nèi)容。

單擊 “Autoset” 將觸發(fā)一次回調(diào),它調(diào)用 SubFormKeeper 類實例之中的 Open 方法。 該類被編寫為包裝器,其中封裝嵌套的窗口創(chuàng)建過程。 這消除了主窗口 ViewModel 中不必要的屬性和字段,并防止赫茲股票量化直接訪問已創(chuàng)建的輔助窗口,因為本不該直接進行交互。

class SubFormKeeper{ ? ?public SubFormKeeper(Func<Window> createWindow, Action<Window> subscribe_events = null, Action<Window> unSubscribe_events = null); ? ?public void Open(); ? ?public void Close();}

如果您查看類代碼,則可從公開方法中看到它提供了確切的可能性集合。 進而,所有輔助自動優(yōu)化器窗口都將包裝在此特定類當中。

函數(shù)庫中操控優(yōu)化結(jié)果的新功能和錯誤修復(fù)

本文的此部分講述處理優(yōu)化報告函數(shù)庫中的修改 - “”。 除了引入自定義系數(shù)外,新功能還可以更快地從終端卸載優(yōu)化報告。 它還修復(fù)了數(shù)據(jù)排序中的錯誤。

引入一個自定義優(yōu)化系數(shù)

前幾篇文章的評論中有一項改進建議,就是能夠采用自定義系數(shù)來過濾優(yōu)化結(jié)果。 為了實現(xiàn)這個選項,我必須對現(xiàn)有對象進行一些修改。 無論如何,為了支持舊報表,讀取優(yōu)化數(shù)據(jù)的類既可與含有自定義系數(shù)的報表一起操作,也可與程序的早期版本中生成的報表一起操作。 因此,報告格式保持不變。 它有一個附加參數(shù) - 一個用于指定自定義系數(shù)的字段。

現(xiàn)在,“ SortBy” 枚舉含有新參數(shù) “Custom”,并已將相應(yīng)的字段添加到 “Coefficients” 結(jié)構(gòu)之中。 這會將系數(shù)添加到負責(zé)存儲數(shù)據(jù)的對象當中,但不會將其添加到卸載和讀取數(shù)據(jù)的對象之中。 數(shù)據(jù)寫入是通過兩種方法執(zhí)行的,和一個擁有靜態(tài)方法的類,它是為了從 MQL5 中保存報告。

public static void AppendMainCoef(double customCoef, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double payoff, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double profitFactor, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double averageProfitFactor, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double recoveryFactor, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double averageRecoveryFactor, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int totalTrades, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double pl, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double dd, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double altmanZScore){ ? ? = customCoef; ? ?...}

首先,將標識自定義系數(shù)的新參數(shù)添加到 AppendMainCoef 方法當中。 然后,像其他傳遞的系數(shù)一樣,將其添加到 結(jié)構(gòu)之中。 現(xiàn)在,如果您嘗試利用新的 “” 函數(shù)庫編譯舊項目,則會出現(xiàn)異常,因為 AppendMainCoef 方法代碼已有變化。 可稍微編輯卸載數(shù)據(jù)的對象來解決此錯誤 - 赫茲股票量化稍后將繼續(xù)討論 MQL5 代碼。

為了能夠正確編譯當前的 dll 版本,請用本文下面附帶的新代碼替換 Include 目錄中的 “History Manager”,如此足以在編譯機器人時兼容新、舊方法。

另外,我還修改了 Write 方法的代碼,該方法現(xiàn)在不會引發(fā)異常,但會返回錯誤消息。 這樣做是因為該程序不再使用命名互斥體,該互斥體明顯減慢了數(shù)據(jù)卸載過程,但是在舊版本的卸載類中必需用其生成報告。 不過,我尚未刪除使用互斥體寫入數(shù)據(jù)的方法,以便保持與先前實現(xiàn)的數(shù)據(jù)導(dǎo)出格式的兼容性。

為了讓新記錄出現(xiàn)在報告文件中,我們需要創(chuàng)建一個新的 <Item/> 標記,其 Name 屬性等于 “Custom”。

WriteItem(xmlDoc, xpath, "Item", (), new Dictionary<string, string> { { "Name", "Custom" } });

另一種修改的方法是 :在此處添加了類似的代碼行,該代碼行加入了帶有自定義系數(shù)參數(shù)的 <Item/> 標簽。

現(xiàn)在,赫茲股票量化研究將自定義系數(shù)添加到數(shù)據(jù)和 MQL 機器人代碼當中。 首先,我們研究舊版本的數(shù)據(jù)下載功能,其中與 ReportWriter 類一起操作的代碼位于 文件的 CXmlHistoryWriter 類當中。 創(chuàng)建了以下代碼的引用,以便支持自定義系數(shù):

typedef double(*TCustomFilter)();

上述類中的 “private” 字段存儲此函數(shù)。

class CXmlHistoryWriter ?{private: ? const string ? ? ?_path_to_file,_mutex_name; ? CReportCreator ? ?_report_manager; ? TCustomFilter ? ? custom_filter; ? void ? ? ? ? ? ? ?append_bot_params(const BotParams ?&params[]);// ? void ? ? ? ? ? ? ?append_main_coef(PL_detales &pl_detales, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TotalResult &totalResult);// ? //double ? ? ? ? ? ?get_average_coef(CoefChartType type); ? void ? ? ? ? ? ? ?insert_day(PLDrawdown &day,ENUM_DAY_OF_WEEK day);// ? void ? ? ? ? ? ? ?append_days_pl();//public: ? ? ? ? ? ? ? ? ? ? CXmlHistoryWriter(string file_name,string mutex_name, ? ? ? ? ? ? ? ? ? ? CCCM *_comission_manager, TCustomFilter filter);// ? ? ? ? ? ? ? ? ? ? CXmlHistoryWriter(string mutex_name,CCCM *_comission_manager, TCustomFilter filter); ? ? ? ? ? ? ? ? ? ?~CXmlHistoryWriter(void) {_report_();} // ? void ? ? ? ? ? ? ?Write(const BotParams &params[],datetime start_test,datetime end_test);// ?};

該“private” 字段的值是從類的構(gòu)造函數(shù)中填充的。 進而,在 append_main_coef 方法中,當從 dll 庫調(diào)用 “ReportWriter::AppendMainCoef” 靜態(tài)方法時,通過其指針調(diào)用所傳遞的函數(shù),并接收自定義系數(shù)值。

關(guān)鍵詞:

精彩推送

公司

文物全科人才畢業(yè)后直接到縣(市、區(qū))及以下文物保護事業(yè)單位定向就業(yè)

詳細>>

今年,鄂爾多斯立足于全市資源型缺水、水質(zhì)型缺水、工程型缺水并存的實

詳細>>

7月5日,新鄉(xiāng)市農(nóng)科院傳來喜訊,該院近日收到農(nóng)業(yè)農(nóng)村部頒發(fā)的21個植物

詳細>>

河北省交通運輸廳日前印發(fā)的《加快建設(shè)交通強省實施方案》提出,圍繞高

詳細>>

近日,記者從北京經(jīng)開區(qū)了解到,截至目前,這里已擁有國家級專精特新“

詳細>>

4日,愛樂匯交響樂團《完全貝多芬》2023-2024音樂季媒體見面會在愛樂匯

詳細>>
主站蜘蛛池模板: 免费的成人a视频在线观看 免费的a级毛片 | 黄色的视频网站 | 国内精品小视频福利网址 | 中文字幕免费高清视频 | 久久综合九色综合97婷婷女人 | 天天成人| a级理论片 | 永久免费在线视频 | 亚洲第一天堂无码专区 | 白丝国产| 欧美日韩性视频 | 亚洲国产91 | 天天操夜夜骑 | 伊人91在线 | 亚洲视频一区 | 成人免费视频视频在线不卡 | 一级欧美一级日韩 | 午夜影院网站 | 爽爽影院在线 | 成人国产精品视频频 | 亚洲成人观看 | 日韩国产成人精品视频 | 午夜视频在线网站 | 五月激情六月婷婷 | 欧美人与牲动交a欧美精品 欧美人与日本人xx在线视频 | 免费国产高清精品一区在线 | 老妇女人一级毛片 | 欧美国产精品 | 日韩成人影院 | 黑色丝袜美女被网站 | 国产成人19禁在线观看 | 国产一级久久免费特黄 | 日韩黄色大片免费看 | 黄色短视频免费看 | 免费看黄色片视频 | 欧美在线观看视频网站 | 看黄的网址 | 国产精品日韩欧美在线第3页 | 国产精品久久毛片蜜月 | 影院亚洲| 日韩美女va在线毛片免费知 |