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"。