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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → python 期货无法开平仓

   

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


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

主题:python 期货无法开平仓

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


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
python 期货无法开平仓  发帖心情 Post By:2019/2/20 15:03:01 [只看该作者]

我按照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 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

图片没法传上来。
单独调用sell_open(context.s1,'market',volume=1)
也不行。

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2019/2/20 15:12:01 [只看该作者]

代码重新发一个,

1.没有缩进,不知道代理逻辑。

2.存在语法错误,你怎么能能编译通过并测试的?

 



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
小马哥
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
  发帖心情 Post By: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

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


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
  发帖心情 Post By:2019/2/20 15:14:42 [只看该作者]

代码不够整洁,见笑了

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


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
  发帖心情 Post By:2019/2/20 15:16:48 [只看该作者]

可以通过编译的,回测都能运行,回测条件是  测试时段:2019/1/4->2019/2/20 日线  交易模式 期货T+0模式 基准合约 DQY00,其他参数不变。

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2019/2/20 15:21:05 [只看该作者]

平空条件横不成立,自然测试报告中只有开空的委托记录。不会有盈亏这些数据。


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
小马哥
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
  发帖心情 Post By:2019/2/20 15:22:10 [只看该作者]

嗯,我看一下哈。

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


加好友 发短信
等级:新手上路 帖子:6 积分:0 威望:0 精华:0 注册:2019/2/20 13:09:00
  发帖心情 Post By:2019/2/20 15:24:53 [只看该作者]

问题解决了,你说的对,谢谢哈。

 回到顶部