learning_ai_invt_trdg/backend/STRATEGY_MARKETPLACE.md

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 against public.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_presets ordered by created_at DESC.
  • Maps snake_case DB columns to camelCase frontend StrategyPreset interface.
  • 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 riskStyleId and recommendedAssets seed the StrategyWizard.
  • 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