Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共15 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:出了什么毛病呢

1楼
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
   

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

。。。

8楼
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')

9楼
yukizzc 发表于:2021/3/10 13:24:11

直接print不要带后面的参数

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

10楼
rockyan 发表于:2021/3/10 14:21:28

print(context.num)?

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

利用回测的话

共15 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.