B站配套視訊教程觀看
實時擷取股票的資料函數封裝
實作股票資料擷取的子產品及方法
從這節課開始 我們就開始建構所謂的量化交易系統,量化交易平台功能子產品。
上面是量化交易系統的功能子產品圖,主要分為3塊,第一塊是行情資料,
- 行情記錄與曆史資料:主要是股票的标的資訊,财務資料,估值資料,存儲的曆史記錄,将資料導出到csv中存儲起來。
- 交易政策和回歸測試子產品:主要包含擇時政策和選股政策,針對這些政策,為了保證資料的有效性和準确性,還需要對資料進行回測。
- 交易資料管理與查詢:主要是自動交易,以及資料管理和查詢,比如說遞交委托,持倉資訊和收益資訊。
總的來說 量化交易系統以後端的功能為主,
圖表可視化
部分相對來說比較粗糙一點,我們可以利用
matplotlib
或者
echart
這樣的可視化庫去結合Python後端代碼來實作資料的可視化,友善大家了解交易邏輯是什麼樣子的,如果在加上前端的功能實作的話,就會牽扯很多的功能子產品,比如說我要設計頁面架構,是選
flask
還是
django
。是以我們把前端盡量做的簡單一點。
一、代碼實操
這節課主要做2件事情。
第一個我們會在項目的根目錄建立
README.md
。
表示對這個項目的說明,如果你是程式員,就應該很熟悉,這個文檔的作用就是告訴來使用我們這個項目的人,我這個源代碼是幹什麼的,有哪些子產品,調用關系有哪些。
第二個我們會在
stock.py
這個檔案當中,定義一些常用的資料擷取方法。
def 擷取所有A股股票清單
def 擷取單個股票行情資料
def 導出股票行情資料
def 轉換股票行情周期
def 擷取單個股票财務名額
def
1.1建立README.md
在項目的根目錄建立一個叫做”README.md“檔案:
# XuhssQuant
## 功能子產品
### 行情記錄(Data)
#### stock
- 擷取所有A股股票清單
- 擷取單個股票行情資料
- 導出股票相關的資料
- 将資料轉換股票行情指定周期
- 擷取單個股票财務名額
- 擷取單個股票估值名額
1.2定義常用的資料擷取方法
然後在
stock.py
中建立所有的函數
# 擷取所有A股股票清單
def get_stock_list():
stock_list = list(get_all_securities(['stock']).index)
return
# 擷取單個股票行情資料
def get_single_price(stock_code, timefrequency, startdate, enddate):
data = get_price(stock_code, start_date=startdate, end_date=enddate,count=5, frequency=timefrequency)
return
# 導出股票相關的資料(type:存儲的檔案夾的名稱[Finace/Price])
def export_data(data, filename, type):
fileroot = 'D:/software/00/01推廣/XuhssQuant/Data/' + type +'/' + filename + '.csv'
data.to_csv(fileroot)
print('已經存儲成功,存儲路徑為', fileroot)
# 将資料轉換股票行情指定周期
def transfer_price_freq(data, timefrequency):
df_trans = pd.DataFrame()
df_trans["open"] = data["open"].resample(timefrequency).first()
df_trans['close'] = data['close'].resample(timefrequency).last()
df_trans['high'] = data['high'].resample(timefrequency).max()
df_trans['low'] = data['low'].resample(timefrequency).min()
df_trans['volume(sum)'] = data['volume'].resample(timefrequency).sum()
df_trans['money(sum)'] = data['money'].resample(timefrequency).sum()
return
# 擷取單個股票财務名額
def get_single_finance(code, date, statDate):
data = get_fundamentals(query(indicator).filter(indicator.code == code), date = date, statDate=statDate)
return
# 擷取單個股票估值名額
def get_single_valuation(code, date, statDate):
data = get_fundamentals(query(valuation).filter(valuation.code == code), date = date, statDate=statDate)
return