# Python组件开发指南


# Demo样例

  • Smart SDK的所有API均通过内置对象smart使用,正如window对象为内置对象一样,可直接使用smart对象下的属性及方法 具体用法参考Smart SDK API文档以及Smart SDK API示例
from smart import *
import time
from datetime import datetime
import logging
from smart.type import AccountType
from smart import *
import time
from datetime import datetime
import logging
from smart.type import AccountType
logger = logging.getLogger()

def init():
    #接收委托推送 
    def callback1(order):
        logger.debug("get on_order: %s",smart.utils.toString(order))
    smart.current_account.on_order(callback1)

    def callback2(trade):
        logger.debug("get on_trade: %s",smart.utils.toString(trade))
    smart.current_account.on_trade(callback2)

    def callback3(assets):
        logger.debug("get on_assets: %s",smart.utils.toString(assets))
    smart.current_account.on_assets(callback3)

    def callback4(position):
        logger.debug("get on_position: %s",smart.utils.toString(position))
    smart.current_account.on_position(callback4)

    account_id = None
    side = smart.Type.Side.Buy

    #下委托单
    def insert_callback(order,err):
        logger.debug("get insert_order: %s",smart.utils.toString(order))
    #code参数下单
    smart.insert_order(code="600918.SH",limit_price = 7.03,volume = 200,side=side,callback = insert_callback)

    #批量订阅股票
    smart.subscribe(codes= ["600000.SH","000001.SZ"])

    def callback(quote):
        logger.debug("subscribeTest【OK】:%s",smart.utils.toString(quote))
    smart.on(smart.Event.ON_QUOTE,callback)
    

def show():
   logger.debug("show")
def hide():
    logger.debug("hide")
def close():
    logger.debug("close")

smart.on_init(init)
smart.on_show(show)
smart.on_hide(hide)
smart.on_close(close)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 组件安全说明

  • 每个组件独立运行,组件之间、组件与客户端主程序之间彼此互不影响
  • python组件均为私有模式

# 组件开发的技术体系

组件使用标准Web前端技术进行开发,按照开发文档的API及接入规范进行开发,即可挂载到SmartX客户端作为私有组件使用,进行组件开发主要使用以下技术体系:

  • cpython 3.9.10

# UI展现开发

  • python组件可以通过js的UI组件进行交互通信。

# 申请测试账号

  • XTP官网 (opens new window) 注册用户
  • 注册成功并登陆后,到 个人中心 (opens new window) 填写测试账户申请单,申请测试系统选中"XTP简单交易客户端"(若您需要使用kungfu进行后台策略的开发,还需要勾选"Kungfu"
  • 填写完毕申请信息后点击提交申请。系统在一个工作日内将自动将测试账号、密码发到您第一步注册网站用户时填写的邮箱中,请注意查收。
  • 下载中心 (opens new window)下载 "极速交易客户端(SmartX)"以及操作手册

# 权限申请

  • 若您需要使用客户端Python组件进行策略的开发,需要向客户经理申请开通客户端Python组件权限

# 创建工程

  • 打开SmartX客户端,登录地址选择smarttest.ztqft.com,输入测试账号、密码登录后,在左侧一级菜单的扩展中,选择安装的组件,点击新建扩展组件按钮新建组件,按照提示填写内容完成项目的建立

新建pythonDemo组件

# 克隆、导出、导入组件

  • 在已安装的组件列表中点击按钮克隆以当前组件为模板克隆生成新组件
  • 在已安装的组件列表中点击按钮导出将当前组件压缩为zip包导出到客户指定的目录
  • 在已安装的组件列表中通过复选框选中要批量导出的组件然后点击按钮批量导出将选中组件分别压缩为zip包并批量导出到客户指定目录
  • 点击按钮导入扩展组件在弹出的文件选择窗口中按住ctrl或shift键批量选中待导入组件的zip包进行组件导入

# 搭建开发环境

  • Python代码文件保存后,重新启动即可运行修改后的程序

新建pythonDemo组件

  • 如果同时需要配合使用JS组件开发,还需要配置JS运行环境:
    • 安装 node.js官方地址 (opens new window),项目依赖 node.js运行环境,客户需要在本地安装node.js(10.9.0~12.0.0)
    • 安装完毕后打开命令行工具,进入到保存项目路径 C:\Users\DELL\.xtp-smart\plugins\PythonDemo(在已安装的组件列表中点击图标目录可查看本机保存项目路径)
    • 执行 npm install 安装工程的依赖库
    • 安装完成后,即可执行 npm run build 对当前项目进行构建编译,后续开发的时候也将使用此命令进行构建编译

# 运行

  • 打开SmartX客户端,登录地址选择smarttest.ztqft.com,输入测试账号、密码登录后,在左侧一级菜单的"扩展"中,即可出现您的组件,点击进行运行,点击"打开"小按钮进行运行

# SmartX-Studio开发和调试

  • 编辑:打开登录SmartX客户端,选择扩展菜单,在已安装的组件列表中,点击图标ide即可打开SmartX-Studio编辑组件源码

  • 调试方式1:点击已安装组件列表中的调试按钮,即可直接断点调试python组件。

  • 调试方式2:点击已经打开的SmartX-Studio的调试面板下的附加调试按钮,选择要调试的窗口(如果窗口未登录则需要输入账号和密码登录),然后进入到断点调试状态。 SmartX-Studio调试

  • 关于SmartX-Studio的组件市场的配置,软件默认的组件市场服务器为open-vsx,客户可以根据自己的需求选择其他的组件服务器市场,编辑product.json,然后重启软件即可。

  • SmartX-Studio/resources/app/product.json:

      "extensionsGallery": {
          "serviceUrl": "https://open-vsx.org/vscode/gallery",
          "itemUrl": "https://open-vsx.org/vscode/item"
      },
    
    1
    2
    3
    4
  • 详细教程参考:

https://zhuanlan.zhihu.com/p/648148479 (opens new window)
https://www.cnblogs.com/CodeGear/p/16002778.html (opens new window)