以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- python--学习范例中遇到一个问题 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=172398) |
-- 作者:ricegene -- 发布时间:2019/10/14 12:16:59 -- python--学习范例中遇到一个问题 在金字塔的 python范例,策略范例中的 data_save 范例中 df.to_csv(r"C:/"+csv_name+".csv") 我把注释去掉,编译通过,也可执行,为什么在C盘下般找不到这个对应的CSV文件? 请指教,如何在策略过程中将中间结果输出到csv或输出到print(print 也遇到类似问题,总感觉print语句总是不执行),以方便检查.由于没有提供python的研究模块,让我们这种新手似乎在调试方便总是遇到一些问题,请指教。
# 本Python代码主要用于策略交易 # 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。 #本范例实现用户自行通过数据分析并以自行绘图展现分析结果 #基本思路:在每个月第一个交易日计算月涨幅收益,以及一些常用的财务因子和成交量技术因子,然后绘制热力图来找到有强关联性的因子 #扩展思路:我们可以把多只股票价格作为因子,然后去找有套利关联度的合约做组合。 #使用前注意补充好全市场日线历史数据、基础财务数据及专业财务数据 #推荐使用000001上证指数做基准合约,测试使用日线周期 from PythonApi import * import pandas as pd import numpy as np import matplotlib.pyplot as plt # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现) def init(context): # 在context中保存全局变量 context.last_day = 0 # 初始化保存数据的pandas context.data = [] # before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现) def before_trading(context): pass # 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现) def handle_bar(context): # 开始编写你的主要的算法逻辑。 month = str(context.now.month) month = month if context.now.month>9 else \'0\'+month year = str(context.now.year) #保存的csv文件名 csv_name = year+month sh_code = get_blocks (\'上海A股\',0) sz_code = get_blocks (\'深圳A股\',0) sz_cy_code = get_blocks (\'深圳创业\',0) day = context.now.day if day<context.last_day: #代码列表 code_list = sh_code+sz_code+sz_cy_code #剔除数据量小于一个月的品种 stock = [] for i in code_list: close=history_bars(i,22,\'1d\',\'CLOSE\',True,False,True) get_fin=get_finance(i,60,1,0,0) if len(close)==22 and len(get_fin)>0: stock.append(i) stock_zf = [] #5日成交量均值 stock_vol_ma = [] #5日换手率 stock_vol_change = [] #收益率的22日方差 close_std = [] #这里获取的股票一个月的涨幅,适用于回归,如果有能力也可以判断是涨还是跌适用在分类(或者自行加入涨幅超过多少等等) if len(stock)>0: for i in stock: close = history_bars(i,22,\'1d\',\'CLOSE\',True,False,True) volume = history_bars(i,5,\'1d\',\'volume\',True,False,True) get_fin=get_finance(i,60,1,0,0) change = np.sum(volume) / get_fin[0].values stock_vol_ma.append(np.mean(volume)) stock_vol_change.append(change) close_std.append(np.std(np.diff(close)/close[0])) stock_zf.append((close[-1]-close[0])/close[0]) #质量类因子 #净利率/总收入,销售毛利率,应收账款周转率,净利润增长,存贷款周转率,现金流量净额/净收益 #营业收入增长,现金流量净额增长率,净利润增长 #每股收益,每股营业收入,每股现金净额 indictor = [\'npMARgin\',\'grossMARgin\',\'ARTurnover\',\'niYOY\',\'invenTurnover\',\'nCFOpaOpap\',\'revenueYOY\',\'nCfOpaYOY\',\'niYOY\', \'EPS\',\'tRevPS\',\'nCfOperAPS\'] li1 = fin_indicator(stock,indictor,1,0,0) #基础因子 #营业收入,净利润,销售商品收到的现金 profit = [\'revenue\',\'NIncome\'] cash = [\'CFrSaleGS\'] li2 = fin_profit_std(stock,profit,1,0,0) li3 = fin_cashflow_std(stock,cash,1,0,0) li_total = np.hstack((np.array(li1),np.array(li2))) li_total = np.hstack((li_total,np.array(li3))) df = pd.DataFrame(li_total,index=stock,columns=indictor+profit+cash) df[\'vol_ma\'] = stock_vol_ma df[\'vol_change\'] = stock_vol_change df[\'close_std\'] = close_std df[\'return\'] = stock_zf if len(context.data)==0: context.data = df else: context.data =pd.concat([context.data,df]) #存到数据文件中 df.to_csv(r"C:/"+csv_name+".csv") # after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现) def after_trading(context): context.last_day = context.now.day # order_status当委托下单,成交,撤单等与下单有关的动作时,该方法就会被调用。---(选择实现) #def order_status(context,order): # pass # order_action当查询交易接口信息时返回的通知---(选择实现) #def order_action(context,type, account, datas) # pass # exit函数会在测评结束或者停止策略运行时会被调用。---(选择实现) def exit(context): test_report_none() #读取数据文件 #data = pd.read_csv(r\'C:\\a\\201808.csv\') data = context.data data.drop(data.columns[0], axis=1,inplace=True) plt.figure(figsize=(5,5)) plt.imshow(data.corr(), cmap=plt.cm.hot, vmin=0, vmax=1) plt.xticks(np.arange(19),data.columns,rotation=60) plt.yticks(np.arange(19),data.columns) plt.colorbar() plt.show() |
-- 作者:yukizzc -- 发布时间:2019/10/14 14:57:56 -- 需要补充深度财务数据,我这边刚试了c盘有输出 |
-- 作者:ricegene -- 发布时间:2019/10/16 13:23:56 -- 我是想,按理,即使没有深度财务数据,输出的动作要总要有吧。 实际上,没有输出动作。 那么 我补充一下深度财务数据再来试试。 多谢版主回复。 |