Non-Discretionary Routing
SnipeRoute makes zero trading decisions on behalf of users.
Overview
SnipeRoute is non-discretionary infrastructure. This means it makes zero trading decisions on behalf of users. Every execution parameter must be fully specified in the Trade Intent before submission.
Non-discretionary routing ensures that all trading logic remains with the upstream platform (Snipefinity, TradingView, enterprise system, etc.), not with SnipeRoute.
What SnipeRoute Does NOT Decide
| Parameter | Example | Who Decides |
|---|---|---|
| Symbol | AAPL vs MSFT | Upstream platform |
| Price | Limit price, stop price | Upstream platform |
| Timing | When to submit order | Upstream platform |
| Quantity | 10 shares vs 100 shares | Upstream platform |
| Order Type | Market vs Limit | Upstream platform |
| Time in Force | GTC vs Day | Upstream platform |
| Slicing | How to split large orders | Upstream platform |
SnipeRoute only routes the fully specified instructions. It does not optimize, adjust, or modify any parameter.
Fully Specified Trade Intents
Every Trade Intent must include all execution parameters:
{
"intent_id": "my_trade_123",
"symbol": "AAPL", // Specified by upstream
"side": "buy", // Specified by upstream
"quantity": 10, // Specified by upstream
"order_type": "limit", // Specified by upstream
"limit_price": 175.00, // Specified by upstream
"time_in_force": "gtc", // Specified by upstream
"broker_id": "my_alpaca" // Specified by upstream
}If any required parameter is missing, SnipeRoute will reject the Trade Intent with a 400 Bad Request error. It will NOT guess, infer, or apply defaults.
Comparison: Discretionary vs Non-Discretionary
Discretionary System (NOT SnipeRoute)
A discretionary system might:
- Choose between AAPL and MSFT based on market conditions
- Optimize limit price based on current order book
- Decide to split a 1000-share order into 10x 100-share orders
- Delay execution until after earnings announcement
- Route to different brokers based on liquidity
Non-Discretionary System (SnipeRoute)
SnipeRoute:
- Routes exactly what you specify
- No optimization
- No timing decisions
- No splitting logic
- No broker selection (you specify
broker_id)
Why Non-Discretionary?
1. Predictability
You know exactly what will be executed. No surprises.
2. Compliance
Your upstream platform retains full control over trading logic and strategy.
3. Auditability
Every Trade Intent is traceable back to the upstream decision-making system.
4. Separation of Concerns
- Upstream Platform: Makes all trading decisions
- SnipeRoute: Routes instructions to broker
- Broker: Executes orders in the market
Regulatory Implications
Investment Adviser Exclusion
By making zero trading decisions, SnipeRoute avoids acting as an investment adviser. All discretion remains with the upstream platform.
Broker-Dealer Exclusion
SnipeRoute does not execute trades, hold positions, or provide liquidity. It only routes instructions to existing broker accounts.
User Control
Users maintain full control over their broker accounts. SnipeRoute acts as an authenticated relay, not a custodian.
Examples
Acceptable: Fully Specified
from sniperoute import SnipeRouteClient
from sniperoute.models import TradeIntentRequest, OrderSide, OrderType
from decimal import Decimal
intent = TradeIntentRequest(
intent_id="trade_001",
symbol="TSLA",
side=OrderSide.BUY,
quantity=Decimal("50"),
order_type=OrderType.LIMIT,
limit_price=Decimal("250.00"),
time_in_force="day",
broker_id="my_schwab"
)
# All parameters specified by upstream platformNot Supported: Discretionary Decisions
# This does NOT exist in SnipeRoute API
intent = TradeIntentRequest(
symbol="TSLA",
side=OrderSide.BUY,
# Missing quantity - SnipeRoute won't guess
# Missing order_type - SnipeRoute won't default
# Missing broker_id - SnipeRoute won't choose
)