Partial Sells and the DCA Buy Gate: How Unsold Legs Actually Interact

Partial sells and the DCA buy gate don't work the way most traders assume. Here's exactly how unsold legs and TradeArmor's EQ-price rule interact.

Three DCA legs on a falling price chart, the lowest leg partially sold and still marked unsold, with the EQ-price buy gate anchored to that leg's original price instead of resetting

You take a partial profit on the ugliest leg of a DCA position, the one that's been dragging your average down for two weeks, and for about four hours you feel like you did something smart. Then the bot buys again, lower, and it feels like it just forgot the money you took off the table. It didn't forget. It never knew the profit existed. It read one price and one status flag, and those two things decide everything that happens next.

That's the gap between what a partial sell feels like and how partial sells and the DCA buy gate actually interact. "I want something that just runs" is a fair way to describe what most people want from automation, right up until the automation does something that looks like it ignored a decision you just made. It didn't ignore anything. It just wasn't built to care about your feelings, only your numbers, which is the entire point of a partial sell crypto trading bot feature that ships the same on Starter as it does on Enterprise, unlike a lot of tools where "every feature is behind another upgrade tier" and the mechanics you actually need to understand are the ones nobody explains.

I build TradeArmor and I trade on it every day, self-hosted on hardware that's mine, three years of live BTC/USDC signals behind it, 15 real-time indicators, a plain-English AI strategy builder, and DCA, grid, futures, copy trading, backtesting, paper trading, and tax exports on a single engine. See the full feature set before the rest of this post, which zooms into one specific corner of the DCA engine: what a partial sell actually changes, and what it deliberately leaves alone.

What a Partial Sell Does to a Leg

A DCA position on TradeArmor isn't one blended number. It's a stack of legs, each one a separate buy at a separate price, each one carrying its own status. A leg starts out HELD. A full exit closes it. A partial sell moves it to PARTIALLY_SOLD, a smaller size at the same original price, still open, still counted.

That last part is the one people miss. Selling part of a leg doesn't erase it. It shrinks it. The leg keeps its own cost basis the way a tax lot keeps its own basis when you sell part of a holding instead of all of it, a structural idea the IRS lays out in Publication 551 for ordinary assets and one TradeArmor applies to every open leg in a position. The remaining size on that leg still has a buy price, and that buy price still matters to everything downstream of it.

Partial Sells and the DCA Buy Gate: The Question Everyone Actually Asks

Here's the one that generates support tickets: does taking a partial profit loosen the EQ-price buy gate?

Past a configurable DCA level, the default sits at 10, the gate blocks the next buy until price drops below the lowest unsold leg's price times 0.999. That gate has exactly one input: the price of the cheapest leg still counted as unsold. It has no field for "but I took some profit already." A partial sell doesn't touch that input unless the leg it hits happens to be the cheapest one, and even then it only matters if the sell closes the leg completely rather than trimming it.

Selling half a leg does not impress the buy gate. The gate has never been impressed by anything. It reads one number and compares it to another, the same trick it pulled the day you opened the position, and a profit you took three legs ago is not one of the two numbers in that comparison.

A Worked Example

Say a position has three legs: $61,200, $58,400, and $54,900. The lowest unsold leg is $54,900, so gated buys need a fill below roughly $54,845.

Two different partial-sell decisions on that $54,900 leg produce two different outcomes:

  • Trim it. Sell 40% of the leg's size and leave the rest open. Status moves to PARTIALLY_SOLD. The remaining size still sits at $54,900. The gate's reference price doesn't move. Nothing about the next buy changes.
  • Close it. Sell the whole leg. It drops out of the unsold set entirely. The lowest unsold leg is now $58,400, so the gate's bar moves up to roughly $58,342. The bot can now buy again at a price higher than the leg you just exited, which looks backwards until you remember the gate is only measuring what's still open, not what you used to hold.

Neither outcome is a bug. They're the same rule producing two different results because the unsold set itself changed size in the second case and didn't in the first. That's the whole mechanic behind partial sells and the DCA buy gate, once you see it in numbers instead of a support ticket.

Why This Interacts With Keep Balance and Position Sizing

A partial sell frees up capital, and that capital doesn't sit in a vacuum. Keep Balance still reserves its configured percentage of total portfolio value before anything else touches it, and position sizing still governs how big the next DCA leg is allowed to be regardless of where that capital came from. A partial sell changes what the buy gate sees on one specific position. It doesn't change the account-level rules that decide whether a new buy is allowed to happen at all.

This is also where take-profit strategy and partial-sell mechanics split into two different questions. That post covers when and how much to sell for profit, fixed targets, trailing exits, laddered scale-outs. This one covers what happens to the position's own buy-gate math after you've already made that call. One is the decision. This is the plumbing behind it.

Seeing It Live

The Per-Position Rules Inspector shows exactly which leg the Next DCA Buy condition is anchored to, with the live price it needs to clear, right on the expanded position row. You don't have to reconstruct which leg is cheapest from a trade history. The dashboard already did the math and is showing you the one number the gate actually cares about.

Somewhere a competitor's changelog calls this kind of thing "intelligent position rebalancing." It's a status flag and a boolean. TradeArmor just tells you which one, instead of dressing it up as something it isn't.

Pricing

Partial-sell configuration and unsold-leg tracking aren't a Pro-tier add-on stapled onto the DCA engine. They ship with the DCA engine itself, on every plan. Starter at $19.99/mo runs the full mechanic on one live instance. Pro at $49.99/mo adds Hybrid and Custom mode strategy gates plus 5 live instances if you want indicator-filtered entries feeding the same DCA legs. Enterprise at $89.99/mo extends that across 10 live instances and multi-machine deployments. Nowhere in that ladder does the leg tracking behind a partial sell get held back.

This is one piece of what TradeArmor runs: a self-hosted engine carrying cava-signals, 15 indicators, an AI strategy builder, DCA, grid, futures, copy trading, backtesting, paper trading, and tax exports, all on hardware you control. See how the DCA engine fits into the rest of the platform, or compare the three tiers and go check which leg your own buy gate is actually anchored to.

Past performance is not indicative of future results. Signals are algorithmic outputs, not personalized investment advice.

Frequently Asked Questions

Does a partial sell reset the DCA buy gate?

No. That's the short answer for how partial sells and the DCA buy gate actually interact: TradeArmor's EQ-price gate looks at the lowest unsold leg on a position and requires the next buy to land below that leg's price times 0.999. A partial sell on that leg changes its status from HELD to PARTIALLY_SOLD, but the leg stays in the unsold set at its original buy price. The gate does not loosen, and it does not know a profit was taken.

What's the difference between a partial sell and closing a leg fully?

A partial sell reduces size but leaves the leg open, so it keeps tracking for buy-gate purposes at its original price. Fully closing a leg removes it from the unsold set entirely. If that leg happened to be the cheapest one, the lowest unsold leg becomes whatever is next, usually a higher price, which can make the next buy fire sooner and higher than it would have otherwise.

Does a partial sell change my average cost basis?

Selling part of a leg doesn't touch the cost basis of the legs you still hold. Each leg keeps its own buy price, which is what the EQ-price gate reads. Your blended average across the position shifts only when a leg's size or count changes, and TradeArmor recalculates that average from the remaining open legs, not from a single blended number that forgets where each dollar went in.

Is partial-sell tracking available on the Starter plan?

Yes. The DCA engine, unsold-leg tracking, and partial-sell configuration all ship on Starter at $19.99/mo, along with every other tier. Nothing about how a partial sell interacts with the buy gate is held back for a higher plan.

How do I see which legs on a position are still unsold?

Expand the position on the Positions page. The Per-Position Rules Inspector lists the Next DCA Buy conditions, including the price the gate is currently anchored to, so you can see exactly which leg that number is coming from instead of reverse-engineering it from the trade history.

Why does the bot sometimes buy back in above a price I just sold?

That happens when the leg you closed was the lowest unsold leg. Once it's gone, the gate's reference point moves up to the next cheapest leg still open, so a buy that would have needed a deeper price a moment ago can now fire higher. It isn't a bug. It's the gate doing exactly what a smaller unsold set tells it to do.