亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1088
2025-04-01
從4月1日起,我開始把跟蹤的幾個股市策略的每日成果與下一日買賣計劃發到微信公眾號(比如今日投資總結與明日買賣計劃)。作為一個Python工程師,盡管不太純正,在這個RPA大火的時代,當然不會傻傻地每天手寫《今日投資總結與明日買賣計劃》,而是用Python生成txt文件,然后通過markdown轉成微信公眾號文檔。但現在的發布很不直觀,最好能把每個策略的趨勢圖加上去,這就不是txt能實現的了,有必要直接寫到word文檔里去,直接用Python來生成word版的投資報告。
1. 原來的代碼
2. 安裝并導入包
python寫word文檔可以用python-docx包來實現,首先安裝包。
pip install python-docx
然后導入python-docx包下需要的操作,注意這個包的名字是python-docx,但導入的卻是docx。
from docx import Document from docx.shared import Inches
3. 創建word文檔并寫入各個段落
首先創建word文檔。
doc = Document()
然后寫入各個段落,只需要將原來每一段的開頭改寫成add_paragraph,并把第一段的繼續改寫成add_run即可。
比如把
text = "今日上證指數"
改寫成
par = doc.add_paragraph("今日上證指數")
把
text += ("上漲" + str(round(SSEC['close'][0]-SSEC['close'][1],2)) + "點,漲幅" + str(round(SSEC['close'][0]/SSEC['close'][1]*100-100,2)) + '%')
改寫成
par.add_run("上漲" + str(round(SSEC['close'][0]-SSEC['close'][1],2)) + "點,漲幅" + str(round(SSEC['close'][0]/SSEC['close'][1]*100-100,2)) + '%')
最后,把word文檔進行保存。
doc.save(f'offical_account.doc')
如此,一個簡單的word文檔就生成了。
4. 調整段落格式
可以看到上述生成的word文檔很奇怪,最突出的是有很多空行,這是原來為適應markdown格式而留下的,只需要去掉原來生成文檔里特地加上去的"\n"、"
"和"#"等就行了。
調整后結果如下:
5. 調整字體和字號
盡管段落間的多余空行已經去掉,但字體和字號都是一樣的,看起來很不美觀。
簡單的做法是將原來的部分段落改成標題。
比如把
doc.add_paragraph(str(xh) + '. ' + str(strategies['id'][i]) + '號策略')
改成
doc.add_heading(str(xh) + '. ' + str(strategies['id'][i]) + '號策略', 0)
后面的數字表示幾號標題,有0-9共10個等級的標題供選擇。
6. 插入表格
可以看到格式已經基本可以了,但原來的表格還沒有插入。
首先插入表格并寫入表頭。
table = doc.add_table(1, 6) table_title = ['序號', '年化收益率', '夏普比率', '累計收益', '今日浮盈', '今日漲幅'] for i in range(len(table_title)): table.cell(0, i).text = table_title[i]
然后在每個策略下加上
table.add_row() table.cell(row, 0).text = str(strategies['id'][i]) table.cell(row, 1).text = str(strategies['annual_return'][i]) table.cell(row, 2).text = str(strategies['sharpe'][i]) table.cell(row, 3).text = str(strategies['accumulated_return'][i]) table.cell(row, 4).text = str(today_get) table.cell(row, 5).text = str(today_increase) row += 1
7. 插入圖片
首先準備大盤數據
SSEC = pd.read_sql("select trade_date, close from SSEC order by trade_date", engine)
然后與各策略數據做交集
amount = pd.read_sql("select trade_date, amount from strategy_data where strategy=%d order by trade_date" % strategies['id'][i], engine) amount = pd.merge(amount, SSEC, on='trade_date') amount['amount'] = amount['amount'] / list(amount['amount'])[0] amount['close'] = amount['close'] / list(amount['close'])[0]
再然后調用matplotlib畫拆線圖
import matplotlib.pyplot as plt fig = plt.figure(0) plt.plot(amount['trade_date'].to_list(), amount['amount'].to_list(), label=str(strategies['id'][i])+'號策略') plt.plot(amount['trade_date'].to_list(), amount['close'].to_list(), label='上證指數') plt.legend() plt.savefig('趨勢圖.png') plt.close(0) doc.add_picture('趨勢圖.png')
如此,圖已經畫成了,但X軸的時間出現了重疊。我們可以把X軸的日期斜過來。
plt.xticks(rotation=15)
如此,圖片插入完成。
8. 后記
我們的word文檔生成完成了,但word無法直接復制到公眾號,復制過去格式就會丟失。
所以,從自動發公眾號的視角來說,這一次的嘗試并不是很成功,但從python生成word報告來說已經基本完成了,還是值得記錄的。
Python 金融專區
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。