以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  Python策略交易指令为什么没有执行  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=167643)

--  作者:投资老友-WAN
--  发布时间:2019/1/11 12:08:49
--  Python策略交易指令为什么没有执行

我编的Python模块的策略在免费版和标准版的金字塔上运行时,交易语句没有执行,是在实盘上运行模拟账户,Handle Bar段的代码是:

    Trade=[] 
    for i in context.Label:
        Trade1 = getextdata(i)
        if Trade1 is not(None):
            Trade.append( Trade1 )
            write_logging (i)
            print (Trade1)
        portfolio=get_portfolio (i,0)
        buy_position = portfolio.buy_quantity
        sell_position = portfolio.sell_quantity
        write_logging("Buy position")
        print (buy_position)
        print (context.PO)
        if Trade1==1:
            if sell_position>0:
                buy_close(i, "Market",0,volume=sell_position)
            if buy_position>0 and buy_position<context.PO:
                buy_open(i, "Market", 0, volume=context.PO-buy_position)
            if buy_position>context.PO:
                sell_close(i, "Market",0,volume=buy_position-context.PO)
            if buy_position==0:
                buy_open(i, "Market",0,volume=context.PO)
        if Trade1==0:
            if buy_position>0:
                sell_close(i, "Market",0,volume=buy_position)
            if sell_position>0:
                buy_close(i, "Market",0,volume=sell_position)
        if Trade1==-1:
            if buy_position>0:
                sell_close(i, "Market",0,volume=buy_position)
            if sell_position>0 and sell_position<context.PO:
                sell_open(i, "Market", 0, volume=context.PO-sell_position)
            if sell_position>context.PO:
                buy_close(i, "Market",0,volume=sell_position-context.PO)
            if sell_position==0:
                sell_open(i, "Market", 0, volume=context.PO)

 

说明一下,context.Label是我的合约池,从全局变量得到原来金字塔策略指标的开平仓信号Trade1,然后根据Trade1信号与账户实际仓位发出开平仓指令,合约池的合约代码,全局变量得到的Trade1,都Print出来看了没有问题,有几个品种的Trade<>0且账户无仓位,但是运行中无任何交易发生,请帮分析一下是什么问题???

 


--  作者:FexTel
--  发布时间:2019/1/11 14:39:40
--  
Handle _BAR 里面prinr是已经触发了? 交易日志有没有记录,看是不是下单触发了但是其它原因导致没下单
--  作者:投资老友-WAN
--  发布时间:2019/1/11 14:50:39
--  
Handle Bar触发了,这段代码的Print都显示了,交易日志上显示有信号,但没有交易。我用Get_Account也得到了打开的模拟账户账号,证明账户打开的。
图片点击可在新窗口打开查看此主题相关图片如下:捕获2.jpg
图片点击可在新窗口打开查看

--  作者:投资老友-WAN
--  发布时间:2019/1/11 15:00:59
--  
仔细看一下这个交易日志,市价指令,price=0应该没有问题,但是Accout账号好像没有传递过去。但我在代码里用Get_Account读取过账户,有可以读出账号
图片点击可在新窗口打开查看此主题相关图片如下:捕获3.jpg
图片点击可在新窗口打开查看

--  作者:yukizzc
--  发布时间:2019/1/11 20:26:24
--  

print (context.PO)
print(i)

buy_open(i, "Market",0,volume=context.PO)

 

把下面逻辑注释掉,用这个测试下呢,看下输出数量和品种代码都是怎么样


--  作者:投资老友-WAN
--  发布时间:2019/1/15 8:47:14
--  
我找到了原因,在我程序中,品种代码(如SQRB05)是从我一个选股程序的结果txt文件读出的,后面带了(/N)换行符号,看不出来,但交易指令识别不了,去掉换行符以后就没问题了