bitcain docs

Paper Trading

Paper Trading

Simulated trading environment for strategy testing without real funds.

20 tables in this group.

paper_sessions

Paper trading sessions for users to practice trading without real money

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
user_iduuidNo
session_keyvarchar(255)No'default'::character varying
namevarchar(255)Yes'Default Paper Account'::character varying
starting_balance_usdnumericNo10000.00
is_activeboolNotrue
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • paper_sessions_service_all — ALL for {service_role}
  • paper_sessions_user_delete — DELETE for {public}
  • paper_sessions_user_insert — INSERT for {public}
  • paper_sessions_user_select — SELECT for {public}
  • paper_sessions_user_update — UPDATE for {public}

Indexes:

  • idx_paper_sessions_active
  • idx_paper_sessions_user_id
  • paper_sessions_pkey
  • paper_sessions_user_session_unique

paper_balances

Simulated asset balances per paper trading session

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
assetvarchar(20)No
freenumericNo0
lockednumericNo0
usd_valuenumericYes0
updated_attimestamptzNonow()

RLS Policies:

  • paper_balances_service_all — ALL for {service_role}
  • paper_balances_user_delete — DELETE for {public}
  • paper_balances_user_insert — INSERT for {public}
  • paper_balances_user_select — SELECT for {public}
  • paper_balances_user_update — UPDATE for {public}

Indexes:

  • idx_paper_balances_session_id
  • paper_balances_pkey
  • paper_balances_session_asset_unique

paper_positions

Open paper trading positions

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarchar(20)No
sidevarchar(10)No
quantitynumericNo
entry_pricenumericNo
current_pricenumericYes0
unrealized_pnlnumericYes0
unrealized_pnl_percentnumericYes0
stop_lossnumericYes
take_profitnumericYes
opened_attimestamptzNonow()
closed_attimestamptzYes

RLS Policies:

  • paper_positions_service_all — ALL for {service_role}
  • paper_positions_user_delete — DELETE for {public}
  • paper_positions_user_insert — INSERT for {public}
  • paper_positions_user_select — SELECT for {public}
  • paper_positions_user_update — UPDATE for {public}

Indexes:

  • idx_paper_positions_open
  • idx_paper_positions_session_id
  • idx_paper_positions_session_symbol
  • idx_paper_positions_session_symbol_unique
  • idx_paper_positions_user_id
  • paper_positions_pkey

paper_trades

Completed paper trades with P&L tracking

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}
  • paper_trades_service_all — ALL for {service_role}

paper_orders

Paper trading order history

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}
  • paper_orders_service_all — ALL for {service_role}

paper_portfolio_stats

Denormalized portfolio statistics for fast dashboard reads

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
total_value_usdnumericYes0
realized_pnlnumericYes0
unrealized_pnlnumericYes0
total_tradesint4Yes0
winning_tradesint4Yes0
losing_tradesint4Yes0
win_ratenumericYes0
profit_factornumericYes0
avg_profitnumericYes0
avg_lossnumericYes0
max_drawdownnumericYes0
last_updatedtimestamptzNonow()

RLS Policies:

  • paper_portfolio_stats_service_all — ALL for {service_role}
  • paper_portfolio_stats_user_delete — DELETE for {public}
  • paper_portfolio_stats_user_insert — INSERT for {public}
  • paper_portfolio_stats_user_select — SELECT for {public}
  • paper_portfolio_stats_user_update — UPDATE for {public}

Indexes:

  • paper_portfolio_stats_pkey
  • paper_portfolio_stats_session_id_key

paper_trades_y2025m12

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2025m12_pkey
  • paper_trades_y2025m12_session_id_idx
  • paper_trades_y2025m12_session_id_opened_at_idx
  • paper_trades_y2025m12_session_id_outcome_idx
  • paper_trades_y2025m12_symbol_opened_at_idx
  • paper_trades_y2025m12_user_id_idx
  • paper_trades_y2025m12_user_id_opened_at_idx

paper_trades_y2026m01

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m01_pkey
  • paper_trades_y2026m01_session_id_idx
  • paper_trades_y2026m01_session_id_opened_at_idx
  • paper_trades_y2026m01_session_id_outcome_idx
  • paper_trades_y2026m01_symbol_opened_at_idx
  • paper_trades_y2026m01_user_id_idx
  • paper_trades_y2026m01_user_id_opened_at_idx

paper_trades_y2026m02

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m02_pkey
  • paper_trades_y2026m02_session_id_idx
  • paper_trades_y2026m02_session_id_opened_at_idx
  • paper_trades_y2026m02_session_id_outcome_idx
  • paper_trades_y2026m02_symbol_opened_at_idx
  • paper_trades_y2026m02_user_id_idx
  • paper_trades_y2026m02_user_id_opened_at_idx

paper_trades_y2026m03

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m03_pkey
  • paper_trades_y2026m03_session_id_idx
  • paper_trades_y2026m03_session_id_opened_at_idx
  • paper_trades_y2026m03_session_id_outcome_idx
  • paper_trades_y2026m03_symbol_opened_at_idx
  • paper_trades_y2026m03_user_id_idx
  • paper_trades_y2026m03_user_id_opened_at_idx

paper_trades_y2026m04

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m04_pkey
  • paper_trades_y2026m04_session_id_idx
  • paper_trades_y2026m04_session_id_opened_at_idx
  • paper_trades_y2026m04_session_id_outcome_idx
  • paper_trades_y2026m04_symbol_opened_at_idx
  • paper_trades_y2026m04_user_id_idx
  • paper_trades_y2026m04_user_id_opened_at_idx

paper_trades_y2026m05

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m05_pkey
  • paper_trades_y2026m05_session_id_idx
  • paper_trades_y2026m05_session_id_opened_at_idx
  • paper_trades_y2026m05_session_id_outcome_idx
  • paper_trades_y2026m05_symbol_opened_at_idx
  • paper_trades_y2026m05_user_id_idx
  • paper_trades_y2026m05_user_id_opened_at_idx

paper_trades_y2026m06

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
order_iduuidYes
symbolvarcharNo
sidevarcharNo
quantitynumericNo
entry_pricenumericNo
exit_pricenumericYes
pnlnumericYes0
pnl_percentnumericYes0
fee_totalnumericYes0
outcomevarcharYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
opened_attimestamptzNonow()
closed_attimestamptzYes
duration_secondsint4Yes

RLS Policies:

  • Users can insert own paper trades — INSERT for {public}
  • Users can update own paper trades — UPDATE for {public}
  • Users can view own paper trades — SELECT for {public}

Indexes:

  • paper_trades_y2026m06_pkey
  • paper_trades_y2026m06_session_id_idx
  • paper_trades_y2026m06_session_id_opened_at_idx
  • paper_trades_y2026m06_session_id_outcome_idx
  • paper_trades_y2026m06_symbol_opened_at_idx
  • paper_trades_y2026m06_user_id_idx
  • paper_trades_y2026m06_user_id_opened_at_idx

paper_orders_y2025m12

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2025m12_pkey
  • paper_orders_y2025m12_session_id_created_at_idx
  • paper_orders_y2025m12_session_id_idx
  • paper_orders_y2025m12_session_id_symbol_idx
  • paper_orders_y2025m12_status_created_at_idx
  • paper_orders_y2025m12_user_id_created_at_idx
  • paper_orders_y2025m12_user_id_idx

paper_orders_y2026m01

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m01_pkey
  • paper_orders_y2026m01_session_id_created_at_idx
  • paper_orders_y2026m01_session_id_idx
  • paper_orders_y2026m01_session_id_symbol_idx
  • paper_orders_y2026m01_status_created_at_idx
  • paper_orders_y2026m01_user_id_created_at_idx
  • paper_orders_y2026m01_user_id_idx

paper_orders_y2026m02

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m02_pkey
  • paper_orders_y2026m02_session_id_created_at_idx
  • paper_orders_y2026m02_session_id_idx
  • paper_orders_y2026m02_session_id_symbol_idx
  • paper_orders_y2026m02_status_created_at_idx
  • paper_orders_y2026m02_user_id_created_at_idx
  • paper_orders_y2026m02_user_id_idx

paper_orders_y2026m03

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m03_pkey
  • paper_orders_y2026m03_session_id_created_at_idx
  • paper_orders_y2026m03_session_id_idx
  • paper_orders_y2026m03_session_id_symbol_idx
  • paper_orders_y2026m03_status_created_at_idx
  • paper_orders_y2026m03_user_id_created_at_idx
  • paper_orders_y2026m03_user_id_idx

paper_orders_y2026m04

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m04_pkey
  • paper_orders_y2026m04_session_id_created_at_idx
  • paper_orders_y2026m04_session_id_idx
  • paper_orders_y2026m04_session_id_symbol_idx
  • paper_orders_y2026m04_status_created_at_idx
  • paper_orders_y2026m04_user_id_created_at_idx
  • paper_orders_y2026m04_user_id_idx

paper_orders_y2026m05

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m05_pkey
  • paper_orders_y2026m05_session_id_created_at_idx
  • paper_orders_y2026m05_session_id_idx
  • paper_orders_y2026m05_session_id_symbol_idx
  • paper_orders_y2026m05_status_created_at_idx
  • paper_orders_y2026m05_user_id_created_at_idx
  • paper_orders_y2026m05_user_id_idx

paper_orders_y2026m06

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
session_iduuidNo
user_iduuidNo
symbolvarcharNo
sidevarcharNo
order_typevarcharNo'market'::character varying
quantitynumericNo
pricenumericYes
statusvarcharNo'pending'::character varying
filled_quantitynumericYes0
filled_pricenumericYes
feenumericYes0
slippagenumericYes0
stop_lossnumericYes
take_profitnumericYes
signal_confidencenumericYes0
reasoningtextYes
indicatorsjsonbYes'{}'::jsonb
created_attimestamptzNonow()
filled_attimestamptzYes

RLS Policies:

  • Users can insert own paper orders — INSERT for {public}
  • Users can update own paper orders — UPDATE for {public}
  • Users can view own paper orders — SELECT for {public}

Indexes:

  • paper_orders_y2026m06_pkey
  • paper_orders_y2026m06_session_id_created_at_idx
  • paper_orders_y2026m06_session_id_idx
  • paper_orders_y2026m06_session_id_symbol_idx
  • paper_orders_y2026m06_status_created_at_idx
  • paper_orders_y2026m06_user_id_created_at_idx
  • paper_orders_y2026m06_user_id_idx

On this page