日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

量化投资之定投,无脑却收益还不错,记得周三来

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 量化投资之定投,无脑却收益还不错,记得周三来 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標:

本系列開始重點研究量化,逐步改善模型,改善策略,然后評估各個策略的優劣。 本文是第一篇,也是最容易最無腦投資的一篇,每周三定投,收益還不錯。

內容:

如果工作太忙沒法投資,閑錢無處放,不妨看看這這種方式。

學金融的都知道最簡單靠譜的投資方式:定投。
是否真有效?假期封在家,做了下實驗。
假設每周,通過支付寶線下買基金定投1000,從15年元旦開始。就投創業板吧,虧錢了就當給科技做貢獻。要知道15年可是股災年,19年也是,經歷了2次股災還能有收益嗎?一起來看看到今天2020-02-07,收益如何?
圖1為指數行情,證明數據沒有錯。

圖2為定投VS年化5%無風險收益的對比圖。可見,定投確實收益超過存定期。

圖3為定投選星期幾呢?國外有個著名的“周四效應”,而在創業板中,最好的卻是周三!國外的月亮比一定在國內元。最差周一、周五。差值能達到20000元。


圖4為定投的純收益,虧損最多的是在19年初那次股災。

圖5為收益率曲線,也可以看出周三的收益率最好。

圖6為收益率,定投最多也能虧40%,讓人有點崩潰吧。

為啥定投很少有人堅持?2016-2020年4年都在虧錢,好多人的心理早已崩潰,心理承受能力早已塌陷。但曙光就在后面。

這種機械式定投顯然不是很好的辦法。但確實也有賺錢機會。
股市有風險,投資需謹慎。

改進措施:

最大回撤=82% - (-39%) = 120%。策略波動太大。 虧錢源自于高價位買太多,低價位買太少,所以機械的每次買一樣的金額,明顯不好,可以考慮增加彈性,高價位買少,低價位買多。這樣最大回撤能小很多。 下篇見。

代碼:

實驗數據此處下載:鏈接:https://pan.baidu.com/s/1yVThgukzc3iXFhjHMLVONA
提取碼:1234

# -*- coding:utf-8 -*- """ 作者:luoji 日期:2022年02月06日 """import pandas as pd import time import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib.ticker import FuncFormatter# 設置顯示為中文 mpl.rcParams['font.sans-serif'] = ['KaiTi'] mpl.rcParams['font.serif'] = ['KaiTi'] mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串# dateTOBegin = '2018-01-01' dateTOBegin = '2015-01-01' # 定投開始時間data = pd.read_csv('C:\\LuojiPythonProject\\AGuquant\\data\\399006.csv', encoding='UTF-8', index_col=0) # 加載數據,去掉第一列 print(data.head(5))data['trade_date'] = pd.to_datetime(data['trade_date'], format='%Y%m%d') # 把字符日期轉換為日期格式 print(data['trade_date']) data = data[data['trade_date'] >= dateTOBegin] # 篩選定投開始以后的數據data = data.set_index('trade_date') # 把日期設置為index,方便存取和畫圖,原地更改dataprint(data.head(5)) print(data.index) print(data.columns) # 這里trade_date在列中被刪除了,排了序之后,再補回來data = data.sort_values(['trade_date'], ascending=True) # 按照日期從大到小排序 print(data.head(5))figure = plt.figure(1) # 畫圖1 data['close'].plot(title='創業板指數價格', xlabel='交易日期', ylabel='價格', legend='收盤價', grid=True) # 按 收盤價畫指數圖 # plt.show()print(data.columns) # print(data['trade_date'].head(5)) data['trade_date'] = data.index # 新增一列trade_date,之前那個trade_date設置為了index,并排序?,F在還原回來, listWeekDay = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] # 星期1-5 data['day_of_week'] = data['trade_date'].dt.dayofweek # 獲得星期幾的序號,從0開始,到6,表示星期一到星期天# def conver2weekDay(x): # return listWeekDay[x] # # data['weekDay'] = data['weekDay'].map(conver2weekDay) # 等效為: data['day_of_week'] = data['day_of_week'].map(lambda x: listWeekDay[x]) # 把day_of_week轉換成英語的星期,用了匿名函數 print(data.head(5))baseCapital = 1000 # 每周初始定投資金for i in range(5):principal = 'principal_on_' + listWeekDay[i] # 本金 principaldata[principal] = 0 # 新建本金 principal列并初始化bugAmount = 'bug_amount_on_' + listWeekDay[i] # 購買數量,也即是定投的股數data[bugAmount] = 0 # 初始化定投的股數for i in range(5):day = listWeekDay[i] # 獲取星期幾bugAmount = 'bug_amount_on_' + listWeekDay[i] # 購買數量principal = 'principal_on_' + listWeekDay[i] # 本金 principaldata.loc[data['day_of_week'] == day, principal] = baseCapital # 本金字段,寫到具體星期幾做的定投# 計算定投時的股數,也就是用本金除以收盤價,得到當天購買的股數data.loc[data['day_of_week'] == day, bugAmount] = baseCapital / data[data['day_of_week'] == day]['close']# print(data.head(5)) print(data.head(10)) print(data.columns)for i in range(5):accumulateAmount = 'accumulate_amount_' + listWeekDay[i] # 累積購買股數bugAmount = 'bug_amount_on_' + listWeekDay[i] # 購買數量data[accumulateAmount] = data[bugAmount].cumsum() # 購買數量累加,即可得到累積購買的股數marketValue = 'market_value_on_' + listWeekDay[i] # 當前持有股數的市值data[marketValue] = data['close'] * data[accumulateAmount] # 收盤價乘以累積購買股數,即可得到市值figure = plt.figure(2) for i in range(5):marketValue = 'market_value_on_' + listWeekDay[i] # 畫市值圖形data[marketValue].plot(title='定投市值', xlabel='交易日期', ylabel='市值', legend=marketValue, grid=True)# no risk profit 無風險收益曲線,作為對照,進行對比投資是否有效,無風險利率5% data['no_risk_principal'] = 0 data.loc[data['day_of_week'] == 'Monday', 'no_risk_principal'] = baseCapital # 無風險定投選在每周1 data['no_risk_accumulate_principal'] = data['no_risk_principal'].cumsum() # 無風險累積成本 no_risk_rate = 0.05 # 無風險收益率5% no_risk_rate_daily = no_risk_rate / 200 # 交易天數按200天計算,得到每天的無風險收益率 data['no_risk_profit_everyday'] = data['no_risk_accumulate_principal'] * no_risk_rate_daily # 每天的無風險收益 data['no_risk_profit'] = data['no_risk_profit_everyday'].cumsum() # 每天的無風險收益累加,即可得到累積的收益 data['no_risk_market_value'] = data['no_risk_accumulate_principal'] + data['no_risk_profit'] # 無風險收益加本金,得到市值 data['no_risk_market_value'].plot(xlabel='交易日期', ylabel='市值', legend='5%_no_risk_market_value', grid=True) data['no_risk_accumulate_principal'].plot(xlabel='交易日期', ylabel='市值', legend='無風險本金', grid=True) # 畫本金# plt.show()# 減去本金,計算純收益 for i in range(5):principal = 'principal_on_' + listWeekDay[i] #本金accumulate_principal = 'accumulate_principal_' + listWeekDay[i] #累積本金data[accumulate_principal] = data[principal].cumsum() # 累積成本=本金相加marketValue = 'market_value_on_' + listWeekDay[i] # 市值profit = 'profit_on_' + listWeekDay[i] # 純收益data[profit] = data[marketValue] - data[accumulate_principal] # 市值減去累計本金,得到純收益profit_rate = 'profit_rate_on_' + listWeekDay[i] # 收益率data[profit_rate] = data[profit] / data[accumulate_principal] # 收益率 = 收益/累積本金figure = plt.figure(3) # 畫收益曲線 for i in range(5):profit = 'profit_on_' + listWeekDay[i]data[profit].plot(title='定投收益', xlabel='交易日期', ylabel='收益(元)', legend=profit, grid=True)data['no_risk_profit_rate'] = data['no_risk_profit'] / data['no_risk_accumulate_principal'] #無風險收益/無風險本金=無風險收益率 data['no_risk_profit'].plot(title='定投收益', xlabel='交易日期', ylabel='收益(元)', legend='5% no_risk_profit', grid=True)# plt.show()figure = plt.figure(4) # 畫定投收益率 for i in range(5):profit_rate = 'profit_rate_on_' + listWeekDay[i]data[profit_rate].plot(title='定投收益率', xlabel='交易日期', ylabel='收益率', legend=profit_rate, grid=True)data['no_risk_profit_rate'].plot(xlabel='交易日期', ylabel='收益率', legend='5% no_risk_profit_rate', grid=True)def to_percent(temp, position): # 轉換畫收益圖的Y軸為百分數。return '%1.0f' % (100 * temp) + '%'plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent)) plt.show()

產出:

如果資金有計劃近期不會使用,可以考慮研究一下如何投資。
修改一下代碼,如果我們2018-01-01年開始定投,會怎么樣?




收益更好,能達到50%。

總結

以上是生活随笔為你收集整理的量化投资之定投,无脑却收益还不错,记得周三来的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。