天天看點

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

在上一次擷取股票資料【使用JQData查詢行情資料、财務名額、估值名額】學習了使用JQData來查詢股票相關資料, 這次則開始一點點建構咱們的量化交易系統了。

量化交易平台功能子產品了解:

對于一個量化交易平台,它主要包含如下功能子產品:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

而整個子產品基本都是基于後端來開發的,隻有圖表可視化是用一個可視化庫來打造,并未涉及到前端的功能,核心主要是來學習業務邏輯:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

擷取股票資料:

建立readme:

在咱們的工程中建立一個Readme檔案用來進行功能的描述:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:
#DeltaTrader

## 功能子產品

### 行情記錄 (data)

#### stock.py
- 擷取所有A股股票清單
- 擷取單個股票行情資料
- 導出股票行情資料
- 轉換股票行情周期
- 獲得單個股票财務名額
- 擷取單個股票估值名額
### 政策開發

### 自動交易
           

三大塊,其中目前主要關注擷取行情記錄資料這塊,是以咱們的包名是data:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

而其它子產品會随着學習的不斷深入再慢慢填充,其實對于這些資料的擷取在上一次咱們已經都試驗過了,隻是沒有将其封裝成一個通用的API,是以接下來則會基于咱們上次實作的代碼進行一個抽取,來實作這裡所列出的具體API。

擷取所有A股股票清單:

這個在之前咱們實作的代碼為:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

咱們直接基于它來改一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

擷取單個股票行情資料:

先看一下咱們之前實作的:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

定義一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

導出股票相關資料:

原來咱們在擷取股票财務名額時用過:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

咱們來封裝一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中這裡建立一個price目錄,專門用來存儲股票價格相關的檔案:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

如果要導出其它類别的資料,建立相關目錄,在調用此函數時傳相關的type名稱既可。

轉換股票行情周期:

先來看一下之前咱們使用的:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

下面基于它來封裝一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

擷取單個股票财務名額:

之前的代碼:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

封裝一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

擷取單個股票估值名額:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

封裝為:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

調用stock:

接下來咱們則來調用一下咱們重新封裝的stock。

1、建立一個測試子產品:

為了規範,這裡将測試相關的代碼都放到另一個子產品中:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

2、擷取股票行情資料并導入csv:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

控制台輸出:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

看一下表格檔案有木有生成?

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

但是!!!你會發現表格中表頭部分少了一個日期:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這個時候是需要咱們來處理一下的,如果不處理在未來的cvs的讀取資料時是會有問題的,這個問題是啥呢?下面在stock中先增加一個cvs的讀取函數,讀出來自然就明白了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

咱們來調用讀取一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

接下來就來修複它,需要在導出函數那塊進行處理了,如何處理呢,此時則需要對資料的索引進行重命名了,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

再重新導出,再擷取:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

計算交易名額:

接下來就來學習跟咱們炒股操作息息相關的一些東東啦~~

使用shift函數計算漲跌幅:

每日漲跌幅:

先來計算一下每日的漲跌幅,看是否準确,先來明确一下漲跌幅的計算公式:“(當期收盤價-前期收盤價)/ 前期收盤價” ,

其中的當期可以是當天、當分鐘、當秒鐘、當周、當月,具體實作如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中shift(1)表示上一行的資料,而shift(2)表示上兩行的資料,shift(-1)表示下一行的資料。

下面來調用驗證一下是否準确,這裡還是以平安銀行的日K資料為例:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

運作看一下:

/Users/xiongwei/opt/anaconda3/bin/python3.8 /Users/xiongwei/Documents/workspace/python/QuantitativeTrading/studycode/example/stock.py
auth success 
             open  close   high    low       volume         money
2021-09-01  17.48  17.88  17.92  17.01  231689409.0  4.046284e+09
2021-09-02  18.00  18.40  18.78  17.80  242260354.0  4.454545e+09
2021-09-03  18.50  18.04  18.50  17.70  139481871.0  2.523273e+09
2021-09-06  17.93  18.45  18.60  17.78  151522556.0  2.780281e+09
2021-09-07  18.60  19.24  19.56  18.35  162234416.0  3.067366e+09
             open  close   high    low       volume         money  close_pct
2021-09-01  17.48  17.88  17.92  17.01  231689409.0  4.046284e+09        NaN
2021-09-02  18.00  18.40  18.78  17.80  242260354.0  4.454545e+09   0.029083
2021-09-03  18.50  18.04  18.50  17.70  139481871.0  2.523273e+09  -0.019565
2021-09-06  17.93  18.45  18.60  17.78  151522556.0  2.780281e+09   0.022727
2021-09-07  18.60  19.24  19.56  18.35  162234416.0  3.067366e+09   0.042818

Process finished with exit code 0
           

接下來就要來驗證咱們計算漲幅的正确性了,咱們這裡來挑兩天的驗證一下既可,比如我們挑這兩天的:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

回到交易平台中咱們來看一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:
擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

完成正确。

每周漲跌幅:

為了進一步驗證準确性,這裡再來看一下周K的漲跌幅,那首先咱們需要将日K的資料轉換為周K的資料對吧,該功能我們已經封裝好了,直接調用既可:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

好,擷取了三周的資料,回到同花順軟體裡确認一下準确性:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

為啥咱們列印的日期是顯示的2021-09-05呢?

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其實我們列印的是一周的最後一天:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

而股票軟體裡是算到工作日的最後一天,關于這個細節就不過多較真的,總之漲幅結果對相同的,再來看一天的:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

模拟股票交易:

買入、賣出信号:

對于股票操作最頻繁的就是買入和賣出操作對吧,是以接下來會以一個簡單的政策來對股票生成買賣資訊,注意:由于這階段還在打基礎,還沒有學習各種選股政策的應用這塊,是以這裡的政策是很呆闆的,比如可能就是定就是周一賣,周四買之類的,重點是能讓我們程式按預期來生成買賣信号。

1、建立Strategy子產品:

由于未來會有很多的一些政策,是以這裡建立一個包名:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

2、建立周期選股政策:

好,接下來則來建立一個非常簡單按周期選股的政策:周四買入、周一賣出【有過炒股經曆的應該也能感受到這個規則,也有點用吧,因為基本上到了周四就開始陰了,而周一作為一周的開始往往勢頭比較旺~~】

"""
用來建立交易政策、生成交易信号
"""
import data.stock as st
import numpy as np


def week_peroid_strategy(code, time_freq, start_date, end_date):
    data = st.get_single_price(code, time_freq, start_date, end_date)
    # 建立周期字段,周一是從0開始
    data['weekday'] = data['date'].weekday
    # 周四買入,下面代碼的意思是如果是周四,則是1表示買,0表示不買
    data['buy_signal'] = np.where((data['weekday'] == 3), 1, 0)
    # 周一賣出,下面代碼的意思是如果是周一,則是-1表示賣,0表示不賣
    data['sell_signal'] = np.where((data['weekday'] == 0), -1, 0)
    return data


if __name__ == '__main__':
    data = week_peroid_strategy(code='000001.XSHE', time_freq='daily',
                                start_date='2021-08-25',
                                end_date='2021-09-08')
    print(data)
           

下面運作看一下,報錯了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

原因是咱們的索引列木有給它重命名,沒有date這一列,當時我們重命名隻是在導出函數中加了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

好,那修改一下程式:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

為了列印看得更加清楚,這裡将字段過濾一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

3、信号整合:

接下來想一個場景,就是有可能周四你買入,周五又有可能買入對吧,那連續兩天買入,在實際做政策時會經常碰到這種重複的信号的,是以這裡針對這樣的場景模拟一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

那針對這樣的資料,咱們得想辦法隻讓第一天買入為1,其它的買入都變為0,其實也很簡單,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

此時又用到了shift()函數了對吧,不過這裡還是會有些沒覆寫的場景,這裡将擷取資料的時間改一下就能看到問題之所在了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

好,此時咱們把整合的那句代碼又打開注釋,再運作,你會發現:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這裡需要改一下條件了,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

當然對于賣出信号也需要整合一下,因為也有可能出現重複賣出的情況,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

4、最終生成買賣信号:

目前buy_signal和sell_singal,在同一天隻可能有一種signal,要麼是買,要麼是賣對麼?是以這裡再加一個字段,用來做買賣的直覺判斷,不然我看兩個字段有點暈,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

計算持倉收益:

了解:

先來看一下股票軟體中持倉收益一般包含的資料内容:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中咱們需要了解的有如下幾個計算公式:

1、總盈虧= (市價 - 成本價) * 股數;

也就是表格中這一列的值:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

2、 浮動盈虧比 =  (市價 - 成本價) / 成本價;

也就是表格中的這一列的值,我們平常最關心的收益率:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

比如7.377,通常也叫掙了7.3個點,其實還有一個更加簡便的計算方法,比如盈利的情況下,直接拿市價/成本價,然後肉眼就可以看到收益率了,比如表格中的新城股份:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

咱們來除一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

然後用它再減去1,此時就可以看到百分收益率就是7.377啦,如果對于虧損的情況也類似,用價格高的除以價格低的就成。 

3、成本價 = 買入金額 / 持有股數

因為有可能在實際會分倉進行買入,是以成本價計算就是如上公式了。

4、股數 = 累計買入股數

這個就比較簡單了,通常一手是100股。

以上資料不用太過關心,因為股票軟體裡持倉記錄那塊都能一眼看到,對于我們來說隻要知道如何查詢出這些資料就可以了, 其中重點是關注如何計算持倉收益率,這個是評價一個政策是否掙錢最直接的一個名額。

實作:

1、收益率計算:

接下來咱們基于上面的買賣信号資料來計算一下每次的收益率,先分析一下咱們的資料:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

發現在買和賣之間的天數肯定是不一定的,短線的周期短,中長線的周期長,而對于計算收益率來說,隻關心買入和賣出那兩天的價格對吧?是以,我們可以為了友善計算的收益率,把買和賣中間持股的記錄都給删掉,隻保留買和賣那兩天的資料,這樣計算的話就比較友善了,是以基于這樣的思路咱們來寫一下邏輯:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

接下來計算收益率為:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中發現,對于買的情況很顯然是不需要顯示收益率的,是以這裡再過濾一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

2、擷取上市以來所有資料:

目前咱們隻擷取了二個月的資料,那如果我想擷取單支股票自上市以來的所有資料來進一步觀察咱們政策的有效性呢?此時可以回到JQData的官網找一下如何獲得上市以來的資料,其實就是在擷取股票單個行情資料函數中的start_date傳上市的時間既可:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

那上官網查一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

好,咱們來改一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

此時咱們在調用時就可以傳None了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中需要導一下datetime:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

3、重構week_peroid_strategy函數:

目前對于week_peroid_strategy可以稍加優化一下代碼,因為看着有點亂,就是把這倆邏輯抽離出去:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

說不定未來還能在其它的功能上使用上,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這樣,整個邏輯就變得清爽了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這個思想不管是用啥語言寫程式都是應該我們來進行考慮的,因為可以大大增加代碼的可讀性。

另外目前咱們代碼這有個報警:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

是因為在main中也是用的data:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這裡将它改一下名稱既可:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

4、列印一下資料的均值:describe()

對于平安銀行自上市至今的資料太多了,可以用下面來檢視一下均值,對整體資料有一個大概的了解:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:
擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

關于各參數的函數可以參考:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

3、将其可視化輸出:plot()

接下來咱們也可以使用plot()函數來将整個的收益率情況可視化一下,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

是不是似曾相識,是的,在之前線性代數的學習https://www.cnblogs.com/webor2006/p/14271706.html中也使用到了該可視化庫了,這也就是知識的關聯系,學習的任何一個知識在未來的某一個時刻一定還能出現它的身影,并不是完全孤立的,好,運作,一個可視化的界面就出現了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

計算累計收益率:

概述:

現在我們已經能計算出一支股票的單次的收益率對吧?那如何根據單次收益率來計算出一個累計收益率呢?比如你支付寶中的基金【關于基金的學習,也是今年的一個計劃,将來得實際行動起來】,通常在這個頁面會展示累計收益率:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

那你有沒有搞清楚這個值是如何計算出來的呢?這裡正好可以彌補一下這個知識,假如你買的一個基金,整體的收益情況如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

那累計收益的計算,咱們口算一下,算完之後你就會發現公式出來了,公式有了那們咱們的程式就有戲了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

這個比較簡單對吧,也就是原來100塊錢,經過一天之後的收益利息,掙了3塊錢,總金額變成了103了,好,接着算第二天的累計收益了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

接下來再把剩下的兩天算出來,你就會發現公式了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

其中“(1 + 當天收益率)的累積乘積 ”,其實就是一個通用計算累計收益率的公式【一定要注意累計收益和累計收益率,累計收益是有本金在裡面,而累計收益率是不包含本金的,就是一個比例嘛,這一點必須要搞清楚】,但是!!!它還是有問題的,為啥呢?那咱們以這個公式來算一下圖中第一天的累積收益就知道了,很明顯第一天的累計收益率就是3%,因為隻有一天嘛,但是如果以"(1 + 3%)"來算,很明顯它的收益率就為103%,需要将本金去掉,也就是累計收益率的公式為“(1 + 當天收益率)的累積乘積 - 1”,(1 + 3%) - 1 是不是收益率就是3%了?

實作:

接下來則回到python的世界,來計算一下平安銀行的累計收益率:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

接下來咱們來調用一下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

而看一下可視化的累積收益率的圖:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

從這個收益曲線圖來看,貌似周四買入,周一賣出的簡單政策,收益率還是蠻不錯的嘛,當然啦,不可能按這麼簡單的規則來炒股的,純學習。

最後在寫python時有一個小的細節這裡提一下,就是在計算累計收益率不是用到了這個函數嘛:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

但是!!!你這個函數完全得要你手動敲全,不能智能的提示對吧?其實不提示的原因也很簡單,原因是由于:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

不知道它加出來的是DataFrame,是以當然也就不知道給你提示它裡面的函數喽,要想解決這個提示問題,咱們可以顯示的指定這資料是DataFrame既可,如下:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

此時再輸入時就可以看到提示了:

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額:

關注個人公衆号,獲得實時推送

擷取股票資料【實時更新股票資料、建立你的股票資料】、計算交易名額【買入、賣出信号、計算持倉收益、計算累計收益率】量化交易平台功能子產品了解:擷取股票資料:計算交易名額: