Portioned Pennies

— or use your access key —

Enter your access key to unlock monitoring and controls.

Portioned Pennies

checking

Overview

Loading

New session

The US equity symbol this session will trade. Each symbol can belong to only one active session.
Dollars to commit to this session. Rejected if it exceeds your free cash, or would push active sessions past 100% of available cash. (Entered in dollars — no percent-of-cash mental math.)
No allocation and no parameters: a Long session just holds a ticker. Create it, then use Buy on the card to purchase shares — each buy claims cash from your free cash at that moment.
Trailing distance in basis points (100 bps = 1%). How far price must move from the reference to arm an order, and the reversal that triggers the fill. Minimum 50 bps.
Fraction of this symbol's budget added to the buy at each additional dip step (compounding, capped at 7 steps).
Fraction of currently-held shares offered at each spike step. Never sells below cost.
How far price must FALL below the reference R (the last action's price) before a buy may arm. 100 bps = 1%.
How far above a lot's cost price must rise before that lot may sell. This is the guaranteed minimum gross margin on every round trip — a lot never sells below cost + this band.
The bounce off the running low that triggers the buy.
The reversal off the running high that sells every cleared lot together (each keeps its own cost+band floor).
Linear sizing: each band-crossing dip buys this fraction of the ORIGINAL allocation. No compounding, no per-session buy cap.
Fraction of CLEARED lots sold per sell event, cheapest-first. Underwater lots are untouchable.
Liquidate everything if price falls this far below weighted-average cost — the ONE sale allowed below the cost floor. 0 disables (not recommended).
Off (default): regular hours only, exactly as before. On: this session also trades the broker's official pre-market (~7:00–9:25 ET) and after-hours (~16:05–20:00 ET) windows with AM/PM limit orders. Extended now behaves exactly like regular hours: the old spread guard and retreat-cancel are gone, so a wide book no longer blocks a trade — bid/ask and the spread are shown on each symbol so the call is yours. Start with one small session.
On: profit grows this session's deployable budget (compounding). Off: profit is harvested to your account's free cash to allocate elsewhere.
Which broker executes this session. Public is the only broker; a verified Public API key must be set (Admin → Security). This selector reappears if another broker is added later.

Activity

Loading
- ·

Admin

Settings and reference. Closing returns you to whichever section you came from.

Theme

Follow system uses your phone's appearance setting and changes with it.

Definitions

What each status means and what it is waiting for.

Neutral-band statuses

Flat waiting
Holds no shares · watching for a dip
Nothing is owned. It waits for the price to fall to the buy arm. While flat, the reference R ratchets upward with the market, so a rally moves the whole buy ladder up rather than stranding it below.
Armed to buy
Dip qualified · waiting for the turn
The dip was deep enough to arm. It is not about to buy at the current price — it now tracks the trough downward and waits for a bounce back up to trough + trail. Arming looks down; firing looks up. The price paid is capped by the buy ceiling regardless of how far the bounce runs.
Holding waiting
Holds shares · watching for a rise
Shares are held and nothing is armed. It waits for the price to rise to the sell arm. That arm sits above the never-sell-below-cost floor by exactly the trail, so a full give-back from the arm still lands on the floor.
Armed to sell
Rally qualified · waiting for the reversal
The rally was high enough to arm. It tracks the peak upward and sells when the price reverses down to peak − trail. Only lots whose own cost floor clears that reversal are sold. If none clear, it disarms and reports sell armed but nothing sellable above cost rather than taking a loss.
Order pending
An order is resting at the broker
Placed and waiting to fill. On a fill, R resets to the fill price and it returns to holding waiting or flat waiting depending on what is left. If it does not fill, the order is cancelled and the peak and trough are wiped — it must arm again from scratch. That is deliberate: a stale episode should not resume against a market that has moved on.

The three price levels

Arm
Where an episode starts. Buy arms when price falls to it; sell arms when price rises to it.
Ceiling / floor
The worst price accepted. Buy ceiling is the most you will pay; sell floor is cost plus the up-band and is never crossed — the strategy will let an order rest unfilled rather than sell below it.
Fires
Where the order is actually sent: the bounce off the trough, or the reversal off the peak, clamped by the ceiling or floor.

Editing parameters

Edits change the derived levels (arm, ceiling, floor) immediately, because those are computed from R and cost. They do not reset R, the phase, the peak or the trough. So editing mid-episode leaves a trough or peak established under the old settings — old trough, new trail. Edit while a symbol is waiting, not while it is armed, and the new parameters apply cleanly from the next arm.

Global settings

App-wide safety limits. These apply to every session, on top of each session's own settings.

Max R re-anchor (bps)

After a sell fills, the engine moves its reference price R from the bid it sold at up to the ask, so the buy ladder doesn't sink by one spread on every sell. This caps how far that correction may go.

Why it matters: on a thin book (extended hours on a leveraged ETF, spreads near 1000 bps) the ask can sit ~10% above the bid you just sold at. Uncapped, R jumps with it and drags the buy arm above your own sell price — so the engine buys straight back at a higher price with no price move at all. That is exactly the DRN sell-at-$10.11 / buy-at-$10.29 round trip.

How to set it: keep it near one band width. At 100 bps with a 100 bps band, R can never rise more than 1% above your fill, so a blown-out spread can't trigger an instant buy-back. Lower = stricter. 0 disables the cap (original behaviour — not recommended). Blank restores the 100 bps default.

Security

Manage how this app connects to your broker.

Broker (Public.com)

Trade against your own Public account. Generate an API secret key in the Public app (Account Settings → Security → API), paste it below, and Verify & save — the key is checked and stored encrypted; it never leaves your account.

Get your key from Public ›

Sign in with Face ID on this device instead of typing your access key. Your access key and 2FA code always stay available as a backup, so a lost device never locks you out.

Backtest

Replays the strategy on recent intraday history (up to ~3 weeks; the broker serves the finest bar size it allows for that window, so longer windows use coarser bars). Just enter a symbol — band, trail, buy and sell are all swept and ranked for you. Results are approximate; see the notes after running.

Options

Leave blank to use the last ~3 weeks and this symbol's allocated cash (or $10,000 for a new ticker). Catastrophe stop is off for backtesting.

Spread: the round-trip cost is taken from this symbol's own recorded bid/ask — the 90th percentile, doubled, so it leans pessimistic rather than typical. A symbol with no recorded history gets no spread assumption at all, which makes its results optimistic; trade it live for a session first. The figure is a single constant for the whole replay, but real spreads widen exactly when the strategy most wants to trade, so treat it as a floor on cost rather than a forecast. A wide spread mostly shows up as fewer completed round trips, not as losses — the never-sell-below-cost floor still holds.

Morning settings

Advisory settings from a backtest of the tickers you have an active session on, fit to recent data — review before applying; nothing is set automatically. Use Current circumstance to re-anchor history to the current price and seed your live position, showing how each setting recovers where you are now.

Loading…