天天看點

Python量化交易實戰-10實時擷取股票的資料函數封裝

​​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