沪深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
加了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)
。。。
范例策略,单因子,加了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')
直接print不要带后面的参数
金字塔这边的python对于print有一些特殊不支持这种用法
print(context.num)?
那这个打印出来的东西,我再哪里可以看到呢
利用回测的话