@orderly.network/hooks 1.4.0-alpha.0 → 1.4.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/configProvider.d.ts.map +1 -1
- package/esm/configProvider.js +3 -2
- package/esm/configProvider.js.map +1 -1
- package/esm/dev/proxyConfigStore.d.ts +15 -0
- package/esm/dev/proxyConfigStore.d.ts.map +1 -0
- package/esm/dev/proxyConfigStore.js +41 -0
- package/esm/dev/proxyConfigStore.js.map +1 -0
- package/esm/orderly/orderlyHooks.d.ts +1 -1
- package/esm/orderly/orderlyHooks.js +1 -1
- package/esm/orderly/orderlyHooks.js.map +1 -1
- package/esm/orderly/useOrderStream/useOrderStream.d.ts +2 -1
- package/esm/orderly/useOrderStream/useOrderStream.d.ts.map +1 -1
- package/esm/orderly/useOrderStream/useOrderStream.js +21 -10
- package/esm/orderly/useOrderStream/useOrderStream.js.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts +3 -5
- package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/index.js +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/index.js.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +3 -5
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +9 -10
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/utils.js +24 -11
- package/esm/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -1
- package/esm/services/orderCreator/tpslOrderCreator.js +1 -1
- package/esm/services/orderCreator/tpslOrderCreator.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/configProvider.d.ts.map +1 -1
- package/lib/configProvider.js +3 -2
- package/lib/configProvider.js.map +1 -1
- package/lib/dev/proxyConfigStore.d.ts +15 -0
- package/lib/dev/proxyConfigStore.d.ts.map +1 -0
- package/lib/dev/proxyConfigStore.js +51 -0
- package/lib/dev/proxyConfigStore.js.map +1 -0
- package/lib/orderly/orderlyHooks.d.ts +1 -1
- package/lib/orderly/orderlyHooks.js +3 -3
- package/lib/orderly/orderlyHooks.js.map +1 -1
- package/lib/orderly/useOrderStream/useOrderStream.d.ts +2 -1
- package/lib/orderly/useOrderStream/useOrderStream.d.ts.map +1 -1
- package/lib/orderly/useOrderStream/useOrderStream.js +21 -10
- package/lib/orderly/useOrderStream/useOrderStream.js.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts +3 -5
- package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/index.js +3 -3
- package/lib/orderly/useTakeProfitAndStopLoss/index.js.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +3 -5
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +9 -10
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/utils.js +12 -10
- package/lib/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -1
- package/lib/services/orderCreator/tpslOrderCreator.js +1 -1
- package/lib/services/orderCreator/tpslOrderCreator.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/orderly/useOrderStream/useOrderStream.ts"],"sourcesContent":["import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\nexport const useOrderStream = (\n /**\n * Orders query params\n */\n params: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n /**\n * Include the order type\n * @default [\"ALL\"]\n */\n includes?: CombineOrderType[];\n /**\n * Exclude the order type\n * @default []\n */\n excludes?: CombineOrderType[];\n },\n options?: {\n /**\n * Keep the state update alive\n */\n keeplive?: boolean;\n /**\n * Stop the state update when the component unmount\n */\n stopOnUnmount?: boolean;\n }\n) => {\n const {\n status,\n symbol,\n side,\n size = 100,\n includes = [\"ALL\"],\n excludes = [],\n } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n\n const { regesterKeyHandler, unregisterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [doCancelAllOrders] = useMutation(\"/v1/orders\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [doCancelAllAlgoOrders] = useMutation(\"/v1/algo/orders\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n useEffect(() => {\n const formatKey = (value?: string) => (value ? `:${value}` : \"\");\n const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(\n side\n )}`;\n regesterKeyHandler?.(key, generateKeyFun({ status, symbol, side, size }));\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size }),\n {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n revalidateOnFocus: false,\n }\n );\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\n\n if (includes.includes(\"ALL\") && excludes.length === 0) {\n return orders;\n }\n\n if (includes.includes(\"ALL\") && excludes.length > 0) {\n return orders?.filter((item) => !excludes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length === 0) {\n return orders?.filter((item) => includes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length > 0) {\n return orders?.filter(\n (item) =>\n includes.includes(item.algo_type) &&\n !excludes.includes(item.algo_type)\n );\n }\n\n return orders;\n }, [ordersResponse.data, includes, excludes]);\n\n // console.log(ordersResponse.data);\n\n const orders = useMemo(() => {\n if (!flattenOrders) {\n return null;\n }\n\n if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n return flattenOrders;\n }\n return flattenOrders.map((item) => {\n const order = {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n\n ///TODO: remove this when BE provides the correct data\n // console.log(\"------------->>>>>>>>\", order);\n if (\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n order.algo_type === AlgoOrderRootType.TP_SL\n ) {\n order.quantity = order.child_orders[0].quantity;\n }\n ///-----------------todo end----------------\n\n return order;\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return orders?.length || 0;\n // return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [orders?.length]);\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => {\n return Promise.all([\n doCancelAllOrders(null),\n doCancelAllAlgoOrders(null, { algo_type: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllAlgoOrders = useCallback(() => {\n return Promise.all([\n doCancelAllAlgoOrders(null, { algo_type: \"TP_SL\" }),\n doCancelAllAlgoOrders(null, { algo_type: \"POSITIONAL_TP_SL\" }),\n ]);\n }, [ordersResponse.data]);\n\n const _updateOrder = useCallback(\n (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n switch (type) {\n case \"algoOrder\":\n return doUpdateAlgoOrder({\n order_id: orderId,\n price: order[\"order_price\"],\n quantity: order[\"order_quantity\"],\n trigger_price: order[\"trigger_price\"],\n });\n default:\n return doUpdateOrder({ ...order, order_id: orderId });\n }\n },\n []\n );\n\n /**\n * update order\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"normalOrder\");\n }, []);\n\n /**\n * update algo order\n */\n const updateAlgoOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"algoOrder\");\n }, []);\n\n const _cancelOrder = useCallback(\n (orderId: number, type: CreateOrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`,\n }).then((res: any) => {\n if (res.success) {\n ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n default:\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n source: `SDK_${version}`,\n }).then((res: any) => {\n if (res.success) {\n // return ordersResponse.mutate().then(() => {\n // return res;\n // });\n //Optimistic Updates\n // ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n }\n },\n []\n );\n /**\n * calcel order\n */\n const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"normalOrder\", symbol);\n }, []);\n\n /**\n * calcel algo order\n */\n const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"algoOrder\", symbol);\n }, []);\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{\n // return\n // });\n\n const cancelTPSLChildOrder = useCallback(\n (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n return doUpdateAlgoOrder({\n order_id: rootAlgoOrderId,\n child_orders: [\n {\n order_id: orderId,\n is_activated: false,\n },\n ],\n });\n },\n []\n );\n\n const updateTPSLOrder = useCallback(\n (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n children_orders: childOrders,\n });\n },\n []\n );\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllAlgoOrders,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\n errors: {\n cancelOrder: cancelOrderError,\n updateOrder: updateOrderError,\n cancelAlgoOrder: cancelAlgoOrderError,\n updateAlgoOrder: updateAlgoOrderError,\n },\n submitting: {\n cancelOrder: cancelMutating,\n updateOrder: updateMutating,\n cancelAlgoOrder: cancelAlgoMutating,\n updateAlglOrder: updateAlgoMutating,\n },\n },\n ] as const;\n};\n"],"names":["useOrderStream","params","options","status","symbol","side","size","includes","excludes","data","markPrices","useMarkPricesStream","regesterKeyHandler","unregisterKeyHandler","useDataCenterContext","doCancelOrder","error","cancelOrderError","isMutating","cancelMutating","useMutation","doCancelAllOrders","doUpdateOrder","updateOrderError","updateMutating","doCanceAlgolOrder","cancelAlgoOrderError","cancelAlgoMutating","doCancelAllAlgoOrders","doUpdateAlgoOrder","updateAlgoOrderError","updateAlgoMutating","useEffect","formatKey","value","key","generateKeyFun","stopOnUnmount","keeplive","ordersResponse","usePrivateInfiniteQuery","initialSize","formatter","revalidateOnFocus","flattenOrders","useMemo","orders","map","item","rows","flat","length","filter","algo_type","OrderStatus","NEW","INCOMPLETE","order","mark_price","AlgoOrderRootType","POSITIONAL_TP_SL","TP_SL","quantity","child_orders","total","cancelAllOrders","useCallback","Promise","all","cancelAllAlgoOrders","_updateOrder","orderId","type","order_id","price","trigger_price","updateOrder","updateAlgoOrder","_cancelOrder","source","version","then","res","success","mutate","Error","message","cancelOrder","cancelAlgoOrder","loadMore","setSize","cancelTPSLChildOrder","rootAlgoOrderId","is_activated","updateTPSLOrder","childOrders","Array","isArray","SDKError","children_orders","isLoading","refresh","errors","submitting","updateAlglOrder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/orderly/useOrderStream/useOrderStream.ts"],"sourcesContent":["import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\nexport const useOrderStream = (\n /**\n * Orders query params\n */\n params: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n /**\n * Include the order type\n * @default [\"ALL\"]\n */\n includes?: CombineOrderType[];\n /**\n * Exclude the order type\n * @default []\n */\n excludes?: CombineOrderType[];\n },\n options?: {\n /**\n * Keep the state update alive\n */\n keeplive?: boolean;\n /**\n * Stop the state update when the component unmount\n */\n stopOnUnmount?: boolean;\n }\n) => {\n const {\n status,\n symbol,\n side,\n size = 100,\n includes = [\"ALL\"],\n excludes = [],\n } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n\n const { regesterKeyHandler, unregisterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [doCancelAllOrders] = useMutation(\"/v1/orders\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [doCancelAllAlgoOrders] = useMutation(\"/v1/algo/orders\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n useEffect(() => {\n const formatKey = (value?: string) => (value ? `:${value}` : \"\");\n const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(\n side\n )}`;\n regesterKeyHandler?.(key, generateKeyFun({ status, symbol, side, size }));\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size }),\n {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n revalidateOnFocus: false,\n }\n );\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\n\n if (includes.includes(\"ALL\") && excludes.length === 0) {\n return orders;\n }\n\n if (includes.includes(\"ALL\") && excludes.length > 0) {\n return orders?.filter((item) => !excludes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length === 0) {\n return orders?.filter((item) => includes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length > 0) {\n return orders?.filter(\n (item) =>\n includes.includes(item.algo_type) &&\n !excludes.includes(item.algo_type)\n );\n }\n\n return orders;\n }, [ordersResponse.data, includes, excludes]);\n\n // console.log(ordersResponse.data);\n\n const orders = useMemo(() => {\n if (!flattenOrders) {\n return null;\n }\n\n if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n return flattenOrders;\n }\n return flattenOrders.map((item) => {\n const order = {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n\n ///TODO: remove this when BE provides the correct data\n // console.log(\"------------->>>>>>>>\", order);\n if (\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n order.algo_type === AlgoOrderRootType.TP_SL\n ) {\n order.quantity = order.child_orders[0].quantity;\n }\n ///-----------------todo end----------------\n\n return order;\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return orders?.length || 0;\n // return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [orders?.length]);\n\n const cancelAlgoOrdersByTypes = (types: AlgoOrderRootType[]) => {\n if (!types) {\n throw new SDKError(\"types is required\");\n }\n\n if (!Array.isArray(types)) {\n throw new SDKError(\"types should be an array\");\n }\n\n // TODO: order type check\n\n return Promise.all(\n types.map((type) => {\n return doCancelAllAlgoOrders(null, { algo_type: type });\n })\n );\n };\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => {\n return Promise.all([\n doCancelAllOrders(null),\n doCancelAllAlgoOrders(null, { algo_type: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllTPSLOrders = useCallback(() => {\n return cancelAlgoOrdersByTypes([\n AlgoOrderRootType.POSITIONAL_TP_SL,\n AlgoOrderRootType.TP_SL,\n ]);\n }, [ordersResponse.data]);\n\n const _updateOrder = useCallback(\n (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n switch (type) {\n case \"algoOrder\":\n return doUpdateAlgoOrder({\n order_id: orderId,\n price: order[\"order_price\"],\n quantity: order[\"order_quantity\"],\n trigger_price: order[\"trigger_price\"],\n });\n default:\n return doUpdateOrder({ ...order, order_id: orderId });\n }\n },\n []\n );\n\n /**\n * update order\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"normalOrder\");\n }, []);\n\n /**\n * update algo order\n */\n const updateAlgoOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"algoOrder\");\n }, []);\n\n const _cancelOrder = useCallback(\n (orderId: number, type: CreateOrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`,\n }).then((res: any) => {\n if (res.success) {\n ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n default:\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n source: `SDK_${version}`,\n }).then((res: any) => {\n if (res.success) {\n // return ordersResponse.mutate().then(() => {\n // return res;\n // });\n //Optimistic Updates\n // ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n }\n },\n []\n );\n /**\n * calcel order\n */\n const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"normalOrder\", symbol);\n }, []);\n\n /**\n * calcel algo order\n */\n const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"algoOrder\", symbol);\n }, []);\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{\n // return\n // });\n\n const cancelTPSLChildOrder = useCallback(\n (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n return doUpdateAlgoOrder({\n order_id: rootAlgoOrderId,\n child_orders: [\n {\n order_id: orderId,\n is_activated: false,\n },\n ],\n });\n },\n []\n );\n\n const updateTPSLOrder = useCallback(\n (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n child_orders: childOrders,\n });\n },\n []\n );\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllTPSLOrders,\n cancelAlgoOrdersByTypes,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\n errors: {\n cancelOrder: cancelOrderError,\n updateOrder: updateOrderError,\n cancelAlgoOrder: cancelAlgoOrderError,\n updateAlgoOrder: updateAlgoOrderError,\n },\n submitting: {\n cancelOrder: cancelMutating,\n updateOrder: updateMutating,\n cancelAlgoOrder: cancelAlgoMutating,\n updateAlglOrder: updateAlgoMutating,\n },\n },\n ] as const;\n};\n"],"names":["useOrderStream","params","options","status","symbol","side","size","includes","excludes","data","markPrices","useMarkPricesStream","regesterKeyHandler","unregisterKeyHandler","useDataCenterContext","doCancelOrder","error","cancelOrderError","isMutating","cancelMutating","useMutation","doCancelAllOrders","doUpdateOrder","updateOrderError","updateMutating","doCanceAlgolOrder","cancelAlgoOrderError","cancelAlgoMutating","doCancelAllAlgoOrders","doUpdateAlgoOrder","updateAlgoOrderError","updateAlgoMutating","useEffect","formatKey","value","key","generateKeyFun","stopOnUnmount","keeplive","ordersResponse","usePrivateInfiniteQuery","initialSize","formatter","revalidateOnFocus","flattenOrders","useMemo","orders","map","item","rows","flat","length","filter","algo_type","OrderStatus","NEW","INCOMPLETE","order","mark_price","AlgoOrderRootType","POSITIONAL_TP_SL","TP_SL","quantity","child_orders","total","cancelAlgoOrdersByTypes","types","SDKError","Array","isArray","Promise","all","type","cancelAllOrders","useCallback","cancelAllTPSLOrders","_updateOrder","orderId","order_id","price","trigger_price","updateOrder","updateAlgoOrder","_cancelOrder","source","version","then","res","success","mutate","Error","message","cancelOrder","cancelAlgoOrder","loadMore","setSize","cancelTPSLChildOrder","rootAlgoOrderId","is_activated","updateTPSLOrder","childOrders","isLoading","refresh","errors","submitting","updateAlglOrder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { API
|
|
2
|
-
export declare const
|
|
1
|
+
import { API } from "@orderly.network/types";
|
|
2
|
+
export declare const useTPSLOrder: (position: Partial<API.PositionTPSLExt> & Pick<API.PositionTPSLExt, "symbol" | "average_open_price" | "position_qty">, options?: {
|
|
3
3
|
/**
|
|
4
4
|
* You can set the default value for the take profit and stop loss order,
|
|
5
5
|
* it is usually used when editing order
|
|
@@ -23,10 +23,8 @@ export declare const useStopOrder: (position: Partial<API.PositionTPSLExt> & Pic
|
|
|
23
23
|
sl_offset_percentage: number;
|
|
24
24
|
}>, "type" | "side" | "order_type" | "trigger_price">>>) => void;
|
|
25
25
|
submit: () => Promise<void>;
|
|
26
|
-
create: () => Promise<void>;
|
|
27
|
-
update: (orderId: number) => Promise<any>;
|
|
28
26
|
errors: import("./useTPSL").ValidateError | null;
|
|
29
|
-
validate: () => Promise<AlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL | import("@orderly.network/types").AlgoOrderRootType.POSITIONAL_TP_SL>>;
|
|
27
|
+
validate: () => Promise<import("@orderly.network/types").AlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL | import("@orderly.network/types").AlgoOrderRootType.POSITIONAL_TP_SL>>;
|
|
30
28
|
}];
|
|
31
29
|
export type { ComputedAlgoOrder } from "./useTPSL";
|
|
32
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,wBAAwB,CAAC;AAGvD,eAAO,MAAM,YAAY,aAIb,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR;;;OAGG;IACH,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;;;;;;;;;;;;;;;;;;;;EAuBF,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
Object.defineProperty(exports, "
|
|
5
|
+
Object.defineProperty(exports, "useTPSLOrder", {
|
|
6
6
|
enumerable: true,
|
|
7
7
|
get: function() {
|
|
8
|
-
return
|
|
8
|
+
return useTPSLOrder;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _types = require("@orderly.network/types");
|
|
12
12
|
const _useTPSL = require("./useTPSL");
|
|
13
|
-
const
|
|
13
|
+
const useTPSLOrder = (/**
|
|
14
14
|
* Position that needs to set take profit and stop loss
|
|
15
15
|
*/ position, options)=>{
|
|
16
16
|
if (!position) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"sourcesContent":["import { API,
|
|
1
|
+
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"sourcesContent":["import { API, SDKError } from \"@orderly.network/types\";\nimport { useTaskProfitAndStopLossInternal } from \"./useTPSL\";\n\nexport const useTPSLOrder = (\n /**\n * Position that needs to set take profit and stop loss\n */\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n /**\n * You can set the default value for the take profit and stop loss order,\n * it is usually used when editing order\n */\n defaultOrder?: API.AlgoOrder;\n }\n): ReturnType<typeof useTaskProfitAndStopLossInternal> => {\n if (!position) {\n throw new SDKError(\"Position is required\");\n }\n\n if (!position.symbol) {\n throw new SDKError(\"Symbol is required\");\n }\n\n if (typeof position.average_open_price === \"undefined\") {\n throw new SDKError(\"Average open price is required\");\n }\n\n if (typeof position.position_qty === \"undefined\") {\n throw new SDKError(\"Position quantity is required\");\n }\n\n // const { data: markPrice } = useMarkPrice(position.symbol);\n\n const result = useTaskProfitAndStopLossInternal(position, options);\n\n return result;\n};\n\nexport type { ComputedAlgoOrder } from \"./useTPSL\";\n"],"names":["useTPSLOrder","position","options","SDKError","symbol","average_open_price","position_qty","result","useTaskProfitAndStopLossInternal"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAGaA;;;eAAAA;;;uBAHiB;yBACmB;AAE1C,MAAMA,eAAe,CAC1B;;GAEC,GACDC,UAEAC;IAQA,IAAI,CAACD,UAAU;QACb,MAAM,IAAIE,eAAQ,CAAC;IACrB;IAEA,IAAI,CAACF,SAASG,MAAM,EAAE;QACpB,MAAM,IAAID,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASI,kBAAkB,KAAK,aAAa;QACtD,MAAM,IAAIF,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASK,YAAY,KAAK,aAAa;QAChD,MAAM,IAAIH,eAAQ,CAAC;IACrB;IAEA,6DAA6D;IAE7D,MAAMI,SAASC,IAAAA,yCAAgC,EAACP,UAAUC;IAE1D,OAAOK;AACT"}
|
|
@@ -45,15 +45,13 @@ export declare const useTaskProfitAndStopLossInternal: (position: Partial<API.Po
|
|
|
45
45
|
setValue: (key: string, value: number | string) => void;
|
|
46
46
|
setValues: (values: Partial<ComputedAlgoOrder>) => void;
|
|
47
47
|
/**
|
|
48
|
-
* Submit the
|
|
48
|
+
* Submit the TP/SL order
|
|
49
49
|
*/
|
|
50
50
|
submit: () => Promise<void>;
|
|
51
|
+
errors: ValidateError | null;
|
|
51
52
|
/**
|
|
52
|
-
*
|
|
53
|
+
*
|
|
53
54
|
*/
|
|
54
|
-
create: () => Promise<void>;
|
|
55
|
-
update: (orderId: number) => Promise<any>;
|
|
56
|
-
errors: ValidateError | null;
|
|
57
55
|
validate: () => Promise<AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL>>;
|
|
58
56
|
}];
|
|
59
57
|
//# sourceMappingURL=useTPSL.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTPSL.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,GAAG,EACH,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,eAAe,CACb,iBAAiB,CAAC,KAAK,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CACF,CACF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,aACjC,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;IAhCG;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;IAE5B;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;;
|
|
1
|
+
{"version":3,"file":"useTPSL.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,GAAG,EACH,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,eAAe,CACb,iBAAiB,CAAC,KAAK,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CACF,CACF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,aACjC,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;IAhCG;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;IAE5B;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;;IA2B9B;;OAEG;oBACa,MAAM,SAAS,MAAM,GAAG,MAAM,KAAK,IAAI;wBACnC,QAAQ,iBAAiB,CAAC,KAAK,IAAI;IAEvD;;OAEG;YACK,MAAM,QAAQ,IAAI,CAAC;YAMnB,aAAa,GAAG,IAAI;IAC5B;;OAEG;cACO,MAAM,QACd,gBACE,kBAAkB,gBAAgB,GAAG,kBAAkB,KAAK,CAC7D,CACF;EAmSJ,CAAC"}
|
|
@@ -46,7 +46,7 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
46
46
|
}
|
|
47
47
|
}, []);
|
|
48
48
|
const _setOrderValue = (key, value, options)=>{
|
|
49
|
-
;
|
|
49
|
+
// console.log("[updateOrder:]", key, value, order.quantity);
|
|
50
50
|
setOrder((prev)=>{
|
|
51
51
|
const side = position.position_qty > 0 ? _types.OrderSide.BUY : _types.OrderSide.SELL;
|
|
52
52
|
if (key === "sl_pnl") {
|
|
@@ -61,7 +61,6 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
61
61
|
}, {
|
|
62
62
|
symbol: symbolInfo
|
|
63
63
|
});
|
|
64
|
-
;
|
|
65
64
|
return {
|
|
66
65
|
...prev,
|
|
67
66
|
...newValue,
|
|
@@ -129,11 +128,9 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
129
128
|
});
|
|
130
129
|
});
|
|
131
130
|
};
|
|
132
|
-
|
|
133
|
-
// setError(validate());
|
|
134
|
-
}, [
|
|
135
|
-
order
|
|
136
|
-
]);
|
|
131
|
+
// useEffect(() => {
|
|
132
|
+
// // setError(validate());
|
|
133
|
+
// }, [order]);
|
|
137
134
|
const compare = ()=>{
|
|
138
135
|
const quantityNum = Number(order.quantity);
|
|
139
136
|
if (isNaN(quantityNum)) return false;
|
|
@@ -173,6 +170,8 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
173
170
|
if (orderBody.child_orders.length === 0) {
|
|
174
171
|
throw new _types.SDKError("No child orders");
|
|
175
172
|
}
|
|
173
|
+
// filter the order that is not activated
|
|
174
|
+
orderBody.child_orders = orderBody.child_orders.filter((order)=>order.is_activated);
|
|
176
175
|
return doCreateOrder(orderBody);
|
|
177
176
|
};
|
|
178
177
|
const deleteOrder = (orderId, symbol)=>{
|
|
@@ -188,7 +187,7 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
188
187
|
if (updatedOrderEntity.child_orders.length === 0) {
|
|
189
188
|
return Promise.resolve("Not any order needs to update");
|
|
190
189
|
}
|
|
191
|
-
const needDelete = orderEntity.child_orders.filter((order)=>typeof order.is_activated === "boolean" && !order.is_activated).length ===
|
|
190
|
+
const needDelete = orderEntity.child_orders.filter((order)=>typeof order.is_activated === "boolean" && !order.is_activated).length === orderEntity.child_orders.length;
|
|
192
191
|
if (needDelete) {
|
|
193
192
|
return deleteOrder(orderId, order.symbol);
|
|
194
193
|
}
|
|
@@ -203,8 +202,8 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
|
203
202
|
], order),
|
|
204
203
|
{
|
|
205
204
|
submit,
|
|
206
|
-
create: submit,
|
|
207
|
-
update: updateOrder
|
|
205
|
+
// create: submit,
|
|
206
|
+
// update: updateOrder,/
|
|
208
207
|
setValue: setOrderValue,
|
|
209
208
|
setValues,
|
|
210
209
|
// createPositionTPSL: submit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, calculateHelper } from \"./utils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\n\nexport type ComputedAlgoOrder = Partial<\n AlgoOrderEntity<\n AlgoOrderRootType.TP_SL & {\n /**\n * Computed take profit\n */\n tp_pnl: number;\n tp_offset: number;\n tp_offset_percentage: number;\n\n /**\n * Computed stop loss\n */\n sl_pnl: number;\n sl_offset: number;\n sl_offset_percentage: number;\n }\n >\n>;\n\nexport type ValidateError = {\n [P in keyof ComputedAlgoOrder]?: {\n type: string;\n message: string;\n };\n};\n\n/**\n * @hidden\n */\nexport const useTaskProfitAndStopLossInternal = (\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n defaultOrder?: API.AlgoOrder;\n }\n): [\n ComputedAlgoOrder,\n {\n /**\n * Update the take profit and stop loss order, this will merge the new data with the old one\n */\n setValue: (key: string, value: number | string) => void;\n setValues: (values: Partial<ComputedAlgoOrder>) => void;\n // getOrderEntity: () => AlgoOrderEntity<AlgoOrderRootType.TP_SL|AlgoOrderRootType.POSITIONAL_TP_SL>;\n /**\n * Submit the take profit and stop loss order\n */\n submit: () => Promise<void>;\n /**\n * Create the take profit and stop loss order, auto-detect the order type\n */\n create: () => Promise<void>;\n update: (orderId: number) => Promise<any>;\n errors: ValidateError | null;\n validate: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n >;\n }\n] => {\n const [order, setOrder] = useState<\n ComputedAlgoOrder & {\n ignoreValidate?: boolean;\n }\n >({\n algo_order_id: options?.defaultOrder?.algo_order_id,\n symbol: position.symbol as string,\n side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,\n quantity:\n options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder] = useMutation(\"/v1/algo/order\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n console.log(\"[updateOrder:]\", key, value, order.quantity);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : OrderSide.SELL;\n\n if (key === \"sl_pnl\") {\n value = value ? `-${value}` : \"\";\n }\n\n const newValue = calculateHelper(\n key,\n {\n key,\n value,\n entryPrice: position.average_open_price!,\n qty:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n console.log(\"newValue::\", newValue);\n\n return {\n ...prev,\n ...newValue,\n ignoreValidate: options?.ignoreValidate,\n };\n });\n };\n\n const setOrderValue = async (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n if (typeof order.tp_trigger_price !== \"undefined\") {\n _setOrderValue(\"tp_trigger_price\", order.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n return;\n }\n\n _setOrderValue(key, value, options);\n };\n\n /**\n * calculate value config\n */\n const valueConfig = {\n symbol: symbolInfo,\n maxQty: Math.abs(position.position_qty),\n markPrice,\n };\n\n // auto validate when order changed\n useEffect(() => {\n requestAnimationFrame(() => {\n if (order.ignoreValidate) return;\n const orderCreator = getOrderCreator();\n orderCreator\n .validate(order as AlgoOrderEntity, valueConfig)\n .then((errors) => {\n setErrors(errors);\n });\n });\n }, [order, valueConfig.markPrice, order.quantity]);\n\n const setValues = (values: Partial<ComputedAlgoOrder>) => {\n const keys = Object.keys(values);\n keys.forEach((key) => {\n setOrderValue(\n key as UpdateOrderKey,\n values[key as keyof ComputedAlgoOrder] as number | string\n );\n });\n };\n\n const validate = (): Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n > => {\n const orderCreator = getOrderCreator();\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\n setErrors(errors);\n return reject(errors);\n }\n\n resolve(\n orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n );\n });\n });\n };\n\n useEffect(() => {\n // setError(validate());\n }, [order]);\n\n const compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\n const orderCreator = getOrderCreator();\n\n const orderBody = orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n );\n\n if (orderBody.child_orders.length === 0) {\n throw new SDKError(\"No child orders\");\n }\n\n return doCreateOrder(orderBody);\n };\n\n const deleteOrder = (orderId: number, symbol: string): Promise<any> => {\n return doDeleteOrder(null, {\n order_id: orderId,\n symbol,\n });\n };\n\n const updateOrder = (orderId: number): Promise<any> => {\n const orderCreator = getOrderCreator() as TPSLPositionOrderCreator;\n\n const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(\n // @ts-ignore\n order,\n options?.defaultOrder,\n valueConfig\n );\n\n if (updatedOrderEntity.child_orders.length === 0) {\n return Promise.resolve(\"Not any order needs to update\");\n }\n\n const needDelete =\n orderEntity.child_orders.filter(\n (order) =>\n typeof order.is_activated === \"boolean\" && !order.is_activated\n ).length === 2;\n\n if (needDelete) {\n return deleteOrder(orderId, order.symbol!);\n }\n\n return doUpdateOrder({\n order_id: orderId,\n ...updatedOrderEntity,\n });\n };\n\n return [\n omit([\"ignoreValidate\"], order) as ComputedAlgoOrder,\n {\n submit,\n\n create: submit,\n\n update: updateOrder,\n setValue: setOrderValue,\n setValues,\n // createPositionTPSL: submit,\n // createTPSL: submit,\n validate,\n errors,\n },\n ];\n};\n"],"names":["useTaskProfitAndStopLossInternal","position","options","order","setOrder","useState","algo_order_id","defaultOrder","symbol","side","Number","position_qty","OrderSide","BUY","SELL","quantity","Math","abs","algo_type","symbolInfo","useSymbolsInfo","data","markPrice","useMarkPrice","doCreateOrder","useMutation","doUpdateOrder","doDeleteOrder","errors","setErrors","useEffect","trigger_prices","findTPSLFromOrder","tp_trigger_price","setOrderValue","ignoreValidate","sl_trigger_price","_setOrderValue","key","value","prev","newValue","calculateHelper","entryPrice","average_open_price","qty","orderSide","valueConfig","maxQty","requestAnimationFrame","orderCreator","getOrderCreator","validate","then","setValues","values","keys","Object","forEach","Promise","resolve","reject","create","compare","quantityNum","isNaN","AlgoOrderRootType","TP_SL","OrderFactory","POSITIONAL_TP_SL","submit","orderId","algoType","createOrder","updateOrder","orderBody","child_orders","length","SDKError","deleteOrder","order_id","updatedOrderEntity","orderEntity","crateUpdateOrder","needDelete","filter","is_activated","omit","update","setValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAgDaA;;;eAAAA;;;uBAhDuB;uBAO7B;uBACyC;6BACpB;yBACC;wBAGK;gCACH;8BACF;uBACR;AAgCd,MAAMA,mCAAmC,CAC9CC,UAEAC;IA6BA,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAIhC;QACAC,eAAeJ,SAASK,cAAcD;QACtCE,QAAQP,SAASO,MAAM;QACvBC,MAAMC,OAAOT,SAASU,YAAY,IAAI,IAAIC,gBAAS,CAACC,GAAG,GAAGD,gBAAS,CAACE,IAAI;QACxEC,UACEb,SAASK,cAAcQ,YAAYC,KAAKC,GAAG,CAAChB,SAASU,YAAY;QACnEO,WAAWhB,SAASK,cAAcW;IACpC;IAEA,MAAMC,aAAaC,IAAAA,8BAAc,GAAE,CAACnB,SAASO,MAAM,CAAE;IACrD,MAAM,EAAEa,MAAMC,SAAS,EAAE,GAAGC,IAAAA,0BAAY,EAACpB,MAAMK,MAAM;IAErD,MAAM,CAACgB,cAAc,GAAGC,IAAAA,wBAAW,EAAC;IACpC,MAAM,CAACC,cAAc,GAAGD,IAAAA,wBAAW,EAAC,kBAAkB;IACtD,MAAM,CAACE,cAAc,GAAGF,IAAAA,wBAAW,EAAC,kBAAkB;IAEtD,MAAM,CAACG,QAAQC,UAAU,GAAGxB,IAAAA,eAAQ,EAAuB;IAE3DyB,IAAAA,gBAAS,EAAC;QACR,IAAI,CAAC5B,SAASK,cAAc;QAC5B,MAAMwB,iBAAiBC,IAAAA,yBAAiB,EAAC9B,QAAQK,YAAY;QAC7D,IAAIwB,eAAeE,gBAAgB,EAAE;YACnCC,cAAc,oBAAoBH,eAAeE,gBAAgB,EAAE;gBACjEE,gBAAgB;YAClB;QACF;QACA,IAAIJ,eAAeK,gBAAgB,EAAE;YACnCF,cAAc,oBAAoBH,eAAeK,gBAAgB,EAAE;gBACjED,gBAAgB;YAClB;QACF;IACF,GAAG,EAAE;IAEL,MAAME,iBAAiB,CACrBC,KACAC,OACArC;;QAMAE,SAAS,CAACoC;YACR,MAAM/B,OAAOR,SAASU,YAAY,GAAI,IAAIC,gBAAS,CAACC,GAAG,GAAGD,gBAAS,CAACE,IAAI;YAExE,IAAIwB,QAAQ,UAAU;gBACpBC,QAAQA,QAAQ,CAAC,CAAC,EAAEA,MAAM,CAAC,GAAG;YAChC;YAEA,MAAME,WAAWC,IAAAA,sBAAe,EAC9BJ,KACA;gBACEA;gBACAC;gBACAI,YAAY1C,SAAS2C,kBAAkB;gBACvCC,KACEpC,SAASG,gBAAS,CAACC,GAAG,GAClBH,OAAO8B,KAAKzB,QAAQ,IACpB,CAACL,OAAO8B,KAAKzB,QAAQ;gBAC3B+B,WAAWrC;YACb,GACA;gBACED,QAAQW;YACV;;YAKF,OAAO;gBACL,GAAGqB,IAAI;gBACP,GAAGC,QAAQ;gBACXN,gBAAgBjC,SAASiC;YAC3B;QACF;IACF;IAEA,MAAMD,gBAAgB,OACpBI,KACAC,OACArC;QAIA,IAAIoC,QAAQ,YAAY;YACtBlC,SAAS,CAACoC,OAAU,CAAA;oBAAE,GAAGA,IAAI;oBAAEzB,UAAUwB;gBAAM,CAAA;YAE/C,IAAI,OAAOpC,MAAMiC,gBAAgB,KAAK,aAAa;gBACjDC,eAAe,oBAAoBlC,MAAMiC,gBAAgB,EAAE;oBACzDD,gBAAgB;gBAClB;YACF;YAEA,IAAI,OAAOhC,MAAM8B,gBAAgB,KAAK,aAAa;gBACjDI,eAAe,oBAAoBlC,MAAM8B,gBAAgB,EAAE;oBACzDE,gBAAgB;gBAClB;YACF;YAEA;QACF;QAEAE,eAAeC,KAAKC,OAAOrC;IAC7B;IAEA;;GAEC,GACD,MAAM6C,cAAc;QAClBvC,QAAQW;QACR6B,QAAQhC,KAAKC,GAAG,CAAChB,SAASU,YAAY;QACtCW;IACF;IAEA,mCAAmC;IACnCQ,IAAAA,gBAAS,EAAC;QACRmB,sBAAsB;YACpB,IAAI9C,MAAMgC,cAAc,EAAE;YAC1B,MAAMe,eAAeC;YACrBD,aACGE,QAAQ,CAACjD,OAA0B4C,aACnCM,IAAI,CAAC,CAACzB;gBACLC,UAAUD;YACZ;QACJ;IACF,GAAG;QAACzB;QAAO4C,YAAYzB,SAAS;QAAEnB,MAAMY,QAAQ;KAAC;IAEjD,MAAMuC,YAAY,CAACC;QACjB,MAAMC,OAAOC,OAAOD,IAAI,CAACD;QACzBC,KAAKE,OAAO,CAAC,CAACpB;YACZJ,cACEI,KACAiB,MAAM,CAACjB,IAA+B;QAE1C;IACF;IAEA,MAAMc,WAAW;QAKf,MAAMF,eAAeC;QAErB,OAAO,IAAIQ,QAAQ,CAACC,SAASC;YAC3B,OAAOX,aACJE,QAAQ,CACPjD,OACA4C,aAEDM,IAAI,CAAC,CAACzB;;gBAGL,IAAIA,QAAQ;oBACVC,UAAUD;oBACV,OAAOiC,OAAOjC;gBAChB;gBAEAgC,QACEV,aAAaY,MAAM,CACjB3D,OACA4C;YAGN;QACJ;IACF;IAEAjB,IAAAA,gBAAS,EAAC;IACR,wBAAwB;IAC1B,GAAG;QAAC3B;KAAM;IAEV,MAAM4D,UAAU;QACd,MAAMC,cAActD,OAAOP,MAAMY,QAAQ;QACzC,IAAIkD,MAAMD,cAAc,OAAO;QAC/B,OAAOA,gBAAgBhD,KAAKC,GAAG,CAACP,OAAOT,SAASU,YAAY;IAC9D;IAEA,MAAMwC,kBAAkB;QACtB,kGAAkG;QAClG,2CAA2C;QAC3C,IAAIjD,SAASK,cAAcW,cAAcgD,wBAAiB,CAACC,KAAK,EAAE;YAChE,OAAOC,qBAAY,CAACN,MAAM,CAACI,wBAAiB,CAACC,KAAK;QACpD;QACA,OAAOC,qBAAY,CAACN,MAAM,CACxBC,YAAYG,wBAAiB,CAACG,gBAAgB,GAAGH,wBAAiB,CAACC,KAAK;IAE5E;IAEA,MAAMG,SAAS;QACb,MAAM/D,eAAeL,SAASK;QAC9B,MAAMgE,UAAUhE,cAAcD;QAC9B,MAAMkE,WAAWjE,cAAcW;QAE/B,oDAAoD;QACpD,IAAI,CAACqD,SAAS;YACZ,OAAOE;QACT;QAEA,4DAA4D;QAC5D,IAAID,aAAaN,wBAAiB,CAACG,gBAAgB,EAAE;YACnD,4CAA4C;YAC5C,IAAIN,WAAW;gBACb,OAAOW,YAAYH;YACrB;YACA,uDAAuD;YACvD,OAAOE;QACT;QAEA,sFAAsF;QAEtF,OAAOC,YAAYH;IACrB;IAEA,MAAME,cAAc;QAClB,MAAMvB,eAAeC;QAErB,MAAMwB,YAAYzB,aAAaY,MAAM,CACnC3D,OACA4C;QAGF,IAAI4B,UAAUC,YAAY,CAACC,MAAM,KAAK,GAAG;YACvC,MAAM,IAAIC,eAAQ,CAAC;QACrB;QAEA,OAAOtD,cAAcmD;IACvB;IAEA,MAAMI,cAAc,CAACR,SAAiB/D;QACpC,OAAOmB,cAAc,MAAM;YACzBqD,UAAUT;YACV/D;QACF;IACF;IAEA,MAAMkE,cAAc,CAACH;QACnB,MAAMrB,eAAeC;QAErB,MAAM,CAAC8B,oBAAoBC,YAAY,GAAGhC,aAAaiC,gBAAgB,CACrE,aAAa;QACbhF,OACAD,SAASK,cACTwC;QAGF,IAAIkC,mBAAmBL,YAAY,CAACC,MAAM,KAAK,GAAG;YAChD,OAAOlB,QAAQC,OAAO,CAAC;QACzB;QAEA,MAAMwB,aACJF,YAAYN,YAAY,CAACS,MAAM,CAC7B,CAAClF,QACC,OAAOA,MAAMmF,YAAY,KAAK,aAAa,CAACnF,MAAMmF,YAAY,EAChET,MAAM,KAAK;QAEf,IAAIO,YAAY;YACd,OAAOL,YAAYR,SAASpE,MAAMK,MAAM;QAC1C;QAEA,OAAOkB,cAAc;YACnBsD,UAAUT;YACV,GAAGU,kBAAkB;QACvB;IACF;IAEA,OAAO;QACLM,IAAAA,WAAI,EAAC;YAAC;SAAiB,EAAEpF;QACzB;YACEmE;YAEAR,QAAQQ;YAERkB,QAAQd;YACRe,UAAUvD;YACVoB;YACA,8BAA8B;YAC9B,sBAAsB;YACtBF;YACAxB;QACF;KACD;AACH"}
|
|
1
|
+
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, calculateHelper } from \"./utils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\n\nexport type ComputedAlgoOrder = Partial<\n AlgoOrderEntity<\n AlgoOrderRootType.TP_SL & {\n /**\n * Computed take profit\n */\n tp_pnl: number;\n tp_offset: number;\n tp_offset_percentage: number;\n\n /**\n * Computed stop loss\n */\n sl_pnl: number;\n sl_offset: number;\n sl_offset_percentage: number;\n }\n >\n>;\n\nexport type ValidateError = {\n [P in keyof ComputedAlgoOrder]?: {\n type: string;\n message: string;\n };\n};\n\n/**\n * @hidden\n */\nexport const useTaskProfitAndStopLossInternal = (\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n defaultOrder?: API.AlgoOrder;\n }\n): [\n /**\n * return the computed & formatted order\n */\n ComputedAlgoOrder,\n {\n /**\n * Update the take profit and stop loss order, this will merge the new data with the old one\n */\n setValue: (key: string, value: number | string) => void;\n setValues: (values: Partial<ComputedAlgoOrder>) => void;\n // getOrderEntity: () => AlgoOrderEntity<AlgoOrderRootType.TP_SL|AlgoOrderRootType.POSITIONAL_TP_SL>;\n /**\n * Submit the TP/SL order\n */\n submit: () => Promise<void>;\n // /**\n // * Create the take profit and stop loss order, auto-detect the order type\n // */\n // create: () => Promise<void>;\n // update: (orderId: number) => Promise<any>;\n errors: ValidateError | null;\n /**\n *\n */\n validate: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n >;\n }\n] => {\n const [order, setOrder] = useState<\n ComputedAlgoOrder & {\n ignoreValidate?: boolean;\n }\n >({\n algo_order_id: options?.defaultOrder?.algo_order_id,\n symbol: position.symbol as string,\n side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,\n quantity:\n options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder] = useMutation(\"/v1/algo/order\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"[updateOrder:]\", key, value, order.quantity);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : OrderSide.SELL;\n\n if (key === \"sl_pnl\") {\n value = value ? `-${value}` : \"\";\n }\n\n const newValue = calculateHelper(\n key,\n {\n key,\n value,\n entryPrice: position.average_open_price!,\n qty:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n return {\n ...prev,\n ...newValue,\n ignoreValidate: options?.ignoreValidate,\n };\n });\n };\n\n const setOrderValue = async (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n if (typeof order.tp_trigger_price !== \"undefined\") {\n _setOrderValue(\"tp_trigger_price\", order.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n return;\n }\n\n _setOrderValue(key, value, options);\n };\n\n /**\n * calculate value config\n */\n const valueConfig = {\n symbol: symbolInfo,\n maxQty: Math.abs(position.position_qty),\n markPrice,\n };\n\n // auto validate when order changed\n useEffect(() => {\n requestAnimationFrame(() => {\n if (order.ignoreValidate) return;\n const orderCreator = getOrderCreator();\n orderCreator\n .validate(order as AlgoOrderEntity, valueConfig)\n .then((errors) => {\n setErrors(errors);\n });\n });\n }, [order, valueConfig.markPrice, order.quantity]);\n\n const setValues = (values: Partial<ComputedAlgoOrder>) => {\n const keys = Object.keys(values);\n keys.forEach((key) => {\n setOrderValue(\n key as UpdateOrderKey,\n values[key as keyof ComputedAlgoOrder] as number | string\n );\n });\n };\n\n const validate = (): Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n > => {\n const orderCreator = getOrderCreator();\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\n setErrors(errors);\n return reject(errors);\n }\n\n resolve(\n orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n );\n });\n });\n };\n\n // useEffect(() => {\n // // setError(validate());\n // }, [order]);\n\n const compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\n const orderCreator = getOrderCreator();\n\n const orderBody = orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n );\n\n if (orderBody.child_orders.length === 0) {\n throw new SDKError(\"No child orders\");\n }\n\n // filter the order that is not activated\n orderBody.child_orders = orderBody.child_orders.filter(\n (order: API.AlgoOrderExt) => order.is_activated\n );\n\n return doCreateOrder(orderBody);\n };\n\n const deleteOrder = (orderId: number, symbol: string): Promise<any> => {\n return doDeleteOrder(null, {\n order_id: orderId,\n symbol,\n });\n };\n\n const updateOrder = (orderId: number): Promise<any> => {\n const orderCreator = getOrderCreator() as TPSLPositionOrderCreator;\n\n const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(\n // @ts-ignore\n order,\n options?.defaultOrder,\n valueConfig\n );\n\n if (updatedOrderEntity.child_orders.length === 0) {\n return Promise.resolve(\"Not any order needs to update\");\n }\n\n const needDelete =\n orderEntity.child_orders.filter(\n (order) =>\n typeof order.is_activated === \"boolean\" && !order.is_activated\n ).length === orderEntity.child_orders.length;\n\n if (needDelete) {\n return deleteOrder(orderId, order.symbol!);\n }\n\n return doUpdateOrder({\n order_id: orderId,\n ...updatedOrderEntity,\n });\n };\n\n return [\n omit([\"ignoreValidate\"], order) as ComputedAlgoOrder,\n {\n submit,\n\n // create: submit,\n\n // update: updateOrder,/\n setValue: setOrderValue,\n setValues,\n // createPositionTPSL: submit,\n // createTPSL: submit,\n validate,\n errors,\n },\n ];\n};\n"],"names":["useTaskProfitAndStopLossInternal","position","options","order","setOrder","useState","algo_order_id","defaultOrder","symbol","side","Number","position_qty","OrderSide","BUY","SELL","quantity","Math","abs","algo_type","symbolInfo","useSymbolsInfo","data","markPrice","useMarkPrice","doCreateOrder","useMutation","doUpdateOrder","doDeleteOrder","errors","setErrors","useEffect","trigger_prices","findTPSLFromOrder","tp_trigger_price","setOrderValue","ignoreValidate","sl_trigger_price","_setOrderValue","key","value","prev","newValue","calculateHelper","entryPrice","average_open_price","qty","orderSide","valueConfig","maxQty","requestAnimationFrame","orderCreator","getOrderCreator","validate","then","setValues","values","keys","Object","forEach","Promise","resolve","reject","create","compare","quantityNum","isNaN","AlgoOrderRootType","TP_SL","OrderFactory","POSITIONAL_TP_SL","submit","orderId","algoType","createOrder","updateOrder","orderBody","child_orders","length","SDKError","filter","is_activated","deleteOrder","order_id","updatedOrderEntity","orderEntity","crateUpdateOrder","needDelete","omit","setValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAoBA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,UA2BzC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAgCA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAyBA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBA+BA;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,GACvC,MAAM,CAkCR;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAoBA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,UA2BzC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAgCA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAyBA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBA+BA;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,GACvC,MAAM,CAkCR;AAeD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;CACtB,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO;;EAuJzC"}
|
|
@@ -66,7 +66,7 @@ function priceToOffset(inputs, options = {}) {
|
|
|
66
66
|
decimal = new _utils.Decimal(entryPrice).minus(new _utils.Decimal(price));
|
|
67
67
|
}
|
|
68
68
|
if (symbol) {
|
|
69
|
-
return decimal.abs().todp(symbol.quote_dp,
|
|
69
|
+
return decimal.abs().todp(symbol.quote_dp, _utils.Decimal.ROUND_UP).toNumber();
|
|
70
70
|
}
|
|
71
71
|
return decimal.abs().toNumber();
|
|
72
72
|
}
|
|
@@ -103,7 +103,7 @@ function priceToOffsetPercentage(inputs) {
|
|
|
103
103
|
}
|
|
104
104
|
function pnlToPrice(inputs) {
|
|
105
105
|
const { qty, pnl, entryPrice, orderType, orderSide } = inputs;
|
|
106
|
-
;
|
|
106
|
+
// console.log("pnlToPrice", inputs);
|
|
107
107
|
if (!pnl) {
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
@@ -137,7 +137,7 @@ function priceToPnl(inputs, options = {}) {
|
|
|
137
137
|
decimal = new _utils.Decimal(qty).mul(new _utils.Decimal(price).minus(new _utils.Decimal(entryPrice)));
|
|
138
138
|
}
|
|
139
139
|
if (symbol) {
|
|
140
|
-
return decimal.todp(symbol.quote_dp,
|
|
140
|
+
return decimal.todp(symbol.quote_dp, _utils.Decimal.ROUND_DOWN).toNumber();
|
|
141
141
|
}
|
|
142
142
|
return decimal.toNumber();
|
|
143
143
|
}
|
|
@@ -160,6 +160,8 @@ function calculateHelper(key, inputs, options = {}) {
|
|
|
160
160
|
[key]: inputs.value
|
|
161
161
|
};
|
|
162
162
|
let trigger_price, offset, offset_percentage, pnl;
|
|
163
|
+
const entryPrice = new _utils.Decimal(inputs.entryPrice).todp(options.symbol?.quote_dp ?? 2, _utils.Decimal.ROUND_UP).toNumber();
|
|
164
|
+
// console.log("******* entryPrice", options.symbol?.quote_dp, entryPrice);
|
|
163
165
|
switch(key){
|
|
164
166
|
case "tp_trigger_price":
|
|
165
167
|
case "sl_trigger_price":
|
|
@@ -183,7 +185,7 @@ function calculateHelper(key, inputs, options = {}) {
|
|
|
183
185
|
trigger_price = pnlToPrice({
|
|
184
186
|
qty,
|
|
185
187
|
pnl: Number(inputs.value),
|
|
186
|
-
entryPrice
|
|
188
|
+
entryPrice,
|
|
187
189
|
orderSide: inputs.orderSide,
|
|
188
190
|
orderType
|
|
189
191
|
});
|
|
@@ -196,7 +198,7 @@ function calculateHelper(key, inputs, options = {}) {
|
|
|
196
198
|
trigger_price = offsetToPrice({
|
|
197
199
|
qty,
|
|
198
200
|
offset: Number(inputs.value),
|
|
199
|
-
entryPrice
|
|
201
|
+
entryPrice,
|
|
200
202
|
orderSide: inputs.orderSide,
|
|
201
203
|
orderType: key === "tp_offset" ? _types.AlgoOrderType.TAKE_PROFIT : _types.AlgoOrderType.STOP_LOSS
|
|
202
204
|
});
|
|
@@ -209,7 +211,7 @@ function calculateHelper(key, inputs, options = {}) {
|
|
|
209
211
|
trigger_price = offsetPercentageToPrice({
|
|
210
212
|
qty,
|
|
211
213
|
percentage: Number(inputs.value),
|
|
212
|
-
entryPrice
|
|
214
|
+
entryPrice,
|
|
213
215
|
orderSide: inputs.orderSide,
|
|
214
216
|
orderType
|
|
215
217
|
});
|
|
@@ -224,25 +226,25 @@ function calculateHelper(key, inputs, options = {}) {
|
|
|
224
226
|
[key]: inputs.value
|
|
225
227
|
};
|
|
226
228
|
return {
|
|
227
|
-
[`${keyPrefix}trigger_price`]:
|
|
229
|
+
[`${keyPrefix}trigger_price`]: (0, _utils.todpIfNeed)(trigger_price, symbol?.quote_dp ?? 2),
|
|
228
230
|
[`${keyPrefix}offset`]: offset ?? priceToOffset({
|
|
229
231
|
qty,
|
|
230
232
|
price: Number(trigger_price),
|
|
231
|
-
entryPrice
|
|
233
|
+
entryPrice,
|
|
232
234
|
orderSide: inputs.orderSide,
|
|
233
235
|
orderType
|
|
234
236
|
}, options),
|
|
235
237
|
[`${keyPrefix}offset_percentage`]: offset_percentage ?? priceToOffsetPercentage({
|
|
236
238
|
qty,
|
|
237
239
|
price: Number(trigger_price),
|
|
238
|
-
entryPrice
|
|
240
|
+
entryPrice,
|
|
239
241
|
orderSide: inputs.orderSide,
|
|
240
242
|
orderType
|
|
241
243
|
}),
|
|
242
244
|
[`${keyPrefix}pnl`]: pnl ?? priceToPnl({
|
|
243
245
|
qty,
|
|
244
246
|
price: Number(trigger_price),
|
|
245
|
-
entryPrice
|
|
247
|
+
entryPrice,
|
|
246
248
|
orderSide: inputs.orderSide,
|
|
247
249
|
orderType
|
|
248
250
|
}, options)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"sourcesContent":["import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\n\n/**\n * offset -> TP/SL price\n */\nexport function offsetToPrice(inputs: {\n qty: number;\n offset: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, offset, entryPrice, orderType, orderSide } = inputs;\n\n if (!offset) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n}\n\nexport function priceToOffset(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal: Decimal;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(entryPrice).minus(new Decimal(price));\n }\n\n if (symbol) {\n return decimal!.abs().todp(symbol.quote_dp, 4).toNumber();\n }\n\n return decimal!.abs().toNumber();\n}\n\nexport function offsetPercentageToPrice(inputs: {\n qty: number;\n percentage: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, percentage, entryPrice, orderType, orderSide } = inputs;\n\n if (!percentage) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n}\n\nexport function priceToOffsetPercentage(inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n return new Decimal(price).div(new Decimal(entryPrice)).minus(1).toNumber();\n }\n}\n\n/**\n * pnl -> TP/SL price\n */\nexport function pnlToPrice(inputs: {\n qty: number;\n pnl: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, pnl, entryPrice, orderType, orderSide } = inputs;\n\n console.log(\"pnlToPrice\", inputs);\n\n if (!pnl) {\n return;\n }\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .plus(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n}\n\n/**\n * TP/SL price -> pnl\n */\nexport function priceToPnl(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n): number {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal = zero;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (symbol) {\n return decimal.todp(symbol.quote_dp, 4).toNumber();\n }\n\n return decimal.toNumber();\n}\n\nexport function calculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number;\n qty: number;\n orderSide: OrderSide;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { symbol } = options;\n // if not need to be computed, return the value directly\n if (\n key !== \"quantity\" &&\n key !== \"tp_trigger_price\" &&\n key !== \"sl_trigger_price\" &&\n key !== \"tp_pnl\" &&\n key !== \"sl_pnl\" &&\n key !== \"tp_offset\" &&\n key !== \"sl_offset\" &&\n key !== \"tp_offset_percentage\" &&\n key !== \"sl_offset_percentage\"\n ) {\n return {\n [key]: inputs.value,\n };\n }\n\n const orderType = key.startsWith(\"tp_\")\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS;\n const keyPrefix = key.slice(0, 3);\n\n let qty = Number(key === \"quantity\" ? inputs.value : inputs.qty);\n\n if (qty === 0)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n // [`${keyPrefix}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n let trigger_price, offset, offset_percentage, pnl;\n\n switch (key) {\n case \"tp_trigger_price\":\n case \"sl_trigger_price\": {\n trigger_price = inputs.value;\n // if trigger price is empty and the key is `*_trigger_price`, reset the offset and pnl\n if (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\n trigger_price = offsetToPrice({\n qty,\n offset: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType:\n key === \"tp_offset\"\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS,\n });\n break;\n }\n\n case \"tp_offset_percentage\":\n case \"sl_offset_percentage\": {\n offset_percentage = inputs.value;\n trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: symbol\n ? new Decimal(Number(trigger_price)).todp(symbol.quote_dp, 4).toNumber()\n : trigger_price,\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n };\n}\n"],"names":["calculateHelper","offsetPercentageToPrice","offsetToPrice","pnlToPrice","priceToOffset","priceToOffsetPercentage","priceToPnl","inputs","qty","offset","entryPrice","orderType","orderSide","OrderSide","BUY","AlgoOrderType","TAKE_PROFIT","Decimal","add","toNumber","minus","SELL","options","price","symbol","decimal","abs","todp","quote_dp","percentage","mul","div","pnl","plus","zero","key","value","startsWith","STOP_LOSS","keyPrefix","slice","Number","trigger_price","offset_percentage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"sourcesContent":["import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, todpIfNeed, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\n\n/**\n * offset -> TP/SL price\n */\nexport function offsetToPrice(inputs: {\n qty: number;\n offset: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, offset, entryPrice, orderType, orderSide } = inputs;\n\n if (!offset) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n}\n\nexport function priceToOffset(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal: Decimal;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(entryPrice).minus(new Decimal(price));\n }\n\n if (symbol) {\n return decimal!.abs().todp(symbol.quote_dp, Decimal.ROUND_UP).toNumber();\n }\n\n return decimal!.abs().toNumber();\n}\n\nexport function offsetPercentageToPrice(inputs: {\n qty: number;\n percentage: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, percentage, entryPrice, orderType, orderSide } = inputs;\n\n if (!percentage) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n}\n\nexport function priceToOffsetPercentage(inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n return new Decimal(price).div(new Decimal(entryPrice)).minus(1).toNumber();\n }\n}\n\n/**\n * pnl -> TP/SL price\n */\nexport function pnlToPrice(inputs: {\n qty: number;\n pnl: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, pnl, entryPrice, orderType, orderSide } = inputs;\n\n // console.log(\"pnlToPrice\", inputs);\n\n if (!pnl) {\n return;\n }\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .plus(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n}\n\n/**\n * TP/SL price -> pnl\n */\nexport function priceToPnl(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n): number {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal = zero;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (symbol) {\n return decimal.todp(symbol.quote_dp, Decimal.ROUND_DOWN).toNumber();\n }\n\n return decimal.toNumber();\n}\n\n// function formatPrice(price: number | string, symbol?: API.SymbolExt) {\n// if (typeof price !== \"string\") {\n// price = `${price}`;\n// }\n\n// if (price.endsWith(\".\") || !symbol) {\n// return price;\n// }\n// return new Decimal(Number(price))\n// .todp(symbol.quote_dp, Decimal.ROUND_UP)\n// .toNumber();\n// }\n\nexport function calculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number;\n qty: number;\n orderSide: OrderSide;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { symbol } = options;\n // if not need to be computed, return the value directly\n if (\n key !== \"quantity\" &&\n key !== \"tp_trigger_price\" &&\n key !== \"sl_trigger_price\" &&\n key !== \"tp_pnl\" &&\n key !== \"sl_pnl\" &&\n key !== \"tp_offset\" &&\n key !== \"sl_offset\" &&\n key !== \"tp_offset_percentage\" &&\n key !== \"sl_offset_percentage\"\n ) {\n return {\n [key]: inputs.value,\n };\n }\n\n const orderType = key.startsWith(\"tp_\")\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS;\n const keyPrefix = key.slice(0, 3);\n\n let qty = Number(key === \"quantity\" ? inputs.value : inputs.qty);\n\n if (qty === 0)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n // [`${keyPrefix}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n let trigger_price, offset, offset_percentage, pnl;\n\n const entryPrice = new Decimal(inputs.entryPrice)\n .todp(options.symbol?.quote_dp ?? 2, Decimal.ROUND_UP)\n .toNumber();\n\n // console.log(\"******* entryPrice\", options.symbol?.quote_dp, entryPrice);\n\n switch (key) {\n case \"tp_trigger_price\":\n case \"sl_trigger_price\": {\n trigger_price = inputs.value;\n // if trigger price is empty and the key is `*_trigger_price`, reset the offset and pnl\n if (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\n trigger_price = offsetToPrice({\n qty,\n offset: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType:\n key === \"tp_offset\"\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS,\n });\n break;\n }\n\n case \"tp_offset_percentage\":\n case \"sl_offset_percentage\": {\n offset_percentage = inputs.value;\n trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: todpIfNeed(\n trigger_price,\n symbol?.quote_dp ?? 2\n ),\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n };\n}\n"],"names":["calculateHelper","offsetPercentageToPrice","offsetToPrice","pnlToPrice","priceToOffset","priceToOffsetPercentage","priceToPnl","inputs","qty","offset","entryPrice","orderType","orderSide","OrderSide","BUY","AlgoOrderType","TAKE_PROFIT","Decimal","add","toNumber","minus","SELL","options","price","symbol","decimal","abs","todp","quote_dp","ROUND_UP","percentage","mul","div","pnl","plus","zero","ROUND_DOWN","key","value","startsWith","STOP_LOSS","keyPrefix","slice","Number","trigger_price","offset_percentage","todpIfNeed"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -16,7 +16,7 @@ class TPSLOrderCreator extends _baseAlgoCreator.BaseAlgoOrderCreator {
|
|
|
16
16
|
const side = values.side === _types.OrderSide.BUY ? _types.OrderSide.SELL : _types.OrderSide.BUY;
|
|
17
17
|
const child_orders = [];
|
|
18
18
|
if (typeof values.tp_trigger_price !== "undefined") {
|
|
19
|
-
const tp_trigger_price = !!values.
|
|
19
|
+
const tp_trigger_price = !!values.tp_trigger_price ? new _utils.Decimal(values.tp_trigger_price).todp(config.symbol.quote_dp).toNumber() : values.tp_trigger_price;
|
|
20
20
|
child_orders.push({
|
|
21
21
|
algo_type: _types.AlgoOrderType.TAKE_PROFIT,
|
|
22
22
|
reduce_only: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/orderCreator/tpslOrderCreator.ts"],"sourcesContent":["import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n> {\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.
|
|
1
|
+
{"version":3,"sources":["../../../src/services/orderCreator/tpslOrderCreator.ts"],"sourcesContent":["import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n> {\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: tp_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: sl_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\n\n return {\n algo_type: AlgoOrderRootType.TP_SL,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n reduce_only: true,\n quantity: values.quantity,\n symbol: values.symbol,\n child_orders,\n };\n }\n\n crateUpdateOrder(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n oldValue: API.AlgoOrder,\n config: ValuesDepConfig\n ): [\n { child_orders: AlgoOrderUpdateEntity[] },\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n ] {\n const data = this.create(values, config);\n const newData: AlgoOrderUpdateEntity[] = [];\n\n const needUpdateQty = values.quantity !== oldValue.quantity;\n\n data.child_orders.forEach((order) => {\n // find the old order\n let _order = Object.create(null);\n\n if (needUpdateQty) {\n _order[\"quantity\"] = data.quantity;\n }\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n _order[\"is_activated\"] = false;\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n // _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n _order[\"trigger_price\"] = order.trigger_price as number;\n }\n\n if (Object.keys(_order).length > 0) {\n _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n newData.push(_order);\n }\n }\n });\n\n if (needUpdateQty && newData.length < 2) {\n // if quantity is changed, need to update all child orders\n const missingOrders = oldValue.child_orders.filter(\n (order) => order.algo_order_id !== newData[0].order_id\n );\n\n if (missingOrders.length) {\n newData.push({\n quantity: Number(data.quantity),\n order_id: missingOrders[0].algo_order_id,\n });\n }\n }\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n"],"names":["TPSLOrderCreator","BaseAlgoOrderCreator","create","values","config","side","OrderSide","BUY","SELL","child_orders","tp_trigger_price","Decimal","todp","symbol","quote_dp","toNumber","push","algo_type","AlgoOrderType","TAKE_PROFIT","reduce_only","type","OrderType","MARKET","trigger_price","is_activated","sl_trigger_price","STOP_LOSS","AlgoOrderRootType","TP_SL","trigger_price_type","TriggerPriceType","MARK_PRICE","quantity","crateUpdateOrder","oldValue","data","newData","needUpdateQty","forEach","order","_order","Object","oldOrder","find","keys","length","Number","algo_order_id","missingOrders","filter","order_id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
|
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
if (typeof window !== 'undefined') {
|
|
12
12
|
window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
|
|
13
|
-
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.4.0-alpha.
|
|
13
|
+
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.4.0-alpha.1";
|
|
14
14
|
}
|
|
15
|
-
const _default = "1.4.0-alpha.
|
|
15
|
+
const _default = "1.4.0-alpha.1";
|
|
16
16
|
|
|
17
17
|
//# sourceMappingURL=version.js.map
|
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.4.0-alpha.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.4.0-alpha.1\";\n};\n\nexport default \"1.4.0-alpha.1\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":";;;;+BAaA;;;eAAA;;;AALA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;MAEA,WAAe"}
|