Skip to content

Commit 32bd7ba

Browse files
达到较为完善程度
1 parent 00daa0d commit 32bd7ba

File tree

5 files changed

+68
-52
lines changed

5 files changed

+68
-52
lines changed

lib/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
kotlin("jvm") version "1.5.10"
2+
kotlin("jvm") version "1.5.21"
33
`java-library`
44
`maven-publish`
55
signing

lib/src/main/kotlin/org/rationalityfrontline/ktrader/broker/api/BrokerApi.kt

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,41 @@ abstract class BrokerApi(val config: Map<String, Any>, val kEvent: KEvent) {
2121

2222
abstract suspend fun subscribeMarketData(codes: Collection<String>, extras: Map<String, Any>? = null)
2323

24+
open suspend fun subscribeMarketData(code: String, extras: Map<String, Any>? = null) {
25+
subscribeMarketData(listOf(code), extras)
26+
}
27+
2428
abstract suspend fun unsubscribeMarketData(codes: Collection<String>, extras: Map<String, Any>? = null)
2529

30+
open suspend fun unsubscribeMarketData(code: String, extras: Map<String, Any>? = null) {
31+
unsubscribeMarketData(listOf(code), extras)
32+
}
33+
2634
abstract suspend fun subscribeAllMarketData(extras: Map<String, Any>? = null)
2735

2836
abstract suspend fun unsubscribeAllMarketData(extras: Map<String, Any>? = null)
2937

30-
abstract suspend fun querySubscriptions(useCache: Boolean = true, extras: Map<String, Any>? = null): List<String>
38+
abstract suspend fun querySubscriptions(useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): List<String>
3139

32-
abstract suspend fun queryLastTick(code: String, useCache: Boolean = true, extras: Map<String, Any>? = null): Tick
40+
abstract suspend fun queryLastTick(code: String, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Tick?
3341

34-
abstract suspend fun queryInstrument(code: String, useCache: Boolean = true, extras: Map<String, Any>? = null): Instrument
42+
abstract suspend fun queryInstrument(code: String, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Instrument?
3543

36-
abstract suspend fun queryAllInstruments(useCache: Boolean = true, extras: Map<String, Any>? = null): List<Instrument>
44+
abstract suspend fun queryAllInstruments(useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): List<Instrument>
3745

38-
abstract suspend fun queryAssets(useCache: Boolean = true, extras: Map<String, Any>? = null): Assets
46+
abstract suspend fun queryAssets(useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Assets
3947

40-
abstract suspend fun queryPositions(code: String? = null, useCache: Boolean = true, extras: Map<String, Any>? = null): List<Position>
48+
abstract suspend fun queryPosition(code: String, direction: Direction, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Position?
4149

42-
abstract suspend fun queryOrder(orderId: String, useCache: Boolean = true, extras: Map<String, Any>? = null): Order
50+
abstract suspend fun queryPositions(code: String? = null, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): List<Position>
4351

44-
abstract suspend fun queryOrders(code: String? = null, onlyUnfinished: Boolean = true, useCache: Boolean = true, extras: Map<String, Any>? = null): List<Order>
52+
abstract suspend fun queryOrder(orderId: String, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Order?
4553

46-
abstract suspend fun queryTrade(tradeId: String, useCache: Boolean = true, extras: Map<String, Any>? = null): Order
54+
abstract suspend fun queryOrders(code: String? = null, onlyUnfinished: Boolean = true, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): List<Order>
4755

48-
abstract suspend fun queryTrades(code: String? = null, useCache: Boolean = true, extras: Map<String, Any>? = null): List<Trade>
56+
abstract suspend fun queryTrade(tradeId: String, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): Trade?
57+
58+
abstract suspend fun queryTrades(code: String? = null, orderId: String? = null, useCache: Boolean = true, retry: Boolean = true, extras: Map<String, Any>? = null): List<Trade>
4959

5060
abstract fun insertOrder(
5161
code: String, price: Double, volume: Int, direction: Direction, offset: OrderOffset,
@@ -54,13 +64,18 @@ abstract class BrokerApi(val config: Map<String, Any>, val kEvent: KEvent) {
5464

5565
abstract fun cancelOrder(orderId: String, extras: Map<String, Any>? = null)
5666

57-
open fun prepareFeeCalculation(extras: Map<String, Any>? = null) {}
67+
open suspend fun cancelAllOrders(extras: Map<String, Any>? = null) {
68+
val unfinishedOrders = queryOrders()
69+
unfinishedOrders.forEach { cancelOrder(it.orderId) }
70+
}
71+
72+
open suspend fun prepareFeeCalculation(codes: Collection<String>? = null, extras: Map<String, Any>? = null) {}
5873

59-
open fun calculatePositions(positions: List<Position>, extras: Map<String, Any>? = null): List<Position> = positions
74+
open fun calculatePosition(position: Position, extras: Map<String, Any>? = null) {}
6075

61-
open fun calculateFrozenCash(order: Order, extras: Map<String, Any>? = null): Double = 0.0
76+
open fun calculateOrder(order: Order, extras: Map<String, Any>? = null) {}
6277

63-
open fun calculateCommission(order: Order, extras: Map<String, Any>? = null): Double = 0.0
78+
open fun calculateTrade(trade: Trade, extras: Map<String, Any>? = null) {}
6479

6580
open suspend fun customSuspendRequest(method: String, params: Map<String, Any>? = null): Any {
6681
throw IllegalArgumentException("Unsupported suspend custom method:$method")

lib/src/main/kotlin/org/rationalityfrontline/ktrader/broker/api/BrokerEvent.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ enum class BrokerEventType {
1515
TD_USER_LOGGED_IN,
1616
TD_USER_LOGGED_OUT,
1717
TD_ORDER_STATUS,
18-
TD_ORDER_FILLED,
18+
TD_CANCEL_FAILED,
19+
TD_TRADE_REPORT,
1920
}
2021

2122
data class BrokerEvent(

lib/src/main/kotlin/org/rationalityfrontline/ktrader/broker/api/constants.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,34 @@ enum class InstrumentType {
88
}
99

1010
enum class OptionsType {
11+
UNKNOWN,
1112
CALL,
1213
PUT,
1314
}
1415

1516
enum class Direction {
17+
UNKNOWN,
1618
LONG,
1719
SHORT,
1820
}
1921

2022
enum class TickDirection {
23+
UNKNOWN,
2124
UP,
2225
STAY,
2326
DOWN,
2427
}
2528

2629
enum class OrderOffset {
30+
UNKNOWN,
2731
OPEN,
2832
CLOSE,
2933
CLOSE_TODAY,
3034
CLOSE_YESTERDAY,
3135
}
3236

3337
enum class OrderType {
38+
UNKNOWN,
3439
CUSTOM,
3540
LIMIT,
3641
MARKET,
@@ -40,11 +45,11 @@ enum class OrderType {
4045
}
4146

4247
enum class OrderStatus {
48+
UNKNOWN,
4349
SUBMITTING,
4450
ACCEPTED,
4551
PARTIALLY_FILLED,
4652
FILLED,
47-
CANCELING,
4853
CANCELED,
4954
ERROR,
5055
}

lib/src/main/kotlin/org/rationalityfrontline/ktrader/broker/api/entities.kt

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package org.rationalityfrontline.ktrader.broker.api
22

33
import java.time.LocalDate
44
import java.time.LocalDateTime
5-
import kotlin.coroutines.Continuation
65

76
data class Tick(
87
val code: String,
@@ -16,7 +15,7 @@ data class Tick(
1615
val turnover: Double,
1716
val openInterest: Int,
1817
val direction: TickDirection,
19-
val status: MarketStatus,
18+
var status: MarketStatus,
2019
val yesterdayClose: Double,
2120
val yesterdaySettlementPrice: Double,
2221
val yesterdayOpenInterest: Int,
@@ -31,10 +30,11 @@ data class Tick(
3130
val todayVolume: Int,
3231
val todayTurnover: Double,
3332
val todayOpenInterest: Int,
34-
val extras: Map<String, Any>? = null,
33+
var extras: MutableMap<String, Any>? = null,
3534
)
3635

3736
data class Order(
37+
val accountId: String,
3838
val orderId: String,
3939
val code: String,
4040
val price: Double,
@@ -43,35 +43,30 @@ data class Order(
4343
val offset: OrderOffset,
4444
val orderType: OrderType,
4545
var status: OrderStatus,
46+
var statusMsg: String,
4647
var filledVolume: Int,
4748
var turnover: Double,
49+
var avgFillPrice: Double,
4850
var frozenCash: Double,
4951
var commission: Double,
5052
val createTime: LocalDateTime,
5153
var updateTime: LocalDateTime,
52-
var errorInfo: String = "",
53-
val extras: Map<String, Any>? = null,
54-
)
55-
56-
data class OrderStatusUpdate(
57-
val orderId: String,
58-
val newStatus: OrderStatus,
59-
val statusMsg: String = "",
60-
val updateTime: LocalDateTime = LocalDateTime.now(),
61-
val extras: Map<String, Any>? = null,
54+
var extras: MutableMap<String, Any>? = null,
6255
)
6356

6457
data class Trade(
58+
val accountId: String,
6559
val tradeId: String,
6660
val orderId: String,
6761
val code: String,
6862
val price: Double,
6963
val volume: Int,
64+
var turnover: Double,
7065
val direction: Direction,
71-
val offset: OrderOffset,
72-
val commission: Double,
66+
var offset: OrderOffset,
67+
var commission: Double,
7368
val time: LocalDateTime,
74-
val extras: Map<String, Any>? = null,
69+
var extras: MutableMap<String, Any>? = null,
7570
)
7671

7772
data class MarginRate(
@@ -80,7 +75,7 @@ data class MarginRate(
8075
val longMarginRatioByVolume: Double,
8176
val shortMarginRatioByMoney: Double,
8277
val shortMarginRatioByVolume: Double,
83-
val extras: Map<String, Any>? = null,
78+
var extras: MutableMap<String, Any>? = null,
8479
)
8580

8681
data class CommissionRate(
@@ -91,16 +86,19 @@ data class CommissionRate(
9186
val closeRatioByVolume: Double,
9287
val closeTodayRatioByMoney: Double,
9388
val closeTodayRatioByVolume: Double,
94-
val orderInsertFeeByVolume: Double = 0.0,
95-
val orderCancelFeeByVolume: Double = 0.0,
96-
val orderInsertFeeByTrade: Double = 0.0,
97-
val orderCancelFeeByTrade: Double = 0.0,
98-
val extras: Map<String, Any>? = null,
89+
var orderInsertFeeByVolume: Double = 0.0,
90+
var orderCancelFeeByVolume: Double = 0.0,
91+
var orderInsertFeeByTrade: Double = 0.0,
92+
var orderCancelFeeByTrade: Double = 0.0,
93+
val optionsStrikeRationByMoney: Double = 0.0,
94+
val optionsStrikeRationByVolume: Double = 0.0,
95+
var extras: MutableMap<String, Any>? = null,
9996
)
10097

10198
data class Instrument(
10299
val code: String,
103100
val type: InstrumentType,
101+
val productId: String = "",
104102
val name: String,
105103
val priceTick: Double,
106104
val isTrading: Boolean,
@@ -112,22 +110,26 @@ data class Instrument(
112110
var marginRate: MarginRate? = null,
113111
var commissionRate: CommissionRate? = null,
114112
val optionsType: OptionsType? = null,
115-
val extras: Map<String, Any>? = null,
113+
val optionsUnderlyingCode: String = "",
114+
val optionsStrikePrice: Double = 0.0,
115+
var extras: MutableMap<String, Any>? = null,
116116
)
117117

118118
data class Assets(
119+
val accountId: String,
119120
var total: Double,
120121
var available: Double,
121122
var positionValue: Double,
122123
var frozenByOrder: Double,
123124
var todayCommission: Double,
124-
val extras: Map<String, Any>? = null,
125+
var extras: MutableMap<String, Any>? = null,
125126
)
126127

127128
data class Position(
129+
val accountId: String,
128130
val code: String,
129131
val direction: Direction,
130-
val yesterdayVolume: Int,
132+
var yesterdayVolume: Int,
131133
var volume: Int,
132134
var value: Double,
133135
var todayVolume: Int,
@@ -136,16 +138,9 @@ data class Position(
136138
var todayOpenVolume: Int,
137139
var todayCloseVolume: Int,
138140
var todayCommission: Double,
139-
val openCost: Double,
140-
val avgOpenPrice: Double,
141+
var openCost: Double,
142+
var avgOpenPrice: Double,
141143
var lastPrice: Double,
142144
var pnl: Double,
143-
val extras: Map<String, Any>? = null,
144-
)
145-
146-
data class RequestContinuation(
147-
val requestId: Int,
148-
val continuation: Continuation<*>,
149-
val tag: String = "",
150-
val data: Any = Unit,
145+
var extras: MutableMap<String, Any>? = null,
151146
)

0 commit comments

Comments
 (0)