|
|
|
|
@ -25,6 +25,8 @@ export const POST = async ({ locals, request }) => {
|
|
|
|
|
leverage: z.string().default('1'),
|
|
|
|
|
takeProfitPercent: z.string(),
|
|
|
|
|
stopLossPercent: z.string(),
|
|
|
|
|
activePricePercent: z.string(),
|
|
|
|
|
trailingDistancePercent: z.string(),
|
|
|
|
|
demo: z.enum(['true', 'false']),
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
@ -131,7 +133,45 @@ export const POST = async ({ locals, request }) => {
|
|
|
|
|
|
|
|
|
|
console.log('Orders:', orders)
|
|
|
|
|
|
|
|
|
|
const activePriceBuy = (
|
|
|
|
|
Number(form.data.entryPrice) *
|
|
|
|
|
(1 + Number(form.data.activePricePercent) / 100)
|
|
|
|
|
).toFixed(decimalLength)
|
|
|
|
|
|
|
|
|
|
const activePriceSell = (
|
|
|
|
|
Number(form.data.entryPrice) *
|
|
|
|
|
(1 - Number(form.data.activePricePercent) / 100)
|
|
|
|
|
).toFixed(decimalLength)
|
|
|
|
|
|
|
|
|
|
const trailingDistance = (
|
|
|
|
|
Number(form.data.entryPrice) *
|
|
|
|
|
(Number(form.data.activePricePercent) / 100)
|
|
|
|
|
).toFixed(decimalLength)
|
|
|
|
|
|
|
|
|
|
const tradingStops = await Promise.all([
|
|
|
|
|
await client.setTradingStop({
|
|
|
|
|
category: 'linear',
|
|
|
|
|
activePrice: activePriceBuy,
|
|
|
|
|
trailingStop: trailingDistance,
|
|
|
|
|
symbol: symbol,
|
|
|
|
|
positionIdx: 1,
|
|
|
|
|
}),
|
|
|
|
|
await client.setTradingStop({
|
|
|
|
|
category: 'linear',
|
|
|
|
|
activePrice: activePriceSell,
|
|
|
|
|
trailingStop: trailingDistance,
|
|
|
|
|
symbol: symbol,
|
|
|
|
|
positionIdx: 2,
|
|
|
|
|
}),
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
console.log('Trading Stops:', tradingStops)
|
|
|
|
|
|
|
|
|
|
const buyOrder = orders[0]
|
|
|
|
|
const sellOrder = orders[1]
|
|
|
|
|
const buyTradingStop = tradingStops[0]
|
|
|
|
|
const sellTradingStop = tradingStops[1]
|
|
|
|
|
const logs = await Promise.all([
|
|
|
|
|
await db.insert(bybit_logs).values({
|
|
|
|
|
status: buyOrder.retCode === 0 ? 'success' : 'failed',
|
|
|
|
|
request: form.data,
|
|
|
|
|
@ -148,9 +188,7 @@ export const POST = async ({ locals, request }) => {
|
|
|
|
|
},
|
|
|
|
|
response: buyOrder,
|
|
|
|
|
createdAt: Date.now(),
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const sellOrder = orders[1]
|
|
|
|
|
}),
|
|
|
|
|
await db.insert(bybit_logs).values({
|
|
|
|
|
status: sellOrder.retCode === 0 ? 'success' : 'failed',
|
|
|
|
|
request: form.data,
|
|
|
|
|
@ -167,7 +205,36 @@ export const POST = async ({ locals, request }) => {
|
|
|
|
|
},
|
|
|
|
|
response: sellOrder,
|
|
|
|
|
createdAt: Date.now(),
|
|
|
|
|
})
|
|
|
|
|
}),
|
|
|
|
|
await db.insert(bybit_logs).values({
|
|
|
|
|
status: buyTradingStop.retCode === 0 ? 'success' : 'failed',
|
|
|
|
|
type: 'trading stop',
|
|
|
|
|
request: form.data,
|
|
|
|
|
payload: {
|
|
|
|
|
category: 'linear',
|
|
|
|
|
activePrice: activePriceBuy,
|
|
|
|
|
trailingStop: trailingDistance,
|
|
|
|
|
symbol: symbol,
|
|
|
|
|
positionIdx: 1,
|
|
|
|
|
},
|
|
|
|
|
response: buyTradingStop,
|
|
|
|
|
createdAt: Date.now(),
|
|
|
|
|
}),
|
|
|
|
|
await db.insert(bybit_logs).values({
|
|
|
|
|
status: sellTradingStop.retCode === 0 ? 'success' : 'failed',
|
|
|
|
|
type: 'trading stop',
|
|
|
|
|
request: form.data,
|
|
|
|
|
payload: {
|
|
|
|
|
category: 'linear',
|
|
|
|
|
activePrice: activePriceSell,
|
|
|
|
|
trailingStop: trailingDistance,
|
|
|
|
|
symbol: symbol,
|
|
|
|
|
positionIdx: 2,
|
|
|
|
|
},
|
|
|
|
|
response: sellTradingStop,
|
|
|
|
|
createdAt: Date.now(),
|
|
|
|
|
}),
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
return new Response()
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|