2021年11月5日 星期五

Deep Learning|用Python進行深度學習的基礎理論實作

 

Deep Learning|用Python進行深度學習的基礎理論實作(Deep Learning from Scratch,Saito kouki)

     "Deep Learning",看到這個書名,可能衍生許多不同的想法,主要是深度學習範圍太大,有Ian Goodfellow 那本全範圍式的大部在前,又有各種套件如Tensorflow,Keras等為主體發展出的其他著作,這一本比起來範圍鎖定的較小,簡單說就是用一個範例,辨識手寫數字圖卡0~9的範例,來說明神經網路,神經網路的學習,與卷積神經網路的概念,同時佐以相關的Python程式碼,讓讀者透過一個例子的施作,來理解深度學習中的重要觀念與課題.

     這一本對我而言很剛好,接續的是前面"Python演算法交易",那本的目的是建立整個交易系統,但對於深度學習與機器學習的交易系統只是提出一個簡單的例子與概念,即使當時我以台指期歷史資料餵進去,能夠在SVM等簡單系統下算出粗略的效用,但那終究不是我考慮Python來寫交易系統的原因,因為早就有既有軟體能夠提供這項功能,不需要自己從頭造工具.要使用Python就是為了深度學習的功能,不管是使用Tensorflow,Karas,或是如日本作者齋藤康毅寫的這本書.本書的特點就是城市碼清楚,簡易,從步驟中理解深度學習,比起死記更容易讓人理解,當然前提還是需對Python語法有基本的認識.

     此書所用的是一個手寫數字的資料集mnist dataset,其中有60000筆訓練圖片與10000筆測試圖片,圖片上都是用手寫的0~9的數字,書籍的目的就是如何透過神經網路模式找出能夠正確辨識手寫圖片是哪一個數字的權重參數的方式,藉由梯度法反覆逼近求解,導入誤差函數的反向傳播法來做為改善權重與權值的學習標準.這些東西其實在講基本的神經網路概念的書籍都會提到,但本書採取了說明,計算圖,與程式碼三方互映,對於理解上提供了相當的助益,且未曾取用當前市面上已發展出的的框架進入程式,單純的以Python中的numpy來發展數值計算的程式碼,對理解基本其實挺有幫助的,不是單純的套模式輸入輸出.基本的概念理解了,再及於其他與學習有關的課題,比如有哪些找出最佳參數的手法,權重參數該如何預設,藉此提高辨識準確度.最後才是與影像辨識相關的卷積神經網路,雖然只是一個駔簡單的說明,但搭上前面的內容,更容易簡單的架構出一個識別模組,並從中理解批次常態化(batch Normalization)學習,Deprout,隨機梯度下降法(SGD,Stochastic gradient sescent)等衍生的觀念,唯一花點時間的就是誤差的反向傳播法,書藉由逐步地計算圖展現,降低了理解上的困難.

    接下來可能要看的就是Chollet的基於keras框下的深度學習或是Aurélien Géron精通機器學習,兩著都有Python程式碼為輔助,應該算是適合的下一步吧,只是可能得花更多的時間.不過並不打算在深度學習開闊的領域中試圖東衝西突的全部嘗試,當下先鎖定CNN,即卷積神經網路為主軸,讓圖形辨識作為當前個人切入的重心,畢竟當初要做這個主要還是要與個人實際的交易系統做配合,讓原來人工的判別法看能不透過CNN轉化成機器判讀.這裡頭還有許多未解之謎,如個人還須研究是否能將每日股價或指數的走勢圖化為類似Mninst手寫辨識資料及那樣的資料型態以利後續處理,想要自己動手做,恐怕那又是另一個小領域了,加上都還沒查到是如何做到那樣的,難度也將提升,只是後面應該就沒有類似本書這樣的逐步解析說明算是清楚的書籍了吧.以上.


2021年11月4日 星期四

定價未來:撼動華爾街的量化金融史

 

定價未來:撼動華爾街的量化金融史(Pricing the Future: Finance, Physics, and the 300-Year Journey to the Black-Scholes Equation,George G. Szpiro)

     在網上看到的短片,對岸國科大的曹則賢老師課堂上問學生,"二元一次方程組的知識點是甚麼"?只見台下一陣沉默,老師微笑了一下便道:"它的知識點就是有兩個方程".此時學生的心理大跟我差不多,要笑不笑的,隱忍不發,心理可能順便暗道"這不廢話嗎?".只聽到老師說"笑什麼",推測應該是有學生忍不住了,"我就知道你們不知道,起碼我沒說前,你們不知道",全世界懂這個知識點的沒幾個,懂得人全都是有相當成就的人.曹老師這樣的推論令人起疑:"懂這個有這麼了不起嗎?",但他隨即舉出一個例子,熱力學第一定律,其中Q1=Q2+W,是第一條方程,這是可以藉由現象觀察推論得出,那如何知道有第二條方程,它又長得怎樣?那個創造出這條方程的人是從卡諾循環的循環為起點思考,思考怎樣的循環會由Q1,Q2,T1,T2構成,於是便產出了Q1/T1-Q2/T2=0的基礎,進而導出的第二條方程,並產生"熵"的觀點.而促成這樣思考的產生,正是這位發現者知道"二元一次方程式需要有兩個方程".短片裡這位老師傳達的除了表現數學與物理間緊密聯繫外,主要是在展現一種精神態度,這世間智力第一梯隊裡的人,即那位寫下熱力學第一定律者是如何從"基本的"哲學,數學邏輯來推論出物理定律的,並不是我們以為的天馬行空.而這樣的精神與這本"定價未來"所傳達的意思應該是一樣的.

     "定價未來"寫的是一種金融商品的發展史.Option,對岸稱為期權,我們則叫選擇權,看的雖是簡體本,但基本上我還是會用本地用語,即選擇權稱它.這商品並不是多數普通交易者經常性的標的,不過它在金融市場上卻很重要.從英文書名來看,其實核心是"Black-Scholes Equation",所謂布萊克-休斯方程式,就是選擇權定價模式,書籍就是以定價模式為核心話說從頭讓讀者知道這方程式如何逐步地被發明出來,所以當然得從選擇權的出現開始一步步的逼近這公式產生的近代期間中,所有關於選擇權實務發展與理論演進上都有怎樣的過程與經歷.因此,這部書雖然是談金融商品史,確實也敘述了它的發展簡史,但其實書有超過一半以上的內容都與金融不太有關係,而是大談物理學與數學裡某些領域的發展歷史.

     那個與金融相關的物理與數學領域是什麼呢?前面在看Yves Hilpisch的"Python演算法交易"中曾經提到其中使用布朗運動模擬股價的程式碼.正是這個布朗運動讓金融商品的價格變動先是與物理學搭上邊,隨後跟著物理學需要對布朗運動做出公理定義,運用了數學形式,然後才逐步由眾人之力搭建而成.眾多的研究者從觀察分子運動裡,想到了在牛頓力學外對於微小分子間的運動可能存在另一種作用關係,而找到了所謂的布朗運動,但是布朗運動究竟是甚麼,以及它如何作用卻是經由相當多人經歷了許多觀測才得出來一個結果.最早它是在1827年由英國植物學家布朗(Robert Brown)用顯微鏡觀察懸浮於水中由花粉所迸裂出之微粒時,發現微粒會呈現不規則狀的運動,而稱它布朗運動.而後經由接續的研究者發現它可能是微小粒子或者顆粒在流體中做的無規則運動,且布朗運動過程是一種常態分布的獨立增量連續隨機過程,它是隨機分析中基本概念.而藉著將這些過程數學化的歷程裡,本書講述了太多與研究此物理現象的科學家的探索歷程,並將他們的成果與看法逐步地引入堆疊搭建出來,從愛因斯坦到朗之萬等物理學家,從百努利到伊藤清等數學家都曾深入研究過它,最終形成了一個隨機微分的形式,也就是我們在前面所寫過的程式碼.但是單如此並不足夠,因為它還沒有與金融發生關係,於是這本書交錯的另一條敘述線便是那些單純的交易人,從原先單純的投機活動裡思考著要如何才能掌握住獲利,或產生必然獲利手段的研究中逐步地找到相應的研究來使用,最終有人發現了價格的變動與布朗運動的相似性,因而也就有了將兩著融合成一門新的領域,也就是為何這本書明明是要導出Black-Scholes Equation的生成意義,但卻花了近400頁的內容,表面上發明這公式的是Fischer Black,Myron Scholes與Robert C. Merton三個人,但實際上,他們也是站在這300年來的許多思想巨人的肩膀上,而這裏頭所有人思考的思考其實都是從最根本的觀察出發,並不是甚麼天馬行空的飛入.

     從大致上的簡述可以發現這不是一本重心圍繞選擇權交易的書籍,雖然它是由鬱金香狂熱等金融危機事件開端,但主要的目的是引入"未來"的觀點,未來成交的商品價格與它的風險所在.鬱金香狂熱形成人們對於未來價值在投資領域懵懂觀念的初記錄.雖然選擇權交易的雛形在十六世紀初已經初成,但是人對於交易商品的價格及影響其變動的原因並不絕對清楚,且這時的遠期交易是究竟投資還是賭博可是依然是法律上的難題.因為鬱金香泡沫破滅而拒絕履約的買家若抱持著就是耍賴不還清前的情況下可能形成的社會動盪問題首次的被機關給重視了.也就是在如此情況下,相關部門劃定了必須履行的合約和有條件履行的合約的規則,這才有了這種商品合法化的可能.而在遠期商品中最重要的就是關於風險的主題,其實就是它未來還能值多少錢,但是比起價格,合法性其實才是一切的根本,要是政府根本不認為它是一種合法性的商品,最終投機客便能藉由賴帳逃掉損失,所以由官方核定的規則與金融商品規格至為要緊,至少在官方的監督下沒有不履行合約的風險,且市場能在官方的助力下蓬勃發展,但這依舊不能消除市場風險.在這之後,遠期合約正式被定義為合法,那麽核心的問題出現了,如果遠期合約是合法的,那所有今天的投入在未來都有價可循,那麽這個價格是什麽?.

    法國人雷格納特是用數學來描述股票交易所運作機制的第一批人,他寫了一本叫做"概率計算和股票交易哲學"的書,書中論述真正的亮點是影響股票漲跌的未必是真實發生的事件,或許只是消息,另一個主張則是股票價格的變化和經過時間的平方根成正比,正是這個懵懂結論讓後續的許多人投入股價走勢的研究.因為這與"布朗運動"被觀察到的分子運動現象類似,所以才有了金融商品價格與物理學有了看似近似的關係.自此無數的超級天才包括愛因斯坦都試圖解答研究的東西竟然都直接或間接的從哲學到物理到生物和化學,數學,與金融學搭上線,也就是我們一開始所講的那種精神現象.

   長期資本管理公司的崩落,俄羅斯的債券危機都讓許多人一度質疑了Black-Scholes Equation的可信度,但本書的作者卻以為正好相反,正是因為這個公式被廣泛地推動使得許多現代科技電腦運算支持的金融交易出現,使得能夠進行的套利機會越發的瞬逝或遭他人搶走,以至於必須在極度微小的利潤間創造過度的槓桿,最終當黑天鵝來臨時,便完全沒有出路可走,而這反而應證了Black-Scholes Equation的可行性與合理性.書的後段完全鎖定在這個布萊克-休斯方程式的解構與解釋上,主要是各家嘗試的測試,實務商品的出現與理論上的差異,而重心放在五個變數的部分,這部分因為是用文字敘述,可能不熟的人會有點暈頭轉向,個人是很早期就花過許多時間看過選擇權的專書,所以反而很快就過了這部分.

   選擇權定價公式確實是幾百年來人類智慧的集大成者,覆蓋了物理,生物,數學以及繼承自古典哲學而來的某些心理學及行為學,開創了數學驅動的經濟學,並且孕育孵化了統計學,機率論學.雖然免不了最傑出的科學家在面對投資與金融風險時會顯得相對天真,但還是這無法抹卻他們在這條路上曾經有過的發現與建樹,至於選擇權他的現代形式可以不同面貿出現,比如2008年的金融風暴裡的CDS就是它的一種形變,付一筆權利金來保險的概念,只是投保的是某些人還不出錢這件事,又比如你閱讀塔雷伯的"反脆弱",其實大多數的觀念都是從選擇權商品所衍生出來的,只是不是浸淫其中者,是很難發現的.還有最後才想起曹澤賢老師所說的熱力學與布朗運動也是有關係的,都是從分子運動開始,所以難怪那些金融物理學的書籍上都是以此為主,如此文科生又頭大了,沒辦法,很多知識都是相通的,只是人類把它與自己分類區隔了.以上.


2021年11月2日 星期二

薩尼卡

 

薩尼卡( САНЬқЯ, Захара Прилепина)

     可悲的並不是人的無知,而是無知中的惡.他越發現其他人看透他的無知,便會變得越兇惡.

    "薩尼卡"是本後蘇聯小說,以上世紀90年代的俄羅斯為背景所發展出來的故事.作者扎哈爾.普里列平,這位作者的作品未曾引進國內,目前僅有簡體譯本,所以對作者是陌生的,不過我google後發現此人曾在2014加入親俄的反烏克蘭政府的叛軍,先任顧問,後擔任某支部隊的副指揮官,從這個舉動大致可以推測出的他的意識形態與國族態度如何,而這與我們從"薩尼卡"所得的感受有相當近似之處,也就不意外為何這薩尼卡的故事要如此發展了.

     "薩尼卡"是這本小說的主角.小說寫的是蘇聯瓦解後,俄羅斯陷入了一段長期的混亂,龐大的國度瓦解,政治依舊陷入專制威權,特務與秘密警察未曾消失,但是西方的市場觀念與自由主義被引進此地,市場經濟開始主導一切,這造成許多人,尤其是年輕的一代,開始離開農村走向城市,人員的流動使得從事傳統農業,工業製造的人生活陷入困境,失業,無助,老一輩的人在這個新時代顯得格格不入,年輕的一代若沒有背景或專業能力也陷入了進退維谷的態勢.因為生活的困頓得不到滿足,不少人的人生觀開始有了變化,失落的年輕人或醉生夢死,酗酒度日,老年人則謹守鄉村慢慢度日準備迎機死亡,這其中只有少數的人,主要是威權政府的高官及與他們相互勾結的寡頭才能聚積財富,在新的生活中輕鬆享樂.而"薩尼卡"在這群失落的年輕人中是一個特別的存在,他隸屬於一個反對政府的黨派"創造者聯盟"的成員,為了反對政府不當的施政,創聯黨經常舉辦群眾聚會,遊行,抗議,示威,,偶爾展現街頭暴力,因此遭到政府的打壓,成員則常遭特務與密警的調查,偵查,刑訊.小說就是寫出了薩尼卡在加入"創造者聯盟"後經歷的一些事情,與奉派執行的任務,最終遭到通緝,而幾位黨派要角陸續遭到調查,毆打後,甚至莫名其妙的死在街角,公園後,創聯黨決定在俄羅斯的幾個城市發動武裝佔領的故事,而在創聯黨為主線的敘事下,普里列平同時以"薩尼卡"的家庭與家人遭遇,主要是父母,祖父母等人經歷過的日子來呈現俄羅斯自20世紀初以來到90年代的政治環境與農村的變化,同時及於個人生活與家庭情況受社會與政治狀態的變化的影響狀態.

    "薩尼卡"是關於上世紀90年代青年人的故事,發生地點是俄羅斯一個外省的小城以及莫斯科.普里列平將對俄羅斯民族命運的關懷化作了一段後蘇聯時空的剪影.小說把那個時代特有的,沈重而充滿悲情的歷史呈現了出來.整本小說散發著作品一種淡淡的悲傷,然後逐漸走向激越的氣氛,文本中充滿對弱勢人的同情,展現出對一段荒謬歷史的反省與貶斥,但又充滿變革現實的各種渴望.小說讓人們又回到上世紀末俄羅斯動盪的年代,看到一群呼喚著"革命"的憤激青年,一個個在漫長黑暗無邊的蕭瑟中踽踽獨行,他們不畏寒冬,不懼強權,高舉著自己燃燒的心,但是燃燒帶來的照亮能持續多久?解體後的俄羅斯如同處在一個狂野淩亂且破碎的風暴中,所有先前的生活秩序都驟然的解體並進行調整.雖然生活的局部依舊充滿日常情境,但因背景變了,各種層面就有了料想不到各種變動可能.

    首先集會遊行成了新的一道風景,這道風景原在蘇聯時期看不到,因此突顯了專制政權與公民社會的巨大落差.從封閉嚴防已屬慣常的警戒到各地的民眾集會,遊行示威,新玩意確實造成一股風潮,但隨著問題的不解,包括經濟與政治,遊行由初始的新鮮喜愛到對頻繁無奈不能解決問題的痛恨,於是遊行雖形式依舊,但內容早已大不相同,市場經濟下的弱勢與受害者人們手捧列寧,史達林畫像,表達著對蘇聯時期的留戀,還有那蓄積已久對於新政府的不滿與憤懣,嚴酷的現實越來越讓人們認識到如果人民的權利得不到尊重,利益得不到保障與落實,那麽以遊行抗議爭取自身權益就是無可置疑的,而小說裡的"革命"之詞就是這種情況下衍生的.而第二種可能的不同,來自環境的變動,小說關於城市與農村生活零散瑣細的描寫道出了後蘇聯的社會性貧困與蕭索.小城裡,流浪漢,無業者四處拾荒,乞討,外地的難民湧入莫斯科,酗酒,嗑藥,與無意義的飆車撞車的事件此起彼伏,透過薩尼卡的回憶與回鄉,這種城市的衰敗蕭索也逐步的傳到了小鎮與偏遠的小村落.在薩尼卡的老家,村子正在 消失,死亡,昔日美麗的河灘像經歷了一場傳染病,如今很不友善的躺在那裏,充滿著麻點和坑窪,畜欄裡再也看不到活物和聞不到糞便的氣味,看不見牲畜的走動,聽不到咀嚼和喘息的聲音,有的只是潮濕和骯髒.困頓迷惘與絕望成了普遍心態,生活呈現出一種可怕又陌生的令人感到恐怖的空虛,酗酒成為男人們消愁的手段.薩尼卡的父親是一個態度平和,不談政治的大學教師,卻因酗酒身亡,兩個叔叔一個因罪酒身亡,另一個酒後鬥毆而死,蕭條的農村,醉落的男人,飆車的青年成了普遍的街景,蘇聯解體後,除了一些不得志得為生活所迫的人外,幾乎沒有人上班,耕作,渾渾噩噩度日才是最好的選擇,這是完全變動的社會價值,它開始為邪惡的主張提供土壤.小說中另一個可見的變動在於,洗去部分專制威權後新的時代裡黨派林立,政治思潮呈現出這是個一充滿變動且多元化時代,"創造聯黨"已經成為在俄羅斯具有廣泛影響力的政治組織.此外,普里列平還塑造了自由主義的別斯列托夫,愛國主義阿爾卡機等人,但思想的失落,意識形態轉型,使得不同的社會群體與人員個體都在以各種方式表達著他們對後蘇聯社會現實的認知,探求著俄國的求變之路,儘管有著這麼許多新的思想,但是對於最貧窮的人來說,社會動亂的恐慌加劇了他們生存處境的悲苦,隨著年齡的增長,他們時常被童年蘇聯時代美好的記憶劫持,加上被越來越重的心理苦悶所襲擊,所以越發地的陷入的無助的悲傷中.成長所伴隨的物質窮困與社會不平令他們絕望,在有關年和親人傷感的回憶中,他們仿佛不再是他們單純的自己,而成了一個社會的觀察者和思索者.

    薩尼卡這個22歲的青年出身貧寒,鄙視金錢,始終感受著貧窮無助,荒誕粗暴生活之鞭的雙重夾擊.他嫉惡如仇,崇尚正義,年輕的生命始終徘徊在理想與迷茫間.這個離經叛道憤激放肆的青年,無處不流 露著自然率真的人生態度,平等對話的人際交往原則,為國為民憂患的人生價值取向.他靠的一種被他稱為革命的正義的衝動.於是,他帶領青年同志參加集會遊行,打砸麥當勞,超市,收集武器,奔赴里加暗殺審法官,最後將曾經是他的好朋友,後來卻在政府部門做官的州長顧問別斯列托夫從樓上扔下,因為在他的心目中後者成了民族的敗類與叛徒.他曾被警察強行劫持,遭到幾乎致命的殘酷毒打,但薩尼卡從不為自己早生的政治激情感到尷尬,因為對他來 說,這從來就不是政治,而是他生命的意義所在.他從來沒有想過要奪取政權,他對權力並不感興趣,不知道該如何使用它.而他宣稱自己沒有思想,也不需要思想,只因他做為一個俄羅斯人,這就是他做這些的所有理由.

  這個故事雖然看似寫了一個充滿浪漫思維的青年革命者,結局亦是在軍隊包圍下的激情狂喜準備衝鋒犧牲的狀態,但是我們可以很明顯的看出,作者普里列平意圖復興"俄羅斯"這個國家,民族的意義,用其作為重新找回社會國家靈魂的主要手段,這些與我們前面所說作者去加入反烏克蘭的叛軍的理由應該是完全一致的.不過另一方面,小說對於這種民族主義或革命手段其實也是充滿疑惑的,畢竟,以俄羅斯之名從這個國家出現起就是他擴張立國穩固政權的主要精神手段,但問題是90年代俄羅斯之窘況並非唯一,這在俄羅斯的歷史裡根本一再重複,因此,作者一面引入俄羅斯,另一面其實也是恐懼它與它的循環.以上.


2021年10月27日 星期三

思維誤判:好球為何判壞球?冠軍總教練真的就是好教練?棒球場上潛藏的行為經濟學

 

思維誤判:好球為何判壞球?冠軍總教練真的就是好教練?棒球場上潛藏的行為經濟學(The Inside Game: Bad Calls, Strange Moves, and What Baseball Behavior Teaches Us About Ourselves,Keith Law)

     家裡的人老家看長壽劇,經過了兩百集,三百集,四百集,這劇似乎都沒有完結的意思,爾偶劇情陷入鬼打牆循環或不知所云連老人都不耐煩時,他雖會抱怨歹戲拖棚順便按一下遙控器看看其他台的戲劇,但最終都會轉回那台,且一定會看到最終完結篇.隨著完結篇的結束,他會發豪語下次不看這台,但沒幾天,他還是又轉回鎖定那台看下一檔長壽劇.

     與老人追劇相關的行為經濟學的議題不少,首先就是沉默成本謬誤,因為已經看了三百集,若沒看到結局就白白浪費那些時間與精力,所以必須再看下去,即使再播到一千集也會看下去,這時不是什麼健康與值得稱道的行為.因為聽不慣配音,看字幕來不及,不熟悉外國演員,所以不想冒險看外來劇,這是維持現狀中的現況偏誤的行為謬誤,也是錨定效應下誤以為電視台將會有所改變致個人不做為的錯誤認知,因為忘記了"歹戲拖棚"的基本率,順著收視率最高的團體迷思效應,與可見得謬誤,以至於長期的習慣於定頻此台,因為一直著麼做,所遺成了習慣.即使偶爾劇情陷入鬼打牆,只要當下有驚人的片段高潮,就能透過現況效應來消除疲態繼續收看,至於電視台因為早已藉此得到利益,甚至是獨佔位置,根本不會在乎這種幾百集的爛劇長期下來對於影視與娛樂環境,收視者的傷害,與暗藏的危機,畢竟這不是它的責任更非義務,即使它也許曾想要改善改變,但它無法確保改變之後,自己是不是仍是第一,所以這種收益與責任義務不對等的代理人行為還是不可能列入它的考慮,加上未來的變化跟現任的經營者利益無關,就是以後環境變了,現在的經營者早就功成退休或離開了,於是長期下來,它們一直是獨佔鰲頭收視營收雙贏,但是在網路串流成為主流後,這種戲劇只能吸引老年人來觀賞,年輕人早就棄守電視專看網路,隨著時代與時間的演進,未來必陷無人看的窘境,只是比起國內其他更早被棄沒人看的電視台而言,它是看起來目前還是風光,只是應該沒有太多時間能讓它繼續保持不變,雖然未來的變化將會極大,但應只有當前領先的這種電視台才能保持對自己的樂觀態度吧,但這其實是一種樂觀偏誤,假象的榮光,畢竟鄰近國家的電視劇都有跨文化與平台入侵的能力,而我國的長壽劇卻完全沒有,連要賣都很難,畢竟若按集數賣,幾百集的劇應該不便宜,但經營者並沒有意識到自己的對手其實已是在海外,而非國內.

    以上是我根據本書"思維偏誤"各章所提的關於行為經濟學的觀點以自身身旁觀察的事務來應用說明,內文看得出其實是有點勉強湊出來的,不過,若有更多時間,應該可以串接的更好,且完全將本書的12章的12個謬誤行為經濟學觀點全用上.這麼特意串連的目的只是要說明這類標明是以行為經濟學為主題所衍生出來的,甚至某些思維是從快思慢想那書而來,然後以棒球範圍的例子來說明不符合理性的行為謬誤的各種現象,不單是可以在經濟或關於"用錢"的事情上而已,甚至與錢無關的事情,如單純的收看電視劇也能用上,這說明對於想理解行為經濟學的人來說,它們不一定存在於棒球上,而是任何一件常見的事物中都可能存在,但讀者要自行理解內容懂得將其擴張運用.其次則是表示,對於Keith Law這從事棒球運營管理工作的人來說,除了現代賽伯計量學大量的運用在棒球技術與經營層面外,剝去數據其實球隊就是個人合的聚集體,行為的互動,與各種競技出現的結果可能是單純的技術問題,也或許管理問題,但其實裏頭更潛藏許多不知所以的觀念認知謬誤再發揮應響力,只是這種行為認知的謬誤是透過不同的角色,如裁判,經紀人,球探,總教練,總裁等去影響球隊的決策,狀態,與經營,如本書所舉的是否要用電子好球帶設備,如何選擇年度最有價值球員,如和評斷總教練的真正功力,或是打線保護效應,強心臟大賽打者的觀念是否正確,高中畢業的投手身心發展未完成不是首輪選秀的好標的,以初始效應與近時效應評估球員的錯誤以致貽誤換人時機,或因為稟賦效應產生損失規避的維持現狀的謬誤讓已經疲累的明星選手繼續投球,誘因不一與不對稱風險所產生生的道德風險,與代理人風險所產生的狂操投手現象,讓領高薪卻已經衰退打補好的明星球員繼續上場的沉沒成本謬誤,與彈力求帶來的樂觀謬誤以至於統計資料失效的問題等等所表現出來行為謬誤帶來的問題.所以這是一本輕鬆地以棒球案例與歷史,紀錄來談行為經濟的書籍,就有興趣看型經濟個案的來說是本有大量對照案例的書籍,可以讓人容易記憶,但對於純粹看棒球書籍的人來說,它也算是一本談許多棒球歷史案例的有趣讀物,儘管許多例子我們可能早就知道了,但也有許多秘辛與比較是從作者的專業身分出發的,頗值一讀,加上內文輕鬆,並不費力.

    當然行為經濟學的問題仍是一樣,它們的例子都能拿來說明問題,卻很難拿來解決問題,有時甚至要發現問題都不容易,何況要找出一個解決的模式更不可能,或許設立電子好球帶是容易的,但是要總教練放棄打者保護效應來排棒次,或是憑印象相信某些球員就是特別能在關鍵時刻打出致命一擊的這些沿襲下來的觀念其實並不容易,至於為什麼這麼難改變,也許就是行為經濟學要更進一步研究的領域,不要覺得總教練那些迷信的行為,或是老人家看劇的行為不合理性又顯得有點愚蠢,已沉沒成本為例,一對情侶若了7年的感情,因為一些小事齟齬或發現些不合處而考慮分手,必然沒有想的這麼容易,這就與老人家看長壽劇是類似的情境,所以千萬癟疑為這些狀態部會發生在自己身上,也別以為這些狀態能像看書一樣都理性的處理面對,事實可能遠非如此.

     我沒有將此書列在經營管理類,一方面是因為本來它運用的範圍就較廣,不是只有在經營企業或經營決策上,另一方面就是成功學的書籍已經越看越少或幾乎沒再碰了,而代之將它放在隨機生涯項下,這是因為隨機性其實可能才是決定許多個案走向真正的背後因素,而不是某些特定的'定見",因此書籍末的第13章中雖然列出的一些棒球經營與決策上經典性的好決策,值得去深思,卻始終不能打破它究竟是因為某些人的決策好,還是只是運氣好的存活者偏差,這是看這類書籍始終必須保持戒慎的.以上.


2021年10月21日 星期四

Python演算法交易

 

Python演算法交易(Python for Algorithmic Trading: From Idea to Cloud Deployment,Yves Hilpisch)

      Hiplisch的書好幾本都是關於用Python來處理金融相關問題的,有些是關於金融模型,另一些是衍生性商品的.而這一本"Python演算法交易"應該是其中單純將焦點聚集在金融交易上的,用最簡單的方式來說,這一本的內容是來協助有興趣者自行開發自動化演算交易系統而寫的.

      開發個人的自動化交易系統,也俗稱程式交易,已經不是新穎的東西,很多人都在做,市面上也有已經成套軟體專門提供給需要者使用,如Multicharts,TradeStation,WeathLab,或是MT等等,因此實際上一般人並沒有必要特地去學Python寫自己的交易系統,那樣太麻煩,畢竟MC,TS等都寫好了除了交易邏輯程式碼以外的東西,以如產生繪圖,圖表,產生回測報告,連接下單機,自動功能等等.一些想要學Python來開發交易系統的人必須先評估自我的需要,其實多數人是沒必要這樣做的,特別是如果你的交易系統就是傳統均線穿越,指標,動量交易,均值回歸等方式,那麼你只要買市面上已有的軟體即可,因為那樣只要隨軟體的需要學習它內建的程式語言即可,這些程式語言通常使以C#,或.Pascal或VBS轉變的Script語言為主,因為這些程式語言的功能與範圍被設計成控制在一定範圍與目標內,所以並不複雜,除錯簡單,有明確簡單的手冊能一目了然,且能快速上手,加上它已經幫使用者開發的功能,其實對程式交易者而言是能被半功倍的好物,並不需要對其排斥.

     即使是用演算法來替代傳統的指標做為程式交易的內在邏輯,以上所述的市售軟體一樣能夠達到功能上的要求.畢竟所謂的演算法沒有限定或獨特的定義範圍,也不存在普遍的意義,在某種程度上,它指的就是以特定形式的演算法為基礎,針對特定的金融投資工具進行交易,而所謂的演算法指的就是以特定順序進行一整套數學上,技術上的操作,以達到特定的目標,所以像簡單的迴歸,方程計算,那些阮堤還是夠用的,只是稍嫌麻煩,但與自行開發要還要設計旁支的許多東西相比,還是買現成的最快.而現在的問題是演算法被引進金融交易的東西越來越多,加上資訊領域中的機器學習與深度學習的發展在電腦運行功能的突破下有了大進展,所以使用以處理大數據為主體功能的軟體來發展新的自動化交易系統必然會有新的進展.這本"Python演算法交易"便是以此為目標將自行開發時需要理解或使用到的部分逐章解釋並以範圍說明.

     這書分成幾部分,首先它針對處理關於系統必須使用的數據型態與來源做處理,這些內容在其他的Python書上應該都有,主要是針對Numpy,Pandas的數據型態與List,Matrix資料處理的對應,並對資料的來源,如是來自外部串流,其他單位提供的資料如何連接,轉換成CSV檔,與建立資料庫進行說明,這些內容只要根據書上這些範圍裡的程式碼鍵入執行過一次,應該就能完全理解了.這幅息完畢之後,作者直接引進了向量回測,並後續以常見的均線穿越,指標追擊,與均值回歸為例做交易系統,個寫下它們的程式碼,並以這各自的系統為主,寫出每個系統的迴測類別.為為每個範例的程式碼都獨立存在,讀者在參照它的邏輯開發出自己的需求的同時,也能夠直接就在自己的系統上Import它們來使用,其實還有投機偷懶的效果.最重要的運用機器學習與深度學習打造程式交易邏輯與回測系統的部分,書上列出了簡單的迴歸,羅吉式迴歸(logistic regression),複回歸還有分類(classification)問題並嘗試以Sklearn,Tensorflow,Keras等深度學習套件來開發預測系統,這部分內容雖不多,但已經足夠提供一個學習的開口,讓初次接觸者知道運用深度學習機器學習在交易上是怎麼一回事.最後作者引入了Oanda,FXSM等現存的交易商提供的看盤下單軟體,嘗試用Python引入這些存在的模組進行下單程式碼的設計,最終與回測系統共同組合成自己開發的自動交易系統.就架構來說已經很完備,但是個別主題的內容太少,有時甚至簡略,想要照本書程式碼一個個案例執行者還要留心有部分的外界連接已經與書中不同,必須自行改動才能讓程式碼執行完全,可能會引起一些無法操作的問題,但整體而言這本書對於有心開發自動交易者算是提供了一個還不錯的概念與架構的書籍,只是不夠詳盡,讀者必須自行研展腦補..

    從閱讀與實際執行本書上的範例程式,我以為有幾個可以有效運用的範圍可以做為有用的延伸,首先是這是本奠基於Python的架構,大數據與其延伸的機器學習與深度學習套件是它必然的重心,我們正可以運用此做為改善過往傳統程式交易方面的缺憾,首先我們以第七章的一個TickSever的程式為例:.

 

import zmq
import math
import time
import random
context = zmq.Context()
socket = context.socket(zmq.PUB)
#socket.bind('tcp://0.0.0.0:5555')(for linux)
scoket.bind('tcp://127.0.0.1:5555') #(for windows)
class InstrumentPrice(object): def __init__(self): self.symbol = 'SYMBOL' self.t = time.time() self.value = 100. self.sigma = 0.4 self.r = 0.01 def simulate_value(self): ''' Generates a new, random stock price. t = time.time() dt = (t - self.t) / (252 * 8 * 60 * 60) dt *= 500 self.t = t self.value *= math.exp((self.r - 0.5 * self.sigma ** 2) * dt + self.sigma * math.sqrt(dt) * random.gauss(0, 1)) return self.value ip = InstrumentPrice() while True: msg = '{} {:.2f}'.format(ip.symbol, ip.simulate_value()) print(msg) socket.send_string(msg) time.sleep(random.random() * 2) 

    這段程式碼很短,主要的功能是將金融商品價格採取模擬布朗運動的尤拉公式的方式來產生隨機的價格資料,程式根據隨機選取的間隔時間,可能是微秒,或幾秒鐘,再根據公式產生成交的tick價格資料,並且將此tcik資料以socket的方式傳播出去.做為對應的socket接收方程式,另有一個TickClietn程式.透過這兩個程式傳播與接收關係就形成模擬一個簡單的交易所搓合交易的server,與客戶端接收交易資訊的電腦間的關係.讀者如果只是單純將這段程式碼複製執行,可能就錯過了它的更大用途,特別是對於期指當沖者來說.要知道這是模擬一個tick資料伺服器,只要不中斷,它能持續不斷的一直生出成交價格,這特性正適合提供線上演算法的需要,畢竟傳統的程式交易系統需要測試時都是採取離線算法,用歷史資料去測試,基本上沒有即時的線上資料可以使用,即使採取真的即時價格資訊做模擬交易,它的可執行次數也是有限的,所以這個TickServer程式是一非常好的工具.以台期指為例,我們可以在此程式碼加上模擬起訖時間限制,即設定從早上的8:45到下午13:45,形成一個交易日的所有成交價格tick與它的成交時間.這樣就有了一個能夠供做測試的模擬日內成交資料,因為有了所有的tick自然可以根據時間的分隔自自動的歸類出1分鐘線,5分鐘線,乃至小時線,所以不論你的資料時間結構需求時怎樣的,tickserver模擬出的資料都能提供使用,而設計者也能以此隨時產生的模擬資料進行線上運算交易系統測試,而不是只用歷史資料.而既然能夠模擬出某一天的tick資料,我們就能模擬產生1000個,甚至100000個交易日的不同的日內tick資料,產生不同的日內資料,這樣就能以大數據的型態來做當沖系統測試.畢竟一年只有約240~250個交易日,30年的實際日資料不過約7500個交易日而已,TickServer模擬資料能夠突破這個限制,也許能有1萬個交易日資料提供測試,而結合了Python在串流函式上的支援,比起那些市售軟體彈性相對大,能夠結合的資源與做法就更多了,這是一個相對有利的發展,而本書在最終章的自動交易系統上也引用了以Oanda為範例來說明,如何發展出一個完全以雲端執行的字交易系統,就是將演算法交易系統放到遠端的伺服器中自動執行,然後透過日記達到記錄與監控的功能,實施真正的自動化交易,這部分內容雖然不多,卻是整本書希望讀者實作後最終能達成的目標.

   至於最終是否要採用Python發展出自己的交易系統,還是得依需求範圍的設定來決定,畢竟市售的軟體早已能滿足一般交易策略的需求,而使用Python是因為它能與機器學習深度學習套件連結,加上強大的數學,科學運算套件,若你的系統沒有要用到這些,那麼自然不需要多一舉放棄別人已經幫你設計好的輕便簡單的MC,WB,MT,TS等現成軟體,重複無用之功.至於那些交易邏輯與系統可能會涉及到使用這些套件,依個人的判斷,大概是牽涉的系統使用的規則用清楚,明顯,能明確定義的越不需要重複發展,使用現成軟體即可.而交易邏輯比較模寧兩可或說難以絕對規則界定的,模糊的則使用這些套件的機率會高些,這裡的模糊得意思用中文表達較不精確,應該是指Fuzzy這個意思,而這個詞很早就被引入了資訊領域,應該才是使用這工具的原因,亦即必須有真的將模糊系統,其實是複雜度高過去無法量化的交易系統才考慮使用這項工具,而不是純粹為追逐流行而使用.

   使用本書時會遇到許多問題,主要都是基於軟體套件發展快速變化的版本問題,致使許多書中的程式碼並不依定能完全按照設想的狀態成功執行,會產生許多錯誤訊息,在使用tensorflow,keras,Oanda,FXCM都遭遇過這樣的狀態,這只能透過google去網上找尋碰到相同問題的人測試出的結果來改變套件的版本,這是用python常遇的問題.所幸作者已經書裡的程式碼都公開在網上,不必真的逐字鍵入,省了麻煩,唯一要留心的是他是在linux下作業,要搬到windows上用Anaconda中的Syider使用有部分是使用者自己知道要改寫的,這就是個人經驗了.除這這些使用上的問題外,個人認為這本對於想自行開發交易系統者還是值得買來一讀的,儘管它尚不夠詳細完備,但已夠讓人折騰許久了.以上.


上個月的網頁瀏覽數次數