#%%导入包
import tushare as ts
import datetime
import pandas as pd
import numpy as np
import akshare as ak
import warnings
warnings.filterwarnings("ignore")#获取北向资金数据
df_data2= ak.stock_em_hsgt_north_acc_flow_in(indicator="北上")
df_data2['value']=df_data2['value'].astype(float)#指定策略
df_data2['signal']= 0
df_data2['up_line']= 0
df_data2['down_line']= 0
for index,row in df_data2.iterrows():if index<252:continuedf_data_temp = df_data2.iloc[index-252:index]average = df_data_temp['value'].sum()/252std = df_data_temp['value'].std()df_data2['up_line'][index]= float(format(average + std * 1,'.4f'))df_data2['down_line'][index] = float(format(average - std * 1,'.4f'))if df_data2['value'][index] > df_data2['up_line'][index]:df_data2['signal'][index] = 1elif df_data2['value'][index] < df_data2['down_line'][index]:df_data2['signal'][index] = 0#获取IF指数期货
# IF = ak.get_futures_daily(start_date='20180101',end_date=datetime.datetime.today().strftime('%Y%m%d'),market='CFFEX',index_bar=True)
# IF = IF[IF.symbol=='IC99']#股票数据,采用北上资金信号
# stock = ak.stock_zh_a_daily(symbol="sz000001", start_date='20180101', end_date = datetime.datetime.today().strftime('%Y%m%d'), adjust="hfq").reset_index()
# stock['date'] = stock['date'].apply(lambda x : datetime.datetime.strptime(str(x),'%Y-%m-%d %H:%M:%S').strftime('%Y%m%d'))
# last = pd.merge(df_data2,stock,on='date')#etf基金
etf = ak.fund_etf_hist_sina(symbol="sz159801")
etf2= ak.fund_etf_hist_sina(symbol="sz159807")
etf['date'] =etf['date'].apply(lambda x:str(x))
etf2['date'] =etf2['date'].apply(lambda x:str(x))
# etf['date'] = etf['date'].apply(lambda x : datetime.datetime.strptime(str(x),'%Y-%m-%d').strftime('%Y%m%d'))
# etf2['date'] = etf2['date'].apply(lambda x : datetime.datetime.strptime(str(x),'%Y-%m-%d').strftime('%Y%m%d'))
# etf['date'] = etf['date'].apply(lambda x : datetime.datetime.strptime(str(x),'%Y-%m-%d %H:%M:%S').strftime('%Y%m%d'))
# etf2['date'] = etf2['date'].apply(lambda x : datetime.datetime.strptime(str(x),'%Y-%m-%d %H:%M:%S').strftime('%Y%m%d'))
last = pd.merge(pd.merge(df_data2,etf,on='date'),etf2,on='date')#画图查看资金曲线
last['returns'] = (last['close_x']/last['open_x']-1)+(last['close_y']/last['open_y']-1)
(last['returns']/2 * last['signal'].shift(-1)).cumsum().plot()