等级: 免费版
- 注册:
- 2021-6-3
- 曾用名:
|
我在python模块中,模块名称为jzt_getflag,写了一个函数:
功能就是读取图表策略的信号
from PythonApi import *
def test1():
flag=get_indicator("SQRB00","测试策略",['信号'],'0',"5m",10,include_now=True) #取策略的信号
print(f'读取的信号:{flag}')
然后在vba项目中调用这个python模块中的test1函数,结果返回的是空列表
下面是vba代码:
sub Application_vbastart()
getflagbypy
end sub
Sub getflagbypy()
'第一步,建立一个Stock.Python对象p
set p=CreateObject("Stock.Python")
'第二步,使用对象变量p的ImportModule方法导入模块
ret=p.ImportModule("jzt_getflag")
if ret<>1 then '如果返回值不等于1,说明出错了
'获取错误信息
errmsg=p.GetErrorInfo()
APPLICATION.MsgOut errmsg
set errmsg = nothing
exit sub
end if
'使用p对象的CallObject方法调用Python模块中的函数,传递参数
d=p.CallObject("test1")
if IsEmpty(d) then
errmsg=p.GetErrorInfo()
APPLICATION.MsgOut errmsg
set errmsg = nothing
exit sub
end if
end sub
而使用Python策略,调用py模块中的test1就行,代码如下:
from PythonApi import *
from jzt_getflag import *
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
test1()
这个就正常输出了信号列表。
请技术人员帮助排查一下vba调用python模块,获取信号功能的bug。
为了减少你的测试时间,附上pel测试策略:
MA5:=MA(C,5);
MA15:=MA(C,15);
KD:=CROSS(MA5,MA15); //开多条件
PD:=CROSS(MA15,MA5); //平多条件
KK:=PD; //开空条件
PK:=KD; //平空条件
平空:SELLSHORT(PK,1,THISCLOSE); //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE); //开多信号
平多:SELL(PD,1,THISCLOSE); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE); //开空信号
信号:holding,linethick0;
|
|