# Market Lab v0.1.1 (/changelog/v0.1.1)



v0.1.1 adds remote command transport and makes Python Scripting V2 cleaner to configure and execute.

## Self-declaring Python sources [#self-declaring-python-sources]

Python V2 now discovers sources directly from literal `history.source(...)` calls:

```python
candles = history.source("btc@candles@hyperliquidf:timeframe=60")
```

Python V2 no longer uses `--source`, TOML `[sources]`, or `script.sources`. Literal selectors and module-level string constants declare deterministic subscriptions; dynamic lookups may only read an already-declared feed. JavaScript V1 is unchanged.

## Readable UTC ranges [#readable-utc-ranges]

All `--from` and `--to` inputs now use UTC dates instead of raw millisecond boundaries:

```bash
--from 2026-07-15 --to 2026-07-16
--from "2026-07-15 09:30:00" --to "2026-07-15 16:00:00"
```

Date-only values mean midnight UTC. TOML backtest ranges use the same quoted formats.

## SSH transport [#ssh-transport]

Choose a default server using the same `user@IP` destination accepted by SSH:

```bash
mlab remote use user@SERVER_IP
mlab bot jobs
```

Override the target for one command without changing the default:

```bash
mlab --remote user@OTHER_IP bot jobs
mlab --remote local bot jobs
```

Market Lab remembers multiple targets and provides `remote list`, `status`, `test`, and `remove` commands. No manual SSH configuration file is required.

The target `mlab` connects to its own Native or Docker daemon. Local Python scripts and their environments can also be sent to the target installation. Commands, output, streamed data, and exit status travel over SSH; daemon ports and credentials are not exposed.

Both machines must run the same Market Lab build. See [SSH Transport](/transport/ssh) for the complete workflow.

## Named execution subaccounts [#named-execution-subaccounts]

Create named subaccounts under an existing Hyperliquid or BULK main account:

```bash
mlab auth set hyperliquid --subaccount trading-2
mlab auth set bulk --subaccount trading-2
```

Python V2 can route each `ctx.trade` or `ctx.order` request with `"account": "trading-2"`. The main account remains the default, and positions are read with `ctx.positions()` or `ctx.positions("trading-2")`.

Named subaccount execution is currently exclusive to Python Scripting V2. See [Authentication](/authentication) and [Python execution](/scripting-v2/execution#named-subaccounts).

## Bounded market orders [#bounded-market-orders]

Python V2 market orders accept either a decimal fraction or basis points:

```python
{"max_slippage": 0.0005}
# or
{"max_slippage_bps": 5}
```

Both values mean 5 bps. BULK and Hyperliquid enforce the boundary with IOC limit execution. Only one field may be supplied, and the fields are invalid on ordinary limit orders.

Live Python jobs now connect their execution WebSockets before processing market data and reuse the latest matching trade price when one is available.
