135 lines
4.8 KiB
Python
Executable File
135 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
验证司马懿将军的 vnpy.app 问题是否已解决
|
|
"""
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
def test_vnpy_installation():
|
|
"""测试 vnpy 安装"""
|
|
print("1. 测试 vnpy 安装...")
|
|
|
|
# 测试1: 检查 vnpy 版本
|
|
cmd1 = "ssh admin@192.168.2.154 \"export PATH=\\\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c \\\"import vnpy; print('版本:', vnpy.__version__ if hasattr(vnpy, '__version__') else '未知')\\\"\""
|
|
|
|
print(f" 执行: python -c \"import vnpy; print(vnpy.__version__)\"")
|
|
result = subprocess.run(cmd1, shell=True, capture_output=True, text=True)
|
|
if result.returncode == 0:
|
|
print(f" ✅ {result.stdout.strip()}")
|
|
else:
|
|
print(f" ❌ 失败: {result.stderr.strip()}")
|
|
|
|
# 测试2: 检查 vnpy.app.cta_strategy 导入
|
|
cmd2 = "ssh admin@192.168.2.154 \"export PATH=\\\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c \\\"from vnpy.app.cta_strategy import CtaTemplate; print('导入成功')\\\"\""
|
|
|
|
print(f"\n2. 测试: from vnpy.app.cta_strategy import CtaTemplate")
|
|
result = subprocess.run(cmd2, shell=True, capture_output=True, text=True)
|
|
if result.returncode == 0:
|
|
print(f" ✅ {result.stdout.strip()}")
|
|
return True
|
|
else:
|
|
print(f" ❌ 失败: {result.stderr.strip()}")
|
|
|
|
# 测试备用方案: 使用 vnpy_ctastrategy
|
|
cmd3 = "ssh admin@192.168.2.154 \"export PATH=\\\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c \\\"from vnpy_ctastrategy import CtaTemplate; print('备用导入成功')\\\"\""
|
|
|
|
print(f"\n3. 测试备用方案: from vnpy_ctastrategy import CtaTemplate")
|
|
result = subprocess.run(cmd3, shell=True, capture_output=True, text=True)
|
|
if result.returncode == 0:
|
|
print(f" ✅ {result.stdout.strip()}")
|
|
print(" 💡 建议: 将代码中的 'vnpy.app.cta_strategy' 改为 'vnpy_ctastrategy'")
|
|
return True
|
|
else:
|
|
print(f" ❌ 备用方案也失败: {result.stderr.strip()}")
|
|
return False
|
|
|
|
def test_api_service():
|
|
"""测试 API 服务"""
|
|
print("\n4. 测试 API 服务...")
|
|
|
|
import requests
|
|
try:
|
|
# 测试 API 文档
|
|
response = requests.get("http://192.168.2.154:8088/docs", timeout=5)
|
|
if response.status_code == 200:
|
|
print(" ✅ API 文档可访问")
|
|
else:
|
|
print(f" ❌ API 文档不可访问: {response.status_code}")
|
|
|
|
# 测试回测 API
|
|
url = "http://192.168.2.154:8088/api/backtest/run"
|
|
|
|
# 使用兼容性导入的策略
|
|
strategy_code = '''
|
|
# 使用 vnpy.app.cta_strategy 导入
|
|
from vnpy.app.cta_strategy import CtaTemplate
|
|
|
|
class SimayiTestStrategy(CtaTemplate):
|
|
author = "司马懿测试"
|
|
|
|
def on_init(self):
|
|
self.write_log("✅ 使用 vnpy.app.cta_strategy 导入成功")
|
|
|
|
def on_bar(self, bar):
|
|
self.write_log(f"收到K线: {bar.datetime}")
|
|
'''
|
|
|
|
payload = {
|
|
"strategy_code": strategy_code,
|
|
"symbol": "rb8888.SHFE",
|
|
"start": 20240101,
|
|
"end": 20240101,
|
|
"capital": 100000,
|
|
}
|
|
|
|
response = requests.post(url, json=payload, timeout=10)
|
|
print(f" 回测API响应: {response.status_code}")
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
print(f" ✅ 回测成功: {result.get('msg')}")
|
|
return True
|
|
else:
|
|
print(f" ❌ 回测失败: {response.text[:200]}")
|
|
return False
|
|
|
|
except requests.exceptions.Timeout:
|
|
print(" ❌ API 请求超时")
|
|
return False
|
|
except Exception as e:
|
|
print(f" ❌ 其他错误: {e}")
|
|
return False
|
|
|
|
def main():
|
|
print("🚀 验证司马懿将军的 vnpy.app 问题修复")
|
|
print("="*60)
|
|
|
|
# 测试 vnpy 安装
|
|
vnpy_ok = test_vnpy_installation()
|
|
|
|
# 测试 API 服务
|
|
api_ok = test_api_service()
|
|
|
|
print("\n" + "="*60)
|
|
print("验证结果:")
|
|
print(f" vnpy 安装: {'✅ 通过' if vnpy_ok else '❌ 失败'}")
|
|
print(f" API 服务: {'✅ 通过' if api_ok else '❌ 失败'}")
|
|
|
|
if vnpy_ok and api_ok:
|
|
print("\n🎉 所有问题已修复!")
|
|
print("请通知司马懿将军:")
|
|
print("1. vnpy.app.cta_strategy 导入问题已解决")
|
|
print("2. 回测API可以正常使用")
|
|
print("3. 可以运行测试脚本了")
|
|
else:
|
|
print("\n⚠️ 仍有问题需要修复")
|
|
print("请检查:")
|
|
print("1. Docker容器状态")
|
|
print("2. vn.py安装情况")
|
|
print("3. 服务启动日志")
|
|
|
|
print("="*60)
|
|
|
|
if __name__ == "__main__":
|
|
main() |