# JS组件示例合集

从最简单的HelloWorld到复杂的策略下单,通过一系列的组件示例由浅入深的展示组件中各个接口与工具的使用。

开发组直接工作在Github (opens new window)上,所有代码细节通通展示给你。也欢迎你的PR。

如果你对Smart组件开发并没有了解,推荐按照列表的顺序查看各个组件的实现,由浅入深的了解我们的组件体系。

组件示例还在不断丰富中,有什么想了解的,可以随时联系我们。

# 项目搭建类

通过项目演进,了解各个文件作用。熟悉整个结构后,可以使用脚手架工具@xtp-smart/cli快速生成项目。

  • hello-world: 没有任何逻辑,只显示"Hello World"字样
  • todomvc-jquery: 不调用任何SDK中的API,引用自TodoMVC (opens new window)中的JQuery (opens new window)实现
  • webpack-typescript: 使用webpack编译typescript语言,直接生成调式或生产版本的组件。

# API类

  • lifecycle: 展示组件的生命周期
  • quote: 获取行情信息的组件
  • kungfu: 操作存放在机房的KungFu策略
  • notification-sound: 组件在后台发送通知,特别是在组件在后台运行的情况下。

# UI类

  • charts: 使用Echarts图标组件展示交易数据。

# 基础API示例

# 订阅行情及接收行情推送

// 订阅
smart.current_account.subscribe(['600000'], smart.Type.Exchange.SSE);
// 接收行情
smart.current_account.on_quote(quote=>{
    console.log("quote为", JSON.stringify(quote));
    // 输出:
    // {
    //     "source_id": "xtp",
    //     "trading_day": "20230912",
    //     "rcv_time": "20230912094203000",
    //     "data_time": "20230912094203000",
    //     "instrument_id": "600000",
    //     "exchange_id": "SSE",
    //     "instrument_type": 1,
    //     "pre_close_price": 7.04,
    //     "pre_settlement_price": null,
    //     "last_price": 7.04,
    //     "volume": 960295,
    //     "turnover": 6764965.800000001,
    //     "pre_open_interest": null,
    //     "open_interest": null,
    //     "open_price": 7.03,
    //     "high_price": 7.06,
    //     "low_price": 7.03,
    //     "upper_limit_price": 7.74,
    //     "lower_limit_price": 6.34,
    //     "close_price": 0,
    //     "settlement_price": null,
    //     "bid_price": [ 7.04, 7.03, 7.02, 7.01, 7, 0, 0, 0, 0, 0 ],
    //     "ask_price": [ 7.05, 7.06, 7.07, 7.08, 7.09, 0, 0, 0, 0, 0 ],
    //     "bid_volume": [ 152105, 402300, 486400, 748600, 1566800, 0, 0, 0, 0, 0 ],
    //     "ask_volume": [ 85700, 568000, 178600, 322300, 619300, 0, 0, 0, 0, 0 ],
    //     "avg_price": 7.044674605199445,
    //     "iopv": 0,
    //     "instrument_status": "T111",
    //     "code": "600000.SH"
    // }

    // 取消订阅
    smart.current_account.unsubscribe([quote.instrument_id], quote.exchange_id);
});
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

# 订阅指数行情及接收指数行情推送

// 订阅指数行情
smart.current_account.subscribe_index(["000001", "CESCPD", "931646"]);
// 接收指数行情
smart.current_account.on_quote(quote => {
    if(quote.instrument_type == smart.Type.InstrumentType.Index){
        console.log("quote为",JSON.stringify(quote));
        // 输出:
        // {
        //     "source_id": "xtp",
        //     "trading_day": "20240403",
        //     "rcv_time": "20240403102829740",
        //     "data_time": "20240403102829740",
        //     "instrument_id": "000001",
        //     "exchange_id": "SSE",
        //     "instrument_type": 5,
        //     "pre_close_price": 3074.9586,
        //     "pre_settlement_price": null,
        //     "last_price": 3063.8628,
        //     "volume": 168518138,
        //     "turnover": 180227286056.7,
        //     "pre_open_interest": null,
        //     "open_interest": null,
        //     "open_price": 3074.8929,
        //     "high_price": 3079.02,
        //     "low_price": 3061.9143,
        //     "upper_limit_price": 0,
        //     "lower_limit_price": 0,
        //     "close_price": 0,
        //     "settlement_price": null,
        //     "bid_price": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        //     "ask_price": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        //     "bid_volume": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        //     "ask_volume": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        //     "avg_price": 0,
        //     "iopv": 0,
        //     "instrument_status": "        ",
        //     "code": "000001.SH"
        // }

        // 取消订阅指数行情
        smart.current_account.unsubscribe_index([quote.instrument_id]);
    }
});
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

# 委托下单

let order = await smart.current_account.insert_order(
    '600000',
    smart.Type.Exchange.SSE,
    7.03,
    100,
    smart.Type.PriceType.Limit,
    smart.Type.Side.Buy,
    smart.Type.Offset.Init
);
console.log("order为", JSON.stringify(order));
// 输出:
// {
//     "rcv_time": "undefined",
//     "order_id": "37906458003637256",
//     "source_order_id": "37906458003637256",
//     "insert_time": "undefined",
//     "update_time": "undefined",
//     "trading_day": "undefine",
//     "instrument_id": "600000",
//     "exchange_id": "SSE",
//     "account_id": "253191000961",
//     "client_id": "44b571e1-507d-11ee-9eb1-e1cdb10f52b8",
//     "instrument_type": 1,
//     "limit_price": 7.03,
//     "frozen_price": 7.03,
//     "volume": 100,
//     "volume_traded": 0,
//     "volume_left": 100,
//     "tax": null,
//     "commission": null,
//     "status": 1,
//     "side": 1,
//     "offset": 100,
//     "price_type": 1,
//     "volume_condition": 0,
//     "time_condition": 2,
//     "parent_order_id": "",
//     "code": "600000.SH",
//     "traffic": "front",
//     "traffic_sub_id": "JSDemo-_dev_",
//     "cancel_time": "undefined",
//     "order_cancel_client_id": "undefined",
//     "instrument_name": "浦发银行",
//     "trade_amount": 0,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_CASH",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "xtp_price_type": "XTP_PRICE_LIMIT",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_BUY",
//     "xtp_order_status": "XTP_ORDER_STATUS_INIT",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "股票",
//     "status_name": "初始化",
//     "side_name": "买",
//     "offset_name": "初始值",
//     "price_type_name": "限价",
//     "xtp_business_type_name": "普通股票",
//     "xtp_market_name": "沪A",
//     "xtp_price_type_name": "限价",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "买",
//     "xtp_order_status_name": "初始化",
//     "volume_condition_name": "任何数量",
//     "time_condition_name": "本节有效",
//     "traffic_name": "客户端策略",
//     "business_type": "front"
// }
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
59
60
61
62
63
64
65
66
67

# 委托撤单

const order_id = "37906458003637263";
let result = await smart.current_account.cancel_order(order_id);
console.log("result为", JSON.stringify(result));
//输出:{"orderXtpId":"37906458003637263","userName":"253191000961","requestID":"cancelOrder_13"}
1
2
3
4

# 订阅及取消订阅ETF折溢价预期利润

let profitList = await smart.subscribeETFProfit(); // 订阅并返回ETF预期利润等信息
console.log(JSON.stringify(profitList[0]));
// 输出:
// {
//     "instrument_id": "159601",
//     "iopv": 0.7242999999999999,
//     "iopv_buy": 0.7238,
//     "iopv_sale": 0.7245,
//     "diopv": 0.7242,
//     "dis_profit": -4824.784780000167,
//     "pre_profit": -2065.677600000065
// }
smart.on(smart.Event.ON_ETF_PROFIT, etfProfit => { // 接收ETF预期利润等信息推送
    console.log(JSON.stringify(etfProfit));
    // 输出:
    // {
    //     "instrument_id": "159971",
    //     "iopv": 1.3420999999999998,
    //     "iopv_buy": 1.3414,
    //     "iopv_sale": 1.3428,
    //     "diopv": 1.3421,
    //     "dis_profit": -11039.280519999907,
    //     "pre_profit": -18191.886200000095
    // }
})
smart.unsubscribeETFProfit(); // 取消订阅ETF折溢价预期利润
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

# 查询证券信息根据证券代码和交易所

let instrument = smart.getInstrument('600000', smart.Type.Exchange.SSE);
console.log("instrument为",JSON.stringify(instrument));
// 输出:
// {
//     "instrument_id": "600000",
//     "instrument_name": "浦发银行",
//     "instrument_type": "Stock",
//     "instrument_type_ext": "XTP_SECURITY_MAIN_BOARD",
//     "exchange_id": "SSE",
//     "exchange_id_name": "上交所",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "name_py": "pfyh",
//     "price_tick": 0.01,
//     "precision": 2,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 100,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 100,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 7.04,
//     "upper_limit_price": 7.74,
//     "lower_limit_price": 6.340000000000001,
//     "is_registration": false,
//     "kw": "浦发银行",
//     "code": "600000.SH",
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 查询可交易的ETF列表

获取可交易的ETF列表

let etfList = await smart.getETFList();
console.log(JSON.stringify(etfList[0]));
// 输出:
// {
//     "instrument_id": "159601",
//     "instrument_name": "A50ETF",
//     "instrument_type": "Fund",
//     "instrument_type_ext": "XTP_SECURITY_ETF_INTER_MARKET_STOCK",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "a50etf",
//     "price_tick": 0.001,
//     "precision": 3,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 100,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 100,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 0.77,
//     "upper_limit_price": 0.8470000000000001,
//     "lower_limit_price": 0.6930000000000001,
//     "is_registration": false,
//     "kw": "A50ETF",
//     "code": "159601.SZ",
//     "cash_component": 498.65,
//     "estimate_amount": 5110.65,
//     "max_cash_ratio": 0.5,
//     "net_value": 0.7699,
//     "redemption_status": 1,
//     "total_amount": 2001836.65,
//     "unit": 2600000,
//     "basket": [],
//     "marketType": "XTP_MKT_SZ_A",
//     "etf": "159601",
//     "etfName": "A50ETF",
//     "subscribeRedemptionTicker": "159601",
//     "subscribeStatus": 1,
//     "redemptionStatus": 1,
//     "maxCashRatio": 0.5,
//     "estimateAmount": 5110.65,
//     "cashComponent": 498.65,
//     "netValue": 0.7699,
//     "totalAmount": 2001836.65,
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 查询ETF成分股列表

获取ETF成分股列表

  • instrument_id String(必填) - ETF代码
let list = await smart.getETFBasket("159601");
console.log(JSON.stringify(list[0]));
// 输出:
// {
//     "instrument_id": "601601",
//     "instrument_name": "中国太保",
//     "instrument_type": "Stock",
//     "instrument_type_ext": "XTP_SECURITY_MAIN_BOARD",
//     "exchange_id": "SSE",
//     "exchange_id_name": "上交所",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "name_py": "zgtb",
//     "price_tick": 0.01,
//     "precision": 2,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 100,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 100,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 29.86,
//     "upper_limit_price": 32.85,
//     "lower_limit_price": 26.87,
//     "is_registration": false,
//     "kw": "中国太保",
//     "code": "601601.SH",
//     "amount": 0,
//     "creation_amount": 0,
//     "creation_premium_ratio": 0.1,
//     "premium_ratio": 0.1,
//     "quantity": 700,
//     "redemption_amount": 0,
//     "redemption_discount_ratio": 0.1,
//     "replace_type": "ERT_CASH_OPTIONAL",
//     "ticker": "159601",
//     "marketType": "XTP_MKT_SZ_A",
//     "componentTicker": "601601",
//     "componentName": "中国太保",
//     "componentMarketType": "XTP_MKT_SH_A",
//     "replaceType": "ERT_CASH_OPTIONAL",
//     "premiumRatio": 0.1,
//     "requestId": 11012,
//     "lastResp": false,
//     "creationPremiumRatio": 0.1,
//     "redemptionDiscountRatio": 0.1,
//     "creationAmount": 0,
//     "redemptionAmount": 0,
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 查询可交易的IPO列表

获取IPO列表

let list = await smart.getIPOList();
console.log(JSON.stringify(list[0]));
// 输出:
// {
//     "instrument_id": "300641",
//     "instrument_name": "主测886",
//     "instrument_type": "Stock",
//     "instrument_type_ext": "XTP_TICKER_TYPE_STOCK",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "",
//     "price_tick": 0,
//     "precision": 0,
//     "buy_volume_unit": 0,
//     "sell_volume_unit": 0,
//     "bid_volume_unit": 0,
//     "ask_volume_unit": 0,
//     "bid_upper_limit_volume": 0,
//     "bid_lower_limit_volume": 0,
//     "ask_upper_limit_volume": 0,
//     "market_bid_volume_unit": 0,
//     "market_ask_volume_unit": 0,
//     "market_bid_upper_limit_volume": 0,
//     "market_bid_lower_limit_volume": 0,
//     "market_ask_upper_limit_volume": 0,
//     "pre_close_price": 0,
//     "upper_limit_price": 0,
//     "lower_limit_price": 0,
//     "is_registration": false,
//     "kw": "",
//     "code": "300641.SZ",
//     "price": 9.01,
//     "qty_upper_limit": 99999500,
//     "unit": 500
// }
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

# 获取国债逆回购列表

获取国债逆回购列表

let list = await smart.getBondReverseRepoList();
console.log(JSON.stringify(list[0]));
// 输出:
// {
//     "instrument_id": "131800",
//     "instrument_name": "R-003",
//     "instrument_type": "Bond",
//     "instrument_type_ext": "XTP_SECURITY_NATIONAL_BOND_REVERSE_REPO",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "r-003",
//     "price_tick": 0.005,
//     "precision": 3,
//     "buy_volume_unit": 10,
//     "sell_volume_unit": 10,
//     "bid_volume_unit": 10,
//     "ask_volume_unit": 10,
//     "bid_upper_limit_volume": 100000000,
//     "bid_lower_limit_volume": 10,
//     "ask_upper_limit_volume": 100000000,
//     "market_bid_volume_unit": 10,
//     "market_ask_volume_unit": 10,
//     "market_bid_upper_limit_volume": 100000000,
//     "market_bid_lower_limit_volume": 10,
//     "market_ask_upper_limit_volume": 100000000,
//     "pre_close_price": 2.045,
//     "upper_limit_price": 999999999.9999001,
//     "lower_limit_price": 0.005,
//     "is_registration": false,
//     "kw": "R-003",
//     "code": "131800.SZ",
//     "ask_lower_limit_volume": 10,
//     "market_ask_lower_limit_volume": 10
// }
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

# 查询可转债信息 标准版不支持

查询可转债信息

let convertableBond = await smart.getConvertableBond("113658.SH");
console.log(JSON.stringify(convertableBond));
// 输出:
// {
//     "instrument_id": "113658",
//     "instrument_name": "密卫转债",
//     "instrument_type": "Bond",
//     "instrument_type_ext": "XTP_SECURITY_CONVERTABLE_BOND",
//     "exchange_id": "SSE",
//     "exchange_id_name": "上交所",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "name_py": "mwzz",
//     "price_tick": 0.001,
//     "precision": 3,
//     "buy_volume_unit": 10,
//     "sell_volume_unit": 10,
//     "bid_volume_unit": 10,
//     "ask_volume_unit": 10,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 10,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 10,
//     "market_ask_volume_unit": 10,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 10,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 107.083,
//     "upper_limit_price": 128.5,
//     "lower_limit_price": 85.66600000000001,
//     "is_registration": false,
//     "kw": "密卫转债",
//     "code": "113658.SH",
//     "qtyMax": 999999990,
//     "qtyMin": 10,
//     "swapFlag": 1,
//     "swapPrice": 134.07,
//     "underlyingTicker": "603713",
//     "unit": 10,
//     "ask_lower_limit_volume": 10,
//     "market_ask_lower_limit_volume": 10
// }
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

# 获取国债逆回购列表

国债逆回购列表

let list = smart.reverse_repo_list;
console.log(JSON.stringify(list[0]));
// 输出:
// {
//     "instrument_id": "131800",
//     "instrument_name": "R-003",
//     "instrument_type": "Bond",
//     "instrument_type_ext": "XTP_SECURITY_NATIONAL_BOND_REVERSE_REPO",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "r-003",
//     "price_tick": 0.005,
//     "precision": 3,
//     "buy_volume_unit": 10,
//     "sell_volume_unit": 10,
//     "bid_volume_unit": 10,
//     "ask_volume_unit": 10,
//     "bid_upper_limit_volume": 100000000,
//     "bid_lower_limit_volume": 10,
//     "ask_upper_limit_volume": 100000000,
//     "market_bid_volume_unit": 10,
//     "market_ask_volume_unit": 10,
//     "market_bid_upper_limit_volume": 100000000,
//     "market_bid_lower_limit_volume": 10,
//     "market_ask_upper_limit_volume": 100000000,
//     "pre_close_price": 2.045,
//     "upper_limit_price": 999999999.9999001,
//     "lower_limit_price": 0.005,
//     "is_registration": false,
//     "kw": "R-003",
//     "code": "131800.SZ",
//     "ask_lower_limit_volume": 10,
//     "market_ask_lower_limit_volume": 10
// }
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

# 国债逆回购下单

let order = await smart.current_account.insert_order("204001",smart.Type.Exchange.SSE,2.045,1000,smart.Type.PriceType.Limit,smart.Type.Side.Buy,smart.Type.Offset.Init,0,"",smart.Type.BusinessType.REPO);
console.log("order为",JSON.stringify(order));
// 输出:
// {
//     "rcv_time": "undefined",
//     "order_id": "37906458003637255",
//     "source_order_id": "37906458003637255",
//     "insert_time": "undefined",
//     "update_time": "undefined",
//     "trading_day": "undefine",
//     "instrument_id": "204001",
//     "exchange_id": "SSE",
//     "account_id": "253191000961",
//     "client_id": "93612201-507b-11ee-9eb1-e1cdb10f52b8",
//     "instrument_type": 3,
//     "limit_price": 2.045,
//     "frozen_price": 2.045,
//     "volume": 1000,
//     "volume_traded": 0,
//     "volume_left": 1000,
//     "tax": null,
//     "commission": null,
//     "status": 1,
//     "side": 1,
//     "offset": 100,
//     "price_type": 1,
//     "volume_condition": 0,
//     "time_condition": 2,
//     "parent_order_id": "",
//     "code": "204001.SH",
//     "traffic": "front",
//     "traffic_sub_id": "JSDemo-_dev_",
//     "cancel_time": "undefined",
//     "order_cancel_client_id": "undefined",
//     "instrument_name": "GC001",
//     "trade_amount": 0,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_REPO",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "xtp_price_type": "XTP_PRICE_LIMIT",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_BUY",
//     "xtp_order_status": "XTP_ORDER_STATUS_INIT",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "债券",
//     "status_name": "初始化",
//     "side_name": "买",
//     "offset_name": "初始值",
//     "price_type_name": "限价",
//     "xtp_business_type_name": "回购业务",
//     "xtp_market_name": "沪A",
//     "xtp_price_type_name": "限价",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "买",
//     "xtp_order_status_name": "初始化",
//     "volume_condition_name": "任何数量",
//     "time_condition_name": "本节有效",
//     "traffic_name": "客户端策略",
//     "business_type": "front"
// }
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
59

# 获取所有证券列表

let list = smart.instrument_list;
console.log(JSON.stringify(list[0]));
// 输出:
// {
//     "instrument_id": "000001",
//     "instrument_name": "平安银行",
//     "instrument_type": "Stock",
//     "instrument_type_ext": "XTP_SECURITY_MAIN_BOARD",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "payh",
//     "price_tick": 0.01,
//     "precision": 2,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 100,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 100,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 11.34,
//     "upper_limit_price": 12.47,
//     "lower_limit_price": 10.21,
//     "is_registration": false,
//     "kw": "平安银行",
//     "code": "000001.SZ",
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 获取证券列表按照证券代码_市场

获取证券列表按照证券代码_市场

let instrument_map = smart.instrument_map;
console.log(JSON.stringify(instrument_map['000001_SZE']));
// 输出:
// {
//     "instrument_id": "000001",
//     "instrument_name": "平安银行",
//     "instrument_type": "Stock",
//     "instrument_type_ext": "XTP_SECURITY_MAIN_BOARD",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "payh",
//     "price_tick": 0.01,
//     "precision": 2,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 100,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 100,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 11.34,
//     "upper_limit_price": 12.47,
//     "lower_limit_price": 10.21,
//     "is_registration": false,
//     "kw": "平安银行",
//     "code": "000001.SZ",
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 获取证券列表按照类型分类

按证券类型进行区分的Map结构

//"Stock"(股票) | "Bond"(债券) | "Fund"(基金) | "Index"(指数) | "StockOption"(股票期权) | "Future"(期货) | "Unknown"(未知)
let fund_list = smart.instrument_map_by_type["Fund"];
console.log(JSON.stringify(fund_list[0]));
// 输出:
// {
//     "instrument_id": "159001",
//     "instrument_name": "货币ETF",
//     "instrument_type": "Fund",
//     "instrument_type_ext": "XTP_SECURITY_MONETARY_FUND_SZ",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "name_py": "hbetf",
//     "price_tick": 0.001,
//     "precision": 3,
//     "buy_volume_unit": 100,
//     "sell_volume_unit": 1,
//     "bid_volume_unit": 100,
//     "ask_volume_unit": 1,
//     "bid_upper_limit_volume": 1000000,
//     "bid_lower_limit_volume": 1,
//     "ask_upper_limit_volume": 1000000,
//     "market_bid_volume_unit": 100,
//     "market_ask_volume_unit": 1,
//     "market_bid_upper_limit_volume": 1000000,
//     "market_bid_lower_limit_volume": 1,
//     "market_ask_upper_limit_volume": 1000000,
//     "pre_close_price": 100.001,
//     "upper_limit_price": 110.001,
//     "lower_limit_price": 90.001,
//     "is_registration": false,
//     "kw": "货币ETF",
//     "code": "159001.SZ",
//     "ask_lower_limit_volume": 1,
//     "market_ask_lower_limit_volume": 1
// }
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

# 消息通知弹窗

组件消息推送到全局

  • level 消息状态:open、info、success、warning、error
  • title 头部标题
  • msg 需要推送的消息内容
  • duration 消息显示时间
  • timestamp 时间戳
let params = {
    level: 'success',
    title: '标题',
    msg: '具体内容',
    duration: 4.5,
    timestamp: Date.now()
}
smart.notice(params);
1
2
3
4
5
6
7
8

# 接收委托信息推送

//接收委托推送 不保序
smart.current_account.on_order(order => {
    console.log("order为",JSON.stringify(order));
    // 输出:
    // {
    //     "rcv_time": "20230912133207548",
    //     "order_id": "37906458003637227",
    //     "source_order_id": "37906458003637227",
    //     "insert_time": "20230912133207548",
    //     "update_time": "0",
    //     "trading_day": "20230912",
    //     "instrument_id": "600918",
    //     "exchange_id": "SSE",
    //     "account_id": "253191000961",
    //     "client_id": "13",
    //     "instrument_type": 1,
    //     "limit_price": 7.23,
    //     "frozen_price": 7.23,
    //     "volume": 200,
    //     "volume_traded": 0,
    //     "volume_left": 200,
    //     "tax": null,
    //     "commission": null,
    //     "status": 1,
    //     "error_id": 0,
    //     "side": 1,
    //     "offset": 100,
    //     "price_type": 1,
    //     "volume_condition": 0,
    //     "time_condition": 2,
    //     "parent_order_id": "cm_b6aa5b20-512d-11ee-a9fa-9be044826453",
    //     "code": "600918.SH",
    //     "traffic": "common",
    //     "traffic_sub_id": "",
    //     "cancel_time": "0",
    //     "order_cancel_client_id": "0",
    //     "instrument_name": "中泰证券",
    //     "trade_amount": 0,
    //     "xtp_business_type": "XTP_BUSINESS_TYPE_CASH",
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "xtp_price_type": "XTP_PRICE_LIMIT",
    //     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
    //     "xtp_side_type": "XTP_SIDE_BUY",
    //     "xtp_order_status": "XTP_ORDER_STATUS_INIT",
    //     "exchange_id_name": "上交所",
    //     "instrument_type_name": "股票",
    //     "status_name": "初始化",
    //     "side_name": "买",
    //     "offset_name": "初始值",
    //     "price_type_name": "限价",
    //     "xtp_business_type_name": "普通股票",
    //     "xtp_market_name": "沪A",
    //     "xtp_price_type_name": "限价",
    //     "xtp_position_effect_type_name": "初始值",
    //     "xtp_side_type_name": "买",
    //     "xtp_order_status_name": "初始化",
    //     "volume_condition_name": "任何数量",
    //     "time_condition_name": "本节有效",
    //     "traffic_name": "普通下单",
    //     "business_type": "common"
    // }
});
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
59
60
61
62

# 接收成交回报推送

//接收成交回报推送 不保序
smart.current_account.on_trade(trade => {
    console.log("trade为",JSON.stringify(trade));
    // 输出:
    // {
    //     "rcv_time": "20230912133207560",
    //     "order_id": "37906458003637227",
    //     "parent_order_id": "cm_b6aa5b20-512d-11ee-a9fa-9be044826453",
    //     "trade_time": "20230912133207560",
    //     "trading_day": "",
    //     "instrument_id": "600918",
    //     "exchange_id": "SSE",
    //     "account_id": "253191000961",
    //     "client_id": "13",
    //     "instrument_type": 1,
    //     "side": 1,
    //     "offset": 100,
    //     "price": 7.23,
    //     "volume": 200,
    //     "tax": null,
    //     "commission": null,
    //     "code": "600918.SH",
    //     "traffic": "common",
    //     "traffic_sub_id": "",
    //     "instrument_name": "中泰证券",
    //     "trade_amount": 1446,
    //     "xtp_business_type": "XTP_BUSINESS_TYPE_CASH",
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "xtp_exec_id": "0000000000036709",
    //     "xtp_report_index": "153734059393044",
    //     "xtp_order_exch_id": "0141020000036619",
    //     "xtp_trade_type": "0",
    //     "xtp_branch_pbu": "13688",
    //     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
    //     "xtp_side_type": "XTP_SIDE_BUY",
    //     "exchange_id_name": "上交所",
    //     "instrument_type_name": "股票",
    //     "side_name": "买",
    //     "offset_name": "初始值",
    //     "xtp_business_type_name": "普通股票",
    //     "xtp_market_name": "沪A",
    //     "xtp_position_effect_type_name": "初始值",
    //     "xtp_side_type_name": "买",
    //     "traffic_name": "普通下单",
    //     "xtp_trade_type_name": "普通成交",
    //     "business_type": "common",
    //     "_rowid": "XTP_BUSINESS_TYPE_CASH_XTP_MKT_SH_A_0000000000036709_XTP_SIDE_BUY_600918_0"
    // }
});
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

# 接收资产变化推送

//接收资产变化推送
smart.current_account.on_assets(assets=>{
    console.log("assets为",JSON.stringify(assets));
    // 输出:
    // {
    //     "total_asset": 999997842.94,
    //     "buying_power": 999996419.85,
    //     "security_asset": 0,
    //     "fund_buy_amount": 2151,
    //     "fund_buy_fee": 6.06,
    //     "fund_sell_amount": 0,
    //     "fund_sell_fee": 0,
    //     "withholding_amount": 1423.09,
    //     "frozen_margin": 0,
    //     "frozen_exec_cash": 0,
    //     "frozen_exec_fee": 0,
    //     "pay_later": 0,
    //     "preadva_pay": 0,
    //     "orig_banlance": 0,
    //     "banlance": 0,
    //     "deposit_withdraw": 0,
    //     "trade_netting": 0,
    //     "captial_asset": 0,
    //     "force_freeze_amount": 0,
    //     "preferred_amount": 0,
    //     "market_value": 4253600706,
    //     "update_time": 1694496728239
    // }
});
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

# 接收持仓变化推送

//接收持仓变化推送
smart.current_account.on_position(position=>{
    console.log("position为",JSON.stringify(position));
    // 输出:
    // {
    //     "instrument_id": "600918",
    //     "instrument_name": "中泰证券",
    //     "direction": 2,
    //     "direction_name": "净",
    //     "name_py": "ztzq",
    //     "volume": 200,
    //     "sellable_volume": 0,
    //     "position_cost_price": 7.26,
    //     "profit_price": 7.26,
    //     "last_price": 0,
    //     "market_value": 0,
    //     "unrealized_pnl": 0,
    //     "yesterday_volume": 0,
    //     "purchase_redeemable_qty": 200,
    //     "executable_option": 0,
    //     "executable_underlying": 0,
    //     "locked_position": 0,
    //     "usable_locked_position": 0,
    //     "exchange_id": "SSE",
    //     "exchange_id_name": "上交所",
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "xtp_market_name": "沪A",
    //     "_instrument_id_direction": "600918_2",
    //     "code": "600918.SH"
    // }
});
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

# JS和Python双向通信

只有同时使用python组件的时候有效
start.py

from smart import *
import time
from datetime import datetime
import logging
from smart.type import AccountType
logger = logging.getLogger()

def init():
    def testPy(data):
        logger.debug(f"testPy:{data}")
        # 输出:testPy:{'hi': "It's JS", 'reqID': 'jspy_0', 'reqtype': 1}
        return {"hi":"goodJob"}
        
    smart.registCallableFunction("testPy",testPy)
    smart.callJSFunction("testJS",{"hi":"It's python!"})
def show():
    print("show")
def hide():
    print("hide")
def close():
    print("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

src/index.js (首次使用需在终端执行npm install命令,代码编写完成后需在终端执行npm run build命令进行构建发布)

import Vue from 'vue'
import App from './js/App'
import smartx_ui from '@xtp-smart/ui'
import iView from 'iview';

Vue.use(smartx_ui);
Vue.use(iView);
import '!style-loader!css-loader!iview/dist/styles/iview.css';
import '@xtp-smart/style/dist/css/smartx.min.css'

smart.on_init(function () {
	console.log("onInit");

	const globalApp = new Vue({
		render: h => h(App),
	}).$mount('#app');

	let port0 = smart.runPython("./start.py");

    smart.registCallableFunction("testJS",function(data){
        console.log("testJS:",data)
		// 输出:testJS: { hi: 'It\'s python!', reqtype: 1 }

        function testPyHandler(rsp){
            console.log("testPyHandler:",rsp)
			// 输出:testPyHandler: { hi: 'goodJob', reqtype: 1 }
        }
        smart.callPythonFunction(port0,"testPy",{"hi":"It's JS"},testPyHandler)
    })
});
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

# 两融业务下单 仅支持两融账户

//融资买入
let order = await smart.current_account.insert_order(
    '600000',
    smart.Type.Exchange.SSE,
    7.00,
    100,
    smart.Type.PriceType.Limit,
    smart.Type.Side.MarginTrade,
    smart.Type.Offset.Init,
    null,
    null,
    smart.Type.BusinessType.MARGIN
);
console.log("order为",JSON.stringify(order));
// 输出:
// {
//     "rcv_time": "undefined",
//     "order_id": "36223105735070612",
//     "source_order_id": "36223105735070612",
//     "insert_time": "undefined",
//     "update_time": "undefined",
//     "trading_day": "undefine",
//     "instrument_id": "600000",
//     "exchange_id": "SSE",
//     "account_id": "53410900072",
//     "client_id": "4b00cad1-510a-11ee-9eb1-e1cdb10f52b8",
//     "instrument_type": 1,
//     "limit_price": 7,
//     "frozen_price": 7,
//     "volume": 100,
//     "volume_traded": 0,
//     "volume_left": 100,
//     "tax": null,
//     "commission": null,
//     "status": 1,
//     "side": 21,
//     "offset": 100,
//     "price_type": 1,
//     "volume_condition": 0,
//     "time_condition": 2,
//     "parent_order_id": "",
//     "code": "600000.SH",
//     "traffic": "front",
//     "traffic_sub_id": "JSDemo-_dev_",
//     "cancel_time": "undefined",
//     "order_cancel_client_id": "undefined",
//     "instrument_name": "浦发银行",
//     "trade_amount": 0,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_MARGIN",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "xtp_price_type": "XTP_PRICE_LIMIT",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_MARGIN_TRADE",
//     "xtp_order_status": "XTP_ORDER_STATUS_INIT",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "股票",
//     "status_name": "初始化",
//     "side_name": "融资买入",
//     "offset_name": "初始值",
//     "price_type_name": "限价",
//     "xtp_business_type_name": "融资融券",
//     "xtp_market_name": "沪A",
//     "xtp_price_type_name": "限价",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "融资买入",
//     "xtp_order_status_name": "初始化",
//     "volume_condition_name": "任何数量",
//     "time_condition_name": "本节有效",
//     "traffic_name": "客户端策略",
//     "business_type": "front"
// }

// 融券卖出
order = await smart.current_account.insert_order(
    '600000',
    smart.Type.Exchange.SSE,
    7.00,
    100,
    smart.Type.PriceType.Limit,
    smart.Type.Side.ShortSell,
    smart.Type.Offset.Init,
    null,
    null,
    smart.Type.BusinessType.MARGIN
);
console.log("order为",JSON.stringify(order));
// 输出:
// {
//     "rcv_time": "undefined",
//     "order_id": "36223105735070614",
//     "source_order_id": "36223105735070614",
//     "insert_time": "undefined",
//     "update_time": "undefined",
//     "trading_day": "undefine",
//     "instrument_id": "600000",
//     "exchange_id": "SSE",
//     "account_id": "53410900072",
//     "client_id": "b2872c31-510a-11ee-9eb1-e1cdb10f52b8",
//     "instrument_type": 1,
//     "limit_price": 7,
//     "frozen_price": 7,
//     "volume": 100,
//     "volume_traded": 0,
//     "volume_left": 100,
//     "tax": null,
//     "commission": null,
//     "status": 1,
//     "side": 22,
//     "offset": 100,
//     "price_type": 1,
//     "volume_condition": 0,
//     "time_condition": 2,
//     "parent_order_id": "",
//     "code": "600000.SH",
//     "traffic": "front",
//     "traffic_sub_id": "JSDemo-_dev_",
//     "cancel_time": "undefined",
//     "order_cancel_client_id": "undefined",
//     "instrument_name": "浦发银行",
//     "trade_amount": 0,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_MARGIN",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "xtp_price_type": "XTP_PRICE_LIMIT",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_SHORT_SELL",
//     "xtp_order_status": "XTP_ORDER_STATUS_INIT",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "股票",
//     "status_name": "初始化",
//     "side_name": "融券卖出",
//     "offset_name": "初始值",
//     "price_type_name": "限价",
//     "xtp_business_type_name": "融资融券",
//     "xtp_market_name": "沪A",
//     "xtp_price_type_name": "限价",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "融券卖出",
//     "xtp_order_status_name": "初始化",
//     "volume_condition_name": "任何数量",
//     "time_condition_name": "本节有效",
//     "traffic_name": "客户端策略",
//     "business_type": "front"
// }
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

# 查询信用资产信息

// 手动查询信用资产信息,会触发on_assets监听函数
let assets = await smart.current_account.queryCreditAssets();
console.log("assets为", JSON.stringify(assets));
// 输出:
// {
//     "total_asset": 100001382.54,
//     "buying_power": 90000000,
//     "security_asset": 0,
//     "fund_buy_amount": 0,
//     "fund_buy_fee": 0,
//     "fund_sell_amount": 0,
//     "fund_sell_fee": 0,
//     "withholding_amount": 0,
//     "frozen_margin": 0,
//     "frozen_exec_cash": 0,
//     "frozen_exec_fee": 0,
//     "pay_later": 0,
//     "preadva_pay": 0,
//     "orig_banlance": 0,
//     "banlance": 0,
//     "deposit_withdraw": 0,
//     "trade_netting": 0,
//     "captial_asset": 0,
//     "force_freeze_amount": 0,
//     "preferred_amount": 0,
//     "market_value": 2072353,
//     "update_time": 1694498526847,
//     "all_asset": 102075734.54,
//     "all_debt": 1072560.87,
//     "guaranty": 99249659.778,
//     "line_of_credit": 49997187.94,
//     "maintenance_ratio": 95.17010865779581,
//     "remain_amount": 863752.87,
//     "cash_remain_amt": 863101.89,
//     "cash_interest": 1797.29,
//     "security_interest": 650.98,
//     "extras_money": 0
// }
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

# 查询自选股列表

let stock_list = await smart.querySelfSelectStockList("金融行业", "xtp", smart.current_account.account_id);
console.log("stock list为", stock_list);
// 输出:['002708.SZ', '002209.SZ', '300922.SZ', '003022.SZ', '000301.SZ', '002881.SZ', '002599.SZ', '002532.SZ', '002665.SZ', '000547.SZ']
1
2
3

# 融资融券负债合约推送

// 获取信用账户当前融资负债合约列表
let credit_debt_finance_list = smart.current_account.credit_debt_finance_list;
console.log("creditDebtFinanceList[0]为", JSON.stringify(credit_debt_finance_list[0]));
// 输出:
// {
//     "debt_id": "201903110005100000175",
//     "instrument_id": "000002",
//     "instrument_name": "万 科A",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "name_py": "wka",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "remain_amt": 430983.83,
//     "remain_principal": 430086,
//     "remain_interest": 897.83,
//     "debt_status": 0,
//     "end_date": "20321231",
//     "orig_end_date": "20321231",
//     "order_xtp_id": "0",
//     "order_date": "20190311",
//     "extended": false,
//     "code": "000002.SZ"
// }

//信用融资负债合约增加或变更推送
smart.current_account.on_credit_debt_finance(function(debtFinance){
    console.log("creditDebtFinance为", JSON.stringify(debtFinance));
    // 输出:
    // {
    //     "debt_id": "534109000720000000000000005",
    //     "instrument_id": "600000",
    //     "instrument_name": "浦发银行",
    //     "exchange_id": "SSE",
    //     "exchange_id_name": "上交所",
    //     "name_py": "pfyh",
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "remain_amt": 712.03,
    //     "remain_principal": 712.03,
    //     "remain_interest": 0,
    //     "debt_status": 0,
    //     "end_date": "20240311",
    //     "orig_end_date": "20240311",
    //     "order_xtp_id": "36223105735070617",
    //     "order_date": "20230912",
    //     "extended": false,
    //     "code": "600000.SH"
    // }
});


// 获取信用账户当前融券负债合约列表
let credit_debt_security_list = smart.current_account.credit_debt_security_list;
console.log("creditDebtSecurityList[0]为", JSON.stringify(credit_debt_security_list[0]));
// 输出:
// {
//     "debt_id": "201903110005100000177",
//     "instrument_id": "000002",
//     "instrument_name": "万 科A",
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "name_py": "wka",
//     "xtp_market_type": "XTP_MKT_SZ_A",
//     "remain_interest": 464.67,
//     "remain_volume": 10000,
//     "due_right_volume": 0,
//     "debt_status": 0,
//     "end_date": "20321231",
//     "orig_end_date": "20321231",
//     "order_xtp_id": "0",
//     "order_date": "20190311",
//     "extended": false,
//     "code": "000002.SZ"
// }

// 信用融券负债合约增加或变更推送
smart.current_account.on_credit_debt_security(function(debtSecurity){
    console.log("creditDebtSecurity为", JSON.stringify(debtSecurity));
    // 输出:
    // {
    //     "debt_id": "534109000720000000000000006",
    //     "instrument_id": "600000",
    //     "instrument_name": "浦发银行",
    //     "exchange_id": "SSE",
    //     "exchange_id_name": "上交所",
    //     "name_py": "pfyh",
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "remain_interest": 0,
    //     "remain_volume": 100,
    //     "due_right_volume": 0,
    //     "debt_status": 0,
    //     "end_date": "20240311",
    //     "orig_end_date": "20240311",
    //     "order_xtp_id": "36223105735070618",
    //     "order_date": "20230912",
    //     "extended": false,
    //     "code": "600000.SH"
    // }
});
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

# 可融券头寸更新推送

// 可融券头寸更新推送
smart.current_account.on_credit_ticker_assign(function(creditTickerAssignInfo){
    console.log("creditTickerAssignInfo为", JSON.stringify(creditTickerAssignInfo));
    // 输出:
    // {
    //     "instrument_id": "600000",
    //     "instrument_name": "浦发银行",
    //     "exchange_id": "SSE",
    //     "exchange_id_name": "上交所",
    //     "name_py": "pfyh",
    //     "left_volume": 74500,
    //     "frozen_volume": 0,
    //     "yesterday_volume": 0,
    //     "xtp_market_type": "XTP_MKT_SH_A",
    //     "code": "600000.SH",
    //     "limit_volume": "0"
    // }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 订阅bar行情及接收bar行情推送

// 方式一:
// 订阅bar行情
const codes= ['000001.SZ','600000.SH'];
const period = "1m"; // 1 分钟
const failList = await smart.subscribe_bar(codes, period); // 正常的订阅
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_bar订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {
    // 订阅全部成功
    console.log("subscribe_bar全部成功");
}
//接收bar行情
smart.on(smart.Event.ON_BAR, quote=>{
    console.log(quote);
    // {
    //     close: 10.6,
    //     code: "000001.SZ",
    //     end_time: "2023-10-20 14:29:00",
    //     exchange_id: "SZE",
    //     high: 10.61,
    //     instrument_id: "000001",
    //     low: 10.6,
    //     open: 10.61,
    //     period: "1m",
    //     source_id: "xtp",
    //     start_time: "2023-10-20 14:28:00",
    //     start_turnover: 479989248.64,
    //     start_volume: 45295409,
    //     time_interval: 1,
    //     trading_day: "2023-10-20",
    //     turnover: 1083034,
    //     type: "bar_1min",
    //     volume: 102100
    // }
    //取消订阅bar行情
    smart.unsubscribe_bar([quote.code], period);
});
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
// 方式二:订阅bar行情时直接传入监听bar行情的回调函数
const codes= ['000001.SZ','600000.SH'];
const period = "1m"; // 1 分钟
function on_bar(quote: any) {
    console.log(quote);
    // {
    //     close: 10.6,
    //     code: "000001.SZ",
    //     end_time: "2023-10-20 14:29:00",
    //     exchange_id: "SZE",
    //     high: 10.61,
    //     instrument_id: "000001",
    //     low: 10.6,
    //     open: 10.61,
    //     period: "1m",
    //     source_id: "xtp",
    //     start_time: "2023-10-20 14:28:00",
    //     start_turnover: 479989248.64,
    //     start_volume: 45295409,
    //     time_interval: 1,
    //     trading_day: "2023-10-20",
    //     turnover: 1083034,
    //     type: "bar_1min",
    //     volume: 102100
    // }
    //取消订阅bar行情
    smart.unsubscribe_bar([quote.code], period);
}
const failList = await smart.subscribe_bar(codes, period, on_bar)
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_bar订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {// 订阅全部成功
    console.log("subscribe_bar全部成功");
}
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
// 方式三:订阅bar行情时,定义默认的on_bar来监听bar行情
const codes= ['000001.SZ','600000.SH'];
const period = "1m"; // 1 分钟
smart.on_bar = function on_bar(quote: any) {
    console.log(quote);
    // {
    //     close: 10.6,
    //     code: "000001.SZ",
    //     end_time: "2023-10-20 14:29:00",
    //     exchange_id: "SZE",
    //     high: 10.61,
    //     instrument_id: "000001",
    //     low: 10.6,
    //     open: 10.61,
    //     period: "1m",
    //     source_id: "xtp",
    //     start_time: "2023-10-20 14:28:00",
    //     start_turnover: 479989248.64,
    //     start_volume: 45295409,
    //     time_interval: 1,
    //     trading_day: "2023-10-20",
    //     turnover: 1083034,
    //     type: "bar_1min",
    //     volume: 102100
    // }
    //取消订阅bar行情
    smart.unsubscribe_bar([quote.code], period);
}
const failList = await smart.subscribe_bar(codes, period)
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_bar订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {// 订阅全部成功
    console.log("subscribe_bar全部成功");
}
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

# 获取当天任意分钟的bar行情

const codes= ['000001.SZ','600000.SH'];
const period = "5m"; // 5分钟
const result = await smart.query_bar_today_async(codes, period);
console.info("查询bar行情", result);
// {
//      000001.SZ: [
//           {
//                close: 10.39,
//                code: "000001.SZ",
//                end_time: "2023-10-30 09:35:00",
//                exchange_id: "SZE",
//                high: 10.4,
//                instrument_id: "000001",
//                low: 10.37,
//                open: 10.4,
//                period: "5m",
//                source_id: "xtp",
//                start_time: "2023-10-30 09:30:00",
//                start_turnover: 0,
//                start_volume: 0,
//                time_interval: 5,
//                trading_day: "2023-10-30",
//                turnover: 58720661.05,
//                type: "bar_5min",
//                volume: 5650991
//           }, 
//           {
//                type: "bar_5min",
//                code: "000001.SZ",
//                instrument_id: "000001",
//                exchange_id: "SZE",
//                trading_day: "2023-10-30",
//                ...
//           }
//      ],
//      600000.SH: [
//           {
//                close: 6.83,
//                code: "600000.SH",
//                end_time: "2023-10-30 09:35:00",
//                exchange_id: "SSE",
//                high: 6.89,
//                instrument_id: "600000",
//                low: 6.82,
//                open: 6.86,
//                period: "5m",
//                source_id: "xtp",
//                start_time: "2023-10-30 09:30:00",
//                start_turnover: 0,
//                start_volume: 0,
//                time_interval: 5,
//                trading_day: "2023-10-30",
//                turnover: 39546462,
//                type: "bar_5min",
//                volume: 5767820
//           },
//           {
//                type: "bar_5min",
//                code: "600000.SH",
//                instrument_id: "600000",
//                exchange_id: "SSE",
//                trading_day: "2023-10-30",
//                ...
//           }
//      ]
// }
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
59
60
61
62
63
64
65
66

# 获取历史bar数据-query_bar_async

const result = await smart.query_bar_async(
    {
        code: "000001.SZ", // String(必填) 证券代码  SZ:深证 SH:上海
        start_date: "2024-01-12 10:00:00", // String(必填) 开始日期 格式yyyy-MM-dd hh:mm:ss
        end_date: "2024-01-12 15:00:00", // String(必填) 结束日期 格式yyyy-MM-dd hh:mm:ss
        period: "5m", // String(选填) 频次 仅支持1m 5m 15m 30m 60m 1d 1w 默认1d,(m代表分钟,d代表天,w代表周)
        adjust_type: "pre" // String(选填) 复权方式 none:不复权 pre:前复权 post:后复权 默认前复权
    }
);
console.info(result);
// [{
//      close: 9.19,
//      code: "000001.SZ",
//      end_time: "2024-01-12 10:00:00",
//      exchange_id: "SZE",
//      high: 9.2,
//      instrument_id: "000001",
//      low: 9.17,
//      open: 9.19,
//      period: "5m",
//      source_id: "xtp",
//      start_time: "2024-01-12 09:55:00",
//      start_turnover: 123997543,
//      start_volume: 13549009,
//      time_interval: "5m",
//      trading_day: "2024-01-12",
//      turnover: 21865172,
//      type: "bar_5min",
//      volume: 2380100
// }, ...]
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

# 通用指标订阅及接收数据推送

// 方式一:
//订阅
const failList = await smart.subscribe_indicator("etf", ['159915.SZ']); 
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_indicator订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {// 订阅全部成功
    console.log("subscribe_indicator全部成功");
}
//接收数据
smart.on(smart.Event.ON_INDICATOR, (type, quote) => {
    console.log(`通用指标etf行情:指标为${type} 数据为` + JSON.stringify(quote));
    // 通用指标etf行情:指标为etf 数据为
    // {
    //     "code": "512160.SH",
    //     "etfData": {
    //         "saleEtfProfit": 1936000,
    //         "iopvSale": 0.9676,
    //         "diopv": 0.9671,
    //         "iopvBuy": 0.9667,
    //         "buyEtfProfit": 1938000,
    //         "sumQuantity": 118400,
    //         "shTickerPreAmtSum": 1263296,
    //         "bidQty": 10900,
    //         "shTickerDisAmtSum": 1262078,
    //         "askQty": 219100,
    //         "preCashAndEsa": -1758.41,
    //         "szTickerPreAmtSum": 673567,
    //         "disCashAndEsa": -1758.41,
    //         "szTickerDisAmtSum": 673178,
    //         "estimateAmountDiff": 0,
    //         "iopv": 0.967,
    //         "lastPrice": 0.969
    //     },
    //     "type": "etf"
    // }
    // 取消通用指标订阅
    smart.unsubscribe_indicator(quote.type, [quote.code]);
});
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
// 方式二:
//接收数据
function on_indicator(type: string, data: any) {
    console.log(`通用指标etf行情1:指标为${type} 数据为` + JSON.stringify(data));
    // 通用指标etf行情:指标为etf 数据为
    // {
    //     "code": "512160.SH",
    //     "etfData": {
    //         "saleEtfProfit": 1936000,
    //         "iopvSale": 0.9676,
    //         "diopv": 0.9671,
    //         "iopvBuy": 0.9667,
    //         "buyEtfProfit": 1938000,
    //         "sumQuantity": 118400,
    //         "shTickerPreAmtSum": 1263296,
    //         "bidQty": 10900,
    //         "shTickerDisAmtSum": 1262078,
    //         "askQty": 219100,
    //         "preCashAndEsa": -1758.41,
    //         "szTickerPreAmtSum": 673567,
    //         "disCashAndEsa": -1758.41,
    //         "szTickerDisAmtSum": 673178,
    //         "estimateAmountDiff": 0,
    //         "iopv": 0.967,
    //         "lastPrice": 0.969
    //     },
    //     "type": "etf"
    // }
    //取消通用指标订阅
    smart.unsubscribe_indicator(type, [data.code]);
}
//订阅
const failList = await smart.subscribe_indicator("etf", ['159915.SZ'], on_indicator); 
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_indicator订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {// 订阅全部成功
    console.log("subscribe_indicator全部成功");
}
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
// 方式三:
//接收数据
smart.on_indicator = function on_indicator(type: string, data: any) {
    console.log(`通用指标etf行情3:指标为${type} 数据为` + JSON.stringify(data));
    // 通用指标etf行情:指标为etf 数据为
    // {
    //     "code": "512160.SH",
    //     "etfData": {
    //         "saleEtfProfit": 1936000,
    //         "iopvSale": 0.9676,
    //         "diopv": 0.9671,
    //         "iopvBuy": 0.9667,
    //         "buyEtfProfit": 1938000,
    //         "sumQuantity": 118400,
    //         "shTickerPreAmtSum": 1263296,
    //         "bidQty": 10900,
    //         "shTickerDisAmtSum": 1262078,
    //         "askQty": 219100,
    //         "preCashAndEsa": -1758.41,
    //         "szTickerPreAmtSum": 673567,
    //         "disCashAndEsa": -1758.41,
    //         "szTickerDisAmtSum": 673178,
    //         "estimateAmountDiff": 0,
    //         "iopv": 0.967,
    //         "lastPrice": 0.969
    //     },
    //     "type": "etf"
    // }
    // 取消订阅bar行情
    smart.unsubscribe_indicator(type, [data.code]);
}
//订阅
const failList = await smart.subscribe_indicator("etf", ['159915.SZ']); 
if (failList) {// 存在订阅失败的code
    for (const code of failList) {
        console.log("subscribe_indicator订阅存在失败的code", code);
        // 可以重新发起订阅
    }
} else {
    // 订阅全部成功
    console.log("subscribe_indicator全部成功");
}
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

# 获取市场数据-query_market_data_async

const result = await smart.query_market_data_async(
    {
        code: "000001.SZ", // String(必填) 证券代码  SZ:深证 SH:上海
        start_date: "2024-01-12 10:00:00", // String(必填) 开始日期 格式yyyy-MM-dd hh:mm:ss
        end_date: "2024-01-12 15:00:00", // String(必填) 结束日期 格式yyyy-MM-dd hh:mm:ss
    }
);
console.info(result);
// [
//     {
//         "source_id": "xtp",
//         "trading_day": "20240112",
//         "date_time": "20240112130000246",
//         "instrument_id": "600000",
//         "exchange_id": "SSE",
//         "instrument_type": 1,
//         "pre_close_price": 6.53,
//         "last_price": 6.52,
//         "volume": 20946547,
//         "turnover": 136733365,
//         "open_price": 6.52,
//         "high_price": 6.56,
//         "low_price": 6.5,
//         "upper_limit_price": 7.18,
//         "lower_limit_price": 5.88,
//         "bid_price": [ 6.51, 6.5, 6.49, 6.48, 6.47, 0, 0, 0, 0, 0 ],
//         "ask_price": [ 6.52, 6.53, 6.54, 6.55, 6.56, 0, 0, 0, 0, 0 ],
//         "bid_volume": [ 667270, 2726772, 1069400, 908900, 274000, 0, 0, 0, 0, 0 ],
//         "ask_volume": [ 620300, 424100, 670300, 709790, 1090500, 0, 0, 0, 0, 0 ],
//         "code": "600000.SH"
//     }, ...
// ]
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

# 获取当前交易日及下一交易日-get_trading_day_async

const result = await smart.get_trading_day_async();
console.info(result);
// {CURRENT_TRDY: "20240415", NEXT_TRDY: "20240416"}
1
2
3

# 查询数据-获取历史bar行情

const result = await smart.query_data_async(
    "bar", // method方法:固定值
    {
        code: "000001.SZ", // 证券代码  SZ:深证 SH:上海
        start_date: "2013-01-04", // 开始日期
        end_date: "2014-01-04", // 结束日期
        period: "5m", // 频次 仅支持1m 5m 15m 30m 60m 1d 1w 默认1d,(m代表分钟,d代表天,w代表周)
        adjust_type: "pre" // 复权方式 none:不复权 pre:前复权 post:后复权 默认前复权
    }
);
console.info(result);
// [{
//      close: 9.19,
//      code: "000001.SZ",
//      end_time: "2024-01-12 10:00:00",
//      exchange_id: "SZE",
//      high: 9.2,
//      instrument_id: "000001",
//      low: 9.17,
//      open: 9.19,
//      period: "5m",
//      source_id: "xtp",
//      start_time: "2024-01-12 09:55:00",
//      start_turnover: 123997543,
//      start_volume: 13549009,
//      time_interval: "5m",
//      trading_day: "2024-01-12",
//      turnover: 21865172,
//      type: "bar_5min",
//      volume: 2380100
// }...]
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

# 查询数据-获取市场数据

const result = await smart.query_data_async(
    "market_data", // method方法:固定值
    {
        code: "000001.SZ", // String(必填) 证券代码  SZ:深证 SH:上海
        start_date: "2024-01-12 10:00:00", // String(必填) 开始日期 格式yyyy-MM-dd hh:mm:ss
        end_date: "2024-01-12 15:00:00", // String(必填) 结束日期 格式yyyy-MM-dd hh:mm:ss
    }
);
console.info(result);
// [
//     {
//         "source_id": "xtp",
//         "trading_day": "20240112",
//         "date_time": "20240112130000246",
//         "instrument_id": "600000",
//         "exchange_id": "SSE",
//         "instrument_type": 1,
//         "pre_close_price": 6.53,
//         "last_price": 6.52,
//         "volume": 20946547,
//         "turnover": 136733365,
//         "open_price": 6.52,
//         "high_price": 6.56,
//         "low_price": 6.5,
//         "upper_limit_price": 7.18,
//         "lower_limit_price": 5.88,
//         "bid_price": [ 6.51,6.5,6.49,6.48,6.47,0,0,0,0,0 ],
//         "ask_price": [ 6.52,6.53,6.54,6.55,6.56,0,0,0,0,0 ],
//         "bid_volume": [ 667270,2726772,1069400,908900,274000,0,0,0,0,0 ],
//         "ask_volume": [ 620300,424100,670300,709790,1090500,0,0,0,0,0 ],
//         "code": "600000.SH"
//     }, ...
// ]
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

# 查询数据-获取当前交易日及下一交易日

const result = await smart.query_data_async(
    "current_next_trading_day" // String(必填) method方法:固定值
);
console.info(result);
//[{CURRENT_TRDY: "20240415" // 当前交易日, NEXT_TRDY: "20240416" // 下一交易日}]
1
2
3
4
5

# 分页查询数据-获取历史bar行情

const result = await smart.query_data_page_async(
    "bar", // method方法:固定值
    {
        code: "000001.SZ", // 证券代码  SZ:深证 SH:上海
        start_date: "2013-01-04", // 开始日期
        end_date: "2014-01-04", // 结束日期
        period: "5m", // 频次 仅支持1m 5m 15m 30m 60m 1d 1w 默认1d,(m代表分钟,d代表天,w代表周)
        adjust_type: "pre", // 复权方式 none:不复权 pre:前复权 post:后复权 默认前复权
        current_page: 1, //  当前页,不传 默认当前页 为1
        page_size: 10000 // 分页数量,最大为10000
    }
);
console.info(result);
// {
//      data: [{
//           close: 9.19,
//           code: "000001.SZ",
//           end_time: "2024-01-12 10:00:00",
//           exchange_id: "SZE",
//           high: 9.2,
//           instrument_id: "000001",
//           low: 9.17,
//           open: 9.19,
//           period: "5m",
//           source_id: "xtp",
//           start_time: "2024-01-12 09:55:00",
//           start_turnover: 123997543,
//           start_volume: 13549009,
//           time_interval: "5m",
//           trading_day: "2024-01-12",
//           turnover: 21865172,
//           type: "bar_5min",
//           volume: 2380100
//      }, ...],
//      currentPage: 1,
//      pageSize: 10000,
//      totalCount: 43,
//      totalPage: 1
// }
console.info(`query_data_page_async 当前页:${result.currentPage}, 每页记录数:${result.pageSize}, 总记录数:${result.totalCount}, 总页数:${result.totalPage}`);
// query_data_page_async 当前页:1, 每页记录数:10000, 总记录数:43, 总页数:1
console.info("query_data_page_async 查询数据集", result.data);
// [{
//      close: 9.19,
//      code: "000001.SZ",
//      end_time: "2024-01-12 10:00:00",
//      exchange_id: "SZE",
//      high: 9.2,
//      instrument_id: "000001",
//      low: 9.17,
//      open: 9.19,
//      period: "5m",
//      source_id: "xtp",
//      start_time: "2024-01-12 09:55:00",
//      start_turnover: 123997543,
//      start_volume: 13549009,
//      time_interval: "5m",
//      trading_day: "2024-01-12",
//      turnover: 21865172,
//      type: "bar_5min",
//      volume: 2380100
// }, ...]
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
59
60
61
62

# 分页查询数据-获取市场数据

const result = await smart.query_data_page_async(
    "market_data", // String(必填) method方法:固定值
    {
        code: "000001.SZ", // String(必填) 证券代码  SZ:深证 SH:上海
        start_date: "2024-01-12 08:30:00", // String(必填) 开始日期
        end_date: "2024-01-12 15:00:00", // String(必填) 结束日期
        current_page: 1, //  当前页,不传 默认当前页 为1
        page_size: 1000 // 分页数量,最大为10000
    }
);
console.info(result);
// {
//     data:[{
//             ask_price: (10) [9.19, 9.2, 9.21, 9.22, 9.23, 0, 0, 0, 0, 0]
//             ask_volume: (10) [368100, 904500, 463100, 719900, 483500, 0, 0, 0, 0, 0]
//             bid_price: (10) [9.18, 9.17, 9.16, 9.15, 9.14, 0, 0, 0, 0, 0]
//             bid_volume: (10) [363900, 606900, 757200, 1069400, 441500, 0, 0, 0, 0, 0]
//             code: "000001.SZ"
//             date_time: "20240112100000000"
//             exchange_id: "SZE"
//             high_price: 9.2
//             instrument_id: "000001"
//             last_price: 9.19
//             low_price: 9.11
//             lower_limit_price: 8.25
//             open_price: 9.13
//             pre_close_price: 9.17
//             source_id: "xtp"
//             trading_day: "20240112"
//             turnover: 145870062
//             upper_limit_price: 10.09
//             volume: 15929909}......]
//     currentPage: 1,
//     pageSize: 1000,
//     totalCount: 4150,
//     totalPage: 5,
// }
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

# 算法API示例

# 创建及启动算法策略 标准版不支持

// 1.配置策略参数
const param={
    "start_time":"09:35:00",
    "end_time":"15:00:00",
    "ticker":"600918",
    "market":"SH",
    "side":"BUY",
    "quantity":300,
    "limit_action":false,
    "expire_action":false,
    "price":0,
    "business_type":"CASH"
}
const config = {
    "strategyType": 3103,
    "clientStrategyId": String(Math.floor(Date.now()*1000)  + (100000 + Math.floor(Math.random() * 100000))),
    "strategyParam": JSON.stringify(param)
}  // 各算法编号"strategyType"及配置项参数"strategyParam"详见SmartX SDK API文档createStrategy方法中的"config参数参考文档"

// 2.下单委托创建
try {
    let strategy = await smart.current_account.createStrategy(smart.Type.StrategyPlatformType.Algo, config.clientStrategyId, config);
    console.info("下单委托创建", strategy);
    // 输出:AlgoXStrategy {strategy_platform_type: "algo", strategy_id: 0, status: "XTP_STRATEGY_STATE_CREATED", isPrivate: false, status_name: "未知", …}
    
    // 3.下单委托提交
    try {
        strategy = await smart.current_account.startStrategy(strategy.strategy_platform_type, strategy.clent_id);
        console.info("下单委托提交", strategy);
        //输出:AlgoXStrategy {strategy_platform_type: "algo", strategy_id: 0, status: "XTP_STRATEGY_STATE_CREATED", isPrivate: false, status_name: "未知", …}
    } catch (error) {
        console.error("下单委托异常", error);
    }
} catch (error) {
    console.error("下单委托异常", error);
}
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

# 快速启动算法策略 标准版不支持

// 1.配置策略参数
const param={
    "start_time":"09:35:00",
    "end_time":"15:00:00",
    "ticker":"600918",
    "market":"SH",
    "side":"BUY",
    "quantity":300,
    "limit_action":false,
    "expire_action":false,
    "price":0,
    "business_type":"CASH"
}
const config = {
    "strategyType": 3103,
    "clientStrategyId": String(Math.floor(Date.now()*1000)  + (100000 + Math.floor(Math.random() * 100000))),
    "strategyParam": JSON.stringify(param)
}  // 各算法编号"strategyType"及配置项参数"strategyParam"详见SmartX SDK API文档createStrategy方法中的"config参数参考文档"

// 2.下单委托创建和提交
try {
    let strategy = await smart.current_account.insertAlgoOrder(smart.Type.StrategyPlatformType.Algo,config.clientStrategyId, config);
    console.info("下单委托提交", strategy);
    //输出:AlgoXStrategy {strategy_platform_type: "algo", strategy_id: "1694655060612168", status: "Unknown", isPrivate: false, status_name: "未知", …}
} catch (error) {
    console.error("下单委托异常", error);
}
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

# 停止算法策略

// 停止委托提交
setTimeout(async function(){
    try {
        const result = await strategy.stopStrategy();
        console.info("停止委托提交完成", result);
        //输出:{xtpStrategyId: "1168434462756"}
    } catch (error) {
        console.error("停止委托提交异常", error);
    }
}, 2000);
1
2
3
4
5
6
7
8
9
10

# 强停算法策略

// 强停委托
setTimeout(async function(){
    try {
        const result = await strategy.forceStopStrategy();
        console.info("强停委托提交", result);
        //输出:{xtpStrategyId: "1168434462757"}
    } catch (error) {
        console.error("强停委托失败", error);
    }
}, 2000);
1
2
3
4
5
6
7
8
9
10

# Kungfu策略API示例

# 获取策略列表

const strategy_map = smart.current_account.strategy_map;
console.log("strategy_map为",strategy_map);
//输出:
// {
//     subscribe_all_market_alphax: AlphaXStrategy, 
//     5-23_alphax: AlphaXStrategy, 
//     test_ob_0628_alphax: AlphaXStrategy, 
//     zlm_817_alphax: AlphaXStrategy, 
//     msg_test_alphax: AlphaXStrategy, 
//     …
// }
1
2
3
4
5
6
7
8
9
10
11

# 获取功夫td列表

let td_list = smart.alphax_td_list;
console.log("td_list[0]为", JSON.stringify(td_list[0]));
// 输出:
// {
//     "account_id": "15003925",
//     "source_name": "xtp",
//     "receive_md": false,
//     "quoteBrokerId": 8,
//     "userName": "15003925",
//     "config": {},
//     "status": "Stopped",
//     "process_name": "td_xtp_15003925",
//     "status_name": "已停止",
//     "strategy_platform_type": "alphax",
//     "process_type": "td",
//     "source": "xtp"
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 获取功夫md列表

let md_list = smart.alphax_md_list;
console.log("md_list[0]为", JSON.stringify(md_list[0]));
// 输出:
// {
//     "account_id": "internal",
//     "source_name": "xtp",
//     "receive_md": true,
//     "userName": "15003925",
//     "config": {},
//     "status": "Stopped",
//     "process_name": "md_xtp",
//     "status_name": "已停止",
//     "strategy_platform_type": "alphax",
//     "process_type": "md",
//     "source": "xtp"
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 监听功夫td进程状态变化

// 当登录smart客户端时,td自动启动,一般启动策略前先通过获取功夫td列表检查策略使用到的td是否都已经启动,没有启动可以通过api启动,或者当检测到td崩溃后可以通过api启动
smart.on_alphax_td_status_change(statusChange => console.log("td状态改变", JSON.stringify(statusChange)));
// 输出:
// {
//     "process_name": "td_xtp_15003925",
//     "account_id": "15003925",
//     "source": "xtp",
//     "status": "Started",
//     "status_name": "已启动",
//     "strategy_platform_type": "alphax"
// }
1
2
3
4
5
6
7
8
9
10
11

# 监听功夫md进程状态变化

// 当登录smart客户端时,md自动启动,一般启动策略前先通过获取功夫md列表检查策略使用到的md是否都已经启动,没有启动可以通过api启动,或者当检测到md崩溃后可以通过api启动
smart.on_alphax_md_status_change(statusChange => console.log("md状态改变", JSON.stringify(statusChange)));
// 输出:
// {
//     "process_name": "md_xtp",
//     "account_id": "internal",
//     "source": "xtp",
//     "status": "Started",
//     "status_name": "已启动",
//     "strategy_platform_type": "alphax"
// }
1
2
3
4
5
6
7
8
9
10
11

# 启动功夫td

// 当登录smart客户端时,td自动启动,一般启动策略前先通过获取功夫td列表检查策略使用到的td是否都已经启动,没有启动可以通过api启动,或者当检测到td崩溃后可以通过api启动
let strategy = strategy_map["123_alphax"];
try {
    let result = await strategy.startTD(smart.current_account.account_id);
    console.log("td启动result为", JSON.stringify(result));
    // 输出:
    // {
    //     "strategy_platform_type": "alphax",
    //     "process_name": "td_xtp_15003925",
    //     "process_type": "td",
    //     "status": "Started",
    //     "status_name": "已启动",
    //     "account_id": "15003925",
    //     "source": "xtp"
    // }
} catch(e) {
    console.log(JSON.stringify(e));
    // 输出:
    // {
    //     "name": "PluginError",
    //     "message": "进程已开启!",
    //     "code": "0001",
    //     "data": {
    //         "strategy_platform_type": "alphax",
    //         "process_name": "td_xtp_15003925",
    //         "process_type": "td",
    //         "status": "Started",
    //         "status_name": "已启动",
    //         "account_id": "15003925",
    //         "source": "xtp"
    //     }
    // }
}
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

# 启动功夫md

// 当登录smart客户端时,md自动启动,一般启动策略前先通过获取功夫md列表检查策略使用到的md是否都已经启动,没有启动可以通过api启动,或者当检测到md崩溃后可以通过api启动
try {
    let result = await strategy.startMD(smart.current_account.account_id);
    console.log("md启动result为", JSON.stringify(result));
    // 输出:
    // {
    //     "strategy_platform_type": "alphax",
    //     "process_name": "md_xtp",
    //     "process_type": "md",
    //     "status": "Started",
    //     "status_name": "已启动",
    //     "account_id": "internal",
    //     "source": "xtp"
    // }
} catch(e) {
    console.log(JSON.stringify(e));
    // 输出:
    // {
    //     "name": "PluginError",
    //     "message": "进程已开启!",
    //     "code": "0001",
    //     "data": {
    //         "strategy_platform_type": "alphax",
    //         "process_name": "md_xtp_internal",
    //         "process_type": "md",
    //         "status": "Started",
    //         "status_name": "已启动",
    //         "account_id": "15003925",
    //         "source": "xtp"
    //     }
    // }
} 
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

# 监听功夫策略进程状态变化

await strategy.loadData();//必要的,详见文档
strategy.on_strategy_status_change(statusChange => console.log("statusChange为", statusChange));
// 输出:
// {
//     strategy_id: "123", 
//     process_name: "123", 
//     status: "Stopped", 
//     status_name: "已停止", 
//     strategy_platform_type: "alphax"
// }
1
2
3
4
5
6
7
8
9
10

# 功夫策略启动前向后台策略传参

try {
    // 策略平台落地的参数文件的相对本策略根目录的相对路径,该文件要预先存在
    let result = await strategy.postStrategyParamsBeforeStart({ aaa: "bbb" }, "/lib/config.json");
    console.log("向后台传参result为", result)
    // 输出:{ msg: "success!", code: 200 }
} catch(e) {
    console.log(e);
}
1
2
3
4
5
6
7
8

# 启动服务端功夫策略

try {
    let status = await strategy.startStrategy();
    console.log("status为", JSON.stringify(status));
    // 输出:
    // {
    //     "strategy_platform_type": "alphax",
    //     "process_name": "123",
    //     "process_type": "strategy",
    //     "status": "Started",
    //     "status_name": "已启动",
    //     "strategy_id": "123"
    // }
} catch(e) {
    console.log(e);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 获取策略委托列表

let order_list = strategy.strategy_order_list; // Order对象数组
console.log("order_list[0]为", JSON.stringify(order_list[0]));
// 输出:
// {
//     "rcv_time": 1694761372602782700,
//     "order_id": "14122189392252567592",
//     "source_order_id": "36088540047606776",
//     "insert_time": 1694761372602782700,
//     "update_time": 1694761372602782700,
//     "trading_day": "20230915",
//     "instrument_id": "600000",
//     "exchange_id": "SSE",
//     "account_id": "15003925",
//     "client_id": "0",
//     "instrument_type": 0,
//     "limit_price": 7.12,
//     "frozen_price": 7.12,
//     "volume": 100,
//     "volume_traded": 100,
//     "volume_left": 0,
//     "tax": 0,
//     "commission": 0,
//     "status": 5,
//     "error_id": 0,
//     "error_msg": "",
//     "side": 1,
//     "offset": 0,
//     "price_type": 1,
//     "volume_condition": 0,
//     "time_condition": 0,
//     "parent_order_id": "0",
//     "code": "600000.SH",
//     "traffic": "alphax",
//     "traffic_sub_id": "123",
//     "cancel_time": "",
//     "order_cancel_client_id": "",
//     "order_cancel_xtp_id": "",
//     "instrument_name": "浦发银行",
//     "trade_amount": 0,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_UNKNOWN",
//     "xtp_market_type": "XTP_MKT_SH_A",
//     "xtp_price_type": "XTP_PRICE_LIMIT",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_BUY",
//     "xtp_order_status": "XTP_ORDER_STATUS_ALLTRADED",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "未知",
//     "status_name": "全部成交",
//     "side_name": "买",
//     "offset_name": "开",
//     "price_type_name": "限价",
//     "xtp_business_type_name": "未知类型",
//     "xtp_market_name": "沪A",
//     "xtp_price_type_name": "限价",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "买",
//     "xtp_order_status_name": "全部成交",
//     "volume_condition_name": "任何数量",
//     "time_condition_name": "",
//     "traffic_name": "功夫策略",
//     "business_type": ""
// }
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
59
60
61
62

# 获取策略成交列表

let trade_list = strategy.strategy_trade_list; // Trade对象数组
console.log("trade_list[0]为", JSON.stringify(trade_list[0]));
// 输出:
// {
//     "rcv_time": 1694761372603000000,
//     "order_id": "14122189392252567592",
//     "parent_order_id": 0,
//     "trade_time": 1694761372603000000,
//     "trading_day": "20230915",
//     "instrument_id": "600000",
//     "exchange_id": "SSE",
//     "account_id": "15003925",
//     "client_id": 0,
//     "instrument_type": 1,
//     "side": 1,
//     "offset": 0,
//     "price": 7.12,
//     "volume": 50,
//     "tax": 0,
//     "commission": 0,
//     "code": "600000.SH",
//     "traffic": "alphax",
//     "traffic_sub_id": "123",
//     "instrument_name": "浦发银行",
//     "trade_amount": 356,
//     "xtp_business_type": "XTP_BUSINESS_TYPE_UNKNOWN",
//     "xtp_market_type": "XTP_MKT_UNKNOWN",
//     "xtp_exec_id": "",
//     "xtp_report_index": "",
//     "xtp_order_exch_id": "",
//     "xtp_trade_type": "",
//     "xtp_branch_pbu": "",
//     "xtp_position_effect_type": "XTP_POSITION_EFFECT_INIT",
//     "xtp_side_type": "XTP_SIDE_UNKNOWN",
//     "exchange_id_name": "上交所",
//     "instrument_type_name": "股票",
//     "side_name": "买",
//     "offset_name": "开",
//     "xtp_business_type_name": "未知类型",
//     "xtp_market_name": "未知",
//     "xtp_position_effect_type_name": "初始值",
//     "xtp_side_type_name": "未知",
//     "traffic_name": "功夫策略",
//     "xtp_trade_type_name": "",
//     "business_type": "",
//     "_rowid": "14122189392252567603"
// }
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

# 获取策略持仓列表

let position_list = strategy.strategy_position_list; // Position对象数组
console.log("position_list[0]为", JSON.stringify(position_list[0]));
// 输出:
// {
//     "instrument_id": "000001",
//     "instrument_name": "平安银行",
//     "instrument_type": 1,
//     "exchange_id": "SZE",
//     "exchange_id_name": "深交所",
//     "direction": 0,
//     "direction_name": "多",
//     "name_py": "payh",
//     "volume": 3000,
//     "sellable_volume": 3000,
//     "position_cost_price": 11.673333333333334,
//     "last_price": 11.27,
//     "market_value": 0,
//     "unrealized_pnl": -1210.0000000000027,
//     "yesterday_volume": 3000,
//     "purchase_redeemable_qty": 3000,
//     "executable_option": 3000,
//     "lockable_position": 0,
//     "executable_underlying": 0,
//     "locked_position": 0,
//     "usable_locked_position": 0,
//     "xtp_market_type": "XTP_EXCHANGE_UNKNOWN",
//     "xtp_market_name": "",
//     "_instrument_id_direction": "000001_0",
//     "code": "000001.SZ"
// }
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

# 停止服务端功夫策略

setTimeout(async function(){
    try {
        let result = await strategy.stopStrategy();
        console.log("result为", JSON.stringify(result));
        // 输出:
        // {
        //     "strategy_platform_type": "alphax",
        //     "process_name": "123",
        //     "process_type": "strategy",
        //     "status": "Stopped",
        //     "status_name": "已停止",
        //     "strategy_id": "123"
        // }
    } catch(e) {
        console.log(e);
    }
}, 3000);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17