Skip to content

Commit 7591909

Browse files
authored
Merge pull request #422 from fasenderos/maker-taker
Add takerQty and makerQty Properties to Orders, Replacing isMaker Flag ## Breaking Changes - The `isMaker` property has been removed from the limit order object. - New properties `takerQty` and `makerQty` have been added to the limit order objecct.
2 parents dba8c12 + 6f9677b commit 7591909

11 files changed

+128
-133
lines changed

src/order.ts

+25-29
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ abstract class BaseOrder {
1818
readonly _id: string
1919
readonly _side: Side
2020
_size: number
21-
readonly _origSize: number
2221
_time: number
2322
constructor (options: OrderOptions) {
2423
this._id = options.id ?? randomUUID()
2524
this._side = options.side
2625
this._size = options.size
27-
this._origSize = options.origSize ?? options.size
2826
this._time = options.time ?? Date.now()
2927
}
3028

@@ -48,11 +46,6 @@ abstract class BaseOrder {
4846
this._size = size
4947
}
5048

51-
// Getter for the original size of the order
52-
get origSize (): number {
53-
return this._origSize
54-
}
55-
5649
// Getter for order timestamp
5750
get time (): number {
5851
return this._time
@@ -72,18 +65,22 @@ abstract class BaseOrder {
7265
}
7366
export class LimitOrder extends BaseOrder {
7467
private readonly _type: OrderType.LIMIT
68+
readonly _origSize: number
7569
private _price: number
7670
private readonly _timeInForce: TimeInForce
77-
private readonly _isMaker: boolean
71+
private readonly _makerQty: number
72+
private readonly _takerQty: number
7873
private readonly _postOnly: boolean
7974
// Refers to the linked Stop Limit order stopPrice
8075
private readonly _ocoStopPrice?: number
8176
constructor (options: InternalLimitOrderOptions) {
8277
super(options)
8378
this._type = options.type
79+
this._origSize = options.origSize
8480
this._price = options.price
8581
this._timeInForce = options.timeInForce
86-
this._isMaker = options.isMaker
82+
this._makerQty = options.makerQty
83+
this._takerQty = options.takerQty
8784
this._postOnly = options.postOnly ?? false
8885
this._ocoStopPrice = options.ocoStopPrice
8986
}
@@ -113,9 +110,19 @@ export class LimitOrder extends BaseOrder {
113110
return this._postOnly
114111
}
115112

116-
// Getter for order isMaker
117-
get isMaker (): boolean {
118-
return this._isMaker
113+
// Getter for the original size of the order
114+
get origSize (): number {
115+
return this._origSize
116+
}
117+
118+
// Getter for order makerQty
119+
get makerQty (): number {
120+
return this._makerQty
121+
}
122+
123+
// Getter for order takerQty
124+
get takerQty (): number {
125+
return this._takerQty
119126
}
120127

121128
get ocoStopPrice (): number | undefined {
@@ -131,7 +138,8 @@ export class LimitOrder extends BaseOrder {
131138
price: ${this._price}
132139
time: ${this._time}
133140
timeInForce: ${this._timeInForce}
134-
isMaker: ${this._isMaker as unknown as string}`
141+
makerQty: ${this._makerQty}
142+
takerQty: ${this._takerQty}`
135143

136144
toJSON = (): string => JSON.stringify(this.toObject())
137145

@@ -144,7 +152,8 @@ export class LimitOrder extends BaseOrder {
144152
price: this._price,
145153
time: this._time,
146154
timeInForce: this._timeInForce,
147-
isMaker: this._isMaker
155+
makerQty: this._makerQty,
156+
takerQty: this._takerQty
148157
})
149158
}
150159

@@ -172,7 +181,6 @@ export class StopMarketOrder extends BaseOrder {
172181
type: ${this.type}
173182
side: ${this._side}
174183
size: ${this._size}
175-
origSize: ${this._origSize}
176184
stopPrice: ${this._stopPrice}
177185
time: ${this._time}`
178186

@@ -183,7 +191,6 @@ export class StopMarketOrder extends BaseOrder {
183191
type: this.type,
184192
side: this._side,
185193
size: this._size,
186-
origSize: this._origSize,
187194
stopPrice: this._stopPrice,
188195
time: this._time
189196
})
@@ -194,7 +201,6 @@ export class StopLimitOrder extends BaseOrder {
194201
private _price: number
195202
private readonly _stopPrice: number
196203
private readonly _timeInForce: TimeInForce
197-
private readonly _isMaker: boolean
198204
// It's true when there is a linked Limit Order
199205
private readonly _isOCO: boolean
200206
constructor (options: InternalStopLimitOrderOptions) {
@@ -203,7 +209,6 @@ export class StopLimitOrder extends BaseOrder {
203209
this._price = options.price
204210
this._stopPrice = options.stopPrice
205211
this._timeInForce = options.timeInForce
206-
this._isMaker = options.isMaker
207212
this._isOCO = options.isOCO ?? false
208213
}
209214

@@ -232,11 +237,6 @@ export class StopLimitOrder extends BaseOrder {
232237
return this._timeInForce
233238
}
234239

235-
// Getter for order isMaker
236-
get isMaker (): boolean {
237-
return this._isMaker
238-
}
239-
240240
// Getter for order isOCO
241241
get isOCO (): boolean {
242242
return this._isOCO
@@ -247,12 +247,10 @@ export class StopLimitOrder extends BaseOrder {
247247
type: ${this.type}
248248
side: ${this._side}
249249
size: ${this._size}
250-
origSize: ${this._origSize}
251250
price: ${this._price}
252251
stopPrice: ${this._stopPrice}
253252
timeInForce: ${this._timeInForce}
254-
time: ${this._time}
255-
isMaker: ${this._isMaker as unknown as string}`
253+
time: ${this._time}`
256254

257255
toJSON = (): string => JSON.stringify(this.toObject())
258256

@@ -261,12 +259,10 @@ export class StopLimitOrder extends BaseOrder {
261259
type: this.type,
262260
side: this._side,
263261
size: this._size,
264-
origSize: this._origSize,
265262
price: this._price,
266263
stopPrice: this._stopPrice,
267264
timeInForce: this._timeInForce,
268-
time: this._time,
269-
isMaker: this._isMaker
265+
time: this._time
270266
})
271267
}
272268

src/orderbook.ts

+10-14
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,6 @@ export class OrderBook {
616616
const stopLimit = OrderFactory.createOrder({
617617
...options,
618618
type: OrderType.STOP_LIMIT,
619-
isMaker: true,
620619
timeInForce: options.timeInForce ?? TimeInForce.GTC
621620
})
622621
return this._stopOrder(stopLimit, response)
@@ -650,7 +649,6 @@ export class OrderBook {
650649
size: options.size,
651650
price: options.stopLimitPrice,
652651
stopPrice: options.stopPrice,
653-
isMaker: true,
654652
timeInForce: options.stopLimitTimeInForce ?? TimeInForce.GTC,
655653
isOCO: true
656654
})
@@ -797,17 +795,21 @@ export class OrderBook {
797795
this.executeConditionalOrder(side, priceBefore, response)
798796

799797
let order: LimitOrder
798+
const takerQty = size - quantityToTrade
799+
const makerQty = quantityToTrade
800800
if (quantityToTrade > 0) {
801801
order = OrderFactory.createOrder({
802802
type: OrderType.LIMIT,
803803
id: orderID,
804804
side,
805805
size: quantityToTrade,
806+
origSize: size,
806807
price,
807808
time: Date.now(),
808809
timeInForce,
809810
postOnly,
810-
isMaker: quantityToTrade === size,
811+
takerQty,
812+
makerQty,
811813
...(ocoStopPrice !== undefined ? { ocoStopPrice } : {})
812814
})
813815
if (response.done.length > 0) {
@@ -834,11 +836,13 @@ export class OrderBook {
834836
type: OrderType.LIMIT,
835837
side,
836838
size,
839+
origSize: size,
837840
price: totalPrice / totalQuantity,
838841
time: Date.now(),
839842
timeInForce,
840843
postOnly,
841-
isMaker: false
844+
takerQty,
845+
makerQty
842846
})
843847
response.done.push(order)
844848
}
@@ -995,16 +999,8 @@ export class OrderBook {
995999
if (headOrder !== undefined) {
9961000
if (response.quantityLeft < headOrder.size) {
9971001
response.partial = OrderFactory.createOrder({
998-
type: OrderType.LIMIT,
999-
id: headOrder.id,
1000-
side: headOrder.side,
1001-
size: headOrder.size - response.quantityLeft,
1002-
origSize: headOrder.origSize,
1003-
price: headOrder.price,
1004-
time: headOrder.time,
1005-
timeInForce: headOrder.timeInForce,
1006-
postOnly: headOrder.postOnly,
1007-
isMaker: true
1002+
...headOrder.toObject(),
1003+
size: headOrder.size - response.quantityLeft
10081004
})
10091005
this.orders[headOrder.id] = response.partial
10101006
response.partialQuantityProcessed = response.quantityLeft

src/orderside.ts

+2-8
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,10 @@ export class OrderSide {
9292
): LimitOrder => {
9393
this.remove(oldOrder)
9494
const newOrder = OrderFactory.createOrder({
95-
id: oldOrder.id,
96-
type: oldOrder.type,
97-
side: oldOrder.side,
95+
...oldOrder.toObject(),
9896
size: orderUpdate.size !== undefined ? orderUpdate.size : oldOrder.size,
99-
origSize: oldOrder.origSize,
10097
price: orderUpdate.price,
101-
time: Date.now(),
102-
timeInForce: oldOrder.timeInForce,
103-
postOnly: oldOrder.postOnly,
104-
isMaker: oldOrder.isMaker
98+
time: Date.now()
10599
})
106100
this.append(newOrder)
107101
return newOrder

src/types.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ interface BaseOrderOptions {
2626
interface InternalBaseOrderOptions extends BaseOrderOptions {
2727
type: OrderType
2828
time?: number
29-
origSize?: number
3029
}
3130
/**
3231
* Specific options for a market order.
@@ -50,10 +49,12 @@ interface ILimitOrderOptions extends InternalBaseOrderOptions {
5049
id: string
5150
price: number
5251
timeInForce: TimeInForce
53-
isMaker: boolean
5452
}
5553
export interface InternalLimitOrderOptions extends ILimitOrderOptions {
5654
type: OrderType.LIMIT
55+
origSize: number
56+
makerQty: number
57+
takerQty: number
5758
postOnly?: boolean
5859
ocoStopPrice?: number
5960
}
@@ -107,14 +108,15 @@ export interface IMarketOrder {
107108
*/
108109
export interface ILimitOrder {
109110
id: string
110-
type: OrderType
111+
type: OrderType.LIMIT
111112
side: Side
112113
size: number
113114
origSize: number
114115
price: number
115116
time: number
116117
timeInForce: TimeInForce
117-
isMaker: boolean
118+
takerQty: number
119+
makerQty: number
118120
}
119121

120122
/**
@@ -125,7 +127,6 @@ export interface IStopMarketOrder {
125127
type: OrderType
126128
side: Side
127129
size: number
128-
origSize: number
129130
stopPrice: number
130131
time: number
131132
}
@@ -138,12 +139,10 @@ export interface IStopLimitOrder {
138139
type: OrderType
139140
side: Side
140141
size: number
141-
origSize: number
142142
price: number
143143
stopPrice: number
144144
timeInForce: TimeInForce
145145
time: number
146-
isMaker: boolean
147146
}
148147

149148
/**

0 commit comments

Comments
 (0)