vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 91
声望: 14

1.安装Microsoft Visual C++ Build Tools 2017(默认使用C++的桌面开发就可以了),已经安装的不用安装
2.pip install easycython,然后把要加密的策略统一复制到一个文件夹,shift+鼠标右键点击在此处打开powershell窗口。输入easycython *.py,等待编译完成把.cp37-win_amd64删掉,strategyXXXX.pyd这样子,不要更改.cp37-win_amd64前面的名字,否则不能正常引用。
3.单独编译pyd。在策略同目录打开powershell窗口,输入easycython strategyXXXX.py(XXXX是你的策略名) 就可以了
4.修改C:\ProgramData\Anaconda3\Lib\site-packages\vnpy-2.0.5-py3.7.egg\vnpy\app\cta_strategy\engine.py里面的load_strategy_class_from_folder

    #------------------------------------------------------------------------------------------------------------------------
    def load_strategy_class_from_folder(self, path: Path, module_name: str = ""): 
        # 只有文件名中包含strategy且以.py或者.pyd结尾的文件,才是策略文件
        for dirpath, dirnames, filenames in os.walk(str(path)):
            for filename in filenames:
                if filename.endswith(".py"):
                    strategy_module_name = ".".join([module_name, filename.replace(".py", "")])
                    self.load_strategy_class_from_module(strategy_module_name)
                if filename.endswith(".pyd"):
                    strategy_module_name = ".".join([module_name, filename.replace(".pyd", "")])
                    self.load_strategy_class_from_module(strategy_module_name)

5.注意编译成pyd的文件模块引用只能用绝对路径。ctatemlete里面的abc模块要移除,不然ctatemlete编译成pyd其他调用ctatemlete的类可能会出错。
6..编译成pyd,有时'XXX'这样的字符串运行不了得改成"XXX"。

Administrator
avatar
加入于:
帖子: 2154
声望: 99

wow! 这个可以的,cython已经可以这么方便的直接编译pyd了啊

Member
avatar
加入于:
帖子: 4
声望: 2

感谢月总分享!

Member
avatar
加入于:
帖子: 12
声望: 1

高手就是与众不同 ~

Member
avatar
加入于:
帖子: 2
声望: 0

月总牛逼

Member
avatar
加入于:
帖子: 15
声望: 1

请问您这是1.9.2版本的吧?我用2.0.3的,将init加入1.9.2init的代码,显示找不到策略

Member
avatar
加入于:
帖子: 91
声望: 14

5604ab045fd84bd1 wrote:

请问您这是1.9.2版本的吧?我用2.0.3的,将init加入1.9.2init的代码,显示找不到策略
更新了,你看下

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3