add trading stop settings and send trading stop data to bybit

master
TZGyn 6 months ago
parent d3447351e4
commit 582285fe3e
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -2,6 +2,11 @@ import { pgTable } from 'drizzle-orm/pg-core'
export const bybit_logs = pgTable('bybit_logs', (t) => ({
status: t.varchar('status').$type<'success' | 'failed'>().notNull(),
type: t
.varchar('type')
.$type<'order' | 'trading stop'>()
.notNull()
.default('order'),
request: t.json('request').notNull(),
payload: t.json('payload').notNull(),
response: t.json('response').notNull(),

@ -160,6 +160,44 @@
max={100}
step={0.1} />
</Form.Field>
<Form.Field {form} name="activePricePercent">
<Form.Control>
{#snippet children({ props })}
<Form.Label>Active Price (%)</Form.Label>
<Input
type="number"
{...props}
step={0.1}
bind:value={$formData.activePricePercent} />
{/snippet}
</Form.Control>
<Form.Description>Active Price</Form.Description>
<Form.FieldErrors />
<Slider
type="single"
bind:value={$formData.activePricePercent}
max={100}
step={0.1} />
</Form.Field>
<Form.Field {form} name="trailingDistancePercent">
<Form.Control>
{#snippet children({ props })}
<Form.Label>Trailing Distance Percent (%)</Form.Label>
<Input
type="number"
{...props}
step={0.1}
bind:value={$formData.trailingDistancePercent} />
{/snippet}
</Form.Control>
<Form.Description>Trailing Distance Percent</Form.Description>
<Form.FieldErrors />
<Slider
type="single"
bind:value={$formData.trailingDistancePercent}
max={100}
step={0.1} />
</Form.Field>
<Form.Field {form} name="demo">
<Form.Control>
{#snippet children({ props })}
@ -183,6 +221,9 @@
leverage: $formData.leverage.toString(),
takeProfitPercent: $formData.takeProfitPercent.toString(),
stopLossPercent: $formData.stopLossPercent.toString(),
activePricePercent: $formData.activePricePercent.toString(),
trailingDistancePercent:
$formData.trailingDistancePercent.toString(),
demo: $formData.demo.toString(),
}} />
</div>

@ -9,6 +9,8 @@ export const formSchema = z.object({
leverage: z.number().default(1),
takeProfitPercent: z.number(),
stopLossPercent: z.number(),
activePricePercent: z.number(),
trailingDistancePercent: z.number(),
demo: z.boolean().default(true),
})

@ -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) {

Loading…
Cancel
Save