Add max_position_size to account configs

- DB migration: ALTER TABLE account_configs ADD COLUMN max_position_size INTEGER NOT NULL DEFAULT 0
- Added max_position_size to AccountConfigRow, createAccountConfig, updateAccountConfig in lib/db.ts
- Added maxPositionSize to AccountConfig type in types.ts (0 = no limit)
- GET /api/firms/[id] now returns maxPositionSize per account
- POST /api/firms/[id]/accounts and PUT /api/account-configs/[id] accept maxPositionSize
- Firm settings page: new Max Contracts column (blank = no limit)
- auto-trade: contracts capped at maxPositionSize when > 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Senofy
2026-03-09 03:51:09 -05:00
co-authored by Claude Sonnet 4.6
parent b2a1bdd1c3
commit 49580c6bb4
7 changed files with 51 additions and 10 deletions
+3 -1
View File
@@ -20,9 +20,10 @@ export async function PUT(
minTradingDays?: number;
accountSize?: number;
maxLoss?: number;
maxPositionSize?: number;
};
const { prefix, profitTarget, consistency, minDayPnL, minTradingDays, accountSize, maxLoss } = body;
const { prefix, profitTarget, consistency, minDayPnL, minTradingDays, accountSize, maxLoss, maxPositionSize } = body;
if (
typeof prefix !== 'string' || !prefix.trim() ||
@@ -44,6 +45,7 @@ export async function PUT(
minTradingDays,
accountSize,
maxLoss: maxLoss ?? 0,
maxPositionSize: maxPositionSize ?? 0,
});
if (!updated) {
+4 -1
View File
@@ -24,9 +24,10 @@ export async function POST(
minTradingDays?: number;
accountSize?: number;
maxLoss?: number;
maxPositionSize?: number;
};
const { prefix, profitTarget, consistency, minDayPnL, minTradingDays, accountSize, maxLoss } = body;
const { prefix, profitTarget, consistency, minDayPnL, minTradingDays, accountSize, maxLoss, maxPositionSize } = body;
if (
typeof prefix !== 'string' || !prefix.trim() ||
@@ -48,6 +49,7 @@ export async function POST(
minTradingDays,
accountSize,
maxLoss: maxLoss ?? 0,
maxPositionSize: maxPositionSize ?? 0,
});
return NextResponse.json({
@@ -59,6 +61,7 @@ export async function POST(
minTradingDays: row.min_trading_days,
accountSize: row.account_size,
maxLoss: row.max_loss,
maxPositionSize: row.max_position_size,
}, { status: 201 });
} catch (err) {
console.error('[POST /api/firms/:id/accounts]', err);
+2
View File
@@ -31,6 +31,8 @@ export async function GET(
minDayPnL: a.min_day_pnl,
minTradingDays: a.min_trading_days,
accountSize: a.account_size,
maxLoss: a.max_loss,
maxPositionSize: a.max_position_size,
})),
});
}