<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python分析10萬條基金數(shù)據(jù),探索基金定投的奧秘

          共 8146字,需瀏覽 17分鐘

           ·

          2020-12-25 01:38

          基金定投這個名詞大家都不陌生,喜歡理財?shù)呐笥芽赡芏紘L試過,今天我想給大家分享是,用python模擬基金定投和普通投的過程,并進(jìn)行簡單比較,探索基金定投的奧秘。

          1.分析單支基金定投收益情況

          基金數(shù)據(jù)已經(jīng)給大家準(zhǔn)備好了,首先用pandas讀?。?/p>

          import?pandas?as?pd
          data=pd.read_csv('基金數(shù)據(jù).csv',encoding='gbk')
          data

          總共92390條

          以‘161724’基金為例,起投100,從2020年1月2日到2020年12月18日,工作日每日定投100,計算收益并可視化展示。

          首先選出該基金在上述時間段內(nèi)的數(shù)據(jù),代碼如下:

          import?datetime
          s_date?=?datetime.datetime.strptime('2020-01-01',?'%Y-%m-%d').date()
          data['日期']=[datetime.datetime.strptime(i.replace('/','-'),?'%Y-%m-%d').date()?for?i?in?list(data['日期'])]
          data1=data[(data['代碼']==161724)?&?(data['日期']?>=?s_date)]
          data1

          就算定投和普通投收益并可視化展示(計算方式參考注釋):

          #定投收益率計算
          portion1=0??#總份額
          for?i?in?list(data1['日期'])[::-1]:
          ????dwjz=data1[data1['日期']==i]['單位凈值'].values[0]
          ????portion1+=float(100/dwjz)
          capital=100*len(list(data1['日期']))???#本金=100*天數(shù)
          profit1=int(portion1*data1[data1['日期']==i]['單位凈值'].values[0])????#本金+收益=份額*單位凈值
          #正常投資收益率計算
          profit2=(capital/(data1['單位凈值'].values[-1]))*data1['單位凈值'].values[0]??#本金+收益=份額*單位凈值

          可視化展示:

          from?pyecharts?import?options?as?opts
          from?pyecharts.charts?import?Bar
          from?pyecharts.globals?import?ThemeType
          kind=['定投','普投']
          l1=[capital,capital]
          l2=[profit1,int(profit2)]
          bar?=?(
          ????Bar(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
          ????.add_xaxis(kind)
          ????.add_yaxis("本金",?l1)
          ????.add_yaxis("收益",?l2)
          ????.set_global_opts(title_opts=opts.TitleOpts(title="定投與普投收益比較",?subtitle="2020-161724"),
          ????????????????????toolbox_opts=opts.BrushOpts(),)
          )
          bar.render_notebook()


          通過上圖可以看出,本年23400固定的情況下,2020年一年的時間,定投比普投多收入1千元,差別不是很大。

          2.設(shè)置隨機(jī)時間段

          有的朋友會說,僅靠一個時間段,局限性和偶然性太大,下面我們隨機(jī)設(shè)置30個時間段,并用折線圖來比較最終結(jié)果:

          首先,我們將30個時間段的收益結(jié)果存入列表中,代碼如下:

          import?random
          result=[]
          for?i?in?range(30):
          ????s=random.choice(list(data1['日期']))
          ????e=random.choice(list(data1['日期']))
          ????if?s>e:
          ????????t=s
          ????????s=e
          ????????e=t
          ????portion1=0??#總份額
          ????for?j?in?list(data1['日期'])[list(data1['日期'])[::-1].index(s):list(data1['日期'])[::-1].index(e)]:
          ????????dwjz=data1[data1['日期']==j]['單位凈值'].values[0]
          ????????portion1+=float(100/dwjz)
          ????capital=100*len(list(data1['日期'])[list(data1['日期'])[::-1].index(s):list(data1['日期'])[::-1].index(e)])???#本金
          ????profit1=int(portion1*data1[data1['日期']==j]['單位凈值'].values[0])????#定投本金+收益
          ????profit2=(capital/(data1['單位凈值'].values[-1]))*data1['單位凈值'].values[0]
          ????result.append(['第{}次'.format(i+1),capital,profit1,int(profit2)])
          result
          [['第1次', 15300, 13557, 18520],
          ['第2次', 3200, 3422, 3873],
          ['第3次', 17100, 18548, 20699],
          ['第4次', 12100, 12441, 14646],
          ['第5次', 18800, 20094, 22757],
          ['第6次', 4000, 3595, 4841],
          ['第7次', 13900, 12782, 16825],
          ['第8次', 7400, 7021, 8957],
          ['第9次', 700, 687, 847],
          ['第10次', 7600, 7508, 9199],
          ['第11次', 10600, 10705, 12831],
          ['第12次', 1600, 1598, 1936],
          ['第13次', 900, 902, 1089],
          ['第14次', 12200, 12551, 14767],
          ['第15次', 5200, 4452, 6294],
          ['第16次', 1400, 1282, 1694],
          ['第17次', 3100, 2942, 3752],
          ['第18次', 15300, 16436, 18520],
          ['第19次', 15300, 14039, 18520],
          ['第20次', 8100, 7218, 9804],
          ['第21次', 100, 100, 121],
          ['第22次', 13600, 11708, 16462],
          ['第23次', 3900, 3656, 4720],
          ['第24次', 1300, 1291, 1573],
          ['第25次', 11100, 12648, 13436],
          ['第26次', 15100, 13296, 18278],
          ['第27次', 17700, 17189, 21425],
          ['第28次', 3500, 3485, 4236],
          ['第29次', 18900, 20274, 22878],
          ['第30次', 13400, 12638, 16220]]

          對結(jié)果進(jìn)行可視化:

          import?pyecharts.options?as?opts
          from?pyecharts.charts?import?Line

          line=(
          ????Line(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
          ????.add_xaxis(xaxis_data=[t[0]?for?t?in?result])
          ????.add_yaxis(
          ????????series_name="定投",
          ????????y_axis=[t[2]?for?t?in?result],
          ????????symbol="triangle",
          ????????symbol_size=10,
          ????????linestyle_opts=opts.LineStyleOpts(color="red",?width=2,?type_="dashed"),
          ????????label_opts=opts.LabelOpts(is_show=False),
          ????????itemstyle_opts=opts.ItemStyleOpts(
          ????????????border_width=3,?border_color="yellow",?color="red"
          ????????),
          ????????markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
          ????)
          ????.add_yaxis(
          ????????series_name="普投",
          ????????y_axis=[t[3]?for?t?in?result],
          ????????symbol="circle",
          ????????symbol_size=10,
          ????????linestyle_opts=opts.LineStyleOpts(color="blue",?width=2,?type_="dashed"),
          ????????label_opts=opts.LabelOpts(is_show=False),
          ????????itemstyle_opts=opts.ItemStyleOpts(
          ????????????border_width=3,?border_color="yellow",?color="blue"
          ????????),
          ????????markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
          ????????
          ????)
          ????.set_global_opts(
          ????????xaxis_opts=opts.AxisOpts(type_="category"),
          ????????yaxis_opts=opts.AxisOpts(
          ????????????type_="value",
          ????????????axistick_opts=opts.AxisTickOpts(is_show=True),
          ????????????splitline_opts=opts.SplitLineOpts(is_show=True),
          ????????),
          ????????tooltip_opts=opts.TooltipOpts(is_show=False),
          ????)
          )
          line.render_notebook()

          根據(jù)上圖,30個時間段內(nèi),普投的最終平均值為10990元,定投為8935.5,普投的總體情況較好。

          3.設(shè)置隨機(jī)基金

          為做進(jìn)一步探索,繼續(xù)擴(kuò)大數(shù)據(jù)范圍,隨機(jī)選擇20支基金,計算在30個隨機(jī)時間段內(nèi)的平均收益情況:

          首先各時間段內(nèi)的總收益,存入字典中:

          import?numpy?as?np
          codes=random.sample(list(data['代碼']),20)
          results={}
          for?i?in?range(1,31):
          ?????results['第{}次'.format(i)]=np.array([0,0,0])
          for?code?in?codes[1:2]:
          ????data2=data[(data['代碼']==code)]
          ????result=[]
          ????capital=0
          ????profit1=0
          ????profit2=0
          ????for?i?in?range(1,31):
          ????????s=random.choice(list(data1['日期']))
          ????????e=random.choice(list(data1['日期']))
          ????????if?s>e:
          ????????????t=s
          ????????????s=e
          ????????????e=t
          ????????portion1=0??#總份額
          ????????for?j?in?list(data1['日期'])[list(data1['日期'])[::-1].index(s):list(data1['日期'])[::-1].index(e)]:
          ????????????dwjz=data1[data1['日期']==j]['單位凈值'].values[0]
          ????????????portion1+=float(100/dwjz)
          ????????capital=100*len(list(data1['日期'])[list(data1['日期'])[::-1].index(s):list(data1['日期'])[::-1].index(e)])???#本金
          ????????profit1=int(portion1*data1[data1['日期']==j]['單位凈值'].values[0])????#定投本金+收益
          ????????profit2=(capital/(data1['單位凈值'].values[-1]))*data1['單位凈值'].values[0]
          ????????results['第{}次'.format(i)]+=np.array([capital,profit1,int(profit2)])

          將結(jié)果可視化:

          import?pyecharts.options?as?opts
          from?pyecharts.charts?import?Line
          fina=[results[i].tolist()?for?i?in?list(results.keys())]
          line1=(
          ????Line(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC))
          ????.add_xaxis(xaxis_data=list(results.keys()))
          ????.add_yaxis(
          ????????series_name="本金",
          ????????y_axis=[t[0]/20?for?t?in?fina],
          ????????symbol="triangle",
          ????????symbol_size=10,
          ????????linestyle_opts=opts.LineStyleOpts(color="yellow",?width=2,?type_="dashed"),
          ????????label_opts=opts.LabelOpts(is_show=False),
          ????????itemstyle_opts=opts.ItemStyleOpts(
          ????????????border_width=3,?border_color="yellow",?color="yellow"
          ????????),
          ????????markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
          ????)
          ????.add_yaxis(
          ????????series_name="定投",
          ????????y_axis=[t[1]/20?for?t?in?fina],
          ????????symbol="triangle",
          ????????symbol_size=10,
          ????????linestyle_opts=opts.LineStyleOpts(color="red",?width=2,?type_="dashed"),
          ????????label_opts=opts.LabelOpts(is_show=False),
          ????????itemstyle_opts=opts.ItemStyleOpts(
          ????????????border_width=3,?border_color="red",?color="red"
          ????????),
          ????????markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
          ????)
          ????.add_yaxis(
          ????????series_name="普投",
          ????????y_axis=[t[2]/20?for?t?in?fina],
          ????????symbol="circle",
          ????????symbol_size=10,
          ????????linestyle_opts=opts.LineStyleOpts(color="blue",?width=2,?type_="dashed"),
          ????????label_opts=opts.LabelOpts(is_show=False),
          ????????itemstyle_opts=opts.ItemStyleOpts(
          ????????????border_width=3,?border_color="blue",?color="blue"
          ????????),
          ????????markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
          ????????
          ????)
          ????.set_global_opts(
          ????????xaxis_opts=opts.AxisOpts(type_="category"),
          ????????yaxis_opts=opts.AxisOpts(
          ????????????type_="value",
          ????????????axistick_opts=opts.AxisTickOpts(is_show=True),
          ????????????splitline_opts=opts.SplitLineOpts(is_show=True),
          ????????),
          ????????tooltip_opts=opts.TooltipOpts(is_show=False),
          ????)
          )
          line1.render_notebook()


          從上圖可以看出,普投的收益情況要高于定投。

          說明:本文模型比較簡單,僅作為學(xué)習(xí)pyhton數(shù)據(jù)分析的素材,不作為投資依據(jù),感興趣的朋友可以繼續(xù)深入探索。另外,若對本文有疑問,請在留言區(qū)評論。


          程序員GitHub,現(xiàn)已正式上線!

          接下來我們將會在該公眾號上,專注為大家分享GitHub上有趣的開源庫包括Python,Java,Go,前端開發(fā)等優(yōu)質(zhì)的學(xué)習(xí)資源和技術(shù),分享一些程序員圈的新鮮趣事。




          推薦閱讀:


          這個GitHub 1400星的Git魔法書火了,斯坦福校友出品丨有中文版
          賊 TM 好用的 Java 工具類庫
          超全Python IDE武器庫大總結(jié),優(yōu)缺點一目了然!
          秋招來襲!GitHub28.5顆星!這個匯聚阿里,騰訊,百度,美團(tuán),頭條的面試題庫必須安利!
          收獲10400顆星!這個Python庫有點黑科技,竟然可以偽造很多'假'的數(shù)據(jù)!
          牛掰了!這個Python庫有點逆天了,竟然能把圖片,視頻無損清晰放大!


          點這里,獲取一大波福利

          瀏覽 45
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜操夜夜撸 | 亚洲娱乐成人网 | 最新91av在线 | 国产——内射 | 成人做爱在线观看 |