My stop or take-profit did not work
Your stop-loss or take-profit on a spot market triggered at a price you did not expect, did not trigger at all, or triggered and then did not fill.
This page covers spot stops, which run through the stop order registry. Perps are not covered here.
This is the most disputed thing on any venue, and it is almost always one of three causes. None of them are a malfunction.
Stops trigger on mark price, not the last traded price
This is the single most common misunderstanding.
Your trigger is evaluated against the mark price, which on dreamDEX is the EMA-smoothed midpoint of the order book. It is not the last trade and it is not the raw midpoint either. It is a smoothed version that moves at most one step per interval.
One trap: the "current price" the stop ticket shows you is the raw book midpoint, not the smoothed mark price that fires the trigger. Comparing your trigger to that number will not tell you when it will fire.
So the price can wick through your stop level without your stop firing, because the smoothed midpoint never got there. That is deliberate. The smoothing is what stops someone pushing the midpoint for a single block to sweep everyone's stops, and an attacker would have to hold a manipulated price across multiple intervals to drag the mark price far enough to trigger you.
The practical consequence: a fast wick may not trigger your stop. A sustained move will.
It triggered, but it did not fill
When your trigger fires, the order is placed as an Immediate-or-Cancel order. It fills whatever liquidity is available at that moment and the remainder is discarded, it does not rest on the book waiting.
So a stop can trigger correctly and still leave you in the position if there was nothing to fill against at your price.
If you used a limit stop, your limit price is a floor on execution. A stop with a trigger at $90 and a limit at $90 places a sell at $90. If the price has already gone to $85, nothing will buy at $90 and the order expires unfilled.
The fix is to give the limit room. Trigger at $90, limit at $85, and it has a real chance of filling somewhere in between. For a limit stop-loss sell the limit price must be at or below your trigger price.
It can also fail on your balance rather than on liquidity. A stop does not lock your tokens (one exception: a sell stop on a native-token pair moves the amount into the pool vault when you create it, so it leaves your wallet balance then). The balance is checked when you create the order, and again when it fires: if you have spent or withdrawn the tokens in between, the placement fails and the stop is removed. Nothing about the price was wrong, so widening the limit will not help — the balance has to be there when the trigger fires.
It filled at a worse price than the trigger
If you used a market stop, the limit price is calculated for you from the mark price at trigger time, using the registry's slippage tolerance. You get a much better chance of filling, and you give up control of the price.
That is the trade. A market stop prioritises getting out, a limit stop prioritises the price.
Placing a stop costs a small fee in the gas token
Trading fees are zero, but creating a stop order pays an exact fee with the transaction, in the network's native token — SOMI on mainnet, STT on testnet — and stop orders are not gas-sponsored. If you saw a little of it leave when you set the stop, that is what it was. It is not a trading fee.
Whether you get it back depends on what happened to the stop. Cancel a pending stop and the payment is refunded in full. Once it triggers the payment is consumed, and that is true even if the triggered order then filled nothing — so a stop that fired into no liquidity costs you the payment and leaves you in the position. That is the case worth checking if you are trying to work out where the money went.
What to send us
If none of the above explains it, open a ticket with:
- The pair
- Your trigger price and limit price, and whether it was a market or limit stop
- The time and timezone you expected it to fire
Everything settles on-chain, so we can pull the actual mark price at that timestamp and show you what it was. We will tell you either way.