HomeLibraryServicesCase studiesBlogAbout
consultance.ai
Book a discovery call →

Services

  • AI consulting
  • AI implementation
  • AI agents
  • Workflow automation
  • RAG systems
  • Voice AI
  • Custom AI development
  • All services

Library

  • AI build library
  • Finance AI automation
  • AiToEarn content agent
  • Fincept Terminal
  • ERPNext
  • SEO + GEO Claude skill
  • Claude for Legal
  • Free Claude Code proxy

Resources

  • Case studies
  • Blog
  • Industries
  • Locations
  • Guide: AI for property management
  • Guide: AI for marketing agencies
  • Guide: AI agents vs Zapier
  • AI glossary
  • vs traditional consulting

Company

  • About
  • Book a call
  • Contact
  • Privacy
  • Terms

© 2026 consultance.ai · AI, implemented.

audit → build → deploy

← Libraryconsultance.ai
Book a build call
Finance and data

Nightly Chart Review for Your Watchlist

For people who trade their own watchlist: 12 prompts and a free engine that review every chart after the close, then backtest and walk forward test your rule. No TradingView account needed.

Free — runs in your own ClaudeMedium setup · 4 steps12 ready-to-run prompts
Set it up free — takes 3 minutes ↓Or have us wire it in →
watch first

How to run these prompts

A short walkthrough of the exact mechanic: where the prompts go, what to answer when the first one asks, and what a good first output looks like. Same for every pack in the library.

Step 1 · setup
Three minutes, four steps, nothing to install by hand

Claude sets it up for you. You just paste.

Never used Claude? It is free and takes 30 seconds to open. Copy the instruction below, paste it into Claude, and it reads this page and walks you through everything, one question at a time.

  1. 1

    Tell Claude how to talk to you

    One tap. It changes how much Claude explains, and how slowly it goes. You can change it any time.

  2. 2

    Copy your setup instruction

    A short instruction plus a link to this page lands on your clipboard. First copy asks for your email once. That unlocks every button across the whole library.

  3. 3

    Open Claude in a new tab

    Free account, no card, 30 seconds. This tab stays open so you can come back.

    Open claude.ai ↗
  4. 4

    Paste, send, and answer one question

    Claude reads this page, asks which computer you are on, then guides you step by step until it works. If anything errors, tell Claude what you see, and it fixes it with you.

▸Prefer the full prompt instead of the link? (optional)
Click to copy
I am comfortable copy-pasting and following instructions, but I am not a developer.
- Plain English. Define jargon the first time it appears.
- One step at a time, then wait for me to confirm before the next one.
- Tell me what success looks like at each step, and diagnose any error before moving on.

Follow the instructions below with those rules applied.

If you can browse the web, open and read this page in full first, it has the complete guide and every prompt you will run (the vault is under the-vault anchor): https://consultance.ai/library/chart-desk-night#the-vault . If you cannot open links, tell me and I will paste the page in, do not guess the prompts.

I want to set up the Nightly Chart Review Pack: a free market data engine running on my own computer, connected to Claude, so I can review my watchlist after the close and test the one rule I trade with a backtest and a walk forward test. Walk me through it one step at a time and wait for my answer before moving on. I am not a developer. Define every term once. It stays research only: it never places an order, and it needs no TradingView account.

## Step one, ask me this first, nothing else
First message: "Are you on a Mac, a Windows PC, or Linux?"

Wait for my answer. Then tell me the two ways to run it and let me pick: Path A, the Claude desktop app, where I run the review by hand each night (most people). Path B, Claude Code, where the review saves a file every night and backtests can be re-run. Say plainly that Claude on the web or on a phone cannot run the engine; there I can only upload daily price files, and Claude must never quote a live price.

## The words I will see
- Engine: the free market data and backtest program (tradingview-mcp, MIT licence, an independent project, not made by TradingView). It runs on my computer.
- MCP server: the plug that lets Claude call the engine's tools.
- uv: a small installer that fetches the engine and a compatible Python for me.
- Terminal (Mac, Linux) or PowerShell (Windows): the window where I paste a command and press Enter.

## Both paths, first: install uv. This is a Terminal install.
One command per message. Tell me where to paste it and what success looks like.
- Mac with Homebrew: `brew install uv`
- Mac or Linux without Homebrew: `curl -LsSf https://astral.sh/uv/install.sh | sh`
- Windows, in PowerShell (not Command Prompt): `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
- Check: `uv --version` prints a version number. If it says command not found, close the window, open a new one, and try again.
Python 3.14 is not supported by the engine yet. uv picks a compatible Python by itself, so I do not need to install Python.

## Path A, the Claude desktop app
1. Install the Claude desktop app from claude.com/download if I do not have it, and sign in.
2. On Mac, run `which uv` in Terminal and copy the path it prints (for example /Users/me/.local/bin/uv). Desktop apps often cannot find uv by name, so I will use this full path.
3. Open the config file: click the Claude menu in the menu bar (not the settings inside the Claude window) and choose "Settings...", go to the "Developer" tab in the left sidebar, and click "Edit Config". It opens claude_desktop_config.json.
4. Paste this, replacing "uv" with my full path from step 2 on Mac (on Windows the path looks like %USERPROFILE%\.local\bin\uv.exe). If the file already has other servers, add the "tradingview-mcp" block inside the existing "mcpServers" and keep the others.
```json
{
  "mcpServers": {
    "tradingview-mcp": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "--from",
        "git+https://github.com/atilaahmettaner/tradingview-mcp.git",
        "tradingview-mcp"
      ]
    }
  }
}
```
5. Save, then completely quit Claude and open it again. The first start can take a minute while the engine installs.
6. In a new chat, click the "Add files, connectors, and more /" button at the bottom left of the message box and check that tradingview-mcp is listed. Then ask: "Show me the available TradingView tools." I should see names like coin_analysis, market_snapshot and backtest_strategy.
7. If it shows a timeout error on first launch, the first install took longer than the app waits. Run the same engine command once in Terminal: `uv tool run --from git+https://github.com/atilaahmettaner/tradingview-mcp.git tradingview-mcp` . When it prints a line ending "socket default timeout set to 20.0s" it is installed and waiting: press Control and C, then restart Claude. If it still fails, go to prompt 12 on the page.

## Path B, Claude Code
Claude Code is Anthropic's tool that works on files on my own computer. It needs a Pro, Max, Team, Enterprise or Console account.
1. Install it, one command, then check:
   Mac or Linux: `curl -fsSL https://claude.ai/install.sh | bash`
   Windows PowerShell: `irm https://claude.ai/install.ps1 | iex`
   Check: `claude --version` prints a version.
2. Make an empty folder, open Terminal in it, and add the engine:
   `claude mcp add --transport stdio tradingview -- uv tool run --from git+https://github.com/atilaahmettaner/tradingview-mcp.git tradingview-mcp`
   Success: it prints a line starting "Added stdio MCP server tradingview".
3. Run `claude mcp list`. Success: tradingview shows "✔ Connected". If it shows failed, go to prompt 12.
4. Type `claude`, log in if asked, then paste prompt 01, then prompt 11. Prompt 11 builds the nightly folder, writes a check that fails first, then passes after the first night.

## Optional, news and sentiment
Everything works without it. For headlines, get a free key at marketaux.com and add `"env": {"MARKETAUX_API_TOKEN": "my key"}` inside the tradingview-mcp block (Path A), or ask Claude Code to add it. Without a key those tools say "not configured".

## The first session drill
1. Select Claude Opus 5.5 in the model picker. Paste prompt 01 and answer its questions: my watchlist with exchanges (for example AAPL:NASDAQ, SPY:AMEX), my time zone, my holding period, and what I do when a name is flagged.
2. Paste prompt 02, the calibration run. Good output is eight MATCH lines, including one that reads OPEN for a symbol that failed. Then it runs one real backtest on SPY and confirms the output has a field called sharpe_periods_per_year. If that field is missing, I am on the older engine and must not read its Sharpe figure.
3. After tonight's close, run 03, 04 and 05 on my own list. Good output: a table with one row per name, a trend state before any RSI reading, a status of NO CHANGE, WATCH, CHANGED or OPEN, and an as-of time on every row.
4. Run 10. Before I trust it, the self-check must say PASS. If it lists a break, re-run that one call and check again.

Do not tell me something is "not possible" when it is a setup problem. Tell me which path fits and walk me there. Research only. I own every call.
Step 2 · run it on your data

Step 1 set it up. These 12 prompts do the work.

the vault

The 12 prompts

Grab the whole pack as one file, or tap any prompt below to copy it on its own. Placeholders that look like {{THIS}} get swapped for your own numbers — and if you ran Step 1, Claude fills them in for you.

One .md file · all 12 prompts, numbered, in order · nothing left out.
Click to copy
<role>Research colleague who has run a nightly technical review for a discretionary book and tested systematic rules before they went live. Neutral: you do not want any name to be a buy or a sell. You work for the human's process, not their position.</role>

<privacy>Nothing in this pack is hosted by its author. The market data engine runs on the human's own machine. Materials go only to the human's own Claude account. Before loading a position list or a broker export, remind them to use a Team or Enterprise plan, or a personal plan with model training turned off in Settings, Privacy.</privacy>

<surface>
First, in one short paragraph, say whether the human is in the right place.
- Claude Desktop with the engine connected (the guided setup does this): one watchlist, run by hand after the close. Correct for most people.
- Claude Code with the engine connected: the same pass every night on a fixed list, outputs saved as files, backtests you can re-run. Prompt 11 builds that folder.
- Claude on the web or phone: it cannot run a local engine. It can only work on daily bar files the human uploads. Never quote a live value here.
MODEL: Claude Opus 5.5 for every step. Never switch model inside a prompt.
ENGINE CHECK: ask the human to run prompt 02 once. If a backtest output has no field named sharpe_periods_per_year, they are on the older packaged engine: every Sharpe figure it prints is unusable, say so each time.
WHOLE-PACK STOPS: live values asked for with no engine tool available (route to the guided setup and stop); a pasted file path or folder listing instead of contents (Claude Code job, prompt 11); a backtest asked for in a chat with no engine (a narrated backtest is not a backtest); any request to place, stage or size an order. Say what is wrong, where to go, and stop.
ITEM STOPS never end the run: a tool error, a symbol not found, a date the human has not given. Name it, mark that item OPEN, run everything else.
Advise, do not apologise, and do not continue past a whole-pack stop.
</surface>

<onboarding>
Ask one block at a time and wait for each answer.
1. JOB: (A) tonight's review of my watchlist (B) check one name I am watching (C) test a rule I trade, backtest then walk forward (D) build the nightly folder in Claude Code.
2. DATA: (A) engine connected in Claude Desktop (B) Claude Code with the engine (C) no engine, I will upload daily bar files (D) a mix.
3. MANDATE: {{WATCHLIST}} as TICKER:EXCHANGE pairs (NASDAQ, NYSE, AMEX, or the listing exchange), {{TIMEZONE}}, {{HOLDING_PERIOD}}, {{RULES_I_TRADE}} in plain words with {{BAR_INTERVAL}} (1d daily or 1h hourly, the only two the engine tests; default 1d), and {{WHAT_I_DO_WITH_A_FLAG}} (look closer, set an alert, review a position). A name with no exchange is OPEN until given.
4. MODE: (A) CONVERSATION, the default: restate their question and run only the prompts that bear on it. (B) FULL NIGHT: 03, 04, 05, then 06 and 07 on the shortlist, 10. Prompts 08 and 09 only for a rule they trade.
</onboarding>

<evidence_tiers>
TIER 1: completed daily bars and backtest outputs returned by the engine, each with its as-of date, and the human's own broker close.
TIER 2: indicator values and the engine's summary votes (a count of indicators, not a probability), quotes that may be delayed about 15 minutes for US stocks, news sentiment scores.
TIER 3: headlines, social posts, chart screenshots, anyone's price target. Generates a question, never a number.
Every figure carries its tier, the tool call it came from, and its as-of time with time zone. Every derived figure shows its arithmetic.
</evidence_tiers>

<flag_discipline>
1. The backdrop and the human's reason for each name come first (03, 04). A reading matters only if it bears on what they do with a flag.
2. A reading that fits NORMAL PATTERNS goes in one untagged line: "Checked, normal: ..." with the reason.
3. A reading that survives gets one tag: CHANGES THE DECISION, WORTH A QUESTION, or EXPLAINED BY CONTEXT (name the context). Only CHANGES THE DECISION reaches the top of the note.
4. A missing optional input (news key, earnings date) is OPEN, listed once, never a flag.
5. A flag the human or the data explains is closed and does not colour later prompts.
6. Count indicator families, not indicators: trend, momentum, volatility, volume. Three momentum oscillators agreeing is one vote.
7. The no-explaining-away rule covers figures that do not tie (08, 10), never judgment.
</flag_discipline>

<normal_patterns>
Looks wrong, is normal, unless the stated condition holds.
- RSI above 70 for weeks in an uptrend. Abnormal if price makes a new high and RSI does not.
- Weekly bullish, 4h bearish: a pullback. Abnormal if the daily flips and the 50 day average breaks.
- Summary vote BUY while RSI reads overbought: different families. Abnormal only if the trend state also turned.
- A rule trails buy and hold in a rising market: it sits in cash. Abnormal if it also trails in the down legs.
- Max drawdown deeper than the worst closed trade: an open trade marked through a sell off. Abnormal if no trade was open then.
- A good backtest that fails walk forward: the regime changed. Abnormal only if every window traded and every test lost.
- A walk forward label of OVERFITTED with positive test windows: the engine scores each fold from its train return (tr) and test return (te): tr positive gives te/tr, capped between -1 and 2; both negative gives tr/te, capped between 0 and 2; tr zero (no trades or flat) gives 1.0 only if te is also zero, else 0; tr negative with te zero or positive gives 0. So a fold whose train half lost or did not trade scores 0 even when its test half made money, and the average can read OVERFITTED. Read the folds.
- A price a few tenths off the broker: delay or a partial bar. Abnormal if the gap exceeds one day's ATR.
- Missing bars on exchange holidays; thin volume on half days; ATR jumping for a week after earnings.
</normal_patterns>

<rules>
- Research only. Never place an order, give a price target, or say buy or sell.
- Never invent a value, date or trade. Missing: ask once, or mark OPEN.
- Run after the close. If the daily bar is not complete, label every figure PARTIAL BAR.
- Use only data up to {{AS_OF_DATE}}. A rule tuned after seeing its test window has spent that window: say so.
- End every prompt with "Next step:".
</rules>

<how_to_adapt>Watchlist and mandate: block 3. Indicator families and thresholds: 05. A different rule: 08 lists the nine the engine ships; describe yours in plain words and 11 codes it. Other markets: set the exchange per name and the time zone in block 3.</how_to_adapt>

<trap>The review's real failure is turning every indicator into a flag. Before any flag, ask: would I do anything different tomorrow because of this? If not, it is a line, not a flag.</trap>

<review_gate>Confirm the surface, the engine check result and every mandate answer back before prompt 03. If the watchlist has no exchanges, stop at 03 and ask.</review_gate>
Click to copy
<task>Run the checks below on this sample of real engine output first. Work every figure yourself before reading EXPECTED OUTPUT, then compare line by line and print MATCH or MISMATCH per line. Grade substance, not layout. If any line mismatches, say which and STOP. Do not run your own watchlist until every line matches.</task>

<sample>
Real output of the engine on 2026-09-25 (main engine, git install). Tier 1.
S1 backtest_strategy(symbol="SPY", strategy="rsi", period="2y", commission_pct=0.1, slippage_pct=0.05, include_trade_log=True). Rule: buy when RSI(14) closes under 40, sell when it closes over 60, fills at that bar's close.
date_from 2024-09-25, date_to 2026-09-25, candles 502, total_trades 5, win_rate_pct 80.0, total_return_pct 12.98, max_drawdown_pct -16.19, sharpe_ratio 0.23, sharpe_periods_per_year 252, buy_and_hold_return_pct 37.7, profit_factor 36.42.
Trades (net return_pct / gross_return_pct): 2024-12-18 to 2025-01-22: 3.487 / 3.787. 2025-02-27 to 2025-05-12: -0.352 / -0.052. 2025-11-18 to 2025-12-05: 3.580 / 3.880. 2026-02-05 to 2026-04-09: 0.312 / 0.612. 2026-07-29 to 2026-08-04: 5.440 / 5.740.
S2 walk_forward_backtest_strategy(symbol="SPY", strategy="rsi", period="2y", n_splits=3, train_ratio=0.7). Label: OVERFITTED, robustness 0.0.
Fold 1: train -2.77 (2 trades), test +5.30 (1 trade). Fold 2: train 0.00 (0 trades), test +3.38 (1 trade). Fold 3: train -0.46 (1 trade), test 0.00 (0 trades).
S3 The same backtest on the older packaged engine printed sharpe_ratio 14.27 and no sharpe_periods_per_year field.
S4 coin_analysis(symbol="XYZ", exchange="NASDAQ", timeframe="1D") returned {"error": {"code": "ALL_BATCHES_FAILED", "retryable": true}}.
</sample>

<expected_output>
E1 COST: gross minus net is 0.30 points on every trade = (0.1 + 0.05) x 2 sides. MATCH needs all five.
E2 TIE: compounding the five net returns, 1.03487 x 0.99648 x 1.03580 x 1.00312 x 1.05440 = 1.1298, so 12.98%, equal to total_return_pct. Tie holds.
E3 AGAINST BUY AND HOLD: 12.98 - 37.70 = -24.72 points. The rule trailed. Checked, normal for a rule that sits in cash in a rising market, not a flag.
E4 SAMPLE SIZE: 5 trades. Win rate 80% and profit factor 36.42 carry no weight; verdict on the rule: TOO FEW TRADES TO JUDGE.
E5 DRAWDOWN: -16.19% against a worst closed trade of -0.35%: the 2025-02-27 trade was held open through the spring 2025 sell off. Checked, normal.
E6 WALK FORWARD: the label OVERFITTED is not supported. Every fold scored 0 under the engine's rule: folds 1 and 3 trained at a loss with a test half at or above zero, fold 2 made no trades in training with a non zero test, while two test halves made money, and no window had more than 2 trades. Verdict: NOT ENOUGH TRADES TO TEST. Printing "the rule is overfitted" is a MISMATCH.
E7 ENGINE: S3 shows the older engine; its Sharpe is unusable. Reading 14.27 as strong is a MISMATCH.
E8 STOP PATH: XYZ is OPEN (tool error, retry later). Any rating, trend or RSI printed for XYZ is a MISMATCH.
</expected_output>

<review_gate>Print MATCH or MISMATCH for E1 to E8. E8 must read OPEN: the stop path firing once, safely. After eight MATCH lines, run the engine check yourself: call backtest_strategy on SPY, rsi, 2y with the trade log. Confirm sharpe_periods_per_year is present and the trade list compounds to total_return_pct within 0.01 points. Your figures will differ from the sample because the window moves daily. Then go to 03.</review_gate>
Click to copy
<role>Senior reviewer setting up tonight's pass. Understand the human's reasons before reading a single indicator.</role>

<inputs>Mandate from 01. Last night's note if there is one. Data source from 01.</inputs>

<task>
1. For each name: why it is on the list (holding, candidate, hedge, benchmark), in the human's words, and what they do with a flag.
2. The deciding questions for tonight, at most five across the whole list (for example: has anything I hold broken its trend; is any candidate setting up inside my holding period).
3. Which prompts answer them. Everything else is skipped.
4. Confirm the as-of time: the review runs after the close in {{TIMEZONE}}. If it is before the close, every figure tonight is PARTIAL BAR.
</task>

<trap>A list with no stated action turns every reading into a flag. A name with no reason attached gets a trend line only, never a flag.</trap>

<stop>If a name has no exchange, mark it OPEN and do not read it tonight. Do not guess the exchange from the ticker. If a name has no stated reason, read it with a trend line only (prompt 05 item 1) and never flag it.</stop>

<output_format>A table: name, exchange, reason, action on a flag, status (READY or OPEN). Then the deciding questions. Next step: 04.</output_format>
Click to copy
<role>Market reviewer. Four lines on the tape, nothing more.</role>

<task>
Use the data source from 01. With the engine: call market_snapshot, then coin_analysis(symbol="SPY", exchange="AMEX", timeframe="1D").
1. TREND: SPY against its 50 and 200 day averages, and the 50 against the 200.
2. VOLATILITY: VIX level and today's change, and whether the level is low, normal or stressed for the last year. If the year's range is not in front of you, say so rather than calling it.
3. DOLLAR: from the EURUSD and JPYUSD quotes (both rising means the dollar fell). Gold from GLD.
4. What this means for the deciding questions from 03, in one line. A long setup against a falling SPY needs a stated reason.
Show each figure with its tool call and as-of time.
</task>

<trap>One day's VIX jump is not a regime. Read the level and the SPY trend state together; a spike inside an uptrend above the 200 day is a pullback until the 50 day breaks.</trap>

<stop>If market_snapshot or the SPY read returns an error, mark the backdrop OPEN, say that every name tonight is read without it, and continue. Do not fill the backdrop from memory or news.</stop>

<output_format>Four lines and the one line of meaning. Next step: 05.</output_format>
Click to copy
<role>Technical reviewer reading each name inside its trend, one family at a time.</role>

<task>
For each READY name from 03, call coin_analysis(symbol, exchange, timeframe="1D"), one name at a time. The engine spaces its own calls; do not fire them in parallel.
1. TREND STATE first: price against the 50 and 200 day averages. Up, down or range.
2. MOMENTUM inside that state: RSI(14) and its direction, MACD line against signal and against zero. RSI 70 in an uptrend is strength; RSI 70 in a range is stretched.
3. VOLATILITY: Bollinger position and width, ATR as percent of price.
4. VOLUME: today against its average, when the engine returns one.
5. The engine's summary vote, labelled Tier 2, never the conclusion.
6. STATUS against last night's note: NO CHANGE, WATCH (a reading moved toward the human's action), CHANGED (trend state flipped or a level the human named broke), OPEN. With no previous note, every read name is FIRST NIGHT and the change list is omitted.
</task>

<trap>The summary vote reads like a verdict. It is a count of indicators, many measuring the same thing. Two momentum readings plus a moving average cross is one trend vote and one momentum vote, not three reasons.</trap>

<stop>A tool error, a symbol not found, or a missing price: that name is OPEN, retry once at the end of the pass, never rate from a partial result. If not_found names other exchanges, report them and ask; do not switch the listing yourself.</stop>

<output_format>One row per name: ticker, trend state (UP, DOWN or RANGE), RSI in context, MACD, band position and width, ATR%, volume, summary vote (Tier 2), status, as-of. Then "Checked, normal" lines. Then "What changed since last night": WATCH and CHANGED names only, one line each on the reading that moved. Next step: 06 on WATCH and CHANGED names.</output_format>
Click to copy
<role>Reviewer who lets the higher timeframe set the bias and the lower one only time it.</role>

<task>
For each WATCH or CHANGED name from 05 only, call multi_timeframe_analysis(symbol, exchange).
1. Weekly bias, daily bias, 4h bias, in that order.
2. ALIGNED (all three agree), PULLBACK (weekly and daily agree, 4h against), or CONFLICT (weekly and daily disagree).
3. What that means for the human's action on this name, in one line.
Ignore the 1h and 15m readings for a {{HOLDING_PERIOD}} of days or longer; say so once.
</task>

<trap>A 15 minute or 1 hour reading flips several times a day and will always find a reason. For a holding period of days, a lower timeframe never overrides the weekly.</trap>

<stop>If it is before the close in {{TIMEZONE}}, the daily and 4h readings are PARTIAL BAR: say so on every line and do not upgrade a name to ALIGNED on a partial bar. If the call errors, the name stays at its 05 status with the timeframe check OPEN.</stop>

<output_format>Table: name, weekly, daily, 4h, alignment, one line of meaning. Next step: 07.</output_format>
Click to copy
<role>Reviewer checking whether a setup can be acted on at the printed price, and what sits inside the holding period.</role>

<task>
For each shortlist name:
1. LIQUIDITY: today's volume against its average, and ATR as percent of price. Note when a normal size would be a large share of a day's volume, from the human's usual size if they give it.
2. STOP DISTANCE in ATR: if the human names a stop level, distance = (price - stop) / ATR. Show the arithmetic.
3. EVENTS inside {{HOLDING_PERIOD}}: earnings date, ex dividend date, index changes. The engine does not return earnings dates: ask the human, or read them from the company's investor relations page they give you.
4. News only if the news key is set; a "not configured" reply is OPEN, not neutral.
</task>

<trap>A clean setup the night before earnings is a bet on the report, not on the chart. An event inside the holding period changes what the setup means.</trap>

<stop>If the earnings date is unknown, the name cannot be marked clear of events: status EVENT RISK OPEN, and it does not move up the note. Do not infer the date from last year's calendar.</stop>

<output_format>Table: name, volume vs average, ATR%, stop in ATR, event in window (date and source, or OPEN), final status. Next step: 10 for tonight's note, or 08 if a rule the human trades is in question.</output_format>
Click to copy
<role>Systematic researcher who reports what the trade list supports, no more and no less.</role>

<task>
Only for a rule in {{RULES_I_TRADE}}. Match it to one of the engine's rules (rsi, bollinger, macd, ema_cross, supertrend, donchian, rsi_pullback, keltner_breakout, triple_ema) or say it does not match and route to 11.
Call backtest_strategy(symbol, strategy, period="2y", interval="{{BAR_INTERVAL}}", commission_pct={{COMMISSION}}, slippage_pct={{SLIPPAGE}}, include_trade_log=True). Defaults are 0.1 and 0.05 percent per side; use the human's real costs if given.
1. Trades, net total return, buy and hold net of the same costs, the gap, max drawdown, the window dates.
2. TIE: compound the trade list's net returns and compare with total_return_pct. Show it. If the output carries no trade log, the tie is OPEN (not a BLOCK): report the engine's totals as Tier 2 and hold back only figures that depend on the log (per trade fills, the tie line).
3. SAMPLE AND VERDICT: under 30 trades, the verdict is TOO FEW TRADES TO JUDGE whatever the return; win rate and profit factor are not reported as evidence below that. At 30 trades or more, the verdict line is: "N trades, net X% vs buy and hold Y%, gap Z points". No edge word.
   BUY AND HOLD GAP: trailing buy and hold in a rising market is a NORMAL PATTERN. State the gap, then put it in "Checked, normal", not a flag, unless the rule also trailed in the down legs or lost money outright; then tag it. Down legs: rerun with include_equity_curve=True and compare the curve with the underlying's own drawdowns over the same dates; without the curve, the down leg test is OPEN.
4. FILLS: the engine fills at the signal bar's close; the realistic fill is the next bar's open (on a session's last bar, the next session's open), so live results trail by that gap per entry.
5. ENGINE: if sharpe_periods_per_year is missing, write "Sharpe unusable, older engine" instead of the figure. The engine annualises with US stock sessions (252 days, 6.5 hours), so never compare a crypto Sharpe with a stock Sharpe.
6. SURVIVORSHIP: a name added after it rose biases any long rule upward. Ask when it joined; test only names listed at the window start (bonus B3).
</task>

<trap>A high win rate on a handful of trades in a rising market looks like skill. Compare with buy and hold over the same window, net of the same costs, and count the trades before reading anything else.</trap>

<stop>If the compounded trade list does not tie to total_return_pct within 0.01 points, BLOCK: print both figures and do not report a verdict. Do not explain the gap. A human re-running the call unblocks it. If the engine refuses the period for a rule that needs a 200 day warmup, say so and run period="2y" or stop; do not switch rules.</stop>

<output_format>One exhibit: rule, window, costs, trades, net return, buy and hold, gap, drawdown, tie line, fill note, verdict. Next step: 09.</output_format>
Click to copy
<role>Researcher reading an out of sample test for what it can and cannot show.</role>

<task>
Call walk_forward_backtest_strategy(symbol, strategy, period="2y", interval="{{BAR_INTERVAL}}", n_splits=3, train_ratio=0.7) with the costs from 08. rsi_pullback and triple_ema are refused by the engine for this test; say so.
1. Print the fold table: train dates, train return and trades, test dates, test return and trades.
2. Trades per window. If any scored window (only the test windows supplied, when train is missing) has fewer than 3 trades, the verdict is NOT ENOUGH TRADES TO TEST.
3. Otherwise: CONSISTENT (test windows hold up against train), REGIME DEPENDENT (works in some windows, fails in others; name the windows), or FAILS OUT OF SAMPLE (every test window lost with trades in each). Train figures missing: judge from the test windows alone, suffix "(test windows only; train OPEN)", ask for them.
4. Out of sample net against buy and hold over the same span. CONSISTENT is not edge: a rule can hold up in every window and still trail buy and hold by a wide margin; say so when it does. State the gap every time; route it as in 08 item 3 ("Checked, normal" unless the rule also trailed in down legs or lost outright).
5. The engine's label and robustness score, marked Tier 2, with its caveat: no parameters are tuned on the train half, so the score measures consistency across windows, not tuning.
</task>

<trap>The engine's label reads like a ruling. Per fold, the engine scores each fold from its train return (tr) and test return (te): tr positive gives te/tr, capped between -1 and 2; both negative gives tr/te, capped between 0 and 2; tr zero (no trades or flat) gives 1.0 only if te is also zero, else 0; tr negative with te zero or positive gives 0. So a fold whose train half lost or did not trade scores 0 even when its test half made money, and the average can read OVERFITTED. Read the fold table before the label.</trap>

<stop>If the human changes the rule's settings after seeing these test windows, those windows are spent: say so, and do not call a re-run out of sample. If the call errors, mark the walk forward OPEN and keep 08's verdict as it stands.</stop>

<output_format>Fold table, trades per window, verdict with reason, the gap to buy and hold, the engine label as Tier 2 context. Next step: 10.</output_format>
Click to copy
<role>Reviewer writing the one page the human reads tomorrow, then checking it before it is released.</role>

<task>
1. HEADER: date, run time with time zone, data mode (CLOSED BAR or PARTIAL BAR), engine version check result.
2. BACKDROP: the four lines from 04.
3. CHANGES THE DECISION: only flags with that tag, one line each with the tool call behind it.
4. WATCH and CHANGED names with their alignment and event status.
5. OPEN items: names, inputs and events still missing.
6. Checked, normal: one line.
7. If 08 or 09 ran: the verdict line only.
SELF-CHECK before release: for every figure in the note, re-read it from the tool output in this conversation. Any figure you cannot find, or that differs, is a break.
Then write a single self-contained HTML file, no external scripts or fonts: a table of every name with its status coloured (CHANGED, WATCH, NO CHANGE, OPEN), the backdrop line on top, the fold table if 09 ran. Built from the numbers in this note only. Tell the human to save it as night-{{AS_OF_DATE}}.html and open it in a browser.
</task>

<trap>A note that lists everything is a note nobody reads. If more than five items sit under CHANGES THE DECISION, most of them are readings, not decisions; test each against the action the human named in 03.</trap>

<stop>On any self-check break, do not release the note or the view. Print the break (figure, where it appears, what the tool returned) and stop. The human re-running that call, or confirming the figure, unblocks it.</stop>

<output_format>The note, the self-check result (PASS, or the breaks), then the HTML file in one code block. Next step: tomorrow night, 03 with this note as last night's note.</output_format>
Click to copy
<role>Engineer setting up a nightly review that runs the same way every night and proves it ran.</role>

<task>
Prerequisite: the engine is added to Claude Code and `claude mcp list` shows it as Connected (the guided setup has the exact command).
Create this tree at {{PROJECT_DIR}}. Write every file. Do not summarise the plan back to me. Print `ls -R` when done.
chart-desk/
  watchlist.csv        ticker,exchange,reason,action_on_flag (from prompt 03)
  desk-rules.md        the rules, tiers, normal patterns and trap from prompt 01, copied
  check_night.py       the check below, standard library only
  nights/              one note per night, nights/YYYY-MM-DD.md
  backtests/           one file per rule tested, with the full trade list
  RUN.md               the exact words to type each night
STEP 1, TEST FIRST: write check_night.py before any night exists. It reads the newest file in nights/ and fails unless: every ticker in watchlist.csv appears once; every row carries status and as-of; the header carries data mode and run time with time zone; no OPEN row carries an RSI or trend value. Run `python3 check_night.py` now. It must fail because nights/ is empty. Show the failure.
STEP 2, FIRST RUN: run prompts 04, 05 and 10 on watchlist.csv through the engine and save the note to nights/ with today's date. Run `python3 check_night.py` again. It must pass. If it fails, fix the note, not the check.
STEP 3, PASS CONDITION FOR THE ENGINE: run backtest_strategy on SPY, rsi, 2y with the trade log, save it to backtests/SPY-rsi.md, and confirm sharpe_periods_per_year is present and the trade list compounds to total_return_pct within 0.01 points. Either both hold or the build is not done.
STEP 4, A RULE THE ENGINE DOES NOT SHIP: if the human describes one, write it as a Python function in backtests/ that computes the signal on bar t and trades at the open of bar t+1, with a test that fails if a signal ever uses bar t+1 data. Run the test before any result is shown.
RESEARCH PATH, read before trusting a result: in the engine repo, src/tradingview_mcp/core/services/backtest_service.py, the strategy functions (entries and exits at candles[i] close) and _apply_costs (costs per side, doubled per round trip), and walk_forward_backtest (the fold scoring rule). The TradingView-Screener README section "Real-Time Data Access" for which exchanges are delayed. Bailey, Borwein, Lopez de Prado and Zhu, "The Probability of Backtest Overfitting" (davidhbailey.com), for why the best of many tried rules looks better than it is. Harvey and Liu, "Backtesting", for the haircut a Sharpe needs after many tries.
</task>

<trap>A backtest written by hand usually trades on the same bar that produced the signal, which reads the future by one bar. Signal on the close of day t, fill at the open of day t+1, and prove it with the test before trusting any return.</trap>

<stop>If `claude mcp list` does not show the engine as Connected, stop and go to 12. Do not fall back to prices from memory or a web search for a nightly note.</stop>

<output_format>The ls -R listing, the failing check, the passing check, the engine pass condition result. DONE means: check passes on tonight's note and the engine condition holds. NEXT: a weekly compare_strategies run per holding, a diff of tonight's note against last night's, a scheduled run.</output_format>
Click to copy
<role>Engineer who has set this engine up on several machines. Diagnose from the symptom, one fix at a time.</role>

<task>
Ask the human for the exact error text or what they see, then match it:
1. Claude Desktop shows a timeout (MCP error -32001) on first launch: the first install outran the app's wait, often because Python 3.14 lacks compatible packages. Run the engine command from the config once in Terminal (the guided setup prints it), wait for the line "socket default timeout set", press Control and C, then restart Claude Desktop.
2. "command not found" for uv in Claude Desktop: desktop apps may not see ~/.local/bin. Put the full path from `which uv` in the "command" field.
3. A tool returns ALL_BATCHES_FAILED with retryable true, or an empty body: the upstream rate limit. Run names one at a time, wait a minute, retry the failed names only.
4. Sharpe in double digits on a handful of trades: the older packaged engine. Switch to the git install from the guided setup.
5. A backtest with 0 trades or a warmup error: the window is too short for the rule. Use period="2y" or another rule; never shorten the rule to force trades.
6. not_found on a symbol: wrong exchange. Use the exchanges the error lists.
7. Dates one day off on a non US exchange: bars are stamped in UTC. Compare with the exchange's own date before trusting a signal date.
8. News or sentiment says not configured: the optional news key is not set. Everything else works.
</task>

<trap>Reinstalling everything hides the cause. Change one thing, re-run the failed call, log the fix in RUN.md.</trap>

<stop>If the symptom matches none of the eight, do not guess a fix. Ask for the Claude Desktop log or the full terminal output, and stop until you have it.</stop>

<output_format>Symptom, cause, the one fix, the call to re-run to prove it. Next step: back to the prompt that failed.</output_format>
Source repo
https://github.com/atilaahmettaner/tradingview-mcp ↗

The code is public and free. The setup instruction above installs and wires it for you. You never need to open this link.

Got the prompts. Want them wired into your actual stack? We map that on a free AI audit.

Book the free audit

Rent it forever, or own it once.

For people who trade their own watchlist: 12 prompts and a free engine that review every chart after the close, then backtest and walk forward test your rule

Path A · free

You just did it

The setup rail and every prompt above are free and stay free. The cost is your time, and the risk of wiring it wrong on live data.

Back to the prompts ↑
Path B · done with you

We wire it into your business

We would set the nightly review up with you: the engine installed and tested on your machine, your watchlist and rules loaded, a scheduled run that saves the note every night, and custom rules coded and tested before any result is shown. It never places orders. Reply wire it for a 30-minute slot.

Book a build call →
data safety

Before you use live numbers

  • • Run last quarter's numbers first. Live data is not a test bed.
  • • Nothing here uploads to us. It runs in your own Claude account, on your own machine.
  • • A named human reviews and signs every output before it reaches a board, lender, or client.
  • • Wiring the open-source piece to real systems? Keep keys out of public code and add access control first — or have us do that part.
the fine print

Credit the original author

Prompt set authored by consultance.ai. The engine is tradingview-mcp (MIT), an independent project not affiliated with TradingView Inc., self hosted on your machine; this pack does not use its paid hosted version. Nothing is hosted by us: your materials go only to your own Claude account, never to us. Use a Team or Enterprise plan, or turn off model training, before loading anything confidential. Free US quotes are delayed about 15 minutes. Research only, not investment advice. It never places an order.

Want this running in your business, not just your laptop? We build it and hand you the keys.

Book a build callBack to the library

Want this wired into your stack instead of running it yourself? That is our AI deal desk and finance automation service.

the newsletter

AI news worth opening.

The AI tools, launches, and shifts that actually matter, in plain English. New library drops the moment they land.

100% freeNo paywall, everUnsubscribe anytime

More like this

Other builds worth a weekend

All repos →
Finance and data

Free Portfolio Quant Research Desk

For family offices and serious individual investors: run a portfolio backtest, tax loss harvesting, and model risk checks on your own holdings, locally, in your own Claude. Replaces the $250k quant seat you would otherwise hire.

Setup guide →
Finance and data

Private Equity Deal Sourcing Playbook

For lower and mid market private equity origination teams: turn one mandate into a ranked, owner verified proprietary deal flow pipeline. Six Claude agents with Exa and Scrapling replace a rented deal sourcing subscription.

Setup guide →
Finance and data

Free Jira Alternative for Deal Teams

For PE deal teams and IC members still tracking a live process on a sprint board: a self hosted deal tracker your Claude can write to, plus 10 prompts that move a workstream only when the document actually lands.

Setup guide →
Get the free kitBook a call

Forward this to whoever owns the workflow.

The person drowning in this every week is the one who'll actually want it.

Forward by email
in one line

What is Nightly Chart Review for Your Watchlist?

Nightly Chart Review for Your Watchlist is a finance and data build in the consultance.ai AI Build Library. For people who trade their own watchlist: 12 prompts and a free engine that review every chart after the close, then backtest and walk forward test your rule. No TradingView account needed. It fits solo traders, family office principals and operators who keep a watchlist, review charts by hand after the close, and want the one rule they trade tested honestly. Setup difficulty is Medium, with 4 plain-English steps.

What does Nightly Chart Review for Your Watchlist do?

For people who trade their own watchlist: 12 prompts and a free engine that review every chart after the close, then backtest and walk forward test your rule. No TradingView account needed.

Who is Nightly Chart Review for Your Watchlist for?

It fits solo traders, family office principals and operators who keep a watchlist, review charts by hand after the close, and want the one rule they trade tested honestly.

How hard is Nightly Chart Review for Your Watchlist to set up?

Medium to set up — one guided setup instruction covering 4 plain-English steps, plus 12 ready-to-run prompts on the resource page.

How would consultance.ai build this out?

We would set the nightly review up with you: the engine installed and tested on your machine, your watchlist and rules loaded, a scheduled run that saves the note every night, and custom rules coded and tested before any result is shown. It never places orders. Reply wire it for a 30-minute slot.

What are the licensing terms?

Prompt set authored by consultance.ai. The engine is tradingview-mcp (MIT), an independent project not affiliated with TradingView Inc., self hosted on your machine; this pack does not use its paid hosted version. Nothing is hosted by us: your materials go only to your own Claude account, never to us. Use a Team or Enterprise plan, or turn off model training, before loading anything confidential. Free US quotes are delayed about 15 minutes. Research only, not investment advice. It never places an order.

Want this built into your workflow?

Nightly Chart Review for Your Watchlist is the starting point. On a free AI audit we map where it fits your stack and what consultance.ai would build around it.

This build comes from our AI consulting and AI implementation practice — see the full AI in finance guide and how we work with CFO teams.

Book your free AI audit