Codex+GPT-5.5:可能是開發量化策略的最佳組合之一
整理版優先睇
選對AI工具,一句話救返成個回測:Codex+GPT-5.5點樣秒殺bug
作者貓哥係AI量化開發者,佢想將聚寬版本嘅高股息策略改為ptrade版本,點知回測結果完全錯曬。佢發現選出嚟嘅股票股息率低得唔合理,明明市場上有好多高股息股票好似長江電力,股息率有成3%以上,但策略揀出嚟嘅全部都低過1%。
作者用開Claude Code + MiniMax 2.7做主力,但呢次問咗好多次都揾唔到原因。佢換咗Codex + GPT-5.5之後,對方一眼就睇出問題喺to_ratio函數,因為PTrade返嘅股息率係百分點,函數錯誤咁將佢哋除咗100。呢個例子說明咗模型選擇嘅重要性,同埋開發者需要有金融常識先至偵測到呢類邏輯陷阱。
作者深深體會到時間先係最貴嘅資源,與其花時間試錯,不如直接俾錢用最好嘅模型。佢建議量化開發者要兩手準備,唔同任務用唔同工具,同時保持開放態度,不斷試新模型。呢篇文章唔單止分享咗一個bug修復案例,仲提醒大家AI工具嘅取捨會直接影響開發效率。
- Codex+GPT-5.5組合喺定位bug上遠優於Claude Code+MiniMax,一句話就睇穿問題。
- 遇複雜問題應直接使用最先進模型,減少試錯時間,時間成本先係最大成本。
- 唔同AI工具對數據口徑嘅理解差異可能導致排查方向錯誤,要留意底層假設。
- 開發者需要有金融常識先發現AI代碼中嘅隱藏錯誤,否則照跟都係死。
- 量化策略開發應該兩手抓:文檔自動化用平價模型,策略開發用頂級模型。
高股息策略改版竟然翻車
作者嘗試將聚寬版本嘅高股息策略改為ptrade版本,本來以為好易,點知回測結果完全對唔上。
回測結果完全對唔上
佢印咗好多日誌,發現選出嚟嘅股票股息率低得唔正常,全部低過1%。
股息率低得唔正常
- 先篩選財務指標(ROE > 0、淨利潤增速 > 0、經營現金流 > 0)
- 再要求三期股息率都大於0(本期、一年前、兩年前)
- 每個行業選股息率最高嘅1只,最後各行業彙總排序
查咗好耐都揾唔到原因,換個模型即刻搞掂
作者最初用Claude Code + MiniMax 2.7排查,AI畀咗三個方向,但全部冇命中。
Claude Code + MiniMax 2.7
- 1 方向1:三期股息率篩選問題,但驗證後數據齊全
- 2 方向2:query_date導致數據差異,但唔會令3.4%變做低於1%
- 3 方向3:行業映射問題,但長江電力行業歸屬正常
作者決定轉用Codex + GPT-5.5,將策略代碼同排查文檔一齊俾佢睇。
Codex + GPT-5.5
就咁一句話,直接命中。
原來係單位轉換嘅陷阱
問題出喺to_ratio()函數,佢將大過1嘅數值除以100,但PTrade返回嘅股息率本來就係百分點,唔需要再除。
def to_ratio(value):
if pd.isnull(value):
return 0.0
if isinstance(value, str):
value = value.replace("%", "").strip()
try:
number = float(value)
except Exception:
return 0.0
return number / 100.0 if number > 1 else number
例如長江電力股息率3.40%,函數見到3.40>1,就除100變成0.034%,結果輸畀低股息股票。
3.40%被錯誤壓成0.034%
最後AI直接修復咗bug,重新回測後走勢接近返聚寬版本。
時間先係最貴嘅資源
作者反思之前冇將「花20刀用最好模型」呢個建議放心上,今次親身經歷話佢知,驗證錯誤方向花嘅時間先係最大成本。
驗證錯誤方向花嘅時間先係最大成本
佢打算以後兩手抓:繼續用Claude Code+MiniMax做文檔同自動化,用Codex+GPT-5.5做策略開發同bug修復。
文章仲提到可以用Image2生成模型介紹,同埋策略源代碼已同步知識星球。
Image2模型
近期越來越發覺,喺AI時代嘅量化開發,競爭力唔在於寫code本身,而在於對金融常識嘅理解,唔係嘅話有啲隱藏嘅BUG都發現唔到。
之前出過一個關於高股息策略嘅聚寬版本:
Claude Code 開發100個量化策略:高股息行業均倉策略
琴日開始試下改做ptrade嘅版本。本來以為係件相對容易嘅事,因為策略嘅邏輯唔複雜。
我用嘅係 claude code+minimax2.7 呢個組合,但係改完之後發現回測結果唔啱。整體曲線同聚寬嘅完全對唔上,回測結果更加係差好遠。(只係勉強跑贏指數)
聚寬版本:

ptrade版本:

然後我就開始咗漫長嘅調試旅程,同AI對話咗好幾輪,結果越改越衰,最後乜都冇搞掂。
冇辦法之下換成 codex+gpt5.5(前幾日為咗體驗 Image2模型,怒充plus會員,都係第一次正正經經用),竟然一次成功。今日呢篇文章,貓哥將呢個排查過程完整分享出嚟,順便講下揀AI編程工具呢件事。
一、問題現象:揀出嚟嘅股票股息率"唔對路"
先交代嚇背景。
貓哥寫咗一個高股息選股策略,邏輯唔複雜:
- 1.先篩選財務指標(ROE > 0、淨利潤增速 > 0、經營現金流 > 0)
- 2..再要求三期股息率都大過0(本期、一年前、兩年前)
- 3.每個行業揀股息率最高嘅1隻,最後各行業匯總排序
照計聚寬嘅code都寫好咗,改做ptrade應該冇咁難,回測結果就算有啲差異,都唔會太大,結果都係炒車。於是貓哥print咗好多日誌,逐個去睇問題,見到揀出嚟嘅股票大概係咁樣:

見到呢度,一般人可能覺得好正常。但貓哥當時就覺得唔對路——呢啲股息率太低啦。
二、異常直覺:高股息股票點解冇入選?
點解話唔對路?因為貓哥知道,市場上有一大批股票嘅股息率明顯高啲,例如長江電力,股息率平均應該係3%左右,而上面嘅日誌入面竟然都冇超過1%嘅,咁都可以叫高股息?
於是用ptrade嘅研究板塊直接拎咗對應數據,先睇嚇係咪滿足財務篩選嗰幾個條件(ROE > 0、淨利潤增速 > 0、經營現金流 > 0),可以見到係滿足嘅:

然後睇嚇最近三年嘅股息率係幾多,可以見到長江電力平均應該係3個幾點嘅股息率:

長江電力3%以上嘅股息率,比揀出嚟嘅股票高咗3倍幾,點解冇被揀中?
按照策略邏輯,每個行業揀股息率最高嘅股票。長江電力屬於電力行業,如果行業入面有其他股票股息率比3.4%仲高,咁長江電力冇被揀中都仲可以解釋。
但問題係——揀出嚟嘅10隻股票股息率都低過1%,即係話每個行業嘅"股息率冠軍"都低過1%。
換句話講:長江電力俾某個條件filter咗走,否則佢至少應該出現喺候選名單入面。
呢個直覺後來證實係啱嘅,但具體點解會俾人filter走,一定係code邊度出咗問題。
三、第一輪排查
貓哥第一個反應係問AI。
先用 Claude Code + MiniMax 2.7 開始排查,呢個都係我目前嘅主力AI工具,速度快而且量大管飽,code質量都好強。但呢個組合問咗好幾輪,AI畀出嘅排查方向大概係咁:
方向1:三期股息率篩選問題
策略要求"本期、一年前、兩年前"三期股息率都大過0。
AI懷疑:長江電力喺query_date嗰日,可能某期股息率數據係0或者係空,導致俾篩選條件 all(axis=1) filter走。
呢個方向聽起嚟合理,但驗證之後發現,長江電力嘅三期股息率數據都係有嘅。
方向2:query_date導致嘅數據差異
策略用嘅係上一個交易日(例如20260331)嘅數據,而貓哥手動測試用嘅係20260425。
AI懷疑:唔同日期嘅股息率數據可能差異好大。
呢個都有可能,但就算數據有差異,都唔會令到3.4%變成遠低過1%嘅結果。
方向3:行業映射問題
AI懷疑:長江電力可能唔喺申萬電力行業嘅成分股列表入面,導致冇行業歸屬,俾 dropna(subset=["industry"]) filter走。
呢個方向都有可能,但驗證之後發現,長江電力嘅行業歸屬係正常嘅。
總結:問咗好幾輪,畀咗3個方向,冇一個中。後面隨住上下文增多,回答質量都開始下降,已經唔指望可以直接解決。
四、轉機
貓哥決定換個模型試試。作為AI編程愛好者,一直以嚟都想試下Codex,而且啱啱最近openai更新咗 Image2同GPT5.5呢兩個重磅模型,所以整咗個帳號試試。為咗交代好上下文,叫AI將頭先嘅對話,先保存做排查文檔,然後將策略code同排查文檔一齊掉俾 Codex + GPT-5.5。
GPT-5.5望咗一眼code,直接講咗一句嘢:
「問題喺to_ratio函數,股息率3.4%俾人除以100壓成咗0.034%」
就係咁一句嘢,直接命中。

五、根因解析:單位轉換嘅"陷阱"
而家嚟解釋嚇,究竟發生咗咩事。
原本code入面有個 to_ratio() 函數,大概係咁樣:
def to_ratio(value):
if pd.isnull(value):
return0.0
ifisinstance(value, str):
value = value.replace("%", "").strip()
try:
number = float(value)
except Exception:
return0.0
return number / 100.0if number > 1else number
呢段code嘅邏輯係:如果數值大過1,就除以100。(作為Vibe Coding嘅擁躉,當時我都只係大概睇咗眼code,真係冇留意有個咁大嘅伏位,當然呢個都怪我冇同AI提供清晰嘅ptrade數據規範)
設計者原本嘅假設係:
6.21 代表 621% 或者 6.21 倍,需要除以100,變成 0.0621 0.53 代表 0.53%,唔使處理
但PTrade實際返回嘅口徑係"百分數點":
3.40 表示 3.40%,本來就唔需要再除以100 6.21 表示 6.21%,本來就唔需要再除以100
即係話,PTrade返回嘅股息率3.40就係3.40%,唔係3.40倍。
但code入面嘅 to_ratio() 函數,見到3.40 > 1,就自動除咗100,例如:
| 股票 | PTrade返回值 | 實際含義 | to_ratio()處理後 | 處理後嘅含義 |
| 股票A | 3.40 | 3.40% | 0.034 | 0.034% |
| 股票B | 6.21 | 6.21% | 0.0621 | 0.0621% |
| 股票C | 0.94 | 0.94% | 0.94 | 0.94% |
問題就係出喺呢度。
長江電力3.4%嘅股息率,俾人錯誤咁壓成咗0.034%。
排序嘅時候,0.034% < 0.94%,自然就輸畀咗啲本來得0.8%-0.9%嘅低股息股票。
魔幻嗎?但呢個就係事實。
最後AI直接修復咗BUG,重新跑咗嚇回測,雖然結果仲有差異(Ptrade回測機制同數據口徑差異),但整體走勢已經好接近:

六、反思:時間先至係最貴嘅資源
之前數字生命卡茲克分享咗用AI嘅九個心得:
其中第一個心得就係:花20刀,去用世界上最好嘅模型。
當時我個心其實冇當一回事,因為覺得而家用緊嘅各種Coding Plan,量大管飽,已經滿足到自己嘅使用需求,畢竟自己只係用嚟寫嚇量化策略,做嚇自動化腳本,就算遇到難嘅問題,多進行幾輪對話,都可以得到比較滿意嘅結果。
但今日呢件事令到自己有咗新嘅理解,喺驗證錯誤方向上面花嘅時間,先至係最大嘅成本。
所以未來打算兩邊兼顧,一方面繼續用 claude code+minimax2.7,主要做量化策略學習、文檔撰寫、自動化工作流等等,特別係我嘅openclaw,依然大量用 minimax2.7,非常好用;另一方面,用 codex+gpt5.5做量化策略開發、code審查、BUG修復、圖片生成等等,作為主力編程Agent。
用 Image2 隨手生成一個模型介紹:

關於Codex,我自己係用客戶端(windows同mac都有),覺得都幾方便,具體點樣安裝同用可以問嚇豆包:

當然,呢個只係貓哥目前嘅個人感受,AI模型更新好快,今日嘅最優解可能下星期就唔係喇。保持開放嘅心態,持續嘗試,先至係最重要嘅。
想開通Ptrade、QMT等量化工具嘅朋友可以喺主頁聯絡我,備註“量化開户”
推薦閲讀:
PS:策略源代碼已同步知識星球,歡迎一齊交流~

近期越來越體會到,在AI時代下的量化開發,競爭力不在於寫代碼本身,而在於對金融常識的理解,不然有一些隱藏的BUG都無法發現。
之前發過一個有關高股息策略的聚寬版本:
Claude Code 開發100個量化策略:高股息行業均倉策略
昨天開始嘗試修改為ptrade的版本。本來以為是一件相對容易的事情,因為策略的邏輯並不複雜。
我使用的 claude code+minimax2.7 這個組合,但是改完之後發現回測結果不對。整體曲線和聚寬的一點都對不上,回測結果更是差了老遠。(僅勉強跑贏指數)
聚寬版本:

ptrade版本:

然後我就開始了漫長的調試之旅,跟AI對話了好幾輪,結果越改越糟,最終卻一無所獲。
迫不得已換成 codex+gpt5.5(前幾天為了體驗 Image2模型,怒充plus會員,也是第一次正兒八經用),居然一次成功。今天這篇文章,貓哥把這個排查過程完整分享出來,順便聊聊選AI編程工具這件事兒。
一、問題現象:選出的股票股息率"不對勁"
先交代一下背景。
貓哥寫了一個高股息選股策略,邏輯不復雜:
- 1.先篩選財務指標(ROE > 0、淨利潤增速 > 0、經營現金流 > 0)
- 2..再要求三期股息率都大於0(本期、一年前、兩年前)
- 3.每個行業選股息率最高的1只,最後各行業彙總排序
按理說聚寬的代碼都寫好了,改成ptrade應該沒那麼難,回測結果即使有些差異,也不會太大,結果還是翻車了。於是貓哥打印了很多日誌,挨個去查看問題,看到選出來的股票大概是這個樣子:

看到這兒,一般可能覺得挺正常。但貓哥當時就覺得不對勁——這些股息率也太低了吧。
二、異常直覺:高股息股票為什麼沒入選?
為什麼說不對勁?因為貓哥知道,市場上有一大批股票的股息率明顯更高,例如長江電力,股息率平均應該是3%左右,而上述日誌中居然都沒有超過1%的,那能叫高股息嗎?
於是使用ptrade的研究板塊直接獲取了對應數據,先看看是否滿足財務篩選的那幾個條件(ROE > 0、淨利潤增速 > 0、經營現金流 > 0),可以看到是滿足的:

然後看一下最近三年的股息率是多少,可以看到長江電力平均應該是3個多點的股息率:

長江電力3%以上的股息率,比選出來的股票高了3倍多,為什麼沒被選上?
按照策略邏輯,每個行業選股息率最高的股票。長江電力屬於電力行業,如果行業內有其他股票股息率比3.4%還高,那長江電力沒選上還能解釋。
但問題是——選出來的10只股票股息率都低於1%,這意味着每個行業的"股息率冠軍"都低於1%。
換句話說:長江電力被某個條件過濾掉了,否則它至少應該出現在候選列表裏。
這個直覺後來被證明是對的,但具體為什麼被過濾掉了,一定是代碼哪裏出了問題。
三、第一輪排查
貓哥第一反應是問AI。
先用 Claude Code + MiniMax 2.7 開始排查,這也是我目前的主力AI工具,速度快且量大管飽,代碼質量也很強。但這個組合問了好幾輪,AI給出的排查方向大概是這樣的:
方向1:三期股息率篩選問題
策略要求"本期、一年前、兩年前"三期股息率都大於0。
AI懷疑:長江電力在query_date那天,可能某期股息率數據為0或為空,導致被篩選條件 all(axis=1) 過濾掉。
這個方向聽起來合理,但驗證後發現,長江電力的三期股息率數據都是有的。
方向2:query_date導致的數據差異
策略用的是上一個交易日(比如20260331)的數據,而貓哥手動測試用的是20260425。
AI懷疑:不同日期的股息率數據可能差異很大。
這個也有可能,但即使數據有差異,也不會導致3.4%變成遠低於1%的結果。
方向3:行業映射問題
AI懷疑:長江電力可能不在申萬電力行業的成分股列表裏,導致沒有行業歸屬,被 dropna(subset=["industry"]) 過濾掉。
這個方向也有可能,但驗證後發現,長江電力的行業歸屬是正常的。
總結:問了好幾輪,給了3個方向,沒一個都沒命中。後面隨着上下文增多,回答質量也開始下降,已經不指望能直接解決了。
四、轉機
貓哥決定換個模型試試。作為AI編程愛好者,一直以來想試試Codex,而且剛好最近openai更新了 Image2和GPT5.5這兩個重磅模型,所以弄了個賬號試試。為了交待好上下文,讓AI將剛才的對話,先保存為排查文檔,然後把策略代碼和排查文檔一起丟給 Codex + GPT-5.5。
GPT-5.5看了一眼代碼,直接說了一句話:
「問題在to_ratio函數,股息率3.4%被除以100壓成了0.034%」
就這麼一句話,直接命中。

五、根因解析:單位轉換的"陷阱"
現在來解釋一下,到底發生了什麼。
原代碼裏有個 to_ratio() 函數,大概是這樣的:
def to_ratio(value):
if pd.isnull(value):
return0.0
ifisinstance(value, str):
value = value.replace("%", "").strip()
try:
number = float(value)
except Exception:
return0.0
return number / 100.0if number > 1else number
這段代碼的邏輯是:如果數值大於1,就除以100。(作為Vibe Coding的擁泵,當時我也只是大概看了一眼代碼,真沒注意有這麼個巨坑,當然這也怪我沒給AI提供清晰的ptrade數據規範)
設計者原本的假設是:
6.21 代表 621% 或者 6.21 倍,需要除以100,變成 0.0621 0.53 代表 0.53%,不需要處理
但PTrade實際返回的口徑是"百分數點":
3.40 表示 3.40%,本來就不需要再除以100 6.21 表示 6.21%,本來就不需要再除以100
也就是說,PTrade返回的股息率3.40就是3.40%,不是3.40倍。
但代碼裏的 to_ratio() 函數,看到3.40 > 1,就自動除了100,例如:
| 股票 | PTrade返回值 | 實際含義 | to_ratio()處理後 | 處理後的含義 |
| 股票A | 3.40 | 3.40% | 0.034 | 0.034% |
| 股票B | 6.21 | 6.21% | 0.0621 | 0.0621% |
| 股票C | 0.94 | 0.94% | 0.94 | 0.94% |
問題就出在這兒了。
長江電力3.4%的股息率,被錯誤地壓成了0.034%。
排序的時候,0.034% < 0.94%,自然就輸給了那些本來就只有0.8%-0.9%的低股息股票。
魔幻嗎?但這就是事實。
最後AI直接修復了BUG,重新跑了一下回測,雖然結果仍有差異(Ptrade回測機制和數據口徑差異),但整體走勢已經很接近了:

六、反思:時間才是最貴的資源
之前數字生命卡茲克分享了使用AI的九個心得:
其中第一個心得就是:花20刀,去用世界上最好的模型。
當時我心裏其實是沒有當回事的,因為覺得目前用的各種Coding Plan,量大管飽,已經滿足自己的使用需求了,畢竟自己只是用來寫寫量化策略,做做自動化腳本,即使遇到難點的問題,多進行幾輪對話,也能得到較為滿意的結果。
但今天這件事讓自己有了新的理解,在驗證錯誤方向上花的時間,才是最大的成本。
所以未來打算兩手抓,一方面繼續使用 claude code+minimax2.7,主要作為量化策略學習、文檔撰寫、自動化工作流等等,特別是我的openclaw,依舊大量使用 minimax2.7,非常好用;另一方面,使用 codex+gpt5.5作為量化策略開發、代碼審查、BUG修復、圖片生成等等,作為主力編程Agent。
使用 Image2 隨手生成一個模型介紹:

關於Codex,我自己是使用的客戶端(windows和mac都有),感覺還是比較方便的,具體如何安裝和使用可以問問豆包:

當然,這只是貓哥目前的個人感受,AI模型更新很快,今天的最優解可能下週就不是了。保持開放心態,持續嘗試,才是最重要的。
想開通Ptrade、QMT等量化工具的朋友可在主頁聯繫我,備註“量化開户”
推薦閲讀:
PS:策略源代碼已同步知識星球,歡迎一起交流~
