以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  出了什么毛病呢  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=184611)

--  作者:rockyan
--  发布时间: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
--  发布时间:2021/3/10 9:24:40
--  
大概率是没有历史数据,代码中你可以加入一些print去输出信息看下
--  作者:rockyan
--  发布时间:2021/3/10 10:00:35
--  
历史数据包括基础财务数据都是有的,普通策略回测都没有问题的
--  作者:yukizzc
--  发布时间:2021/3/10 10:04:46
--  
你这个只能自己输出看下在一些地方加下print
--  作者:rockyan
--  发布时间:2021/3/10 10:24:46
--  
回测时候能输出print?还是怎么样来运行输出呢
--  作者:yukizzc
--  发布时间:2021/3/10 10:34:59
--  
回测运行到会输出,实盘运行时候运行到也会输出的
--  作者:rockyan
--  发布时间: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
--  发布时间: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
--  发布时间:2021/3/10 13:24:11
--  

直接print不要带后面的参数

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


--  作者:rockyan
--  发布时间:2021/3/10 14:21:28
--  

print(context.num)?

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

利用回测的话