2023年9月30日 星期六

[網站開發] 新增選擇權Put-Call Ratio整理頁面 (Norn-StockScreener投資網站開發)

最近在思考, 自己的選擇權技能樹還能點哪些, 就注意到Put-Call Ratio (PCR)應該可以研究一下, Put-Call Ratio顧名思義, 就是選擇權put的數量 / call的數量得到的一個比值, 可以藉由這個數字, 來簡易評估市場是偏多還是偏空。 而這個數字又可以分為兩種不同的算法, 分別為:

1. Puts Open Interest / Calls Open Interest (未平倉量)

2. Puts Volume / Calls Volume (成交量)

而這兩種公式算出的PCR又差在哪裡呢, 網路上找到的文章我找到的很多都只介紹其中一邊, 有兩個都介紹的又不太能抓到重點, 所以想說我乾脆直接來問ChatGPT好了XD 


我覺得蠻有道理的, 未平倉合約量代表還沒行權, 所以還未行權的合約數作為到期前市場偏向看多/看空是蠻合理的; 而交易量只有當天有效, 所以只能反應短期的市場走向也合理。當然問歸問也不能全信(畢竟是生成式AI, 有時候會騙人XD), 還是要自行驗證才行。

之後研究了下怎麼拿到PCR這個數據, 如果是大盤指數的話, 是有不少網站提供, 可是我基本上不買大盤只投資股票, 只看大盤指數PCR對我的幫助也不大, 之後想了想沒轍, 還是只能靠自己算了, 就決定寫個爬蟲上Yahoo財經抓所有個股的選擇權資料, 在自己計算PCR, 做好的成果如下:

做好的網頁如下:

https://norn-stockscreener.zmcx16.moe/options-pcr/


Github:

https://github.com/zmcx16/Norn-StockScreener




資料範圍是抓未來一年的所有合約的選擇權未平倉&成交量, 除了上面提到的PCR (OI) & PCR (Vol) 以及所有未平倉&成交量以外, 我特別想知道歷史的變化, 可是YAHOO財經能抓到的只有當下的資料, 所以我沒辦法去比較今天的PCR跟過去的PCR的變化程度, 為了解決這個問題, 就決定開始每天抓新的PCR資料前就把舊的備份下來, 靠著每天的data snapshot, 我就有辦法漸漸累積自己的資料庫, 也就能計算過去PCR的變化了。

目前表格上的PCR變化有week & month, 不過其實我資料目前只累積了一個多禮拜, 所以那個month還是不準的, 要再等三個禮拜才是真的month data XD 

這個變化主要是 (Latest PCR - N days ago PCR) / (N days ago PCR), 所以數值最高可能幾百幾千% (代表PCR爆增, 偏空指數大幅上升), 最低則是-100% (代表最新的PCR = 0, 與其說偏多指數大幅增加, 不如說根本Put沒量了, 一般應該是成交量低的小型股比較有可能)。


在來開始找幾檔個股看看資料吧, 首先如果我們想挑成交量大的公司的話, 可以挑Calls OI排序, 這樣就會依Call未平倉量大小來排序, 可以看到Tslas是第一名(不愧是人氣公司), 而我想關注的只有PCR差異過大的個股, 目前網站是設定成小於0.7為綠色, 大於1.0為紅色, 0.7 - 1.0則為黑色, 用顏色簡單辨識多空, 因為PCR有OI也有Vol算法, 所以我只想看兩個都是小於0.7的個股, 先看前三個有INTC, BABA, PLTR。




看起來目前INTC & PLTR成多頭走勢, BABA則是看起來像在盤整。

再來看看PCR OI & Vol都是大於1.0的, 有NVDA, VALE, PBR:




NVDA因為AI題材大漲後現在像盤整階段, VALE則是目前處在相對低檔盤整, PBR則是持續上漲中, 看起來押注大漲後回檔 & 持續看空下跌的都有, 可是這三檔PCR OI只介於1.0~1.2不是很顯著, 在看一檔PCR OI極高的AAL (2.7):



看起來最近下跌得超厲害, 從PCR OI極高的比率看起來蠻合理的, 而且因為是未平倉量, 代表即使是目前跌成這樣, 還是有不少人持續看空AAL。

看完未平倉/成交量大的公司, 接著來看PCR極端值的情況吧, 首先是PCR極低, 也就是極度偏多的個股, 因為直接用PCR OI排序會有一堆PCR = 0, 沒有puts成交量的個股, 所以我filter先設定Put的未平倉量至少要1000以上, 才能得到比較正常的個股標的:


即便這樣設定還是有不少雞蛋水餃股, 因為股價太低的就是超投機股(也難怪買call的這麼多)所以不考慮, 來看看股價大於10元的MATV:


看起來這半年跌得很慘, 可是如果是這樣, 為什麼PCR OI會這麼高, 來看看Yahoo財經的資料:


原來是明年3/15到期的20元 & 30元行權的call有極大的未平倉量, 換算現在的股價14塊要漲4X%才有機會行權, 可能有大戶看好這間公司未來的發展, 才大量買進遠期Call, 押注公司未來會大漲。 還有另一種可能是, 這個遠期Call其實是更早之前, MATV還沒跌那麼多的時候交易的, 現在放著就是想當成樂透, 凹看看到明年有沒有機會回本也說不定。

至於PCR OI極高的情況其實也跟上面的差不多, 只差在一個是偏多另一個是偏空而已, 大多數PCR會有極端值不是某邊的量趨於0, 就是遠期合約有被大把押注, 就不再舉例說明了。

最後在分享圖表的功能, 因為我有針對每個交易日做snapshot備份資料, 所以也可以畫歷史線圖, 以AAPL為例:


因為目前資料只有一個多禮拜, 所以參考價值不大, 等未來資料豐富以後應該能作為更進一步的投資分析用。


這次分享就差不多到這邊, 其實我對PCR這指標還不是很有想法, 還沒有想到一個系統化使用這個指標的方式, 這部分就慢慢學習慢慢研究了, 共勉之!

2023年9月23日 星期六

[LeetCode] LeetCode解題&自動驗證程式 leetcode-solver-bot-verify-tool

公司30週年時, 盛大的舉辦了一場AI contest, 只要通過預賽的隊伍, 公司就會出錢帶你去日本福岡比決賽, 30週年時比的是AI賽車&撲克牌Hearts (傷心小棧), 那時為了在比賽中得到好名次, 還寫了一個Hearts比賽模擬程式, 可以import客製化的AI程式, 方便快速訓練模型以及驗證自己的AI程式程度如何:

https://github.com/zmcx16/OpenAI-Gym-Hearts


然後過了五年的今天, ChatGPT在今年整個大爆紅, 於是公司又決定舉辦一次AI contest, 這次的預賽項目是coding解題AI, 要寫出一個會解coding problem的AI來比賽, 看誰的正確率最高。

為了這場比賽 & 再去一次福岡, 預賽開賽前第一個想到的, 就是我需要一個驗證程式, 幫助我驗證自己寫出來的coding bot performance如何, 這樣才知道自己每次的修改是不是越改善越好, 畢竟只靠官方的練習次數一天三次實在太少了, 就決定在預賽開賽的前一個週末寫這個驗證程式, 寫好的程式碼如下:

https://github.com/zmcx16/leetcode-solver-bot-verify-tool


使用方法可以參考上面github的README.md, 主要參數如下:



程式其實主要有五個步驟, 每個步驟都可以獨立執行, 可以透過--run-steps來控制:

1. 從資料集生成問題集, 把原始的資料集轉成一個一個question file。

2. 生成solution code, 透過參數-a可以設定你想要拿來測試的coding bot, 如果是用這個repo預設的bot, 記得要先在./leetcode_solver_bot/default_chatgpt_bot.py裡填上自己的OPENAI_API_KEY。

3. 取得LeetCode的cookies & csrf token, 因為要請LeetCode backend幫我們做解答的驗證, 所以需要account才能上傳生成的solution code, 設定0就會自行讀取既有的cookie檔案, 設成1就會用selenium開啟firefox自動login LeetCode網站來取得cookies & csrf token。

4. 驗證答案, 會上傳solution code到LeetCode backend等驗證結果並儲存, 儲存後的檔案會是LeetCode網站回傳的驗證結果:


5. 計算統計結果, 會分別儲存完整版score_readable.json以及精簡版score_summary_readable.json:



除了當次的驗證結果, 也可以分別跑兩組不同的coding bot作為實驗組&對照組, 然後再用verify_calc_score_p_value.py計算p-value, 驗證是否這次的修改有顯著性, 而不是運氣好才碰巧剛好分數高:



這次sharing差不多就到這邊, 這次的AI大賽預賽也過一半了, 希望一切順利~。