作者:
翻譯:徐克任
校對:ansible.lee
摘要
這篇文章中將展示如何將獲得諾貝爾獎的經(jīng)濟理論應(yīng)用于股票市場低斋,并輔以簡單的Python編程來解決最終的優(yōu)化問題。
在本文中匪凡,我們討論了如何使用開創(chuàng)性經(jīng)濟理論中的關(guān)鍵概念來制定股票市場投資的簡單優(yōu)化問題膊畴。
為了說明,采用了三家公司月平均股票價格的樣本數(shù)據(jù)集病游,并展示了如何使用基本的Python數(shù)據(jù)科學(xué)庫(如NumPy唇跨,Pandas和名為CVXPY的優(yōu)化框架)立即建立線性編程模型。
如何以最少的風(fēng)險賺取最多的錢买猖?
介紹
現(xiàn)代數(shù)據(jù)科學(xué)和分析企業(yè)的主要目標(biāo)之一是為業(yè)務(wù)和技術(shù)公司解決復(fù)雜的優(yōu)化問題,以最大化其利潤滋尉。
在前面文章中玉控,討論了基本的離散優(yōu)化概念,并介紹了用于解決此類問題的Python庫PuLP狮惜。
盡管線性規(guī)劃(LP)問題僅由線性目標(biāo)函數(shù)和約束定義高诺,但它可以應(yīng)用于從醫(yī)療保健到經(jīng)濟,商業(yè)到軍事的各種領(lǐng)域中的各種各樣的問題碾篡。
在本文中虱而,我們展示了在經(jīng)濟規(guī)劃領(lǐng)域使用Python編程實現(xiàn)LP的一個如此驚人的應(yīng)用 - 最大化股票市場投資組合的預(yù)期利潤,同時最大限度地降低與之相關(guān)的風(fēng)險开泽。
聽起來不錯吧牡拇?
如何最大化利潤并最大限度地降低股票市場的風(fēng)險?
1990年諾貝爾經(jīng)濟學(xué)獎獲得者哈里馬科維茨(因其著名的現(xiàn)代投資組合理論(MPT)而獲得認可,因為它以金融市場的說法而聞名诅迷。原始論文早在1952年就已出版佩番。
資料來源:AZ行情
這里的關(guān)鍵詞是平衡罢杉。
良好,平衡的投資組合必須提供保護(最小化風(fēng)險)和機會(最大化利潤)贡歧。
而且滩租,當(dāng)涉及最小化和最大化等概念時,用數(shù)學(xué)優(yōu)化理論來解釋問題是很自然的利朵。
基本思想相當(dāng)簡單律想,基于厭惡風(fēng)險的人性。
一般而言绍弟,股票市場統(tǒng)計數(shù)據(jù)表明技即,較高的風(fēng)險與較高的回報概率和較低的風(fēng)險相關(guān),而較小的回報概率較大樟遣。
MPT假設(shè)投資者厭惡風(fēng)險而叼,這意味著如果兩個投資組合提供相同的預(yù)期回報,投資者將更喜歡風(fēng)險較低的投資組合豹悬。想一想葵陵。只有在高回報率很高的情況下,您才會收集高風(fēng)險股票瞻佛。
但是如何量化風(fēng)險呢脱篙?這肯定是一個模糊的概念,可能對不同的人意味著不同的東西伤柄。然而绊困,在普遍接受的經(jīng)濟理論中,股票價格的變化(波動性)(在固定時間范圍內(nèi)定義)等同于風(fēng)險适刀。
因此秤朗,中心優(yōu)化問題是在確保一定數(shù)量的利潤回報的同時將風(fēng)險降至最低≌嵬或者川梅,在保持風(fēng)險低于某個閾值的同時最大化利潤。
在保持風(fēng)險低于某個閾值的同時最大化利潤
一個示例問題
在本文中贫途,我們將展示組合優(yōu)化問題的一個非常簡化的版本,可以將其轉(zhuǎn)換為LP框架并使用簡單的Python腳本有效地解決待侵。
目標(biāo)是說明這種優(yōu)化求解的能力和可能性丢早,以解決復(fù)雜的現(xiàn)實問題。
我們使用24個月的股票價格(月平均值)為三個股票 - 微軟,維薩怨酝,沃爾瑪傀缩。雖然是歷史數(shù)據(jù),但它們完美地闡釋了這一過程农猬。
圖:三個公司在特定24個月期間的月度股票價格。
如何定義退貨斤葱?我們可以通過從當(dāng)前月份減去上個月的平均股票價格并除以上個月的價格來簡單地計算滾動月度回報慷垮。
返回如下圖所示揍堕,
優(yōu)化模型
股票的回報是不確定的數(shù)量。我們可以將其建模為隨機向量衩茸。
投資組合也可以建模為矢量。
因此幔烛,某些投資組合的回報由這些向量的內(nèi)積給出,它是一個隨機變量抖部。百萬美元的問題是:
我們?nèi)绾伪容^隨機變量(對應(yīng)不同的投資組合)來選擇"最佳"投資組合说贝?
按照Markowitz模型,我們可以將我們的問題表述為慎颗,
給定固定數(shù)量的貨幣(比如1000美元)乡恕,我們應(yīng)該對三種股票中的每一只投資多少,以便(a)至少給定一個閾值的預(yù)期回報率為一個月俯萎,以及(b)將風(fēng)險降至最低(差異) )投資組合回報傲宜。
我們不能投入負數(shù)。這是非負性約束夫啊,
假設(shè)沒有交易成本,總投資受到手頭資金的限制撇眯,
投資回報,
但這是一個隨機變量锚国。所以,必須使用預(yù)期的數(shù)量玄坦,
假設(shè)我們想要最低預(yù)期回報绘沉。因此,
現(xiàn)在车伞,為了模擬我們必須計算方差的風(fēng)險,
總之另玖,最終的優(yōu)化模型是,
接下來日矫,會展示使用流行的Python庫來制定和解決這個問題赂弓,也會讓大家發(fā)現(xiàn)绑榴,python+理論解決這些問題是多么容易。
使用Python來解決優(yōu)化問題:CVXPY
我們將用于此問題的庫名為CVXPY盈魁。它是用于凸優(yōu)化問題的Python嵌入式建模語言翔怎。它允許您以遵循數(shù)學(xué)模型的自然方式表達您的問題,而不是以求解器所需的限制性標(biāo)準形式表達您的問題杨耙。
在整個代碼在這個Jupyter筆記本給出赤套。在這里,我只展示核心代碼片段珊膜。
要設(shè)置必要的數(shù)據(jù)容握,關(guān)鍵是從月度價格的數(shù)據(jù)表計算返回矩陣。代碼如下车柠,
現(xiàn)在剔氏,如果你并排查看原始數(shù)據(jù)表和返回表,它看起來如下竹祷,
接下來,我們簡單地從該返回矩陣計算平均值(預(yù)期)返回值和協(xié)方差矩陣塑陵,
之后感憾,CVXPY允許簡單地按照我們上面構(gòu)建的數(shù)學(xué)模型來設(shè)置問題,
注意使用極其有用的類象的quad_form()令花,并Problem()從CVXPY框架阻桅。
瞧!
可以編寫一個簡單的代碼來解決Problem并顯示最佳投資數(shù)量兼都,確保最小回報率為2%嫂沉,同時將風(fēng)險保持在最低水平。
最終結(jié)果是俯抖,
擴展問題
毋庸置疑,我們模型的設(shè)置和簡化假設(shè)可以使這個問題聽起來比現(xiàn)在簡單得多。但是一旦你理解了解決這種優(yōu)化問題的基本邏輯和機制尤揣,你就可以將它擴展到多個場景搔啊,
· 數(shù)百只股票,更長的時間范圍數(shù)據(jù)
· 多個風(fēng)險/收益率和門檻
· 最小化風(fēng)險或最大化回報(或兩者兼而有之)
· 一起投資一組公司
· 無論是/或場景 - 投資于Cococola或百事可樂北戏,但兩者都不投資
您必須構(gòu)造更復(fù)雜的矩陣和更長的規(guī)則列表负芋,使用指示符變量將其轉(zhuǎn)換為混合整數(shù)問題 -但所有這些都由CVXPY等軟件包本身支持。
了解可以使用框架解決的優(yōu)化問題的廣度嗜愈。
掌握這些靈活而強大的軟件包的工作知識為即將到來的數(shù)據(jù)科學(xué)家的技能組合帶來了巨大的價值旧蛾,因為解決優(yōu)化問題的需求出現(xiàn)在科學(xué),技術(shù)和業(yè)務(wù)問題的各個方面蠕嫁。
接下來大家可以學(xué)習(xí)為目的锨天,嘗試更復(fù)雜的投資問題,以獲得探索和收獲的樂趣剃毒。
嘗試更復(fù)雜的投資問題,以獲得探索和收獲的樂趣