Skip to main content

understanding the algo notification log

how to read the algo notification log — what each trade status means, how to identify rejected or failed trades, and how to troubleshoot when your algo doesn't execute.

Written by Brad
Updated today

what the notification log is

every time edgeful receives a webhook from TradingView and processes a trade, it gets logged in the notifications panel. this is your record of everything that happened — entries, exits, rejections, and failures.

you'll find it at edgeful.com/algos-automation/trade-notifications.

think of it as the receipt for every trade your algo attempted. if something went wrong, this is where you start.

if you already see an error in the log and want a direct fix, skip to the algo error message decoder — every common error string is indexed there with what it means and how to fix it.

how to get there

  1. log into edgeful

  2. click algos & automation in the left sidebar

  3. click trade notifications

reading the notification log

each row in the log represents a single trade event. here's what you're looking at:

column

what it shows

date/time

when edgeful received the webhook from TradingView

strategy

which algo strategy triggered the trade

ticker

the contract or symbol traded

side

long or short

action

entry or flatten (exit)

status

whether the trade executed successfully

trade ID

unique identifier linking entries to their exits

the most important column is status — that's where you'll see whether everything went through or something broke.

trade statuses explained

here's what each status means — for a detailed fix for each, see the algo error message decoder.

filled — the trade executed successfully at your broker. this is what you want to see.

failed — edgeful received the webhook but couldn't execute the trade at your broker. the most common cause is a broker disconnection — your Tradovate, NinjaTrader, or ProjectX session expired or got invalidated.

rejected — your broker received the order but refused to execute it. this usually means a contract mismatch (your TradingView alert is on a different contract than your broker expects), insufficient margin, or your account doesn't have the right permissions.

pending — the trade is being processed. you'll typically only see this briefly. if a trade stays in pending, something may have stalled in the webhook chain.

so if you're seeing "failed" or "rejected" — don't panic. it's almost always a fixable connection or configuration issue, not a problem with the algo itself.

entry vs. flatten — how trades are paired

every algo trade has 2 events: an entry (opening the position) and a flatten (closing it). each one shows up as its own row in the notification log.

they're linked by the trade ID. if you see an entry with trade ID abc123, the corresponding exit will have the same trade ID but with "flatten" in the action column.

why separate rows? because TP and SL are delivered as separate webhook events — they're not part of the entry. for the full breakdown of how exits are delivered (and why they're always market orders), see how the algo automation chain works.

when you're troubleshooting, you need to check both sides of the trade:

  • entry shows filled, no flatten — the exit alert may not have fired yet (trade is still open), or the exit webhook failed

  • entry shows failed, no flatten — the entry never executed, so there's nothing to flatten

  • entry shows filled, flatten shows rejected — you got into the trade but the exit had an issue. check your broker for the open position

this is especially important with 2TP strategies (like ORB 2TP) where you'll see 3 rows for one trade: 1 entry + 2 flatten events (TP1 and TP2).

the most common "failed" scenario

the #1 reason trades show "failed" is a broker session expiring. here's what happens:

  1. you connected your broker in the algo dashboard at some point

  2. your broker's authentication session expired (Tradovate does this periodically)

  3. your algo fires, edgeful receives the webhook, but when it tries to route the order — the broker connection is dead

  4. the notification log shows "failed" with an unauthorized error

the fix:

  1. go to edgeful.com/algos-automation/dashboard

  2. in step 1, reconnect your broker by logging in again

  3. make sure the status shows connected (green)

you don't need to recreate your strategy or update your TradingView alerts — the webhook URL stays the same. you're just refreshing the broker connection.

the most common "rejected" scenario

the #1 reason trades show "rejected" is a contract mismatch.

here's the gotcha: TradingView uses specific contract symbols for futures. if your alert was created on ESM2026 but that contract has rolled over to ESU2026, the broker will reject the order because the old contract is no longer valid.

the fix:

  1. update your TradingView chart to the current front-month contract

  2. delete the old alert

  3. create a new alert on the updated chart

  4. paste the same webhook URL (your strategy and webhook don't change — only the TradingView alert does)

rejected flattens — "cannot sell when position is 0"

the second most common cause of a rejected trade is a flatten hitting an empty position. this happens when the entry never executed — or when you manually closed the trade before the TP or SL level triggered.

when edgeful sends the exit order, your broker sees there's nothing to close. you'll see a rejection with an error like: Cannot sell when position is 0 (must be > 0 to flatten long).

in plain english — the automation tried to close a trade that doesn't exist anymore. since there's no open position, executing that exit would actually open a new position in the opposite direction. your broker blocks that, which is the right behavior.

if you're seeing this error, check whether:

  • the entry for that trade ID also shows rejected or failed — meaning the position was never opened in the first place

  • you manually closed the trade in your broker before the algo's TP or SL fired

either way, it's not a bug. the automation is protecting you from an accidental position in the wrong direction.

other common rejection causes

beyond contract mismatches and empty position flattens, you might also see rejections when your broker account doesn't have enough margin for the contract size, or your account type doesn't support the product you're trying to trade.

for the full list of error strings — including "contract not found," "unauthorized," "errorCode=3," and Tradovate-specific rejections — see the algo error message decoder.

checking both sides of a trade

if you're looking at a specific trade and want the full picture, here's the process:

  1. find the entry row in the notification log — note the trade ID

  2. scroll or search for the matching flatten row with the same trade ID

  3. check the status of both

if the entry is filled but you can't find a flatten — the trade may still be open. check your broker's positions directly.

if both entry and flatten show filled but the numbers don't match what you expected — that's likely slippage on the market order exits. TP and SL are always market orders, so a tick or two of slippage is normal in fast markets. see how the algo automation chain works for a full breakdown of where slippage comes from.

when nothing shows up at all

if your algo fired on TradingView but nothing appears in the notification log, the issue is upstream of edgeful — the webhook never arrived.

common causes:

  • webhook URL mismatch — the URL in your TradingView alert doesn't match the one in your edgeful dashboard. copy it fresh from the dashboard and update the alert

  • webhook in the wrong field — the URL goes in TradingView's "webhook URL" field, not the "message" field

  • TradingView plan — webhooks require TradingView Essential or higher. the free and Basic plans don't support webhooks

  • alert expired — TradingView alerts expire periodically. check that your alert is still active

  • JSON message format — the alert message needs the correct JSON format. if it's wrong, edgeful can't parse the webhook

the webhook troubleshooting article walks through each of these step by step.

related articles

Did this answer your question?