Skip to content

Commit

Permalink
add mid market price
Browse files Browse the repository at this point in the history
  • Loading branch information
aforaleka committed Apr 11, 2024
1 parent cd00770 commit a7e6595
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1162,43 +1162,53 @@ class V4StateManagerAdaptor(

override fun commitPlaceOrder(callback: TransactionCallback): HumanReadablePlaceOrderPayload {
val payload = placeOrderPayload()
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(payload)
val midMarketPrice = stateMachine.state?.marketOrderbook(payload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(payload, midMarketPrice)
return submitPlaceOrder(callback, payload, analyticsPayload)
}

override fun commitClosePosition(callback: TransactionCallback): HumanReadablePlaceOrderPayload {
val payload = closePositionPayload()
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(payload, true)
val midMarketPrice = stateMachine.state?.marketOrderbook(payload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(payload, midMarketPrice, true)
return submitPlaceOrder(callback, payload, analyticsPayload)
}

override fun cancelOrder(orderId: String, callback: TransactionCallback) {
val payload = cancelOrderPayload(orderId)
val subaccount = stateMachine.state?.subaccount(subaccountNumber)
val existingOrder = subaccount?.orders?.firstOrNull { it.id == orderId }
val analyticsPayload = ParsingHelper.merge(
analyticsUtils.formatCancelOrderPayload(payload),
if (existingOrder != null) analyticsUtils.formatOrder(existingOrder) else mapOf(),
)?.toIMap()
val analyticsPayload = analyticsUtils.cancelOrderAnalyticsPayload(
payload,
existingOrder
)

submitCancelOrder(orderId, callback, payload, analyticsPayload)
}

override fun commitTriggerOrders(callback: TransactionCallback): HumanReadableTriggerOrdersPayload {
val payloads = triggerOrdersPayload()

payloads.cancelOrderPayloads.forEach {
val analyticsPayload = analyticsUtils.formatCancelOrderPayload(it, true)
submitCancelOrder(it.orderId, callback, it, analyticsPayload, true)
payloads.cancelOrderPayloads.forEach {payload ->
val subaccount = stateMachine.state?.subaccount(subaccountNumber)
val existingOrder = subaccount?.orders?.firstOrNull { it.id == payload.orderId }
val analyticsPayload = analyticsUtils.cancelOrderAnalyticsPayload(
payload,
existingOrder,
true
)
submitCancelOrder(payload.orderId, callback, payload, analyticsPayload, true)
}

payloads.placeOrderPayloads.forEach {
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(
it,
payloads.placeOrderPayloads.forEach { payload ->
val midMarketPrice = stateMachine.state?.marketOrderbook(payload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(
payload,
midMarketPrice,
isClosePosition = false,
fromSlTpDialog = true,
)
submitPlaceOrder(callback, it, analyticsPayload, true)
submitPlaceOrder(callback, payload, analyticsPayload, true)
}

if (payloads.cancelOrderPayloads.isEmpty() && payloads.placeOrderPayloads.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,8 @@ internal class SubaccountSupervisor(
callback: TransactionCallback
): HumanReadablePlaceOrderPayload {
val orderPayload = placeOrderPayload(currentHeight)
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(orderPayload, false)
val midMarketPrice = stateMachine.state?.marketOrderbook(orderPayload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(orderPayload, midMarketPrice, false)
val isIsolatedMarginOrder =
helper.parser.asInt(orderPayload.subaccountNumber) != subaccountNumber
val transferPayload =
Expand All @@ -751,14 +752,17 @@ internal class SubaccountSupervisor(
callback: TransactionCallback
): HumanReadablePlaceOrderPayload {
val payload = closePositionPayload(currentHeight)
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(payload, true)
val midMarketPrice = stateMachine.state?.marketOrderbook(payload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(payload, midMarketPrice, true)

return submitPlaceOrder(callback, payload, analyticsPayload)
}

internal fun cancelOrder(orderId: String, callback: TransactionCallback): HumanReadableCancelOrderPayload {
val payload = cancelOrderPayload(orderId)
val analyticsPayload = analyticsUtils.formatCancelOrderPayload(payload)
val subaccount = stateMachine.state?.subaccount(subaccountNumber)
val existingOrder = subaccount?.orders?.firstOrNull { it.id == orderId }
val analyticsPayload = analyticsUtils.cancelOrderAnalyticsPayload(payload, existingOrder)

return submitCancelOrder(orderId, callback, payload, analyticsPayload)
}
Expand All @@ -770,13 +774,17 @@ internal class SubaccountSupervisor(
val payloads = triggerOrdersPayload(currentHeight)

payloads.cancelOrderPayloads.forEach { payload ->
val analyticsPayload = analyticsUtils.formatCancelOrderPayload(payload, true)
val subaccount = stateMachine.state?.subaccount(subaccountNumber)
val existingOrder = subaccount?.orders?.firstOrNull { it.id == payload.orderId }
val analyticsPayload = analyticsUtils.cancelOrderAnalyticsPayload(payload, existingOrder, true)
submitCancelOrder(payload.orderId, callback, payload, analyticsPayload, true)
}

payloads.placeOrderPayloads.forEach { payload ->
val analyticsPayload = analyticsUtils.formatPlaceOrderPayload(
val midMarketPrice = stateMachine.state?.marketOrderbook(payload.marketId)?.midPrice
val analyticsPayload = analyticsUtils.placeOrderAnalyticsPayload(
payload,
midMarketPrice,
isClosePosition = false,
fromSlTpDialog = true,
)
Expand Down
42 changes: 38 additions & 4 deletions src/commonMain/kotlin/exchange.dydx.abacus/utils/AnalyticsUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,37 @@ package exchange.dydx.abacus.utils
import exchange.dydx.abacus.output.SubaccountOrder
import exchange.dydx.abacus.state.manager.HumanReadableCancelOrderPayload
import exchange.dydx.abacus.state.manager.HumanReadablePlaceOrderPayload
import kollections.toIMap

class AnalyticsUtils {
/**
* Format Place Order Payload and add additional details for `TradePlaceOrder` Analytic Events
* @param payload HumanReadablePlaceOrderPayload
* @param midMarketPrice Double?
* @param isClosePosition Boolean?
* @param fromSlTpDialog Boolean?
*/
fun placeOrderAnalyticsPayload(
payload: HumanReadablePlaceOrderPayload,
midMarketPrice: Double?,
isClosePosition: Boolean? = false,
fromSlTpDialog: Boolean? = false,
): IMap<String, Any>? {
return ParsingHelper.merge(
formatPlaceOrderPayload(payload, isClosePosition, fromSlTpDialog),
iMapOf(
"inferredTimeInForce" to calculateOrderTimeInForce(payload),
"midMarketPrice" to midMarketPrice
) as IMap<String, Any>?
)?.toIMap()
}

/**
* Format Place Order Payload for `TradePlaceOrder` Analytic Event
* @param payload HumanReadablePlaceOrderPayload
* @param isClosePosition Boolean
*/
fun formatPlaceOrderPayload(
private fun formatPlaceOrderPayload(
payload: HumanReadablePlaceOrderPayload,
isClosePosition: Boolean? = false,
fromSlTpDialog: Boolean? = false,
Expand All @@ -31,7 +54,6 @@ class AnalyticsUtils {
"size" to payload.size,
"subaccountNumber" to payload.subaccountNumber,
"timeInForce" to payload.timeInForce,
"inferredTimeInForce" to calculateOrderTimeInForce(payload),
"triggerPrice" to payload.triggerPrice,
"type" to payload.type,
) as IMap<String, Any>?
Expand Down Expand Up @@ -66,11 +88,23 @@ class AnalyticsUtils {
}

/**
* Format Cancel Order Payload for `TradeCancelOrder` Analytic Event
* Format Cancel Order Payload and add order details for `TradeCancelOrder` Analytic Events
* @param payload HumanReadableCancelOrderPayload
* @param existingOrder SubaccountOrder?
* @param fromSlTpDialog Boolean
*/
fun formatCancelOrderPayload(
fun cancelOrderAnalyticsPayload(
payload: HumanReadableCancelOrderPayload,
existingOrder: SubaccountOrder?,
fromSlTpDialog: Boolean? = false,
): IMap<String,Any>? {
return ParsingHelper.merge(
formatCancelOrderPayload(payload, fromSlTpDialog),
if (existingOrder != null) formatOrder(existingOrder) else mapOf(),
)?.toIMap()
}

private fun formatCancelOrderPayload(
payload: HumanReadableCancelOrderPayload,
fromSlTpDialog: Boolean? = false,
): IMap<String, Any>? {
Expand Down

0 comments on commit a7e6595

Please sign in to comment.