@@ -3,21 +3,59 @@ package org.rationalityfrontline.ktrader.broker.api
3
3
import org.pf4j.ExtensionPoint
4
4
import org.rationalityfrontline.kevent.KEvent
5
5
6
+ /* *
7
+ * 交易接口插件类,用于获取相关信息及生成 [BrokerApi] 实例
8
+ */
6
9
abstract class Broker : ExtensionPoint {
10
+
11
+ /* *
12
+ * 交易接口名称。例:"CTP"
13
+ */
7
14
abstract val name: String
15
+
16
+ /* *
17
+ * 交易接口版本。
18
+ */
8
19
abstract val version: String
20
+
21
+ /* *
22
+ * 实例化 [BrokerApi] 时所需的参数说明。[Pair.first] 为参数名,[Pair.second] 为参数说明。
23
+ * 例:Pair("password", "String 投资者资金账号的密码")
24
+ */
9
25
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
+ */
10
31
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
+ */
11
37
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
+ */
12
43
open val customEvents: List <Pair <String , String >> = listOf ()
44
+
45
+ /* *
46
+ * 创建 [BrokerApi] 实例
47
+ * @param config 参见 [configKeys]
48
+ * @param kEvent 会通过该 [KEvent] 实例推送 [BrokerEvent],如 [Tick]、成交回报等
49
+ */
13
50
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
+
20
52
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
+ }
21
59
return """
22
60
Broker@${hashCode()} , name=$name , version=$version
23
61
configKeys:
0 commit comments