欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → python--学习范例中遇到一个问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2534人关注过本帖树形打印复制链接

主题:python--学习范例中遇到一个问题

帅哥哟,离线,有人找我吗?
ricegene
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:248 积分:1141 威望:0 精华:0 注册:2009/10/14 17:36:21
python--学习范例中遇到一个问题  发帖心情 Post By:2019/10/14 12:16:59 [只看该作者]

在金字塔的 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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/10/14 14:57:56 [只看该作者]

需要补充深度财务数据,我这边刚试了c盘有输出

 回到顶部
帅哥哟,离线,有人找我吗?
ricegene
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:248 积分:1141 威望:0 精华:0 注册:2009/10/14 17:36:21
  发帖心情 Post By:2019/10/16 13:23:56 [只看该作者]

我是想,按理,即使没有深度财务数据,输出的动作要总要有吧。
实际上,没有输出动作。

那么
我补充一下深度财务数据再来试试。
多谢版主回复。


 回到顶部