3.6 KiB
3.6 KiB
Strategy Marketplace — Admin Publishing Feature
Added: 2026-02-20
Overview
The Strategy Marketplace allows administrators to convert any live trading strategy profile (Strategy Cluster) into a reusable template that all platform users can adopt.
Database Schema
Table: public.strategy_presets
Migration: schema/016_add_strategy_marketplace.sql
| Column | Type | Description |
|---|---|---|
id |
TEXT (PK) |
Format: template-{profile_id}-{timestamp} |
name |
TEXT |
Display name of the strategy |
description |
TEXT |
Auto-generated summary including rule count |
risk_style_id |
TEXT |
safe, balanced, or aggressive |
recommended_assets |
TEXT[] |
Array of symbols (e.g. ['BTC/USDT', 'ETH/USDT']) |
typical_trades_per_day |
TEXT |
e.g. '3-5', '8-12' |
performance_tag |
TEXT |
e.g. 'Institutional Template' |
is_popular |
BOOLEAN |
Featured/highlighted in marketplace |
created_at |
TIMESTAMPTZ |
Auto-set on insert |
created_by |
UUID |
Admin user ID (FK → auth.users) |
original_profile_id |
UUID |
Source profile (FK → trade_profiles) |
strategy_config |
JSONB |
Full strategy rule and risk config snapshot |
role_required |
TEXT |
'free', 'pro', or 'elite' |
Row Level Security
- Read: All authenticated users can read all presets (
FOR SELECT USING (true)). - Write: Only admins can insert/update/delete (
role = 'admin'check againstpublic.users).
Admin Publishing Flow
Trigger
Admin clicks the ↗ (Publish) icon on any strategy card in the Strategy Clusters tab.
Auto-Detection Logic
The handlePublish function in TradeProfileManager.tsx derives the risk_style_id from minRulePassRatio:
minRulePassRatio |
risk_style_id |
|---|---|
| < 0.9 | aggressive |
| ≥ 0.9 and < 1.0 | balanced |
| ≥ 1.0 | safe |
Payload Construction
{
"id": "template-{profile.id}-{timestamp}",
"name": "{profile.name}",
"description": "Admin-published strategy based on {name}. Features N optimized rules.",
"risk_style_id": "balanced",
"recommended_assets": ["BTC/USDT", "ETH/USDT"],
"typical_trades_per_day": "3-5",
"performance_tag": "Institutional Template",
"is_popular": true,
"created_by": "{admin_user_id}",
"original_profile_id": "{profile.id}",
"strategy_config": { ... full config ... }
}
Frontend Integration
Marketplace Display (PresetMarketplace.tsx)
- On mount, fetches all rows from
strategy_presetsordered bycreated_at DESC. - Maps
snake_caseDB columns tocamelCasefrontendStrategyPresetinterface. - Merges with hardcoded system presets from
PresetRegistry.ts. - Total count displayed in header reflects both system + admin-published templates.
Adoption Flow
- User clicks "USE THIS STRATEGY" on any card.
- The preset's
riskStyleIdandrecommendedAssetsseed theStrategyWizard. - User customizes capital/assets and deploys as their own profile.
Files Modified/Created
| File | Change |
|---|---|
schema/016_add_strategy_marketplace.sql |
New migration — creates strategy_presets table |
src/lib/const.ts |
Added tableNameMarketplace = 'strategy_presets' |
src/components/TradeProfileManager.tsx |
Added handlePublish and Publish button for admins |
src/components/PresetMarketplace.tsx |
Added Supabase fetch + mapping for dynamic templates |
src/tabs/MarketplaceTab.tsx |
Added AI Setups + Top Volatile contextual panels |