最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

股票量化軟件:從頭開始開發(fā)智能交易系統(tǒng)24--提供系統(tǒng)健壯性

2023-07-17 17:16 作者:大牛啊呢  | 我要投稿

這里的最大問題是設(shè)計(jì)一個(gè)兼具兩個(gè)品質(zhì)的系統(tǒng):速度可靠性。 在某些類型的系統(tǒng)中,這很困難,甚至不可能實(shí)現(xiàn)兼顧兩者。 如此這般,在許多情況下,我們?cè)噲D平衡事態(tài)。 但由于它涉及資金,我們的血汗錢,我們不想冒險(xiǎn)去得到一個(gè)不具備這些品質(zhì)的系統(tǒng)。 必須要牢記的是,我們正在與一個(gè)實(shí)時(shí)操作的系統(tǒng)打交道,這是開發(fā)人員遭遇的最困難的場(chǎng)景,因?yàn)槲覀儜?yīng)該始終嘗試擁有一個(gè)極端快捷的系統(tǒng):它必須立即對(duì)事件做出反應(yīng),且當(dāng)我們嘗試改進(jìn)它時(shí)能表現(xiàn)出足夠的可靠性,不至于崩潰。 因此,這項(xiàng)任務(wù)顯然相當(dāng)困難。赫茲量化交易軟件


確保以最合適的方式調(diào)用和執(zhí)行函數(shù),避免不必要的調(diào)用,尤其是不必要的次數(shù),如此可以達(dá)成速度提升。 這將在語言范圍內(nèi)提供盡可能快速的系統(tǒng)。 不過,如果我們想要某方面更快,那么我們必須下沉到機(jī)器語言級(jí)別,在這種情況下,我們指的是匯編語言。 但這往往是不必要的,我們能用 C 語言得到同樣好的結(jié)果。赫茲量化交易軟件

實(shí)現(xiàn)所需健壯性的途徑之一是嘗試盡可能多地重用代碼,從而能在不同情況下不斷對(duì)其進(jìn)行測(cè)試。 但這只是其中一種方式。 另一種方式是使用 OOP(面向?qū)ο缶幊蹋?如果每個(gè)對(duì)象類不直接操作對(duì)象類數(shù)據(jù)(繼承除外),就能正確且恰如其分地完成操作,那么它就足以作為一個(gè)十分健壯的系統(tǒng)了。 有時(shí),這樣做會(huì)降低執(zhí)行速度,但這種降低是如此之微弱,以至于比之類封裝提供的指數(shù)性增長(zhǎng),可以被忽略不計(jì)。 這種封裝提供了我們所需的健壯性。赫茲量化交易軟件

如您所見,達(dá)成速度和穩(wěn)健性雙贏并不是那么簡(jiǎn)單。 但其偉大之處在于,我們不必犧牲太多東西,如同您乍眼一看那樣。 我們能夠簡(jiǎn)單地檢查系統(tǒng)文檔,看看哪些修改可以改進(jìn)內(nèi)容。 簡(jiǎn)單的事實(shí),我們沒有試圖重新發(fā)明輪子,這就已經(jīng)是一個(gè)良好的開端。 但請(qǐng)記住,程序和系統(tǒng)在持續(xù)改進(jìn)。 故此,我們應(yīng)該始終嘗試盡可能多地利用可用的東西,只有在最后的無奈情況下,才去真正重新發(fā)明輪子。赫茲量化交易軟件

之前,有些人發(fā)現(xiàn)沒有必要在文中介紹所做的更改,或者認(rèn)為我正在大量更改代碼而并沒實(shí)際移動(dòng)它,我要解釋一下:當(dāng)我們編寫代碼時(shí),我們真的無法想象最終代碼將如何工作。 我們所擁有的全部只是要實(shí)現(xiàn)的目標(biāo)。 一旦這個(gè)目標(biāo)達(dá)成了,我們開始研究如何實(shí)現(xiàn)這個(gè)目標(biāo),并試圖加以改進(jìn),從而令它們變得更好。赫茲量化交易軟件

對(duì)于商業(yè)系統(tǒng)的情況,無論是可執(zhí)行文件還是庫(kù)文件,我們都會(huì)持續(xù)進(jìn)行修改,并將其作為更新補(bǔ)丁發(fā)布。 用戶實(shí)際上并不需要知道實(shí)現(xiàn)目標(biāo)所涉及的路徑,因?yàn)樗且粋€(gè)商業(yè)系統(tǒng)。 他不知道這些實(shí)際上是件好事。 但由于它是一個(gè)開放的系統(tǒng),我不想讓您誤以為可以立即研發(fā)出一個(gè)非常高效的系統(tǒng),所以從一開始就這樣的。 以這種方式思考是不妥當(dāng)?shù)?,它甚至是一種侮辱,因?yàn)槌绦騿T或開發(fā)人員對(duì)所用的語言無論了解多寡,總有一些東西會(huì)隨時(shí)間推移而改進(jìn)。赫茲量化交易軟件

如此,不要把這個(gè)系列當(dāng)作可以在 3 或 4 篇文章中總結(jié)的東西,因?yàn)槿绻沁@樣的話,最好是簡(jiǎn)單地創(chuàng)建代碼,保持我認(rèn)為最合適的方式,并將其商業(yè)化。 這并非我的本意。 我通過觀摩其他更有經(jīng)驗(yàn)的程序員的代碼來學(xué)習(xí)編程,我知道這有什么價(jià)值。 了解事物如何隨著時(shí)間的推移而發(fā)展,比簡(jiǎn)單地套用完成的解決方案,并嘗試了解其工作原理要重要得多。

在觀摩這些之后,我們繼續(xù)研發(fā)。


2.0. 實(shí)現(xiàn)

2.0.1. 新的倉(cāng)位指標(biāo)建模

在新代碼格式中要留意的第一件事就是函數(shù)已改為宏替換。

inline string MountName(ulong ticket, eIndicatorTrade it, eEventType ev, bool isGhost = false)
{
????????return StringFormat("%s%c%c%c%llu%c%c%c%s", def_NameObjectsTrade, def_SeparatorInfo, (char)it, def_SeparatorInfo, ticket, def_SeparatorInfo, (char)(isGhost ? ev + 32 : ev), def_SeparatorInfo, (isGhost ? def_IndicatorGhost : def_IndicatorReal));
}

即使編譯器在每處引用點(diǎn)都用到了此代碼(這要?dú)w功于保留字 “inline”),您也不應(yīng)將其視為理所當(dāng)然,因?yàn)樵摵瘮?shù)在代碼中被多次調(diào)用。 我們需要確保它在實(shí)際中能盡可能快速地運(yùn)行,因此我們的新代碼將如下所示:

#define macroMountName(ticket, it, ev, Ghost) \ StringFormat("%s%c%llu%c%c%c%c%c%c%c", def_NameObjectsTrade, def_SeparatorInfo,?? ? ? ? ?\????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????? ticket, def_SeparatorInfo, ? ? ? ? ? ? ? ? ? ? ? ?\????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????? (char)it, def_SeparatorInfo,?????? ? ? ? ? ? ? ? ?\?
?????????????????????????????????????????????????????? (char)(Ghost ? ev + 32 : ev), def_SeparatorInfo,??\?
?????????????????????????????????????????????????????? (Ghost ? def_IndicatorGhost : def_IndicatorReal))

請(qǐng)注意,舊版本的宏替換中的數(shù)據(jù)和此版本中的數(shù)據(jù)有所不同。 如此更改是有原因的,我們稍后將在文中討論。

但是由于這個(gè)修改,我們還必須對(duì)另一個(gè)函數(shù)的代碼略微進(jìn)行修改。

inline bool GetIndicatorInfos(const string sparam, ulong &ticket, eIndicatorTrade &it, eEventType &ev)
????????????????????????{
????????????????????????????????string szRet[];
????????????????????????????????char szInfo[];
????????????????????????????????
????????????????????????????????if (StringSplit(sparam, def_SeparatorInfo, szRet) < 2) return false;
????????????????????????????????if (szRet[0] != def_NameObjectsTrade) return false;
????????????????????????????????ticket = (ulong) StringToInteger(szRet[1]);
????????????????????????????????StringToCharArray(szRet[2], szInfo);
????????????????????????????????it = (eIndicatorTrade)szInfo[0];
????????????????????????????????StringToCharArray(szRet[3], szInfo);
????????????????????????????????ev = (eEventType)szInfo[0];

????????????????????????????????return true;
????????????????????????}

此處的更改僅針對(duì)索引,該索引將指明哪個(gè)是單號(hào),哪個(gè)是指標(biāo)。 這沒什么復(fù)雜的。 只需完成一個(gè)簡(jiǎn)單的細(xì)節(jié),否則在調(diào)用該函數(shù)時(shí),我們將得到不一致的數(shù)據(jù)。

您也許會(huì)驚訝:“為什么我們需要這些修改? 系統(tǒng)運(yùn)行不正常嗎?” 是的,它能工作了。 但有些事情我們無法控制。 例如,當(dāng)赫茲量化交易軟件?開發(fā)人員改進(jìn)了一些 EA 中未用到的函數(shù)時(shí),我們從中并未受益。?規(guī)則是避免重新發(fā)明輪子,取而代之的是可用資源的再生。 因此,我們應(yīng)該始終嘗試?yán)谜Z言提供的函數(shù),在我們的例子中是 MQL5,并避免自行創(chuàng)建函數(shù)。 這也許看起來很荒謬,但實(shí)際上,如果您冷靜思考,您會(huì)發(fā)現(xiàn)平臺(tái)不時(shí)在為某些函數(shù)提供改進(jìn),如果您恰好用到了這些相同的函數(shù),則無需付出任何額外的努力,即可在程序中獲得更好的性能和更高的安全性。

因此,結(jié)局證明這是合理的。 然而,上述變更是否有助于 EA 從 MQL5 函數(shù)庫(kù)的任何改進(jìn)中受益? 這個(gè)問題的答案是?否定的。上述變更對(duì)于確保對(duì)象名稱建模正確性是必要的,如此我們就能夠有效地利用來自 MQL5 和?赫茲量化交易軟件?開發(fā)人員未來可能的改進(jìn)。 以下是可能有用的項(xiàng)目之一:

inline void RemoveIndicator(ulong ticket, eIndicatorTrade it = IT_NULL)
{
????????ChartSetInteger(Terminal.Get_ID(), CHART_EVENT_OBJECT_DELETE, false);
????????if ((it == IT_NULL) || (it == IT_PENDING) || (it == IT_RESULT))
????????????????ObjectsDeleteAll(Terminal.Get_ID(), StringFormat("%s%c%llu%c", def_NameObjectsTrade, def_SeparatorInfo, ticket, (ticket > 1 ? '*' : def_SeparatorInfo)));
????????else ObjectsDeleteAll(Terminal.Get_ID(), StringFormat("%s%c%llu%c%c", def_NameObjectsTrade, def_SeparatorInfo, ticket, def_SeparatorInfo, (char)it));
????????ChartSetInteger(Terminal.Get_ID(), CHART_EVENT_OBJECT_DELETE, true);
????????m_InfoSelection.bIsMovingSelect = false;
????????ChartRedraw();
}



股票量化軟件:從頭開始開發(fā)智能交易系統(tǒng)24--提供系統(tǒng)健壯性的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
九龙县| 隆安县| 奉贤区| 沐川县| 郧西县| 广南县| 湖南省| 平湖市| 乌鲁木齐县| 金沙县| 福安市| 罗城| 兴宁市| 濉溪县| 大厂| 祁东县| 海城市| 白银市| 仙桃市| 浦东新区| 潼南县| 黎城县| 日土县| 安远县| 弥渡县| 林甸县| 龙川县| 龙南县| 万源市| 富蕴县| 木兰县| 光山县| 嘉黎县| 巍山| 宿松县| 绥芬河市| 理塘县| 龙山县| 雷波县| 尼玛县| 改则县|