請ChatGPT寫出完整交易策略,它能寫出更長的MT4程式碼嗎?【ChatGPT第二集】

ChatGPT寫MT4程式交易

讀前溫馨提醒:這是一篇充滿程式碼且偏專業的文章喔

在上一篇介紹用ChatGPT寫MT4與MT5的程式交易EA中,
艾比有測試給大家看,
目前ChatGPT只會寫MQL4的語法,而叫它寫MQL5實在是太多錯誤。

延伸閱讀:
用ChatGPT自動來寫MT4/MT5的程式交易? EA工程師即將失業?!【ChatGPT第一集】

所以今天這篇要來試試看ChatGPT能否寫出完整交易策略程式碼的文章,
會全部請它寫MT4的語言。

如果還沒看上一篇文章的小夥伴,記得先去看看喔。

 

讓ChatGPT寫程式交易策略

雙均線交叉策略

雙均線交叉,黃金交叉買進、死亡交叉賣出,
是艾比EA編寫課堂上的第一堂課,最基礎的EA編寫範例,
教大家如何去取用技術指標。

所以我們這邊也先請ChatGPT來寫看看這支最基礎的交易策略:

ChatGPT寫雙均線

如果你有上過艾比的課,取用移動平均線的值是非常簡單的寫法。
但即使你是艾比學員,來看上面這一段程式碼,
應該也會覺得霧煞煞@@

好吧,ChatGPT沒有用最簡單的iMA來直接取均線值,
反而是寫了一個看起來是自己計算來算出移動平均線,
它把30個k棒的收盤價加起來,再去除以30。
(但它寫的for迴圈放入收盤價數值不太正確,但這邊不想考究細節了)

再來看到下單條件的部分,
buy單進場條件是:短均線>長均線 && 短均前一根k棒收盤價<=長均前一根k棒收盤價,

短均前一根k棒收盤價<=長均前一根k棒收盤價???

收盤價都是一樣的啊,
所以用兩個一樣的收盤價做比較,他們一定會是相等的,
所以這個下單條件的公式就會一直成立,然後就會一直下單,
像這樣:

ChatGPT寫雙均線 2

所以在第一關,
讓ChatGPT寫出雙均線交叉的完整策略,看起來是失敗了。

不只是在前半段要去取技術指標值的部分寫得不太好,
後半段下單部分的條件也設定的不對,
所以是一支完全不能直接複製拿來使用的EA喔!不然會下爆你的倉XD

但這邊ChatGPT值得讚許的是,
它在計算均線值那邊自己寫了一個外部計算函數(程式碼中的double GetMA)。
這樣可以自己生成一個外部函數的寫法算是進階的寫法,
尤其是當要寫出很多擴充功能、或客製化功能時,都要寫成外部函數才是比較好利用的方式。

相信ChatGPT再經過成長之後,
應該可以寫出很漂亮格式的程式碼。

 

突破策略

接下來我們請ChatGPT寫也是很基礎的突破交易策略,
以下是艾比給的詠唱:

ChatGPT寫突破

如果不懂的人乍看之下可能覺得有模有樣,
但實在是超級多問題的!!

先來講第一個,
一般我們突破是認為是區間突破,
我們可以看到ChatGPT寫的是這一根K棒突破上一根K棒這樣而已…
而且如果是艾比學員應該可以看得出來:
high是當根K棒(第0根);lastHigh是第-1根(0-1根)???
第-1根代表是未來的K棒啊,還沒有畫出來,怎麼會有值呢?(哈哈哈

所以如果去檢查lastHigh的值的話,它會一直都是0,
造成下單條件就會一直成立。

第二個,
它應該是用 ticket == -1 來當作控制場上不要重複下單的功能,
在下完單之後,ticket的值變成單號,就會>0,不會再下單的意思

但這部分也有點亂寫,因為即使下完單之後,
程式碼再次由上往下run時,run到 ticket = -1時.
ticket的值又再次變成-1,又可以再次下單,就也會造成下爆你的倉的狀況。
ChatGPT寫突破 2

第三個問題比較顯而易見,就是沒有「出場」。
所以是一支只會進場,但沒有任何出場的交易策略,就不算是完整的策略。

目前看起來如果你想要用ChatGPT直接生成EA拿來使用,
那有非常大的機率你會被它下爆倉,哈哈哈。

 

那這邊或許是艾比「詠唱」不夠清楚,
所以決定把條件描述得更清楚一些來試試看:

ChatGPT寫突破 6

哦哦,這邊看到了iHighest跟iLowest兩個函數,真是開心,
取區間最高價與最低價的部分沒問題了。
而且還有OrderClose,出場平倉也有寫出來了。

那你把整份程式碼複製貼到MQL4編輯器,然後按編譯,會沒辦法編過。
ChatGPT 突破 8

那這些error其實還好,就只是沒有宣告的問題而已,
我們可以手動幫它寫一下宣告就好。
但如果你是程式小白,連宣告是什麼都不知道,那這邊你就沒辦法使用了。

這次ChatGPT給的答案整體還不錯,
尤其是在下單條件部分使用 ticket < 0;
在平倉條件使用 ticket >= 0,並平倉完再把 ticket = -1,
來去控制場上只會有一張單的狀況,就不會下爆你的倉了。
(空單進場那邊它寫錯了,應該也是要ticket < 0)

但是這支程式碼會有問題是出在「止損價格」,
它把往上突破的buy單止損設定在最高價;往下跌破的sell單止損設定在最低價。
會造成止損設定的離進場價格太近,一進場幾乎馬上就會被止損出場的狀況。

看得出來,雖然整體邏輯還可以,
但整個程式碼中間有許許多多的小問題,
如果你不是懂得mql4的語法的人,大概也是沒辦法解決的。

 

寫壓縮型態

目前為止看起來,讓ChatGPT寫出能夠直接上的EA還是有點勉強的,
所以我們可以退而求其次,我們只請ChatGPT發想一些交易策略的寫法就好,
其他的下單平倉等細節,我們自己寫。

那以下是艾比請ChatGPT寫壓縮型態的策略程式碼:

ChatGPT 壓縮

 

在艾比自己的程式交易課堂上,也有提供壓縮型態的程式碼範例,
那艾比是透過觀察很多個指標,後來覺得使用布林通道最直觀,
我們來看看ChatGPT是如何「定義」壓縮的呢?

首先它在EA啟動前創造出一個陣列,
然後把前100根K棒的收盤價放進去(參數len = 100),
EA開始執行後,每當生成新的K棒時,就會去更新這個陣列,
維持在取前100根K棒的收盤價數值。

mean這個參數就是把這100根K棒的收盤價加起來,再除以100的平均值。

因為艾比的統計學沒有很好,所以中間那段
把每個價格與平均值的差,取平方後加總,再除以100這邊不知道在幹嘛,
但還好ChatGPT寫的程式碼大部分註釋都給得很清楚,它說這邊是在計算「標準差」。

艾比去查了一下標準差的算法,
對,沒錯,就是這樣算的。
最後我們可以看到,ChatGPT把這個標準差去跟一個閾值(threshold)做比較,
如果小於閾值,那就算是壓縮。

聽起來是一個滿 make sense 的交易策略耶!
用到很多數學、統計學,看起來就是高大上。
(其實只是因為艾比數學統計學很弱而已XD)

複製到mql4編輯器之後,
艾比把ChatGPT符合擠壓後是用Print打印在日誌的部分,
改成是一個bool的條件參數,如果擠壓成立,
那「擠壓」參數變成true;反之。

ChatGPT 壓縮2

那在下單的部分,
艾比使用的是跟課程布林通道擠壓的範例一樣,使用雙邊掛單的方式,
也就是行情產生壓縮之後,往哪邊噴出,就會進到該方向的單,同時取消另一邊掛單。
掛單價格放在20根K棒(隨便設定的)的區間高低點。
並與課程範例一樣,使用追蹤止損

ChatGPT 壓縮3

ChatGPT 壓縮4

隨手抓個USDJPY從近年2022開始回測,跑出來很可以!
而且只是調整了一下閾值(threshold)的數值而已,完全沒有經過優化。
也有測試了一些其他艾比常用的商品,就普普通通了,不過畢竟沒有優化過。

 

如果你看到這裡你很興奮,準備馬上拿程式碼直接去使用了,
請先等等。
這個策略程式碼它是從當根K棒(K棒第0根)下去做運算的,
而更穩定的策略會比較建議使用前一根K棒,也就是最新有確定收盤價格開始運算,
如此的回測結果也會更可靠。
所以要使用的同學,建議還是先在這個部分做修改再使用。

後續還可以修改成去看多根K棒的標準差,
如果都連續小於閾值,再符合為擠壓型態也會更make sense,
就像艾比的布林通道也不是只看一根K棒,而是連續看好幾根。

 

ChatGPT可以生成完整交易程式嗎?

從上面的兩個例子,雙均線交叉與突破範例來看,
要ChatGPT寫出完整EA的目前是不太可能的,
因為這兩個都是很簡單、很基礎的交易策略,但ChatGPT寫起來還是太多錯誤部分。

所以更好的方式是,在上一集文章中提到的,
我們可以請ChatGPT寫功能性的「函數」,來幫助我們更快的寫EA程式。

上一集我們測試ChatGPT寫MT4的函數幾乎可以百戰百勝,沒有錯誤,可以直接拿來使用。

延伸閱讀:
用ChatGPT自動來寫MT4/MT5的程式交易? EA工程師即將失業?!【ChatGPT第一集】

所以目前對於EA的工程師來說,
可以將發想到的部分功能請ChatGPT來寫出來,
再把答案套用回自己熟悉的程式碼版型中,來加快策略開發效率。

 

因為mql4(與mql5)是專門使用在MT4(與MT5)交易軟體的程式語法,
在世界上與網路上,算是比較小眾的程式語言,
所以ChatGPT在利用網路資料學習時,
自然沒有熱門語言(python、java、c語言等等)來得熟練,
所以給出的答案只能是比較簡單的,而較複雜或長度太長的程式碼就會有錯誤在其中。

但這是因為目前ChatGPT是封閉沒有聯網的,
相信如果在未來不久,ChatGPT可以再次公開的在網路上學習,
這種程式碼答案的錯誤會逐漸被攻克。

 

如果你有用ChatGPT玩出什麼有趣好笑的對話,
歡迎在下方留給艾比笑一下XD

延伸閱讀:
我找到讓ChatGPT寫出完整程式交易策略的方法了!各個擊破法【ChatGPT第三集】

 

👇投資自己的腦袋:

外匯保證金MT4/MT5新手村全修班(線上課程)

MT4/MT5程式交易(EA)語法撰寫實戰班(兩日實體+線上)

艾比曾經有一段時間對交易很迷茫
因為聽到了一個說法
說做投資交易的人是對社會「沒有貢獻」的

的確

因為靠投資交易賺來的錢
並不是靠勞動或是付出什麼而得到的
而是靠著在市場當中別人的輸錢而得來的

為什麼要做著對世界沒有幫助的事情
「我是不是應該轉行?」
「我是不是應該去找一份能對社會有貢獻的職業?」

在那段時間艾比一直在思考交易的意義
面對跟交易有關的一切事情
都快樂不起來
因為我覺得自己竟然成為了一個「沒用的人」

後來在一本書當中
學習到了金融的本質,也了解到了金融的意義

--------

人都會生老死,因此有了和其他人做跨期交換的需求
➡金融的本質就是「價值的跨期交換」

人活著的基本行為是在做👉「規避風險」

從東西方早期的文化可以看出規避風險的兩個極端

【東方-儒家文化】

使用「人」當作規避風險的手段
「養兒防老」是儒家文化的出發點

重男輕女
因為男生娶老婆進門,才會是自己家的人
為這個家能夠付出勞力,長輩老了之後照顧長輩

家族婚姻
兒女沒有自由選擇婚姻的權利
因為情感的自由遠不及家族的利益來得重要

傳統社會沒有個人自由 → 自由選擇和養兒防老是不相容的

一個社會越是以「人」為金融、避險工具
就越依戀血緣這種原始因素

【西方-資本主義】

金融市場發達、有豐富的金融工具
透過保險、投資等規劃
不需用養兒防老當作生老病死風險的唯一安排

👉人們可以更自由的安排想要的生活方式

(在中國受儒家文化影響越深的地區,買保險的人口比就越低)

相較於華人重視血緣、傳子不傳賢
歐美更多願意領養小孩
在政府與公司等也能夠讓真正有能力的人來做事

--------

艾比以前剛踏入交易市場時
跟大部分的人一樣
只想要多增加一些收入來讓自己的生活過得更好

但後來開始開設課程收學生
全部的生活都是跟交易相關的
專職從事這些工作

讓我開始思考在賺錢之外,做這些事情的意義

開始去了解為什麼世界會發展出金融?
金融市場帶給世界的幫助又是什麼?

從早期發展出的證券市場
到期貨、選擇權這些衍伸性金融商品
股市、房市、匯市等等
不只是投資者在其中可以獲取財富
而都是有其存在的價值與意義的

理解了之後
艾比對於交易是對社會「沒有貢獻」的這個觀念
就徹底改觀了

這本書是「**耶魯最受歡迎的金融通識課**」
作者陳志武是耶魯大學管理學院金融學教授
雖然是中國湖南人
但對於東西方金融市場分析的非常精闢在理

是一本艾比非常推薦、值得一讀的好書

💬IG留言「金融」
艾比就私訊送給你超過萬字的讀書心得整理
看完覺得收穫滿滿

讓你即使沒有時間看完整本
也可以快速吸收到精華喔

🔔關注@mt4mt5 學習更多交易知識
艾比曾經有一段時間對交易很迷茫 因為聽到了一個說法 說做投資交易的人是對社會「沒有貢獻」的 的確 因為靠投資交易賺來的錢 並不是靠勞動或是付出什麼而得到的 而是靠著在市場當中別人的輸錢而得來的 為什麼要做著對世界沒有幫助的事情 「我是不是應該轉行?」 「我是不是應該去找一份能對社會有貢獻的職業?」 在那段時間艾比一直在思考交易的意義 面對跟交易有關的一切事情 都快樂不起來 因為我覺得自己竟然成為了一個「沒用的人」 後來在一本書當中 學習到了金融的本質,也了解到了金融的意義 -------- 人都會生老死,因此有了和其他人做跨期交換的需求 ➡金融的本質就是「價值的跨期交換」 人活著的基本行為是在做👉「規避風險」 從東西方早期的文化可以看出規避風險的兩個極端 【東方-儒家文化】 使用「人」當作規避風險的手段 「養兒防老」是儒家文化的出發點 重男輕女 因為男生娶老婆進門,才會是自己家的人 為這個家能夠付出勞力,長輩老了之後照顧長輩 家族婚姻 兒女沒有自由選擇婚姻的權利 因為情感的自由遠不及家族的利益來得重要 傳統社會沒有個人自由 → 自由選擇和養兒防老是不相容的 一個社會越是以「人」為金融、避險工具 就越依戀血緣這種原始因素 【西方-資本主義】 金融市場發達、有豐富的金融工具 透過保險、投資等規劃 不需用養兒防老當作生老病死風險的唯一安排 👉人們可以更自由的安排想要的生活方式 (在中國受儒家文化影響越深的地區,買保險的人口比就越低) 相較於華人重視血緣、傳子不傳賢 歐美更多願意領養小孩 在政府與公司等也能夠讓真正有能力的人來做事 -------- 艾比以前剛踏入交易市場時 跟大部分的人一樣 只想要多增加一些收入來讓自己的生活過得更好 但後來開始開設課程收學生 全部的生活都是跟交易相關的 專職從事這些工作 讓我開始思考在賺錢之外,做這些事情的意義 開始去了解為什麼世界會發展出金融? 金融市場帶給世界的幫助又是什麼? 從早期發展出的證券市場 到期貨、選擇權這些衍伸性金融商品 股市、房市、匯市等等 不只是投資者在其中可以獲取財富 而都是有其存在的價值與意義的 理解了之後 艾比對於交易是對社會「沒有貢獻」的這個觀念 就徹底改觀了 這本書是「**耶魯最受歡迎的金融通識課**」 作者陳志武是耶魯大學管理學院金融學教授 雖然是中國湖南人 但對於東西方金融市場分析的非常精闢在理 是一本艾比非常推薦、值得一讀的好書 💬IG留言「金融」 艾比就私訊送給你超過萬字的讀書心得整理 看完覺得收穫滿滿 讓你即使沒有時間看完整本 也可以快速吸收到精華喔 🔔關注@mt4mt5 學習更多交易知識

2 thoughts on “請ChatGPT寫出完整交易策略,它能寫出更長的MT4程式碼嗎?【ChatGPT第二集】

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *