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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 出了什么毛病呢

   

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


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

主题:出了什么毛病呢

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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
出了什么毛病呢  发帖心情 Post By:2021/3/9 23:11:22 [只看该作者]

沪深300,市值前五买入

代码如下,但是回测,没有交易记录,哪里错了呢?

另外,有没有类似调试数据输出的办法呢

 

#比较简单的根据市值前五买入的策略,只选取排名前5的进行轮动调仓。
#使用前注意补充好300样本股历史数据及专业财务数据
#推荐使用000001上证指数做基准合约

import time
import os
import csv
import numpy as np
import talib as ta

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    #买入的股票数
    context.num = 5
    context.code = []
   
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    #选取300成份样本股作为股票池
    try:
        context.code = get_blocks("沪深300样本股",1)
    except:
        pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        top5 = []
        code = []
        zszhj = []
        #300个股票市值形成数列
        for i in context.code:
            get_fin2 = get_finance(i,2,1,0,0)
            close = history_bars(i, 1, '1d','close')
            zsz = close*get_fin2
            zszhj.appand(zsz)
        #确定市值第六股票的市值
        zszhj.sort(reverse=True)
        sz6 = zszhj[5]

        #市值大于300个股票中市值第六的股票进入buy_list
        for i in context.code:
            get_fin2 = get_finance(i,2,1,0,0)
            close = history_bars(i, 1, '1d','close')
            zsz = close*get_fin2
            if zsz>sz6:
                buylist = code.appand[i]

        sell_num = 0
        #获得持仓品种信息
        ho =get_portfolio_book(0)
        if len(ho)>0:
            for k in ho:
                if not(k in buy_list):
                        sell_close(k, 'Market', 0, 100, 0,serial_id = 1)
                        sell_num = sell_num+1
        for kk in buy_list:
            if not(kk in ho):
                buy_open(kk, 'Market', 0, 100, 0,serial_id = 2)
    except:
        pass

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass
   


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


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

大概率是没有历史数据,代码中你可以加入一些print去输出信息看下

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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
  发帖心情 Post By:2021/3/10 10:00:35 [只看该作者]

历史数据包括基础财务数据都是有的,普通策略回测都没有问题的

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


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

你这个只能自己输出看下在一些地方加下print

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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
  发帖心情 Post By:2021/3/10 10:24:46 [只看该作者]

回测时候能输出print?还是怎么样来运行输出呢

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


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

回测运行到会输出,实盘运行时候运行到也会输出的

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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
  发帖心情 Post By:2021/3/10 10:48:09 [只看该作者]

加了print,回测,打开文件text.txt,是一个空白文件

连定义的context.num都输不出来

什么原因呢?

 

...

import time
import os
import csv
import numpy as np
import talib as ta

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    #买入的股票数
    context.num = 5
    context.code = []
   
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    #选取300成份样本股作为股票池
    try:
        context.code = get_blocks("沪深300样本股",1)
    except:
        pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        top5 = []
        code = []
        zszhj = []
        f = open(r"F:\text.txt","w")
        #300个股票市值形成数列
        for i in context.code:
            get_fin2 = get_finance(i,2,1,0,0)
            close = history_bars(i, 1, '1d','close')
            zsz = close*get_fin2
            zszhj.appand(zsz)
        #确定市值第六股票的市值
        zszhj.sort(reverse=True)
        print(context.code[:6],file=f)
        print(context.num,file=f)
        sz6 = zszhj[5]
        print(sz6,file=f)

。。。


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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
  发帖心情 Post By:2021/3/10 11:50:55 [只看该作者]

范例策略,单因子,加了print,也是什么都没有输出,添加的语句下面黑体

到底是什么原因呢?

 

。。。

def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    try:
        f = open(r"F:\text1.txt","w")
        print(context.num,file=f)
        f.close()

        pe = []
        code = []
        #筛选非停牌且eps大于0的票
        for i in context.code:
            close = history_bars(i, 1, '1d','close')


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


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

直接print不要带后面的参数

金字塔这边的python对于print有一些特殊不支持这种用法


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


加好友 发短信
等级:黑侠 帖子:611 积分:0 威望:0 精华:0 注册:2015/9/11 9:51:55
  发帖心情 Post By:2021/3/10 14:21:28 [只看该作者]

print(context.num)?

那这个打印出来的东西,我再哪里可以看到呢

利用回测的话


 回到顶部
总数 15 1 2 下一页