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

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

MQL5 — 您也可以成為該語(yǔ)言的大師

2023-08-03 15:41 作者:bili_45793681098  | 我要投稿

概述

赫茲量化在本文中,我將要做到的一些事情與我在前面文章中所作不同。 基本上,本資料適用于那些對(duì) MQL5 或普通編程知之甚少或一無(wú)所知的人。 故此,這篇文章就像對(duì)自己的采訪。 在其中,我將解釋如何從頭開始學(xué)習(xí) MQL5,并成為專業(yè)人士。

編輯切換為居中

一個(gè)小故事

自從我開始為 MQL5 社區(qū)撰寫文章以來(lái),我收到了很多反饋。 許多人聯(lián)系我,詢問我如何學(xué)習(xí)使用 MQL5 編程,以便可以自行完成文章中講述的事情。 這些人中的大多數(shù)都是愛好者,正在尋找基礎(chǔ)指南來(lái)邁出編程的第一步。 故此,本文獻(xiàn)給所有愿意學(xué)習(xí) MQL5 編程的愛好者和萌新 MQL5 程序員。

在繼續(xù)這個(gè)話題之前,我需要說(shuō)點(diǎn)什么。 這些資料的目的不是令您退卻,相反,是為了進(jìn)一步增加您的動(dòng)力。

您也許會(huì)認(rèn)為我一定有多年的 MQL5 編程經(jīng)驗(yàn)。 不過(guò),在撰寫本文時(shí),我使用 MQL5 語(yǔ)言只有一年半的時(shí)間。 沒錯(cuò),我作為 MQL5 程序員的經(jīng)驗(yàn)不到兩年。 您可能很驚奇,一名經(jīng)驗(yàn)只有如此少的 MQL5 編程人員如何能夠撰寫一些文章,并設(shè)法展示在赫茲量化中做到的事情。

這是因?yàn)?MQL5 編程語(yǔ)言的開發(fā)者有一個(gè)很棒的主意,令該語(yǔ)言在許多方面看起來(lái)像 C/C++。 因此,如果程序員擁有豐富的 C/C++ 經(jīng)驗(yàn),那么學(xué)習(xí) MQL5 就會(huì)非常容易,因?yàn)闊o(wú)需重新學(xué)習(xí)所有概念、語(yǔ)法和命令。

我為什么這么說(shuō)? 因?yàn)槲覐?2000 年代初開始就是一名專業(yè)的 C/C++ 程序員,也就是說(shuō),我已經(jīng)用 C/C++ 編程超過(guò) 23 年了。 如果為了讓赫茲量化做些事情,我必須學(xué)習(xí)一門新語(yǔ)言,那很可能我最終會(huì)放棄。

許多人認(rèn)為若要成為一名優(yōu)秀的程序員,就需要參加一些課程。 但是,要真正學(xué)習(xí)編程,您不應(yīng)該害怕犯錯(cuò)誤。 您永遠(yuǎn)不應(yīng)該執(zhí)著于代碼或想法。 您應(yīng)該總是尋求實(shí)驗(yàn)和嘗試新事物。

這聽起來(lái)可能有點(diǎn)奇怪,因?yàn)樵S多新人總喜歡按同樣的方式做同樣的事情。 但希望成為一名優(yōu)秀程序員的人總是在尋找不同的途徑來(lái)做同樣的事情。 此外,許多人不明白程序員總是會(huì)受到他人的啟發(fā)。 他們能取得更有經(jīng)驗(yàn)的程序員開發(fā)的工作源代碼,并一點(diǎn)一點(diǎn)地更改它,實(shí)驗(yàn)并觀察結(jié)果。 以這種方式,他們學(xué)習(xí)程序的實(shí)際構(gòu)建方式。

有些人認(rèn)為要學(xué)習(xí) MQL5,您開始必須學(xué)習(xí)一些東西。 事實(shí)上,如果沒有任何先驗(yàn)知識(shí)的人問我如何學(xué)習(xí),我總是建議從最簡(jiǎn)單的開始。 換言之,學(xué)習(xí)一點(diǎn)關(guān)于 C 語(yǔ)言的知識(shí),從而真正了解語(yǔ)法和編程邏輯以及命令。 一旦您明白了 C 語(yǔ)言的基礎(chǔ)知識(shí),就開始學(xué)習(xí) C++,同時(shí)開始練習(xí) MQL5。 簡(jiǎn)單事實(shí)在于,若您已經(jīng)具備基礎(chǔ)的 C 語(yǔ)言知識(shí),者將極大地幫助您開始使用 MQL5 進(jìn)行編程。

有些人可能認(rèn)為 C 語(yǔ)言已經(jīng)過(guò)時(shí)了,但事實(shí)是 C 語(yǔ)言依然是一種文檔非常完善,且使用廣泛的語(yǔ)言。 您可以找到很多資料來(lái)學(xué)習(xí)如何使用 C 語(yǔ)言。請(qǐng)注意,我并不是說(shuō)您應(yīng)該深入研究 C 語(yǔ)言。恰恰相反,如果您學(xué)習(xí)了一些基本的語(yǔ)法和命令,這將足以讓您開始使用 MQL5。

這似乎有點(diǎn)令人沮喪:學(xué)習(xí) C 語(yǔ)言才能在 MQL5 中取得進(jìn)步? 也許,如果您付出了很多努力,并找到愿意教授您的人,您可以直接從 MQL5 開始。 但從我的初次經(jīng)驗(yàn)和其他人的意見來(lái)看,我可以說(shuō)任務(wù)不會(huì)那么容易。 幾乎所有優(yōu)質(zhì)資料都集中在 MQL5 社區(qū)當(dāng)中。 在互聯(lián)網(wǎng)的其余部分,資料很分散,質(zhì)量參差不齊,弊大于利。 當(dāng)涉及到 C 和 C++ 語(yǔ)言時(shí),有大量?jī)?yōu)秀且非常容易訪問的資料。 故此,您可自行選擇從哪里開始。


我的首個(gè) MQL5 代碼

許多人認(rèn)為,既然我已經(jīng)知道如何用 C/C++ 編程,我就應(yīng)該立即開始用 MQL5 進(jìn)行復(fù)雜而繁瑣的項(xiàng)目。 我希望我能說(shuō),這只是一切的開始。 然而,現(xiàn)實(shí)卻大相徑庭。

每當(dāng)我們邁出開發(fā)自己的解決方案的第一步時(shí),赫茲量化通常會(huì)從我們自認(rèn)為明白的東西開始。 就我而言,當(dāng)我開始使用 MQL5 時(shí),我手頭只有語(yǔ)言文檔。 我甚至不知道有一個(gè)社區(qū)致力于幫助其他感興趣的程序員。

因此,在研究文檔并檢查 MetaEditor 附帶的源代碼時(shí),我就著手嘗試。 下面是我根據(jù)自己所理解的內(nèi)容創(chuàng)建的第一段真實(shí)代碼。

01. //+------------------------------------------------------------------+ 02. #property copyright "Daniel Jose" 03. #property version ? "1.00" 04. #property description "Modify special chart properties" 05. #property script_show_inputs 06. //+------------------------------------------------------------------+ 07. enum eWhat ?{ 08. ? ? ? ? ? ? ? ?eScaleDate ?= CHART_SHOW_DATE_SCALE, ? //Time scale 09. ? ? ? ? ? ? ? ?eScalePrice = CHART_SHOW_PRICE_SCALE ? //Price scale 10. ? ? ? ? ? ? }; 11. enum eOp ? ?{ 12. ? ? ? ? ? ? ? ?eFalse, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//Makes hidden 13. ? ? ? ? ? ? ? ?eTrue ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//Makes visible 14. ? ? ? ? ? ? }; 15. //+------------------------------------------------------------------+ 16. input eWhat user00 = eScaleDate; ? ? ? ? ? ? ? ? ? ? ?//Graphic property 17. input eOp ? user01 = eFalse; ? ? ? ? ? ? ? ? ? ? ? ? ?//What to do? 18. //+------------------------------------------------------------------+ 19. void OnStart() 20. { 21. ? ?ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER) user00, user01); 22. } 23. //+------------------------------------------------------------------+

分析代碼

可以從代碼中刪除第二行、第三行和第四行。 事實(shí)上,它們僅僅是為了告知用戶赫茲量化代碼的用途。 作為用戶,您只需從學(xué)習(xí)代碼中刪除這些行即可。

第五行非常重要,因?yàn)闆]有它,赫茲量化 將無(wú)法理解由用戶自定義的腳本,即通過(guò)某種輸入結(jié)構(gòu),在本例中為第 16 行和第 17 行顯示的 “inputs”。 我們很快就會(huì)到達(dá)那里。

現(xiàn)在出現(xiàn)了許多人可能不理解的東西。 特別是,如果他們只學(xué)習(xí)過(guò) MQL5,或者他們來(lái)自與 C/C++ 截然不同的其它語(yǔ)言。 我說(shuō)的是存在于第 07 行和第 11 行中的枚舉。

在查看此類結(jié)構(gòu)時(shí),您很可能會(huì)感到困惑。 您甚至可能認(rèn)為它們對(duì)你來(lái)說(shuō)太復(fù)雜了。 但正是因?yàn)?MQL5 是為引領(lǐng) C/C++ 程序員而構(gòu)建的,所以那些已經(jīng)有一點(diǎn) C/C++ 經(jīng)驗(yàn)的人在用它時(shí)是如此愉快。 但是,我們至少需從表面上來(lái)理解枚舉。

枚舉可以粗略地理解為一系列數(shù)據(jù),您可以在其中為它們賦值或不賦值。 如果未賦值,則計(jì)數(shù)將始終從第一個(gè)可能的值開始,在本例中為零。 因此,第 11 行中定義的枚舉遵循與值 0 或 1 相同的原則。 在 C/C++ 中,與 MQL5 一樣,值 0 被認(rèn)為是假(false),而值 1 被認(rèn)為是真(true)。

因此,在第 12 行處定義 eFalse 的值,赫茲量化已示意其為 0,在第 13 行(枚舉的第二個(gè)值)中,我們將得到值 1。 如果我們定義了更多的東西,它們就會(huì)順沿,所以下一個(gè)將是 2、3,依此類推。 這是最簡(jiǎn)單的情況。

我想提請(qǐng)您還要注意別的事情。 在第 12 行的末尾,我們有一些東西是 C/C++ 中的注釋。 我們?cè)谄渌兄幸惨娺^(guò)相同類型的東西。 我們專注于第 12 行,但這也適用于所有其它地方。

如果我們?cè)趫D表上啟動(dòng)腳本時(shí)查看腳本,我們會(huì)看到圖例 01。 在其中,我高亮顯示了與第 12 行注釋完全匹配的內(nèi)容。


編輯切換為居中


圖例 01 - 用戶交互窗口


這樣的東西極大地簡(jiǎn)化了 MQL5 編碼。 在其它語(yǔ)言中,赫茲量化必須做少量工作才能以如此簡(jiǎn)單實(shí)用的方式在 MQL5 中完成操作。 因此,您需要明白為代碼添加注釋是正確的做法,因?yàn)樗粌H可以令您的代碼更易于理解,還可以自定義顯示給用戶的消息。

現(xiàn)在讓我們回到第 07 行,其中我們還有另一個(gè)枚舉。 不過(guò),該枚舉與我剛才解釋過(guò)的枚舉有所不同。 這些并不是完全不同的東西:區(qū)別僅在于現(xiàn)在我們?yōu)槊總€(gè)元素分配了數(shù)值。 也就是說(shuō),編譯器將采用我們指定的數(shù)值,在本例中,這些值是在 MQL5 中定義的常量。 您可能會(huì)問:為什么不直接用常量,取而代之卻將它們分配給枚舉? 原因是易于實(shí)現(xiàn)。 如果我們直接使用常量,我們將不得不創(chuàng)建其它東西,例如數(shù)組或結(jié)構(gòu),這要麻煩得多。 而使用我的方式,您可以在任何位置或序列中插入任何值。 如果在我聲明的序列中出現(xiàn)一些感興趣的常量,我不需要真的分配或聲明該常量;我所要做的就是向枚舉添加更多內(nèi)容,語(yǔ)言編譯器將負(fù)責(zé)確保采用和分配正確的數(shù)值。

看看若是擁有堅(jiān)實(shí)、完善的 C/C++ 等語(yǔ)言的基礎(chǔ),將會(huì)如何幫助我們編寫 MQL5 代碼。 我們?cè)诖苏故镜膬?nèi)容在 MQL5 代碼中并不常見。 事實(shí)上,我注意到許多人訴諸于更復(fù)雜和耗時(shí)的構(gòu)造,他們得到的卻與此處的相同。 請(qǐng)注意,我最終只寫了一行代碼(第 21 行)。

現(xiàn)在注意以下幾點(diǎn):在第 21 行本身,實(shí)際上是唯一要執(zhí)行的行,赫茲量化需要進(jìn)行顯式類型轉(zhuǎn)換。 這對(duì)于編譯器理解它,并正確生成相應(yīng)的最終代碼是必要的。 但是為什么顯式轉(zhuǎn)換如此重要? 原因在于編譯器。 這對(duì)處理器來(lái)說(shuō)并不重要,因?yàn)槲覀冎皇褂脭?shù)字,而這才是處理器實(shí)際看到的。 處理器對(duì)類型不感興趣,它只是觀察數(shù)字。 但是第 21 行的第二個(gè)參數(shù),盡管是一個(gè)數(shù)值,并不完全是 ChartSetInteger 函數(shù)所期望的。 此函數(shù)需要某種類型,而不是數(shù)值。 即使該值表示預(yù)期的類型,即該值正是我們使用的常量,編譯器也會(huì)將其視為錯(cuò)誤。 因此,為了解決此問題,我們顯式強(qiáng)制將數(shù)值轉(zhuǎn)換為 ChartSetInteger 函數(shù)所需的類型。 因此,編譯器將能夠理解我們傳遞給函數(shù)的數(shù)值類型。


關(guān)于 Python 的一些想法

在完結(jié)我們的訪談之前,親愛的讀者和萌新程序員,我想分享一些最后的想法,這是我多年來(lái)使用各種編程語(yǔ)言獲得的經(jīng)驗(yàn)和知識(shí)的結(jié)晶。 我的目的是避免將來(lái)嘗試在赫茲量化中執(zhí)行某些操作時(shí)可能出現(xiàn)的任何挫折。

雖然我們的主要主題是 MQL5,但經(jīng)常被問到以下問題:是否要學(xué)習(xí) Python。 特別是對(duì)于那些開始學(xué)習(xí)編程,以便在金融市場(chǎng)上進(jìn)行交易的人來(lái)說(shuō),問題出現(xiàn)了,是否值得加深他們對(duì) Python 的了解,如此才能在 赫茲量化上操作。 這個(gè)問題非常相關(guān),因?yàn)閷W(xué)習(xí) Python 比經(jīng)歷學(xué)習(xí) C 然后C++,最后為 MQL5 的專業(yè)工作打下堅(jiān)實(shí)和鞏固的基礎(chǔ)要容易得多,也快得多。 不過(guò),有一點(diǎn)要記住,這樣您就不會(huì)認(rèn)為自己浪費(fèi)了學(xué)習(xí)(或不學(xué)習(xí))Python 的時(shí)間。

Python 編程語(yǔ)言(盡管有些人更喜歡將其稱為腳本語(yǔ)言)無(wú)法與 MQL5 中可以完成的功能相提并論 — 也許這就是為什么有些人不把它當(dāng)成是一種編程語(yǔ)言,但我們不會(huì)在這里進(jìn)行這場(chǎng)辯論。 如果您的目標(biāo)是學(xué)習(xí)并能夠生成代碼,只是為了以純數(shù)學(xué)方式測(cè)試、驗(yàn)證和分析某些內(nèi)容,那么最短、最簡(jiǎn)單的解決方案就是學(xué)習(xí) Python。 這是因?yàn)樵?Python 中運(yùn)行回測(cè)等操作,能直接與赫茲量化交互,這比嘗試使用 MQL5 執(zhí)行相同操作更容易。

對(duì)某些人來(lái)說(shuō),這似乎很奇怪,但通過(guò)一些培訓(xùn)和大量的奉獻(xiàn)精神,您可以輕松創(chuàng)建一個(gè) Python 腳本,該腳本能夠與擁有更多經(jīng)驗(yàn)的程序員利用 MQL5 執(zhí)行的操作相同。 很多時(shí)候,程序員除了必須配置策略測(cè)試器之外,還必須創(chuàng)建指標(biāo),即智能系統(tǒng),以便驗(yàn)證給定的操作系統(tǒng),即所謂的 SETUP,是否有利可圖。 更不用提由于沒有正確設(shè)置所有內(nèi)容,而令一切處于危險(xiǎn)之中的風(fēng)險(xiǎn)。

有人可能會(huì)認(rèn)為,當(dāng)使用 赫茲量化 時(shí),我們可以訪問圖表,以及精美呈現(xiàn)的結(jié)果,這將令我們更容易分析。 但是,請(qǐng)考慮一下編寫能直接在赫茲量化中執(zhí)行簡(jiǎn)單回測(cè)功能所需的知識(shí)。

使用 Python,您還可用該軟件包訪問赫茲量化數(shù)據(jù)。 借助在 Python 中可以完成的所有操作,可以更輕松地進(jìn)行與 MQL5 程序員相同的研究。 一旦研究完成,您也可以將數(shù)據(jù)導(dǎo)出到 Excel 或其它程序,從而完成 MetaTrader 5 中可以做到的所有圖形表現(xiàn),進(jìn)而更輕松地分析結(jié)果。

我需要在這里添加一些簡(jiǎn)短的解釋。 既然在 Excel 中能夠繪制,為什么用 Python 替代 Excel? 原因很簡(jiǎn)單:鑒于 VBA(Visual Basic for Application)不允許我們直接訪問 赫茲量化的數(shù)據(jù),而通過(guò) Python 則可訪問同一數(shù)據(jù)。 若一定要在 Excel 中執(zhí)行此操作,您需要?jiǎng)?chuàng)建一個(gè) DLL 來(lái)支持這些擦偶哦,或者導(dǎo)出大量 CVS 格式的文件,以便獲取相同的數(shù)據(jù)。

而在 Excel 之內(nèi),您可能需要做更多的工作來(lái)生成在 Python 中完成的所有計(jì)算。 不利的一面是,如果您決定更改數(shù)據(jù)庫(kù),則必須在 Excel 中再次執(zhí)行所有操作。 但如果您使用的是 Python,您所需要做的就是指示 Python 更改數(shù)據(jù)庫(kù),它會(huì)直接提供給赫茲量化,且無(wú)需您付出任何額外的努力。

故此,我的建議是嘗試盡可能多地學(xué)習(xí),因?yàn)槊糠N工具都有其優(yōu)點(diǎn)和缺點(diǎn)。 盡管 Python 非常實(shí)用,但它不允許您創(chuàng)建要在圖表上顯示的指標(biāo)或智能系統(tǒng),從而幫助您進(jìn)行交易。 這只能通過(guò) MQL5 實(shí)現(xiàn)。 因此,這里沒有更好或更差的工具。 它們相輔相成,為不同的目的服務(wù)。 無(wú)論如何,最好兩者都研究,因?yàn)槟肋h(yuǎn)不知道什么時(shí)候需要用到其中之一。


MQL5 — 您也可以成為該語(yǔ)言的大師的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
德安县| 手游| 宕昌县| 巨野县| 连南| 绥芬河市| 普格县| 普宁市| 桐乡市| 丰都县| 合川市| 永福县| 莱阳市| 茌平县| 德州市| 沙雅县| 五华县| 武义县| 女性| 邳州市| 泰来县| 古交市| 盐源县| 泾源县| 兰考县| 道真| 新竹市| 平度市| 湘西| 横峰县| 墨玉县| 静乐县| 安阳市| 泰安市| 桂平市| 海安县| 西乌珠穆沁旗| 永川市| 舒城县| 宜章县| 普洱|