DN AI Trading Series · Signal quality · Checked 6 November 2026 (SAST)
A YouTube demonstration usually shows the exciting part: a signal appears, a bot reacts and a trade follows. The less visible part is the evidence behind that signal. Which market supplied the price? Was the candle still changing? Did the process wait before acting? Did an old alert survive a settings change?
These are practical questions even when the strategy uses AI. Adding a language model to a workflow does not explain a timestamp or recover a missing message. Before evaluating the model’s interpretation, establish what information it actually had.
Give every timestamp a specific meaning
A timestamp becomes useful when its label says what happened. “Updated at 12:01” might describe a market event, a message, a dashboard refresh or the calculation itself. Comparing unlabeled times can produce a precise-looking answer to the wrong question.
| Record | What it represents | What it does not establish |
|---|---|---|
| Source event time | The documented time of the specific market event used as an input. | When your process received it or whether the intervening history is complete. |
| Candle opening time | The start of the interval represented by a bar. | That the bar has finished or that its final values were available. |
| Scheduled candle boundary | In this tool, opening time plus an explicitly entered fixed duration. | The last trade time, publication time or final-payload arrival time. |
| Source-item receipt time | When the signal-producing process received that exact input item. | When a downstream alert reached another service. |
| Signal creation time | When the signal being inspected was produced. | That all its underlying observations were recent. |
| Decision/reference time | The fixed point at which you are evaluating the record. | The time an exchange accepted or filled an order. |
TradingView illustrates why the labels matter: its {{time}} alert placeholder describes the bar’s beginning, while {{timenow}} describes the alert’s trigger time, with second-level precision. Substituting one for the other changes the interval you are measuring. [1][2]
Inspect one signal before drawing a conclusion
The inspector starts blank. Choose an individual event or a fixed-duration candle used by a closed-bar strategy. Enter explicit-offset timestamps such as 2026-11-05T12:01:20+02:00 or the equivalent 2026-11-05T10:01:20Z.
For the candle mode, record the finality of the exact payload used to build the signal. A candle that is final when you look later may have been open when the signal was produced. Enter an optional source-item receipt time if your log identifies it.
The two maximum-age fields are your scenario assumptions. Leave a limit blank when it is unknown. Load fictional example supplies the case discussed below, including invented limits of 10 and 5 seconds. They are teaching values, not recommended operating settings.
DN Signal Timing Inspector
Compare the timestamp of one source item with the signal it fed and a fixed decision time. Enter your own two timing limits. A recent signal does not make its input newer.
Use a complete date and time with an explicit time zone, such as 2026-11-05T10:01:20Z or 2026-11-05T12:01:20+02:00. The tool converts those offsets to UTC; it does not synchronize clocks or fetch market data.
Source receipt time and scenario label
Some timing comparisons are unknown
Known intervals remain visible. A blank timestamp or limit is never treated as zero.
Source event age at decision
Unknown
Unknown
Entered maximum: Unknown.
A required timestamp or candle duration is unknown.
Signal age at decision
Unknown
Unknown
Entered maximum: Unknown.
A required timestamp or candle duration is unknown.
Trace the timeline
Optional receipt time splits the source-to-signal interval. It must be receipt of the exact source item, not delivery of the resulting alert. Signed differences remain visible; no delay is clipped to zero. Swipe either table sideways on a small screen.
| Interval | Elapsed seconds | Interpretation |
|---|---|---|
| Source event to source receipt | Unknown | A timestamp needed for this interval is unknown. This interval can include publication and transport. It does not isolate network latency. |
| Source receipt to signal | Unknown | A timestamp needed for this interval is unknown. Time between the source item reaching the signal-producing process and signal creation. No cause is inferred. |
| Signal age at decision | Unknown | A timestamp needed for this interval is unknown. Time from signal creation to the fixed decision time; this is not order execution latency. |
| Source event to signal | Unknown | A timestamp needed for this interval is unknown. Reference age when the signal was created. With all three timestamps, this equals the preceding source-to-receipt and receipt-to-signal intervals. |
Original timestamps and normalized UTC
The UTC format displays milliseconds for consistency. Adding .000 does not improve the original timestamp’s precision. Clock accuracy and the meaning of each source field still require independent evidence.
| Event | Original input | Normalized UTC |
|---|---|---|
| Source event time | Unknown | Unknown |
| Source item received | Unknown | Unknown |
| Signal created | Unknown | Unknown |
| Fixed decision | Unknown | Unknown |
Scope of this inspection
- Timestamp field meanings, authenticity, source precision and clock synchronization are not verified. A normalized UTC time does not establish an accurate cross-host delay.
- A scheduled candle boundary is not a receipt time or proof of finalization. The finality field concerns only the exact source item used by this signal, not other timeframes or inputs.
- Feed gaps, duplicates, out-of-order updates, revisions, price accuracy and changes after the fixed decision time are not inspected.
- Candle duration means fixed elapsed seconds. Calendar months, sessions, daylight-saving boundaries and venue-specific bar conventions are not inferred.
- No live market, account, order, execution, investment suitability or universal timing standard is checked.
Reference-documentation date: 2026-11-06. This does not verify the timestamps, finality, clocks or limits you enter.
Calculation and export run locally without account credentials, raw webhook bodies or browser storage. JSON preserves the original strings and UTC results. Import CSV values as text to preserve timestamps and signed decimals; formula-leading text is escaped.
The initial results remain visible without JavaScript. JavaScript is needed to edit timestamps and download a new comparison. This static view does not use a live clock.
1. Match the source to the intended market and input
Start with identity before age. Record the venue or data provider, product, exact symbol, quote currency, timeframe and input field. A recent observation from the wrong market does not become appropriate because its timestamp passes a test.
Also distinguish the latest trade, bid, ask, mark price and candle value. Write down which one the strategy expects. If the strategy intentionally uses one market to trade another, retain that relationship as an explicit assumption rather than silently treating the prices as interchangeable.
Chart type can matter as well. TradingView documents that non-standard charts such as Heikin Ashi and Renko can expose synthetic prices rather than the instrument’s actual prices. Its chart-data variables also distinguish a finished bar’s values from the developing values of an open bar. [3]
A useful beginner check is to ask the bot supplier for one redacted signal record and trace its input back to the named source. If the only evidence is a screenshot with a ticker and a green indicator, the input’s identity remains incomplete. The inspector cannot fill that gap.
2. Normalize time zones, units and timestamp resolution
Keep the original timestamp and a normalized UTC version. Do not strip an offset and then assume the remaining clock time is UTC. In the fictional example, 12:01:20 at UTC+02:00 is the same instant as 10:01:20Z, not a two-hour processing delay.
Interface clocks can differ from exported records. TradingView says its alert interface uses the operating system’s time zone, while alert-log CSV exports use UTC. Changing the chart’s time zone does not change how alerts operate. [4]
Check the units before importing an epoch number. Binance Spot’s stream documentation uses milliseconds by default and describes an optional microsecond setting. Its payload documentation separately labels event time and the kline’s start and end fields; they should not be merged into a generic “timestamp.” [5][6]
This inspector accepts explicit-offset date-time strings with up to millisecond precision. It rejects a bare local time or raw epoch value instead of guessing its interpretation. A source that reports whole seconds cannot support a claim that you measured the underlying event to a millisecond merely because the display has three decimal places.
UTC normalization changes how a timestamp is represented; it does not synchronize the devices that produced it. NIST’s time-service guidance notes that client-observed accuracy depends on the network path. Retain the clock-check evidence when comparing records from different systems. [7]
A negative interval is a reason to inspect clock alignment, field meaning and event order. It is not proof that a network delivered information before it existed. The tool preserves these contradictions instead of silently converting them to zero.
3. Check the candle payload’s finality
A candle summarizes an interval. During that interval, its closing price and other developing values may change. A strategy designed to evaluate a completed candle needs evidence about the version it actually used.
Binance Spot’s kline stream includes an explicit x field indicating whether the kline is closed, alongside its time fields. A scheduled ending time in a payload is not a substitute for that field. [6]
Nor does reaching the wall-clock boundary prove that a final payload has arrived. TradingView explains that a bar-close alert can wait for the first trade in the next bar; quiet trading or technical delays can delay it. Its documented no-trade fallback is also a reminder that formal close and alert delivery are separate events. [8]
The inspector therefore asks two different questions: has the entered fixed-duration boundary been reached, and what finality did the used payload report? “Unknown” remains unknown even if the boundary is in the past.
An intrabar strategy may intentionally work with a developing candle. That requires its own documented design and testing. This tool’s candle mode is specifically for a closed-bar strategy, so an open-payload result does not mean that every intrabar strategy is invalid.
4. Measure age at the decision point
A source item can be timely when received and older by the time a decision uses it. Time can pass while work is queued, an indicator is calculated, an AI response is generated or a person reviews the result. The timestamp of the newly created explanation does not reset the timestamp of its evidence.
For an individual event, the inspector measures from the entered event time. For a candle, it measures from the entered candle opening time plus its fixed duration. The latter is labeled time since the scheduled candle boundary; it is not an estimate of the age of the latest underlying trade.
Compare that interval with signal age separately. A two-second-old signal can summarize an older observation. An older signal can also remain within a strategy’s stated validity window. You need both the measured interval and the rule that gives it operational meaning.
Use the actual recorded decision time when reviewing an incident. Replacing it with the time you happen to open the worksheet changes the question. The inspector uses a fixed reference time so an exported case remains reproducible.
If a strategy combines several inputs, inspect each relevant source and preserve their relationships. One recent price cannot establish that a news item, higher-timeframe candle, balance snapshot or other dependency was equally current.
5. Separate a live connection from complete data
A functioning connection is one observation about the transport. It does not establish that every market update required by the strategy is present, in order and correctly applied.
Coinbase Advanced Trade documents a heartbeat channel and a counter for monitoring heartbeat-message continuity. A steady heartbeat counter does not establish that every market update was received and applied. Its WebSocket overview also warns that messages can be dropped or arrive out of order. Interpret each channel’s documented fields in their own scope; do not apply a sequence rule copied from a different service. [9][10]
For an order-book strategy, the relevant question includes whether the local book was initialized and maintained correctly. Coinbase’s Level 2 channel describes snapshot and update messages for that purpose. Receiving a recent update is insufficient if the state it modifies was never correctly established. [11]
Ask the supplier what happens after a disconnect or gap: which state is rebuilt, how missing history is handled and what evidence allows new decisions to resume. “Reconnect automatically” leaves those questions open.
A quiet market adds another distinction. A lack of new trades can be real; it should not automatically be called a broken connection. Conversely, an active heartbeat does not make an old trade recent. The inspector does not diagnose either condition because it does not subscribe to a live feed.
6. Confirm which alert and script version is running
The chart you are looking at may not represent the configuration that created an existing alert. TradingView documents that a running script alert uses a saved copy of the script, its inputs and the chart’s symbol and timeframe. Updating those items on the chart does not update that saved alert; the alert must be recreated to use the changes. [2]
Record the alert identifier, creation time, script version, inputs, chart type, timeframe and trigger condition. After a deliberate change, compare the new record with the old one and reconcile which alerts remain active. Do not assume that a newly edited screen is evidence of a newly deployed signal configuration.
A bar-close trigger addresses one source of changing intrabar conditions. It does not eliminate every form of repainting. TradingView’s alert FAQ discusses higher-timeframe requests and differences between realtime and historical calculations. [12]
There can also be misleading labels across products. The current 3Commas Signal Bot JSON guide says its Timeframe setting affects alert-comment naming and bot-list filtering independently of the TradingView timeframe. A matching label on the bot screen is therefore not sufficient evidence of the source calculation’s interval. [13]
When a historical chart looks better after refresh, preserve the earlier alert record and the input version. A refreshed chart alone cannot reconstruct what was available when the original decision was made.
7. Trace delivery separately from calculation and execution
Follow the same signal through its available records: source input, signal creation, downstream alert delivery, bot processing and any resulting exchange order. These are different stages. Evidence from one stage should not be used as a receipt for another.
TradingView says a webhook can fail to reach its destination and directs users to the Webhook status column in the alert log. Its documented three-second server-processing limit concerns the webhook request; it is not a universal market-data freshness limit or an exchange-fill guarantee. [14]
The optional receipt field in this inspector has a narrower meaning: when the signal-producing process received the exact source item. Do not paste a downstream bot’s alert-receipt timestamp into it. If you need the latter, keep it as a separate event in your own audit record.
If an alert or order outcome is uncertain, checking timestamps does not resolve whether it already produced a trade. Use DN’s order-timeout guide to reconcile the order before considering another submission. A more recent retry timestamp does not identify what happened to the original request.
For a vendor-managed system, you may only have part of the timeline. Mark the unavailable stages explicitly. Do not report an end-to-end latency measurement when you have only two application log entries with uncertain clock alignment.
8. Define what happens when the evidence is missing
A timing check becomes useful when the workflow has an explicit response. Write the limits and required evidence before seeing an inconvenient signal. Specify which source, interval and strategy version the policy covers.
For example, a closed-bar entry policy could require the used payload to be final, a known source reference, reconciled timing and an entered maximum age. These are proposed policy components, not a claim that any particular number makes a strategy safe.
Separate the response for new exposure from management of existing positions. Holding new entries while evidence is unresolved does not by itself cancel existing orders, manage a holding or replace its protective controls. DN’s bot exit checklist addresses those responsibilities when a system is paused or retired.
Record who can change the limits and what evidence permits a restart. Otherwise, a tolerance can become a moving target: each rejected signal prompts another increase until the check no longer constrains anything.
Return to the paper-to-live checks when a change affects the strategy’s operating assumptions. Fixing a timestamp does not validate the strategy around it.
Worked example: a fresh signal with an older candle reference
Assume a fictional closed-bar strategy uses a 60-second candle. The following times are invented to show the arithmetic. They are not measurements of TradingView, 3Commas or an exchange.
| Event | Entered or normalized time | Interpretation |
|---|---|---|
| Candle opens | 12:00:00+02:00 = 10:00:00Z | The beginning of the entered 60-second interval. |
| Scheduled boundary | 10:01:00Z | Opening time plus 60 seconds. |
| Source item received | 10:01:02Z | The exact used payload is recorded as final. |
| Signal created | 10:01:18Z | 16 seconds after that source-item receipt. |
| Decision/reference time | 12:01:20+02:00 = 10:01:20Z | The point used for the two age comparisons. |
Signal age = 10:01:20 − 10:01:18 = 2 seconds
Boundary to source-item receipt = 2 seconds
Source-item receipt to signal creation = 16 seconds
The fictional source-reference limit is 10 seconds, so the 20-second interval exceeds it. The separate signal-age limit is 5 seconds, so the two-second signal age is within it. One favorable comparison cannot erase the other.
These logs locate elapsed time between recorded events, but they do not explain its cause. The 16-second receipt-to-signal interval might contain several processing stages. Calling all of it “AI inference latency” would require additional instrumentation.
Change finality to Unknown and the arithmetic still exists, but the record no longer establishes that the used candle was final. Move the source receipt after the signal and a chronology conflict appears. Increase a limit and the comparison changes, while the underlying record remains exactly the same.
There is another boundary to preserve: the latest trade inside this candle could precede its scheduled end. The tool does not know that trade’s time. It cannot convert “20 seconds since the boundary” into “the latest market observation is exactly 20 seconds old.”
Write a short response policy you can actually follow
A practical policy fits beside the signal record. It names the evidence, the comparison and the next action without collapsing different failures into one color.
| Observed condition | Question for the operating policy | Evidence to retain |
|---|---|---|
| Unknown source time or meaning | Who resolves the missing field before this input is used? | Source documentation and the redacted original record. |
| Open or unknown candle finality | Does the strategy require a final bar, and was that requirement met? | The exact payload version used by the signal. |
| Age exceeds the entered policy | Is the signal discarded, recomputed from new data or reviewed? | The original times, original limit and reason for the decision. |
| Chronology or clock conflict | Which clocks and field meanings need reconciliation? | Original offsets, timestamp resolution and relevant host logs. |
| Feed gap or unresolved state | What rebuild or reconciliation is required before new entries resume? | The gap, recovery record and state used for the next decision. |
| Existing order or position | Which independent controls and owner remain responsible? | Current venue state and the applicable management plan. |
The same record should make an override visible. Store the original result, who changed the policy and why. Recalculating with a more permissive threshold should not overwrite the evidence that triggered the review.
Methodology: what the inspector calculates
The inspector is a deterministic worksheet. It accepts one source item, one signal creation time, one fixed decision time and an optional source-item receipt time. An event-mode source time means the documented event timestamp. Candle mode uses an opening timestamp, an explicit fixed duration and a reader-recorded finality value.
Candle reference = entered opening time + entered fixed duration
Source-reference age at decision = decision time − reference
Signal age at decision = decision time − signal time
Optional stage intervals use the entered source-item receipt time
Explicit offsets are normalized to UTC while the original strings remain in the export. The model uses integer milliseconds for the supported precision. Missing fields remain unknown; an explicit zero maximum age is a real scenario input. Equality with a limit is included in the within-limit comparison.
Each result describes its own dependencies. Invalid or absent inputs prevent the affected calculation; other interpretable intervals remain visible. Signed intervals remain visible. Contradictory event ordering is flagged separately from a scheduled candle boundary that has not yet been reached. A within-limit result remains conditional on the supplied clocks and field meanings.
For candles, the calculated boundary is a schedule. It does not prove when the source finalized, published or delivered the bar. The model does not infer a final flag from elapsed time. It also does not retrieve trades, verify bar alignment, reconstruct missing history or determine whether the strategy chose the correct bar.
The candle model is limited to an explicitly entered fixed-duration interval. It does not construct exchange sessions, daylight-saving schedules, calendar-month bars, tick bars, range bars or Renko bars. The reader must not substitute a guessed fixed duration for one of those structures.
The optional source-item receipt time divides a recorded interval into stages. It does not isolate network latency, queue time or model inference time. Cross-system clock synchronization and source timestamp accuracy are not verified.
JSON and CSV exports preserve the scenario, normalized times, results and source references. Calculations run locally in the page. The inspector does not request credentials, connect to an account, send an alert or place an order. Its output is an audit aid, not a trading instruction or a universal freshness score.
Frequently asked questions
What counts as stale data for an AI trading bot?
The answer depends on the documented input and the strategy’s timing policy. An old source event, a delayed signal and an incomplete candle are different conditions. Identify the timestamp’s meaning and compare it with an explicit limit; the inspector does not choose a universal acceptable age.
How can a two-second-old signal use older data?
Signal creation does not reset the time represented by its inputs. In the fictional case, the decision is two seconds after signal creation but twenty seconds after the scheduled candle boundary. The tool keeps those intervals separate. Boundary age is not a measurement of the latest underlying trade’s age.
Are TradingView’s time and timenow placeholders interchangeable?
No. TradingView documents time as the beginning of the bar and timenow as the alert’s trigger time. Using the bar-opening value as if it were the signal-creation value changes the measured interval. Retain the field names and their documented meanings. [2]
Does passing a candle’s scheduled end prove that the used data was final?
No. A schedule does not establish which payload reached the signal process. Record the finality of the exact input that produced the signal. A later finalized view cannot establish that an earlier payload was also final, and an unknown finality flag stays unknown.
Are the example’s ten-second and five-second limits recommended settings?
No. They are invented values used to demonstrate two separate comparisons. The tool starts with blank limits. Appropriate operating assumptions require a strategy-specific policy and testing; changing a limit does not change the original timing evidence.
Why can the inspector show a negative interval?
An event timestamp after its supposed consequence can indicate incompatible fields, clock differences or an ordering conflict. A scheduled candle boundary can also lie in the future for an open candle; the inspector labels that separately as a boundary not yet reached. It does not turn either situation into a zero delay.
Does an exported result prove that the signal reached a bot or created a trade?
No. The export contains supplied timestamps, calculated intervals and declared evidence. It is not a delivery receipt or an exchange order record. The optional receipt field concerns the exact source item received by the signal-producing process, not a downstream alert or trade.
Primary sources
These official sources were reviewed on 6 November 2026 (SAST). Product and channel scope matter. None supplies a universal acceptable delay for every strategy.
- How to use a variable value in alert — TradingView
- Alerts — Pine Script v6 concepts
- Chart information — Pine Script v6
- What timezone is displayed in alerts? — TradingView
- General WebSocket Streams information — Binance Spot
- Spot WebSocket stream payloads — Binance official repository
- NIST Internet Time Service
- Delays in OncePerBarClose alerts — TradingView
- Heartbeats — Coinbase Advanced Trade
- Advanced Trade WebSocket Overview — Coinbase
- Level 2 order book — Coinbase Advanced Trade
- Alerts FAQ — Pine Script v6
- Signal Bot: Comprehensive JSON Guide — 3Commas
- How to configure webhook alerts — TradingView
- My Signal Bot Does Not Work — 3Commas
- Moving from 3Commas v1 to v2: Feature & Bot Migration Guide