以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- python 期货无法开平仓 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=168323) |
-- 作者:小马哥 -- 发布时间:2019/2/20 15:03:01 -- python 期货无法开平仓 我按照python api写了个策略试试水,委托发现下单成功但是,但是总体概要 等页面各种结果数据都没有显示。请高手帮忙看看。 代码如下: # 本Python代码主要用于策略交易 # 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。 from PythonApi import * import talib # 参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现) #def parameter(): # input_par("myvalues1",5,1,20,1) # input_par("myvalues2",10,1,20,1) # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现) def init(context): # 在context中保存全局变量 #context.s1 = "SQRB00" context.s1 = "DQY00" context.OBSERVATION = 10 context.sell_qty_limit = 30 context.buy_qty_limit = 30 context.HIGH_RSI = 80 context.LOW_RSI = 20 print(context.s1) print("策略启动") #调试打印输出 # before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现) def before_trading(context): pass # 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现) def handle_bar(context): # 开始编写你的主要的算法逻辑。 #使用buy_open、sell_close等方法下单 #下单示例: #buy_open(context.s1, "Market", volume = 100) # 市价开多 #buy_open(context.s1, "Limit", 25.45, 100) # 限价开多 prices = history_bars(context.s1,context.OBSERVATION+1, \'1d\', \'close\',True) #write_logging(close) sell_qty = get_portfolio(context.s1,0).buy_quantity buy_qty = get_portfolio(context.s1,0).sell_quantity rsi_data = talib.RSI(prices, timeperiod=context.OBSERVATION)[-1] #print(rsi_data) if rsi_data > context.HIGH_RSI and sell_qty sell_open(context.s1,\'market\',volume=1) logger.info(\'卖开仓\') logger.info(sell_qty) if rsi_data <60 and sell_qty!= 0: logger.info(rsi_data) buy_close(context.s1,\'market\',volume = sell_qty) logger.warn(\'卖平仓\') pass # close = history_bars(context.s1, context.long_period+1, \'self\', \'close\',True) #buy_open("SZ000001", "Market",0 ,100) # after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现) def after_trading(context): pass # order_status当委托下单,成交,撤单等与下单有关的动作时,该方法就会被调用。---(选择实现) #def order_status(context,order): # pass # order_action当查询交易接口信息时返回的通知---(选择实现) #def order_action(context,type, account, datas) # pass # exit函数会在测评结束或者停止策略运行时会被调用。---(选择实现) #def exit(context): # pass 也不行。
|
-- 作者:wenarm -- 发布时间:2019/2/20 15:12:01 -- 代码重新发一个, 1.没有缩进,不知道代理逻辑。 2.存在语法错误,你怎么能能编译通过并测试的?
|
-- 作者:小马哥 -- 发布时间:2019/2/20 15:13:54 -- # 本Python代码主要用于策略交易 # 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。 from PythonApi import * import talib # 参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现) #def parameter(): # input_par("myvalues1",5,1,20,1) # input_par("myvalues2",10,1,20,1) # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现) def init(context): # 在context中保存全局变量 #context.s1 = "SQRB00" context.s1 = "DQY00" context.OBSERVATION = 10 context.sell_qty_limit = 30 context.buy_qty_limit = 30 context.HIGH_RSI = 80 context.LOW_RSI = 20 print(context.s1) print("策略启动") #调试打印输出 # before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现) def before_trading(context): pass # 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现) def handle_bar(context): # 开始编写你的主要的算法逻辑。 #使用buy_open、sell_close等方法下单 #下单示例: #buy_open(context.s1, "Market", volume = 100) # 市价开多 #buy_open(context.s1, "Limit", 25.45, 100) # 限价开多 prices = history_bars(context.s1,context.OBSERVATION+1, \'1d\', \'close\',True) #write_logging(close) sell_qty = get_portfolio(context.s1,0).buy_quantity buy_qty = get_portfolio(context.s1,0).sell_quantity rsi_data = talib.RSI(prices, timeperiod=context.OBSERVATION)[-1] #print(rsi_data) if rsi_data > context.HIGH_RSI and sell_qty<context.sell_qty_limit: logger.info(rsi_data) sell_open(context.s1,\'market\',volume=1) logger.info(\'卖开仓\') logger.info(sell_qty) if rsi_data <60 and sell_qty!= 0: logger.info(rsi_data) buy_close(context.s1,\'market\',volume = sell_qty) logger.warn(\'卖平仓\') pass # close = history_bars(context.s1, context.long_period+1, \'self\', \'close\',True) #buy_open("SZ000001", "Market",0 ,100) # after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现) def after_trading(context): pass # order_status当委托下单,成交,撤单等与下单有关的动作时,该方法就会被调用。---(选择实现) #def order_status(context,order): # pass # order_action当查询交易接口信息时返回的通知---(选择实现) #def order_action(context,type, account, datas) # pass # exit函数会在测评结束或者停止策略运行时会被调用。---(选择实现) #def exit(context): # pass
|
-- 作者:小马哥 -- 发布时间:2019/2/20 15:14:42 -- 代码不够整洁,见笑了 |
-- 作者:小马哥 -- 发布时间:2019/2/20 15:16:48 -- 可以通过编译的,回测都能运行,回测条件是 测试时段:2019/1/4->2019/2/20 日线 交易模式 期货T+0模式 基准合约 DQY00,其他参数不变。 |
-- 作者:wenarm -- 发布时间:2019/2/20 15:21:05 -- 平空条件横不成立,自然测试报告中只有开空的委托记录。不会有盈亏这些数据。 |
-- 作者:小马哥 -- 发布时间:2019/2/20 15:22:10 -- 嗯,我看一下哈。 |
-- 作者:小马哥 -- 发布时间:2019/2/20 15:24:53 -- 问题解决了,你说的对,谢谢哈。 |