TradingView alert → order in NinjaTrader, Quantower or MetaTrader 5, in about a second. Setup takes ten minutes; run it on SIM first.
You already have alerts on TradingView — a strategy, an indicator, a price level. AlertFill turns those alerts into real orders in NinjaTrader, Quantower or MetaTrader 5. The alert fires, TradingView posts it to your personal AlertFill webhook, and the Tradeaholiks relay pushes it straight down a live connection to a small receiver running inside your platform — which places the order, stop and target attached. No polling, no browser extension, no PC-to-PC networking.
Two safety rules are built in. If your platform is offline when an alert fires, the order queues and is delivered the moment the receiver reconnects — unless it is older than 30 seconds, in which case it is discarded and logged. A stale entry signal never fires into a market that has moved on. Second: everything is visible — every alert shows up in the receiver's activity log and on your account page.
NinjaTrader 8, Quantower or MetaTrader 5 on Windows — one licence covers all three, and you can run them at the same time; a paid TradingView plan (webhook alerts unlock at their Essential tier and up); and an AlertFill key — free 7-day trial or full licence, both on your account page.
Where should your orders go? Pick your platform — the install steps below, and the symbols and ready-to-paste alerts in Step 2, switch to match.
Running more than one? Install each — they share one key and every one of them receives every alert. Pick each platform in turn for its steps.
1.Download TAH_AlertFill.zip from your account page's AlertFill tab (the download button under your key). Don't unzip it.
2.In NinjaTrader: Tools → Import → NinjaScript Add-On... and pick the zip. Restart NinjaTrader.
3.Open Control Center → New → TAH AlertFill. The AlertFill window opens.
4.On your account page's AlertFill tab, click Copy next to Your AlertFill key, and paste it into the window's key field.
5.Pick your account from the dropdown — it lists the accounts currently connected in NinjaTrader. Start with a SIM account.
6.Click Start. The status light goes green and your account page flips to RECEIVER CONNECTED. Tick Start automatically when NinjaTrader opens once you're happy with it.
1.Download TAH_AlertFill_QT.zip from your account page's AlertFill tab and unzip it. You'll get a folder called TAH_AlertFill_QT.
2.Close Quantower completely. This matters: Quantower keeps a plugin loaded until it restarts, so installing while it's open appears to work and does nothing.
3.Copy that whole folder into your Quantower folder, under Settings\Scripts\plug-ins\ — note the hyphen in plug-ins. Create the folder if it isn't there. You should end up with ...\Settings\Scripts\plug-ins\TAH_AlertFill_QT\TAH_AlertFill_QT.dll.
4.Start Quantower and connect to your broker. Click the Quantower logo (top left) → Trading → TAH AlertFill.
5.Pick your account in the dropdown, then press ENABLE ACCOUNT. Nothing will trade until you do — it's the safety catch, and it's remembered per account. Check the balance it logs is the account you meant. Start with a demo account.
6.Paste your key and press START. The dot goes green and your account page flips to RECEIVER CONNECTED.
•No ATM templates — Quantower doesn't have them and doesn't need them: the stop and target attach to the order itself. An atm= in your alert is ignored, and noted in the log so you know.
•Symbols sort themselves out. MNQ is enough — the front contract is worked out for you. Some data feeds rename the big contracts (on CQG the E-mini Nasdaq is ENQ, not NQ); that's handled. If a symbol won't resolve, open DIAGNOSTICS → LIST ROOTS to see what your feed calls it.
•Everything else is identical — same key, same webhook URL, same alert syntax in Step 2.
1.Download TAH_AlertFill_MT5.zip from your account page's AlertFill tab and unzip it. You'll get AlertFill.mq5.
2.In MetaTrader 5: File → Open Data Folder, go into MQL5\Experts, and drop AlertFill.mq5 in there.
3.Tools → Options → Expert Advisors tab. Tick Allow WebRequest for listed URL and add this address exactly: https://hooks.tradeaholiks.com
4.Press F4 to open MetaEditor, find AlertFill under Experts, open it and press F7 to compile. You want 0 errors.
5.Back in MetaTrader, drag AlertFill from the Navigator onto one chart — any symbol, any timeframe. It handles every symbol; a second copy would fill every alert twice.
6.On the Common tab tick Allow Algo Trading. On the Inputs tab paste your key, and leave Demo only set to true until you've watched it work. Press OK, then check the Algo Trading button in the toolbar is green.
The panel on the chart shows ● CONNECTED within a couple of seconds, and your account page flips to RECEIVER CONNECTED.
•q= is in lots, not contracts. q=0.01 is a micro lot. Sending q=1 out of NinjaTrader habit is a full standard lot — which is why Max lots is a hard ceiling in the inputs that no alert can talk its way past.
•A tick is not a pip. On 5-digit pricing one tick is 0.00001, so sl=200ticks is a 20 pip stop. Multiply your pips by 10.
•Broker symbol names. Most brokers add a suffix — EURUSD.r, EURUSD.a, EURUSDm. Put just the suffix (e.g. .r) in the Broker symbol suffix input, with no quotes, and keep writing plain EURUSD in your alerts. For names that don't follow a pattern use the overrides box: GOLD=XAUUSD,US100=NAS100.
•No ATM templates — MetaTrader has no equivalent. The stop and target attach to the position itself. An atm= in your alert is ignored and noted in the log.
•Hedging and netting accounts both work. On a hedging account a second buy opens a second position; on a netting account the existing one grows. Both are correct — the EA says which kind it's on in its first log line.
•Position sizing can be fixed lots, a % of equity, or a fixed cash risk. The two risk modes need a stop in the alert to size against; without one the EA falls back to fixed lots and says so.
•Everything else is identical — same key, same webhook URL, same alert syntax in Step 2.
Every message follows one formula — an action, a symbol, then any options, all on one line separated by spaces:
action symbol [options in any order]
| Field | What you can type | |
|---|---|---|
| action | REQUIRED | The first word of the message. buy or long to go long · sell or short to go short · close, flat, flatten or exit to get out (add q= for a partial close) · update or modify to move the stop/target on an open position · reverse or flip to close and enter the opposite way. |
| symbol | REQUIRED* | The instrument, written the way your platform expects it — see Symbols for your platform just below. *A bare flatten with no symbol closes everything. |
All optional, any order. Always name=value with no spaces around the =. This shows the platform you picked in Step 1 — futures and forex genuinely differ here, so you only see what applies to you.
Symbols are named as NinjaTrader names them, contract month included: NQ 09-26, ES 09-26. Or set a mapping once in the receiver (NQ=NQ 09-26) and type just NQ — one field to change at rollover.
| Option | What it does | Examples |
|---|---|---|
| q= | How many contracts. Left out, the receiver's default is used. Always capped by its max-quantity setting. | q=1 q=3 |
| sl= | Stop loss — a price, or a distance in ticks (t) or points (p), measured from your actual fill. | sl=20890.25 sl=40t sl=10p |
| tp= | Take profit — same three formats. | tp=21050 tp=80t |
| account= | Send this alert to a named account instead of the one selected in the receiver. | account=Sim101 |
| atm= | Run under an ATM template — the ATM then owns the stop and target, so sl=/tp= are ignored. Names with spaces need quotes. | atm=Scalp atm="Morning Scalp" |
| You want | Message |
|---|---|
| Market buy, 1 contract | buy NQ 09-26 q=1 |
| Buy with a bracket in ticks | buy NQ 09-26 q=1 sl=40t tp=80t |
| Sell with exact prices | sell ES 09-26 q=2 sl=6410.25 tp=6395 |
| Buy under an ATM template | long NQ 09-26 atm="Morning Scalp" |
| Stop to breakeven | update NQ 09-26 sl=be |
| Take partial profit | close NQ 09-26 q=1 |
| Close everything | flatten |
Symbols sort themselves out. MNQ is enough — the front contract is worked out for you. Some feeds rename the big contracts (on CQG the E-mini Nasdaq is ENQ); that's handled. DIAGNOSTICS → LIST ROOTS shows what your feed calls things.
| Option | What it does | Examples |
|---|---|---|
| q= | How many contracts. Left out, the panel's default is used, capped by its max-quantity setting. | q=1 q=3 |
| sl= | Stop loss — a price, or a distance in ticks (t) or points (p), measured from your actual fill. The stop attaches to the order itself. | sl=20890.25 sl=40t |
| tp= | Take profit — same three formats. | tp=80t tp=10p |
No atm= — Quantower has no ATM templates and doesn't need them. No account= — the panel trades the account you enabled. Both are ignored and noted in the log if they appear.
| You want | Message |
|---|---|
| Market buy, 1 contract | buy MNQ q=1 |
| Buy with a bracket in ticks | buy MNQ q=1 sl=40t tp=80t |
| Stop to breakeven | update MNQ sl=be |
| Reverse the position | reverse MNQ sl=40t |
| Close everything | flatten |
Symbols are written plainly — EURUSD, XAUUSD, NAS100. Most brokers add a suffix (EURUSD.r); put just the suffix in the EA's Broker symbol suffix input and keep your alerts clean. Odd names go in the overrides box: GOLD=XAUUSD.
| Option | What it does | Examples |
|---|---|---|
| q= | How many lots. 0.01 is a micro lot. Always capped by the EA's Max lots. | q=0.01 q=0.5 |
| risk= | Size off a percent of equity instead of a fixed lot. Needs a stop in the same alert. The % is optional — this field is always a percentage. | risk=1% risk=0.5 |
| riskcash= | Size off a fixed amount of account currency. Needs a stop in the same alert. | riskcash=50 |
| sl= | Stop loss — a price, or a distance in pips, percent, ticks or points. Measured from your actual fill. | sl=1.0850 sl=20pips sl=1% |
| tp= | Take profit — same formats. | tp=40pips tp=2% |
No atm= and no account= — MetaTrader has neither. Both are ignored and noted in the log.
ticks and points still work if you prefer them: on a 5-digit EURUSD, sl=20pips and sl=200ticks are the same stop.| You want | Message |
|---|---|
| Market buy, one micro lot | buy EURUSD q=0.01 |
| Buy, 20 pip stop, 40 pip target | buy EURUSD q=0.01 sl=20pips tp=40pips |
| Risk 1% of equity on this trade | buy EURUSD risk=1% sl=20pips tp=40pips |
| Risk a flat $50 | sell GBPUSD riskcash=50 sl=25pips |
| Percent-based stop on an index | buy NAS100 q=0.1 sl=1% tp=2% |
| Sell with exact prices | sell EURUSD q=0.02 sl=1.0900 tp=1.0800 |
| Stop to breakeven | update EURUSD sl=be |
| Close half of a 0.02 position | close EURUSD q=0.01 |
| Reverse, same size, fresh stop | reverse EURUSD sl=20pips |
| Close everything | flatten |
From a Pine strategy alert, put {{strategy.order.alert_message}} in the alert box and let your script build the line (it goes in the Message box in Step 3).
Adding to a position just works — send another buy and it stacks, each entry bringing its own bracket. update measures ticks/points from your position's average price, cancels AlertFill's existing exit orders on that instrument and places one fresh bracket sized to the whole position; leave sl= or tp= out to keep that level as it is, and sl=be parks the stop at breakeven. close q=N takes profit on part of the position and re-sizes the bracket to what's left. reverse flattens, then enters the opposite way at the same size (or q= for a different size) with a new bracket from sl=/tp= if given. Note: update manages brackets placed by AlertFill — a trade running under an ATM template is owned by the ATM, so adjust that in NinjaTrader.
TradingView placeholders work anywhere in the message — e.g. q={{strategy.order.contracts}} — TradingView fills them in before sending. JSON-style messages are also accepted ({"action":"buy","symbol":"NQ 09-26","qty":1}) if your strategy already produces them.
Three levels, first one wins: 1) atm= named in the alert · 2) the ATM template currently selected in Chart Trader on that instrument's open chart · 3) the default ATM set in the AlertFill window. When an ATM runs the trade, the ATM owns the stop and target — any sl=/tp= in the alert is ignored. No ATM anywhere? AlertFill places its own bracket from sl=/tp=.
1.On your account page's AlertFill tab, click Copy next to TradingView webhook URL.
2.In TradingView, create an alert as usual (or edit an existing one).
3.In the alert dialog, open the Notifications tab, tick Webhook URL, and paste the copied URL.
4.In the Message box, write the order — for example: buy NQ 09-26 q=1 sl=40t tp=80t buy MNQ q=1 sl=40t tp=80t buy EURUSD q=0.01 sl=20pips tp=40pips — written the way Step 2 shows.
5.Save the alert. When it fires, the order appears in your platform about a second later — in every one of them, if you're running more than one. Watch the first few on SIM.
Most futures prop firms allow automation in some form, but each firm sets its own rules — some require you at the screen, some restrict fully unattended trading, some care only about results. Check your firm's rulebook (our PropFirm Browser is a good place to start) before running AlertFill on a funded account, and prove any strategy on SIM or an eval first. The 30-second stale rule protects you from the classic automation blow-up — a pile of delayed alerts firing into a moved market after a disconnect.
No order arrived: check the receiver window is started (green status) and your account page says RECEIVER CONNECTED; then check the alert actually fired in TradingView (its alert log) and that the webhook URL is the full copied one — copy it again, don't retype. "ignored (couldn't parse)" in the log: the message must start with buy/sell/long/short/close — check for typos in the first word. ATM error in the log: the template name in atm= must match a saved ATM template exactly; names with spaces need quotes. Order marked discarded on the account page: it arrived more than 30 seconds old (receiver was offline) — that's the safety net doing its job. Still stuck? The contact page.
The panel never says CONNECTED, or the log shows error 5272: https://hooks.tradeaholiks.com isn't on the allow-list — Tools → Options → Expert Advisors, and check it's typed exactly, with no trailing slash. "no such symbol": the log prints what it tried and what your prefix/suffix inputs are set to. Most brokers add a suffix — check the exact spelling with Ctrl+U in MetaTrader, then put just the suffix (e.g. .r) in the input, no quotes. "exists but has no price yet": the symbol is fine, the market is shut or it hasn't ticked since being added to Market Watch. The stop looks ten times too far or too near: ticks aren't pips — on 5-digit pricing multiply your pips by 10. Nothing trades and the log says REFUSED: either Demo only is on and this is a live account, or the Algo Trading button isn't green.