以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  vba接收python返回array的一个大bug  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=185159)

--  作者:netwalker
--  发布时间:2021/4/13 11:36:47
--  vba接收python返回array的一个大bug
vbs 在 drawTrend分别调用python的 tzero_index和tzero_price方法,取得走势起点和终点的index和price,然后画线

vbs代码

sub drawTrend(i)
Set Grid = Technic.GetGridByName("Main")
Set tzero_index = CreateObject("Stock.Array")
Set tzero_price = CreateObject("Stock.Array")
set tzero_index = py.CallObject("tzero_index",0) 
If IsEmpty(tzero_index) Then
Msg = py.GetErrorInfo()
Application.MsgOut Msg
Set Msg = Nothing   \'使用完毕需要 Set Nothing销毁以免出现内存泄漏
Exit Sub
End If

set tzero_price = py.CallObject("tzero_price",0) 
If IsEmpty(tzero_price) Then
Msg = py.GetErrorInfo()
Application.MsgOut Msg
Set Msg = Nothing   \'使用完毕需要 Set Nothing销毁以免出现内存泄漏
Exit Sub
End If
tmp_count=tzero_index.Count-2
out tmp_count
for i=0 to tmp_count
start_index=tzero_index.GetAt(i)
out "start:" & start_index & ",end:" & cstr(tzero_index.GetAt(i+1))
next

end Sub

python代码

def tzero_index(i):
    #print("i:{},type:{}".format(i,type(i)))
    global kcm
    tdm = kcm.gms[i].tdm
    p_index = tdm.start_index
    p_index.append(tdm.end_index[-1])
    print(p_index)
    return p_index
    
    
def tzero_price(i):
    global kcm
    tdm = kcm.gms[i].tdm
    p_price = tdm.start_price
    p_price.append(tdm.end_price[-1])
    #print(p_price)
    return p_price 

当调用tzero_index.getat方法时,读的是tzero_price的数据。
试了一下,如果我只调用python的tzero_index方法,就可以正确读出数据。

图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2021-04-13_11-35-55.jpg
图片点击可在新窗口打开查看


--  作者:yukizzc
--  发布时间:2021/4/13 13:10:20
--  
我这样美哟问题,返回的你看下呢
图片点击可在新窗口打开查看此主题相关图片如下:{6dd8hj{1834av}f7%v20g.png
图片点击可在新窗口打开查看

--  作者:netwalker
--  发布时间:2021/4/13 15:16:36
--  
试一下两个方法传进去的是array,传出来的也是array看看?
--  作者:yukizzc
--  发布时间:2021/4/13 17:06:10
--  
创建两个对象分别去引用
图片点击可在新窗口打开查看此主题相关图片如下:jy6u96c{)x8`idjj`}@yiuu.png
图片点击可在新窗口打开查看