內容目錄
ChatGPT寫MT4程式交易
讀前溫馨提醒:這是一篇充滿程式碼且偏專業的文章喔
在上一篇介紹用ChatGPT寫MT4與MT5的程式交易EA中,
艾比有測試給大家看,
目前ChatGPT只會寫MQL4的語法,而叫它寫MQL5實在是太多錯誤。
所以今天這篇要來試試看ChatGPT能否寫出完整交易策略程式碼的文章,
會全部請它寫MT4的語言。
如果還沒看上一篇文章的小夥伴,記得先去看看喔。
讓ChatGPT寫程式交易策略
雙均線交叉策略
雙均線交叉,黃金交叉買進、死亡交叉賣出,
是艾比EA編寫課堂上的第一堂課,最基礎的EA編寫範例,
教大家如何去取用技術指標。
所以我們這邊也先請ChatGPT來寫看看這支最基礎的交易策略:
如果你有上過艾比的課,取用移動平均線的值是非常簡單的寫法。
但即使你是艾比學員,來看上面這一段程式碼,
應該也會覺得霧煞煞@@
好吧,ChatGPT沒有用最簡單的iMA來直接取均線值,
反而是寫了一個看起來是自己計算來算出移動平均線,
它把30個k棒的收盤價加起來,再去除以30。
(但它寫的for迴圈放入收盤價數值不太正確,但這邊不想考究細節了)
再來看到下單條件的部分,
buy單進場條件是:短均線>長均線 && 短均前一根k棒收盤價<=長均前一根k棒收盤價,
短均前一根k棒收盤價<=長均前一根k棒收盤價???
收盤價都是一樣的啊,
所以用兩個一樣的收盤價做比較,他們一定會是相等的,
所以這個下單條件的公式就會一直成立,然後就會一直下單,
像這樣:
所以在第一關,
讓ChatGPT寫出雙均線交叉的完整策略,看起來是失敗了。
不只是在前半段要去取技術指標值的部分寫得不太好,
後半段下單部分的條件也設定的不對,
所以是一支完全不能直接複製拿來使用的EA喔!不然會下爆你的倉XD
但這邊ChatGPT值得讚許的是,
它在計算均線值那邊自己寫了一個外部計算函數(程式碼中的double GetMA)。
這樣可以自己生成一個外部函數的寫法算是進階的寫法,
尤其是當要寫出很多擴充功能、或客製化功能時,都要寫成外部函數才是比較好利用的方式。
相信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直接生成EA拿來使用,
那有非常大的機率你會被它下爆倉,哈哈哈。
那這邊或許是艾比「詠唱」不夠清楚,
所以決定把條件描述得更清楚一些來試試看:
哦哦,這邊看到了iHighest跟iLowest兩個函數,真是開心,
取區間最高價與最低價的部分沒問題了。
而且還有OrderClose,出場平倉也有寫出來了。
那你把整份程式碼複製貼到MQL4編輯器,然後按編譯,會沒辦法編過。
那這些error其實還好,就只是沒有宣告的問題而已,
我們可以手動幫它寫一下宣告就好。
但如果你是程式小白,連宣告是什麼都不知道,那這邊你就沒辦法使用了。
這次ChatGPT給的答案整體還不錯,
尤其是在下單條件部分使用 ticket < 0;
在平倉條件使用 ticket >= 0,並平倉完再把 ticket = -1,
來去控制場上只會有一張單的狀況,就不會下爆你的倉了。
(空單進場那邊它寫錯了,應該也是要ticket < 0)
但是這支程式碼會有問題是出在「止損價格」,
它把往上突破的buy單止損設定在最高價;往下跌破的sell單止損設定在最低價。
會造成止損設定的離進場價格太近,一進場幾乎馬上就會被止損出場的狀況。
看得出來,雖然整體邏輯還可以,
但整個程式碼中間有許許多多的小問題,
如果你不是懂得mql4的語法的人,大概也是沒辦法解決的。
寫壓縮型態
目前為止看起來,讓ChatGPT寫出能夠直接上的EA還是有點勉強的,
所以我們可以退而求其次,我們只請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;反之。
那在下單的部分,
艾比使用的是跟課程布林通道擠壓的範例一樣,使用雙邊掛單的方式,
也就是行情產生壓縮之後,往哪邊噴出,就會進到該方向的單,同時取消另一邊掛單。
掛單價格放在20根K棒(隨便設定的)的區間高低點。
並與課程範例一樣,使用追蹤止損。
隨手抓個USDJPY從近年2022開始回測,跑出來很可以!
而且只是調整了一下閾值(threshold)的數值而已,完全沒有經過優化。
也有測試了一些其他艾比常用的商品,就普普通通了,不過畢竟沒有優化過。
如果你看到這裡你很興奮,準備馬上拿程式碼直接去使用了,
請先等等。
這個策略程式碼它是從當根K棒(K棒第0根)下去做運算的,
而更穩定的策略會比較建議使用前一根K棒,也就是最新有確定收盤價格開始運算,
如此的回測結果也會更可靠。
所以要使用的同學,建議還是先在這個部分做修改再使用。
後續還可以修改成去看多根K棒的標準差,
如果都連續小於閾值,再符合為擠壓型態也會更make sense,
就像艾比的布林通道也不是只看一根K棒,而是連續看好幾根。
ChatGPT可以生成完整交易程式嗎?
從上面的兩個例子,雙均線交叉與突破範例來看,
要ChatGPT寫出完整EA的目前是不太可能的,
因為這兩個都是很簡單、很基礎的交易策略,但ChatGPT寫起來還是太多錯誤部分。
所以更好的方式是,在上一集文章中提到的,
我們可以請ChatGPT寫功能性的「函數」,來幫助我們更快的寫EA程式。
上一集我們測試ChatGPT寫MT4的函數幾乎可以百戰百勝,沒有錯誤,可以直接拿來使用。
所以目前對於EA的工程師來說,
可以將發想到的部分功能請ChatGPT來寫出來,
再把答案套用回自己熟悉的程式碼版型中,來加快策略開發效率。
因為mql4(與mql5)是專門使用在MT4(與MT5)交易軟體的程式語法,
在世界上與網路上,算是比較小眾的程式語言,
所以ChatGPT在利用網路資料學習時,
自然沒有熱門語言(python、java、c語言等等)來得熟練,
所以給出的答案只能是比較簡單的,而較複雜或長度太長的程式碼就會有錯誤在其中。
但這是因為目前ChatGPT是封閉沒有聯網的,
相信如果在未來不久,ChatGPT可以再次公開的在網路上學習,
這種程式碼答案的錯誤會逐漸被攻克。
如果你有用ChatGPT玩出什麼有趣好笑的對話,
歡迎在下方留給艾比笑一下XD
👇投資自己的腦袋:
您好如何向您領取或學習指標呢
妳好,怎麼領取指標呢?