內容目錄
ChatGPT能寫出程式交易嗎?
在ChatGPT系列的前兩集有講到,
目前要使用ChatGPT寫出完整的交易策略EA還是很困難的,
其中的各種錯誤太多,
而程式新手對語法的理解還不深、可能沒辦法解決所有的錯誤。
延伸閱讀:
用ChatGPT自動來寫MT4/MT5的程式交易? EA工程師即將失業?!【ChatGPT第一集】
請ChatGPT寫出完整交易策略,它能寫出更長的MT4程式碼嗎?【ChatGPT第二集】
而艾比在近期的EA教學課程當中,為了要教學員如何使用ChatGPT,
突然領悟到要使用ChatGPT這個工具的正確方式。
透過這樣正確的方式,
我自己只寫了整支EA的1%程式碼,而且是無關緊要的部分;
其他99%都完全靠「出一張嘴」的方式,命令ChatGPT寫出來的。
程式交易員接下來真的可以進入動口不動手、史上最快速寫出EA的境界了。
然後我們就可以更快的去回測到某個交易策略,
去知道一個策略賺不賺錢?能不能使用了。
怎樣才是完整程式交易策略?
首先,我們要先釐清的定義是:
「怎樣的策略才算是『完整的』交易策略?」
那艾比這邊的定義就是:
有「進場+出場」,就是完整的交易策略。
這是最基本的所謂的一個完整交易的兩個步驟:進場與出場,
一個交易不會只有進場沒有出場;或是沒有進場只有出場,
一進一出才能構成完整的交易循環。
那當然交易策略還會包含很多其他的內容,進而變成更完整的交易系統,
例如:
如何設定止損盈利?、如何加減碼?放在什麼商品與時區?
進一步再到策略與策略間的相關性高低?
策略與帳戶之間的資金風險控制、要多大的曝顯?等等…
但以上都不包含在本文的所謂的完整交易策略中,
今天的目標就是使用ChatGPT製作出包含「進場+出場」的EA。
先求有再求好。
ChatGPT寫出完整程式交易
各個擊破法
明確了「進場+出場」的概念之後,我們再去細分EA要包含的內容。
我們不會希望說只有進場+出場,也就是沒理由的進場之後,馬上又沒理由的出場。
所以實際上會是需要:
1.進場條件、2.進場的動作、
3.出場條件、4.出場的動作,以上這四個功能。
我們在這邊更加釐清了每個需要的「小區塊」,
我們接下來要做的就是讓ChatGPT寫出以上四個小區塊的程式碼,
我們再自行把它們組裝在一起。
這個概念是在演算法當中用來解決問題的方式,
英文叫做「divide and conquer」,
顧名思義就是把一個大問題分割成多個較小的子問題,進行分別解決,
最終將子問題的解合併起來得到整個問題的解。
用中文來說,就是「各個擊破」。
而因為小的問題好解決,
如同我們在ChatGPT系列文章中的前兩集有講到:
ChatGPT寫一個簡單函數的正確機率非常高、幾乎可以直接使用。
所以我們就把完整EA拆分成上面提到的四個簡單函數,
就能夠用最高正確機率的ChatGPT答案,進而不用修改什麼的最快速度,
生出完整的程式交易EA。
進場下單
首先,我們先來要求ChatGPT生出進場下單的函數,
並且為了不要一旦符合條件之後,就瘋狂的一直打單進去,
所以給它一個要求限制,
就是場上沒有多單才會進多單;場上沒有空單才會進空單。
然後ChatGPT快速給出了以下函數:
MT4下單的函數OrderSend是一個很簡單的函數,所以不太會有問題,
而且在ChatGPT下方的說明中,還會跟你解釋OrderSend第一個參數是交易品種、第二個參數是交易類型等等…算是還教你一些使用知識。
那在一開始判斷場上有沒有單的時候,它使用了一個函數叫做「MarketPosition()」,
說這個函數可以判斷持倉狀態,
我驚訝了一下,想說竟然還有這樣的函數我不知道嗎?
結果,我把ChatGPT的程式碼貼到編輯器之後按編譯,
哈,根本就沒有這個內建函數、MQL4或MQL5都沒有這個函數喔,
ChatGPT又在一本正經的胡說八道了!
後來google了一下才知道MarketPosition()是Multicharts的語法。
所以這邊就再指定給它說請不要使用MarketPosition(),
請它在重寫一個:
第二次寫出來的程式碼就很好了,
直接貼入編輯器當中,可以直接編譯成功。
細看語法也沒有問題,
就是標準的用迴圈掃描場上、再用OrderSelect來選擇交易單,
如果沒有單,它的自創函數hasPosition就會是false,進而才能夠下單。
所以,在這邊我們請ChatGPT寫出「進場的動作」的任務成功!
多單進場跟空單進場的動作兩個函數都完成!
接下來我們就往下一步,進出場的條件來邁進。
交易條件
這次的交易條件使用的是近期的EA教學實體課當中,
有學員問我的一個寫法,
其實就是著名的K線組合的「酒田戰法」,當中的三連陽。
那對於程式邏輯概念不熟悉的新熟來說,
要學會for迴圈怎麼使用,是要花一些時間理解的,
而艾比其實一直提倡的是程式交易應該著重在交易上面,而不是程式功力多強大。
所以對於你只想把連續三根K棒上漲寫出來的新手,
最快的方式就是一根一根K棒寫收盤價>開盤價即可,也用不了5分鐘。
可是今天我們有了ChatGPT(握拳),寫個迴圈出來只要出一張嘴就可以了~
那就給了咒語,請ChatGPT使用迴圈寫出連續三根K棒收盤價都>開盤價的函數,
這邊沒有特別指定用MQL4,是因為前面有要求過了,它會繼續記得你的需求。
ChatGPT使用for迴圈去算前1~3根K棒的收盤價與開盤價,
如果收盤價>開盤價,記數的count就+1,
所以如果count等於3,就代表連續三根K棒都是上漲的K棒,
此函數就會回傳true、代表成立;否則就會是false。
真的是10秒鐘就完成了多單進場條件的函數,
沒寫到一個程式碼、沒有學怎麼使用for迴圈結構,
就完成了以往新手可能要花好幾天才能學會寫得出來的功能。
ChatGPT的魅力此時真是不可限量。
連續三根K棒上漲作為多單的進場條件,
反過來我們使用連續三根K棒下跌當作空單的條件。
這個很簡單,
我們只要將上面ChatGPT給出的函數當中的「close > open」
改為「close < open」就完事了。
所以在這一趴,我們輕鬆得到了多空單的進場條件,
那出場條件呢?
這支EA我們使用「反向出場」的方式,也就是「多空對翻」,
意思就是連續三根K棒上漲不只是多單的進場,同時也是空單的出場條件;
反之,連續三根K棒下跌是空單進場條件,也是多單的出場條件。
這邊我們就完成了「進場條件」+「出場條件」的設定囉。
出場平倉
最後一個部分,出場的動作,也就是平倉,
基本上咒語跟程式碼的結構都與進場類似。
所以我們這邊直接請他寫多單平倉與空單平倉的函數,
並提醒它不要使用MarketPosition():
ChatGPT只用了幾秒快速地完成,
複製程式碼貼入編輯器編譯,也可以成功通過,沒有error。
基本上編譯沒有問題,就可以進入回測了,
回測時我們才會知道到底實際的「功能」是否能正確執行,
如果回測發現功能有誤、或是跟預期策略動作不同,
會再回來檢查程式碼的細部內容。
在這一部分,我們透過ChatGPT得到了多單與空單出場的動作。
所以我們四個功能的程式碼都有了:
1.進場條件、2.進場的動作、
3.出場條件、4.出場的動作。
接下來就只要把它們組裝起來就形成一隻完整的交易程式EA了。
最後組裝
最後我們回到程式執行區OnTick當中,
使用簡單的if語法,也就是如果…就…的方式來組裝起來我們的所有函數。
如果[連續三根K棒上漲],就執行[進場多單]與[空單平倉];
如果[連續三根K棒下跌],就執行[進場空單]與[多單平倉]。
你沒有看錯,就這樣簡單的兩行,就寫完了我們的EA。
基本上我們就只有寫兩個if而已,
其他的所有功能,都是由ChatGPT產生出來的。
完成EA之後,我們要做的就是去回測看看,
看交易單的進出場,是不是按照我們預想的交易策略在執行?
透過視覺化的複盤顯示,我們可以看到:
多單的進場都是在連續三根K棒上漲,同時空單平倉出場;
然後出場在連續三根K棒下跌時,並同時進場空單,
與艾比一開始要求的交易策略吻合。
那這裡我們只有規定連續三根K棒上漲或下跌,
沒有去限定K棒的身體多長?、上下影線多長?等等…
那這些條件,你只要能夠明確的寫給ChatGPT,讓它寫出來絕不是問題。
ChatGPT正確用法總結
很多人覺得ChatGPT沒有用,是因為一次要它做出從頭到尾的完整事情,
但AI目前還沒有那麼聰明到能夠取代人類,所以許多回答比較鬆散,相對有漏洞。
但絕對是非常好用的「工具」與「幫手」,
我們請AI幫我們生出各個小零件,再由人類去組裝,
就能大幅提升我們的工作效率。
所以要使用「ChatGPT正確用法」的人,
他要能夠知道:「如何把一個大的問題,去切割成一個一個的小問題」,
這件事就會是各個擊破方法的關鍵。
那這樣的能力除了平時自身多訓練自己的獨立思考能力之外,
還有「稍微擁有」某個專業領域的知識,
你可以不用厲害到專業領域中的執行技能,但你必須對該領域「有概念」。
所以老實說,ChatGPT能夠發揮最大效益的是在「半吊子」的身上,
因為專業技能很強的人,他其實不需要ChatGPT的協助就可以做出專業的事情;
完全不懂專業技能的人,也不知道如何正確使用ChatGPT。
而半吊子,他沒有投入很多時間在研究專業,但卻可以受到ChatGPT很大幫助,
就是CP值最高的使用者!
「divide and conquer」
延伸閱讀:
用ChatGPT自動來寫MT4/MT5的程式交易? EA工程師即將失業?!【ChatGPT第一集】
請ChatGPT寫出完整交易策略,它能寫出更長的MT4程式碼嗎?【ChatGPT第二集】
👇投資自己的腦袋:
你好 艾比 請問最後的組裝可以貼出一個完整的樣子做參考嗎
哈囉 有截圖了 參考圖片網址喔
https://i.imgur.com/J7kUOgF.jpg
有收到謝謝 艾比, 想再請教在第三集這篇的內容按照你1.進場條件、2.進場的動作、3.出場條件、4.出場的動作四個動作的代碼去跑回測卻沒有做出開單動作,能用郵件交流我這邊遇到的問題嗎?
你可以檢查看
1.是否有下載歷史價格?
2.回測時的日誌有顯示什麼錯誤訊息?
如果需要貼截圖你可以私訊我的粉絲團或IG喔
你好~艾比,今天試著照這個方式走,但是跳出errors’threeBullishCandles’ – function not defined?不知道是不是有更新還是哪裡有出錯?還有請問~跳出warnings代表這個檔案不完整嗎?
對喔 應該是有一些功能函數沒有寫到
主要是文章中最後組裝那邊 那些函數都要寫出來