jaspervault_cli 1.0.14 → 1.0.16
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/dist/bin/jv.js +2 -0
- package/dist/bin/jv.js.map +1 -1
- package/dist/src/commands/order.js +4 -3
- package/dist/src/commands/order.js.map +1 -1
- package/dist/src/commands/price.d.ts +2 -0
- package/dist/src/commands/price.js +28 -0
- package/dist/src/commands/price.js.map +1 -0
- package/dist/src/templates/skill-body.js +61 -37
- package/dist/src/templates/skill-body.js.map +1 -1
- package/package.json +1 -1
package/dist/bin/jv.js
CHANGED
|
@@ -13,6 +13,7 @@ import { registerVaultCommand } from '../src/commands/vault.js';
|
|
|
13
13
|
import { registerDepositCommand } from '../src/commands/deposit.js';
|
|
14
14
|
import { registerInitCommand } from '../src/commands/init.js';
|
|
15
15
|
import { registerConnectCommand } from '../src/commands/connect.js';
|
|
16
|
+
import { registerPriceCommand } from '../src/commands/price.js';
|
|
16
17
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
18
|
const { version } = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
|
|
18
19
|
const program = new Command();
|
|
@@ -30,5 +31,6 @@ registerVaultCommand(program);
|
|
|
30
31
|
registerDepositCommand(program);
|
|
31
32
|
registerInitCommand(program);
|
|
32
33
|
registerConnectCommand(program);
|
|
34
|
+
registerPriceCommand(program);
|
|
33
35
|
program.parse();
|
|
34
36
|
//# sourceMappingURL=jv.js.map
|
package/dist/bin/jv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jv.js","sourceRoot":"","sources":["../../bin/jv.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"jv.js","sourceRoot":"","sources":["../../bin/jv.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACtC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -18,7 +18,7 @@ export function registerOrderCommand(program) {
|
|
|
18
18
|
.requiredOption('--side <long|short>', 'Position side')
|
|
19
19
|
.requiredOption('--symbol <symbol>', 'Asset symbol (e.g. JBTC, CBBTC)')
|
|
20
20
|
.option('--leverage <n>', 'Leverage (default: from chain config, typically 50)')
|
|
21
|
-
.requiredOption('--margin
|
|
21
|
+
.requiredOption('-m, --margin <usdc>', 'Margin (collateral) in USDC — the actual amount deposited as collateral')
|
|
22
22
|
.option('--margin-account <addr>', 'Margin vault address (default: from profile)')
|
|
23
23
|
.option('--position-account <addr>', 'Position vault address (default: from profile)')
|
|
24
24
|
.option('--limit-price <price>', 'Limit price in USDC (omit for market order)')
|
|
@@ -42,8 +42,9 @@ export function registerOrderCommand(program) {
|
|
|
42
42
|
const leverage = opts.leverage
|
|
43
43
|
? parseInt(opts.leverage, 10)
|
|
44
44
|
: (net.defaultLeverage ?? 50);
|
|
45
|
-
const
|
|
46
|
-
const
|
|
45
|
+
const marginInput = parseFloat(opts.margin);
|
|
46
|
+
const notionalAmount = marginInput * leverage;
|
|
47
|
+
const actualMargin = marginInput.toFixed(6);
|
|
47
48
|
const positionAccount = opts.positionAccount ?? getPositionAccountFromProfile(profile, side) ?? undefined;
|
|
48
49
|
const intent = {
|
|
49
50
|
side,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQpF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,cAAc,CAAC,qBAAqB,EAAE,eAAe,CAAC;SACtD,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,CAAC;SAC/E,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { fetchCurrentPrice } from '../services/price-service.js';
|
|
3
|
+
import { printJson, exitWithError, EXIT_CODES } from '../utils/output.js';
|
|
4
|
+
export function registerPriceCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('price')
|
|
7
|
+
.description('Fetch current market price from Quote Center')
|
|
8
|
+
.requiredOption('--symbol <symbol>', 'Asset symbol (e.g. JBTC, CBBTC)')
|
|
9
|
+
.option('--network <name>', 'Network name', 'jaspervault')
|
|
10
|
+
.option('--pretty', 'Pretty-print JSON output')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
try {
|
|
13
|
+
const priceWei = await fetchCurrentPrice(opts.symbol, opts.network);
|
|
14
|
+
const price = ethers.formatUnits(priceWei, 18);
|
|
15
|
+
printJson({
|
|
16
|
+
symbol: opts.symbol.toUpperCase(),
|
|
17
|
+
price,
|
|
18
|
+
priceWei: priceWei.toString(),
|
|
19
|
+
source: 'quote_center',
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
}, opts.pretty);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
exitWithError(`Failed to fetch price: ${err.message}`, EXIT_CODES.HTTP_ERROR);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=price.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../../src/commands/price.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SACtE,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,aAAa,CAAC;SACzD,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CACL,KAAK,EAAE,IAA2D,EAAE,EAAE;QACpE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAE/C,SAAS,CACP;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACjC,KAAK;gBACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;gBAC7B,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,EACD,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CACX,0BAA2B,GAAa,CAAC,OAAO,EAAE,EAClD,UAAU,CAAC,UAAU,CACtB,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
|
|
@@ -33,7 +33,7 @@ Interact with JasperVault's perpetual contract platform. You can create market/l
|
|
|
33
33
|
|
|
34
34
|
- \`jv\` CLI installed and available in PATH
|
|
35
35
|
- **First-time setup**: use \`jv vault init-wc\` to initialize via WalletConnect (scan QR on phone, sign delegation — no private key needed)
|
|
36
|
-
- API URL defaults to
|
|
36
|
+
- API URL defaults to \`https://trading-api-test.jaspervault.pro\`; set \`JV_API_URL\` only when debugging locally
|
|
37
37
|
|
|
38
38
|
## Activation Behavior
|
|
39
39
|
|
|
@@ -83,64 +83,89 @@ Do NOT ask the user to set \`PRIVATE_KEY\`. Do NOT suggest \`jv vault init\` unl
|
|
|
83
83
|
|
|
84
84
|
## Key Concepts (MUST READ before any trading operation)
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
**How \`--margin\` works:**
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
--margin-amount = NOTIONAL VALUE (NOT actual margin/collateral!)
|
|
90
|
-
\`\`\`
|
|
91
|
-
|
|
92
|
-
**Formulas:**
|
|
88
|
+
\`--margin\` = the **actual collateral (margin) in USDC** you deposit. The CLI internally multiplies by leverage to compute the notional position size.
|
|
93
89
|
|
|
94
90
|
| Concept | Formula | Example |
|
|
95
91
|
|---------|---------|---------|
|
|
96
92
|
| Notional value | \`margin × leverage\` | 60 USDC × 50x = $3,000 |
|
|
97
|
-
| Actual margin (collateral) | \`notional / leverage\` | $3,000 / 50 = 60 USDC |
|
|
98
93
|
| Position size | \`notional / current_price\` | $3,000 / $70,000 = 0.0428 JBTC |
|
|
99
94
|
|
|
100
|
-
**
|
|
101
|
-
|
|
102
|
-
The \`--margin-amount\` parameter takes the **notional value** (total leveraged position value in USDC). The CLI internally divides by leverage to get the actual margin:
|
|
103
|
-
|
|
104
|
-
- User passes: \`--margin-amount 3000 --leverage 50\`
|
|
105
|
-
- CLI calculates: actual margin = 3000 / 50 = 60 USDC (collateral locked)
|
|
106
|
-
- Position created: $3,000 notional, 60 USDC collateral, ~0.0428 JBTC size
|
|
107
|
-
|
|
108
|
-
**Translating user intent to \`--margin-amount\` (three scenarios):**
|
|
95
|
+
**Translating user intent to \`--margin\` (three scenarios):**
|
|
109
96
|
|
|
110
97
|
| User says | Calculation | Pass to CLI |
|
|
111
98
|
|-----------|-------------|-------------|
|
|
112
|
-
| "long
|
|
113
|
-
| "
|
|
114
|
-
| "
|
|
99
|
+
| "long with $60 USDC margin at 50x" | already the margin | \`--margin 60\` |
|
|
100
|
+
| "open a $3,000 notional position at 50x" | margin = 3000 / 50 = 60 | \`--margin 60\` |
|
|
101
|
+
| "long 0.1 BTC at 50x" | margin = (0.1 × current_price) / 50 | \`--margin <result>\` |
|
|
115
102
|
|
|
116
|
-
CRITICAL: When the user specifies an asset amount (e.g. "0.1 BTC"), you MUST first
|
|
103
|
+
CRITICAL: When the user specifies an asset amount (e.g. "0.1 BTC"), you MUST first run \`jv price --symbol JBTC --pretty\` to get the current price, then compute \`notional = size × price\`, then \`margin = notional / leverage\` before passing \`--margin\`.
|
|
117
104
|
|
|
118
105
|
**How to read \`jv orders list\` output:**
|
|
119
106
|
|
|
120
107
|
| Field | What it means |
|
|
121
108
|
|-------|---------------|
|
|
122
|
-
| \`margin\` | Actual collateral deposited (e.g. 60 USDC) —
|
|
109
|
+
| \`margin\` | Actual collateral deposited (e.g. 60 USDC) — matches what you passed to \`--margin\` |
|
|
123
110
|
| \`size\` | Position size in underlying asset (e.g. 0.0428 JBTC) |
|
|
124
111
|
| \`leverage\` | Leverage multiplier (e.g. 50) |
|
|
125
112
|
| \`entryPriceUsd\` | Entry price when position was opened |
|
|
126
113
|
|
|
127
114
|
To calculate notional from output: \`notional = margin × leverage\` (or \`size × current_price\`)
|
|
128
115
|
|
|
116
|
+
**How to calculate unrealized PnL:**
|
|
117
|
+
|
|
118
|
+
When the user asks about profit/loss, portfolio value, or position health, you MUST fetch the current price first using \`jv price\`, then compute PnL from \`jv orders list\` output:
|
|
119
|
+
|
|
120
|
+
| Step | Formula |
|
|
121
|
+
|------|---------|
|
|
122
|
+
| 1. Get current price | \`jv price --symbol JBTC --pretty\` → read \`price\` field |
|
|
123
|
+
| 2. Get position data | \`jv orders list --pretty\` → read \`size\`, \`entryPriceUsd\`, \`margin\`, \`positionSide\` |
|
|
124
|
+
| 3. Compute PnL (LONG) | \`unrealizedPnL = size × (currentPrice − entryPrice)\` |
|
|
125
|
+
| 3. Compute PnL (SHORT) | \`unrealizedPnL = size × (entryPrice − currentPrice)\` |
|
|
126
|
+
| 4. PnL percentage | \`pnlPercent = unrealizedPnL / margin × 100%\` |
|
|
127
|
+
| 5. Effective leverage loss | \`leveragedPnlPercent = priceChangePercent × leverage\` |
|
|
128
|
+
|
|
129
|
+
Example: LONG 0.0428 JBTC, entry $70,000, current $71,000, margin 60 USDC
|
|
130
|
+
- PnL = 0.0428 × (71000 − 70000) = +$42.80
|
|
131
|
+
- PnL% = 42.80 / 60 = +71.3%
|
|
132
|
+
|
|
133
|
+
IMPORTANT: NEVER guess or estimate the current price from your training data. ALWAYS use \`jv price\` to get the real-time price from Quote Center before any PnL calculation or price-dependent operation.
|
|
134
|
+
|
|
129
135
|
## Intent Mapping
|
|
130
136
|
|
|
137
|
+
### Getting Market Price (MUST use before any price-dependent operation)
|
|
138
|
+
|
|
139
|
+
When the user asks about **current price**, **market quote**, **how much is BTC**, **profit/loss**, **PnL**, or before **opening a position with asset quantity**:
|
|
140
|
+
|
|
141
|
+
\`\`\`bash
|
|
142
|
+
# Get current JBTC price
|
|
143
|
+
jv price --symbol JBTC --pretty
|
|
144
|
+
|
|
145
|
+
# Get current CBBTC price
|
|
146
|
+
jv price --symbol CBBTC --pretty
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
Output:
|
|
150
|
+
\`\`\`json
|
|
151
|
+
{"symbol":"JBTC","price":"87295.123456","priceWei":"87295123456000000000000","source":"quote_center","timestamp":"2026-03-05T10:30:00.000Z"}
|
|
152
|
+
\`\`\`
|
|
153
|
+
|
|
154
|
+
Use the \`price\` field (human-readable USD value) for display and calculations. This command does NOT require vault initialization — it can be run anytime.
|
|
155
|
+
|
|
131
156
|
### Creating Orders (Open New Position)
|
|
132
157
|
|
|
133
158
|
When the user wants to **open a position**, **place a market order**, or **place a limit order**:
|
|
134
159
|
|
|
135
160
|
\`\`\`bash
|
|
136
|
-
# Market order: Long JBTC,
|
|
137
|
-
jv order create --side long --symbol JBTC --margin
|
|
161
|
+
# Market order: Long JBTC, 60 USDC margin at 50x (= $3,000 notional)
|
|
162
|
+
jv order create --side long --symbol JBTC --margin 60 --leverage 50 --network jaspervault
|
|
138
163
|
|
|
139
|
-
# Market order: Short JBTC,
|
|
140
|
-
jv order create --side short --symbol JBTC --margin
|
|
164
|
+
# Market order: Short JBTC, 100 USDC margin at 50x (= $5,000 notional)
|
|
165
|
+
jv order create --side short --symbol JBTC --margin 100 --leverage 50 --network jaspervault
|
|
141
166
|
|
|
142
167
|
# Limit order: add --limit-price
|
|
143
|
-
jv order create --side long --symbol JBTC --margin
|
|
168
|
+
jv order create --side long --symbol JBTC --margin 60 --leverage 50 --limit-price 65000 --network jaspervault
|
|
144
169
|
\`\`\`
|
|
145
170
|
|
|
146
171
|
The CLI signs the order internally using the delegation wallet. No pre-signed payload required.
|
|
@@ -154,28 +179,27 @@ To reduce a position, create an **opposite-side order** with the notional value
|
|
|
154
179
|
**Step-by-step for reducing a position:**
|
|
155
180
|
|
|
156
181
|
1. Query current position: \`jv orders list --pretty\`
|
|
157
|
-
2. Calculate
|
|
158
|
-
-
|
|
159
|
-
- To close half: \`
|
|
160
|
-
3. Create opposite-side order with that
|
|
182
|
+
2. Calculate margin to close:
|
|
183
|
+
- Read the \`margin\` field directly from output (e.g. 60 USDC)
|
|
184
|
+
- To close half: \`close_margin = margin / 2\` (e.g. 30 USDC)
|
|
185
|
+
3. Create opposite-side order with that margin value
|
|
161
186
|
|
|
162
187
|
**Example: Reduce a LONG position by half**
|
|
163
188
|
|
|
164
189
|
Current position from \`jv orders list\`:
|
|
165
190
|
- margin: 60 USDC, leverage: 50, size: 0.0428 JBTC
|
|
166
|
-
- notional = 60 × 50 = $3,000
|
|
167
191
|
|
|
168
|
-
To close half ($1,500 notional):
|
|
192
|
+
To close half (30 USDC margin → $1,500 notional):
|
|
169
193
|
\`\`\`bash
|
|
170
|
-
jv order create --side short --symbol JBTC --margin
|
|
194
|
+
jv order create --side short --symbol JBTC --margin 30 --leverage 50 --network jaspervault
|
|
171
195
|
\`\`\`
|
|
172
196
|
|
|
173
|
-
**Example: Close entire position ($3,000 notional):**
|
|
197
|
+
**Example: Close entire position (60 USDC margin → $3,000 notional):**
|
|
174
198
|
\`\`\`bash
|
|
175
|
-
jv order create --side short --symbol JBTC --margin
|
|
199
|
+
jv order create --side short --symbol JBTC --margin 60 --leverage 50 --network jaspervault
|
|
176
200
|
\`\`\`
|
|
177
201
|
|
|
178
|
-
IMPORTANT: The \`--margin
|
|
202
|
+
IMPORTANT: The \`--margin\` for reduction = the margin portion you want to close (read directly from \`jv orders list\` output \`margin\` field).
|
|
179
203
|
|
|
180
204
|
### Setting Take-Profit
|
|
181
205
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-body.js","sourceRoot":"","sources":["../../../src/templates/skill-body.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CACzC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AAEzB,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;wBAcE,WAAW;;CAElC,CAAC,IAAI,EAAE,CAAC;AAET,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"skill-body.js","sourceRoot":"","sources":["../../../src/templates/skill-body.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CACzC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AAEzB,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;wBAcE,WAAW;;CAElC,CAAC,IAAI,EAAE,CAAC;AAET,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6T1B,CAAC,IAAI,EAAE,CAAC;AAET,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;;;CAIR,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,sBAAsB,EAAE,GAAG,mCAAmC,GAAG,kBAAkB,CAAC;QAC7F,KAAK,QAAQ;YACX,OAAO,oBAAoB,EAAE,GAAG,mCAAmC,GAAG,kBAAkB,CAAC;QAC3F,KAAK,QAAQ;YACX,OAAO,wBAAwB,GAAG,kBAAkB,CAAC;QACvD;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|