一、介紹
成都創(chuàng)新互聯(lián)專注于福山網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供福山營銷型網(wǎng)站建設,福山網(wǎng)站制作、福山網(wǎng)頁設計、福山網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務,打造福山網(wǎng)絡公司原創(chuàng)品牌,更為您提供福山網(wǎng)站排名全網(wǎng)營銷落地服務。Tushare是一個免費、開源的python財經(jīng)數(shù)據(jù)接口包。
安裝包:
pip install tushare
二、簡單策略
輸出該股票所有收盤比開盤上漲3%以上的日期。輸出該股票所有開盤比前日收盤跌幅超過2%的日期。
假如我從2010年1月1日開始,每月第一個交易日買入1手股票,每年最后一個交易日賣出所有股票,到今天為止,我的收益如何?
import tushare as ts df = ts.get_k_data("600519",start="1990-01-01") df.to_csv("600519.csv",index=False) #寫入文件中,得到股票歷史數(shù)據(jù)信息 #對股票信息進行策略分析 import numpy as np import pandas as pd df = pd.read_csv("600519.csv",index_col="date",parse_dates=["date"]) #從600519.csv中讀取數(shù)據(jù),date列作為索引 df[(df["close"]-df["open"])/df["open"] > 0.03 ].index #收盤比開盤上漲3% 的所有日期 df[(df["open"]-df["close"].shift(1)) /df["close"].shift(1) < -0.02].index #df["close"].shift(1) 前一天收盤價 df_monthly=df.resample("M").first() #每月的第一個交易日,日期看著是最后一天,數(shù)據(jù)是第一天的 df_yearly=df.resample("A").last() #每年的最后一個交易日 df_yearly=df_yearly.iloc[:-1,:] #去掉最后一行,因為本年最后還沒到,取得是昨天的數(shù)據(jù) cost=0 num=0 for year in range(2010,2019): cost += (df_monthly[str(year)]["open"] *100 ).sum() #df_monthly[str(year)]["open"] 每月的開盤價買進 num= 100 * len(df_monthly[str(year)]["open"]) #每月買一手,一手是100股 if year !=2018: cost -= df_yearly[str(year)]["open"][0] *num #賣出股票,抵消花費 num = 0 cost -= num *df["close"].iloc[-1] print(-cost) #df.resample("W").mean() #每周的平均值 #df.resample("W").first() #每周的第一天
三、雙均線策略
均線:對于每一個交易日,都可以計算出前N天的移動平均值,然后把這些移動平均值連起來,成為一條線,就叫做N日移動平均線。
移動平均線常用線有5天、10天、30天、60天、120天和240天的指標。
5天和10天的是短線操作的參照指標,稱做日均線指標;
30天和60天的是中期均線指標,稱做季均線指標;
120天、240天的是長期均線指標,稱做年均線指標。
金叉:短期均線上穿長期均線
死叉:短期均線下穿長期均線
策略:分析5日均線和30日均線,在金叉把所有錢(開始有100000元)買入股票,死叉拋出所有股票
import numpy as np import pandas as pd import matplotlib.pyplot as plt import tushare as ts df["ma5"]=np.nan df["ma30"]=np.nan # for i in range(4,len(df)): # df.loc[df.index[i],"ma5"] = df["close"][i-4:i+1].mean() # for i in range(29, len(df)): # df.loc[df.index[i], "ma30"] = df["close"][i-29:i + 1].mean() df["ma5"]=df["open"].rolling(5).mean() #5日雙均線 df["ma30"]=df["open"].rolling(30).mean() #30日雙均線 #處理數(shù)據(jù):丟掉nan并取到需要的時間段 df = df.dropna() df = df["2010-01-01":] #取到金叉和死叉的值 golden_cross = [] death_cross = [] # for i in range(1,len(df)): # if df["ma5"][i] >= df["ma30"][i] and df["ma5"][i-1] < df["ma30"][i-1] #5日均線作天小于30日均線,在今天大于等于30日均線 # golden_cross.append(df.index[i].to_pydatetime()) # # if df["ma5"][i] <= df["ma30"][i] and df["ma5"][i - 1] > df["ma30"][i - 1] #5日均線昨天大于30日均線,在今天小于等于30日均線 # death_cross.append(df.index[i].to_pydatetime()) sr1 = df["ma5"] < df["ma30"] sr2 = df["ma5"] >= df["ma30"] death_cross = df[sr1 & sr2.shift(1)].index golden_cross = df[~((sr1) | (sr2.shift(1)))].index #golden_cross = df[((~sr1) & (~sr2.shift(1)))].index #把金叉和死叉合并起來,一個金叉接著一個死叉排序 sr1 = pd.Series(1,index=golden_cross) sr2 = pd.Series(0,index=death_cross) sr= sr1.append(sr2).sort_index() first_money=100000 money= first_money hold=0 #有多少股的股票 for i in range(0,len(sr)): p = df["open"][sr.index[i]] #單股價格 if sr.iloc[i] == 1: #金叉 buy=(money// (100*p)) #可以買多少手股票 hold += buy*100 #股票數(shù) money-= buy*100*p #剩余多少錢 else: money += hold*p #賣出股票 hold = 0 p = df["close"][-1] now_money= hold*p +money print(now_money)
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。