金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 548|回复: 3

vba调用python模块中的函数,实现读取pel图表策略信号,返回空列表

[复制链接]

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
发表于 2024-6-22 21:54 | 显示全部楼层 |阅读模式


我在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;










回复

使用道具 举报

1

主题

869

帖子

879

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-6-22 23:25 | 显示全部楼层
get_indicator 不支持在模块中这样调用的。该函数只能在py测试以及策略运行时有效
回复

使用道具 举报

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
 楼主| 发表于 2024-6-23 15:09 | 显示全部楼层
那么就是一个缺陷,因为模块中的代码都是被动调用的,不能自己触发,在python策略中执行,就需要在handle_bar函数中触发,那就必须运行策略
如果能在vba中调用,就能不运行python策略实现数据统计分析之类的盘后操作。
回复

使用道具 举报

1

主题

869

帖子

879

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-6-24 15:07 | 显示全部楼层
handle_bar函数中触发是没问题的,vba中是没法调用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-28 15:01 , Processed in 0.235231 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表