@@ -3,21 +3,59 @@ package org.rationalityfrontline.ktrader.broker.api
33import org.pf4j.ExtensionPoint
44import org.rationalityfrontline.kevent.KEvent
55
6+ /* *
7+ * 交易接口插件类,用于获取相关信息及生成 [BrokerApi] 实例
8+ */
69abstract class Broker : ExtensionPoint {
10+
11+ /* *
12+ * 交易接口名称。例:"CTP"
13+ */
714 abstract val name: String
15+
16+ /* *
17+ * 交易接口版本。
18+ */
819 abstract val version: String
20+
21+ /* *
22+ * 实例化 [BrokerApi] 时所需的参数说明。[Pair.first] 为参数名,[Pair.second] 为参数说明。
23+ * 例:Pair("password", "String 投资者资金账号的密码")
24+ */
925 abstract val configKeys: List <Pair <String , String >>
26+
27+ /* *
28+ * [BrokerApi] 成员方法的额外参数(extras: Map<String, Any>?)说明。[Pair.first] 为方法名,[Pair.second] 为额外参数说明。
29+ * 例:Pair("insertOrder", "[minVolume: Int]【最小成交量。仅当下单类型为 OrderType.FAK 时生效】")
30+ */
1031 open val methodExtras: List <Pair <String , String >> = listOf ()
32+
33+ /* *
34+ * 自定义方法的说明(对应 [BrokerApi.customRequest]/[BrokerApi.customSuspendRequest])。[Pair.first] 为方法名,[Pair.second] 为方法文档(参数说明及返回值说明)。
35+ * 例:Pair("suspend fun queryMaxOrderVolume(code: String, direction: Direction, offset: OrderOffset): Int", "[合约代码,买卖方向,开平类型]【查询并返回最大下单量,未查到则返回 0】")
36+ */
1137 open val customMethods: List <Pair <String , String >> = listOf ()
38+
39+ /* *
40+ * 自定义事件的说明(对应 [CustomEvent])。[Pair.first] 为事件类型,[Pair.second] 为事件说明。
41+ * 例:Pair("TD_MARKET_STATUS_CHANGE", "[data: MarketStatus]【市场交易状态变动】")
42+ */
1243 open val customEvents: List <Pair <String , String >> = listOf ()
44+
45+ /* *
46+ * 创建 [BrokerApi] 实例
47+ * @param config 参见 [configKeys]
48+ * @param kEvent 会通过该 [KEvent] 实例推送 [BrokerEvent],如 [Tick]、成交回报等
49+ */
1350 abstract fun createApi (config : Map <String , Any >, kEvent : KEvent ): BrokerApi
14- private fun formatPairList (list : List <Pair <String , String >>): String {
15- return if (list.isEmpty()) " null" else {
16- val indent = " "
17- list.joinToString(separator = " \n " , prefix = " {\n " , postfix = " \n $indent }" ) { " $indent ${it.first} : ${it.second} " }
18- }
19- }
51+
2052 override fun toString (): String {
53+ fun formatPairList (list : List <Pair <String , String >>): String {
54+ return if (list.isEmpty()) " null" else {
55+ val indent = " "
56+ list.joinToString(separator = " \n " , prefix = " {\n " , postfix = " \n $indent }" ) { " $indent ${it.first} : ${it.second} " }
57+ }
58+ }
2159 return """
2260 Broker@${hashCode()} , name=$name , version=$version
2361 configKeys:
0 commit comments