[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"live-categories":3,"article-tradingview-automation-end-to-end":34,"related-tradingview-automation-end-to-end":89,"cat-name-tradingview":163},{"categories":4},[5,11,15,19,23,26,30],{"slug":6,"sort":7,"name":8,"description":9,"metaTitle":9,"metaDescription":9,"articles":10},"risk-management",1,"Risk Management",null,2,{"slug":12,"sort":10,"name":13,"description":9,"metaTitle":9,"metaDescription":9,"articles":14},"prop-firms","Prop Firms",5,{"slug":16,"sort":17,"name":18,"description":9,"metaTitle":9,"metaDescription":9,"articles":10},"tradingview",3,"Tradingview",{"slug":20,"sort":21,"name":22,"description":9,"metaTitle":9,"metaDescription":9,"articles":17},"mt5",4,"Mt5",{"slug":24,"sort":14,"name":25,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},"crypto-exchanges","Crypto Exchanges",{"slug":27,"sort":28,"name":29,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},"strategies",6,"Strategies",{"slug":31,"sort":32,"name":33,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},"comparisons",7,"Comparisons",{"id":35,"status":36,"publishedAt":37,"updatedAt":37,"author":38,"authorSlug":39,"coverId":9,"coverUrl":9,"ogImageUrl":9,"languageCode":40,"slug":41,"title":42,"excerpt":43,"body":44,"metaTitle":45,"metaDescription":46,"readingTime":47,"headings":48,"category":16,"midCtaAfterBlock":88},"2e75a1b8-14bd-4271-9eac-8c7812064e5c","published","2026-09-04T19:44:00.000Z","Michael Novik","michael-novik","en-US","tradingview-automation-end-to-end","TradingView Automation: Executing Alerts End to End","An alert firing and an order existing are two different events, separated by four systems that can each fail silently. Here's the whole chain.","\u003Cp>Your alert fired at 14:32. The chart shows the entry. Your account shows nothing.\u003C\u002Fp>\u003Cp dir=\"ltr\">Somewhere between those two facts sit four separate systems, and any one of them can fail without telling you. TradingView thinks it did its job. Your bridge may never have heard about it. Your broker certainly didn't.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Automating a TradingView strategy means connecting four things: a Pine script that produces a signal, an alert that fires on it, a webhook that carries it out of TradingView, and a bridge that turns the message into an order at your broker or exchange. TradingView itself never places the trade. It sends one HTTP request and stops caring.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp dir=\"ltr\">That last sentence is the one most setups are built without understanding, and it explains most of what goes wrong.\u003C\u002Fp>\u003Ch2 id=\"section-0\" dir=\"ltr\">What actually happens between an alert firing and an order existing?\u003C\u002Fh2>\u003Cp dir=\"ltr\">Five stages, each owned by a different system.\u003C\u002Fp>\u003Col dir=\"ltr\">\u003Cli>\u003Cp>\u003Cstrong>Pine evaluates.\u003C\u002Fstrong> Your script's condition becomes true on a bar.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>TradingView's alert engine fires.\u003C\u002Fstrong> It builds the message you wrote and hands it to the webhook sender.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>A single HTTP POST leaves TradingView.\u003C\u002Fstrong> One request, to one URL, with your message as the body.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>A bridge receives it.\u003C\u002Fstrong> It parses the message, works out size and symbol, and calls your broker or exchange.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>The venue accepts or rejects.\u003C\u002Fstrong> An order exists, or an error does.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Cp dir=\"ltr\">Nothing in that chain reports backwards. Stage 5 doesn't tell stage 3 what happened. TradingView's alert log will show the webhook was delivered, and that's the outer limit of what it knows — delivered means a server answered, not that a trade exists. A bridge can accept a message, fail to place the order, and TradingView will still show a green delivery.\u003C\u002Fp>\u003Cp dir=\"ltr\">That gap between \"delivered\" and \"filled\" is where automated setups quietly stop working. Everything below is about the specific places it opens up.\u003C\u002Fp>\u003Ch2 id=\"section-1\" dir=\"ltr\">Why doesn't TradingView just place the trade?\u003C\u002Fh2>\u003Cp dir=\"ltr\">For most venues it can't. TradingView has direct broker integrations for a set of supported brokers, For everything outside that set, which includes most MT5 brokers and most crypto exchanges, the webhook is the only way out. It's an outbound message, not a trading connection.\u003C\u002Fp>\u003Cp dir=\"ltr\">That has a consequence worth stating plainly: the webhook is a notification system that happens to be pointed at trading infrastructure. It was built to tell things that something happened. Retry on failure, confirmation of receipt, knowledge of whether the thing on the other end did anything: every guarantee you want from an order routing system has to come from the bridge, because the transport doesn't provide any of them.\u003C\u002Fp>\u003Ch2 id=\"section-2\" dir=\"ltr\">What does TradingView actually send, and under what rules?\u003C\u002Fh2>\u003Cp dir=\"ltr\">One HTTP POST containing your alert message as the request body. The constraints are published and most of them are unforgiving.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Ports 80 and 443 only.\u003C\u002Fstrong> Any other port in the URL is rejected outright, not retried. This catches people running a receiver on 8080 during testing.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Three seconds, total.\u003C\u002Fstrong> If the receiving server takes longer than three seconds to respond, TradingView cancels the request. That budget includes DNS resolution, so a slow-resolving domain on a cheap VPS spends part of your window before your code runs at all. The correct pattern for a self-built receiver is to answer immediately and process afterwards, never to place the order and then respond.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>No IPv6.\u003C\u002Fstrong> The receiving server needs an IPv4 address.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Content type is decided by your message, not by you.\u003C\u002Fstrong> If the alert message parses as valid JSON, TradingView sends it as \u003Ccode>application\u002Fjson\u003C\u002Fcode>. If it doesn't, it goes as \u003Ccode>text\u002Fplain\u003C\u002Fcode>. A missing brace turns a JSON payload into plain text, and endpoints that only accept JSON reject it. The alert looks fine. The message looks fine. The content-type header is what changed.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Retries exist, but only for one failure class.\u003C\u002Fstrong> A 5xx response from your endpoint gets retried up to three times at five-second intervals, so four attempts in total. A timeout gets nothing. A 4xx gets nothing. A redirect is treated as a failure. Almost every guide gets this wrong in both directions. The ones saying TradingView never retries are wrong. The ones saying it retries on failure are more wrong, because the failure you'll actually hit is the timeout, and that one is gone forever.\u003C\u002Fp>\u003Cp dir=\"ltr\">The practical reading: your bridge returning a fast 200 is the single most important thing in the chain, and a bridge that returns 200 before it has done anything is both correct behaviour and the reason a delivered webhook proves nothing.\u003C\u002Fp>\u003Cp dir=\"ltr\">TradingView does give you a \u003Cstrong>Webhook status column in the alert log\u003C\u002Fstrong>. Check it. It's the only place the transport tells you anything, and it's the first thing to look at when the chart and the account disagree.\u003C\u002Fp>\u003Ch2 id=\"section-3\" dir=\"ltr\">What goes in the alert message?\u003C\u002Fh2>\u003Cp dir=\"ltr\">Whatever your bridge expects, and nothing else.\u003C\u002Fp>\u003Cp dir=\"ltr\">The message is a contract between you and one specific receiver. Some bridges want a line of comma-separated values. Others want JSON with named fields. The formats aren't compatible and there's no standard, which is why moving between vendors means rewriting every alert you have rather than repointing a URL. The cross-vendor mapping is a subject of its own.\u003C\u002Fp>\u003Cp dir=\"ltr\">What's common to all of them is the choice between hardcoding a value and letting TradingView fill it in. Placeholders in double braces get substituted at fire time: the ticker, the close price, the timeframe, and for strategy scripts the order action, contracts and position size the strategy believes it just took.\u003C\u002Fp>\u003Cp dir=\"ltr\">Use them sparingly, and here's the rule I'd apply. Anything the bridge needs to identify \u003Cem>what\u003C\u002Fem> to trade should be hardcoded in the alert, because a placeholder that resolves to the chart's symbol will hand your MT5 bridge a string your broker has never heard of. Anything describing \u003Cem>what just happened\u003C\u002Fem> is fine as a placeholder, because you want the actual value rather than your guess at it.\u003C\u002Fp>\u003Cp dir=\"ltr\">The specific trap is price. A placeholder resolves to the value at the moment the alert fired, and by the time the order reaches the venue that price is history. Sending it as a limit price is how you get an order that sits unfilled while the move happens without you. If you want a limit, calculate the offset at the bridge, where it can be applied against a current quote.\u003C\u002Fp>\u003Cp dir=\"ltr\">Keep the message minimal. Every field is a thing that can be malformed, and a single missing brace turns the whole payload into plain text.\u003C\u002Fp>\u003Ch2 id=\"section-4\" dir=\"ltr\">Who else can post to your webhook URL?\u003C\u002Fh2>\u003Cp dir=\"ltr\">Anyone who has it. That's worth sitting with for a second.\u003C\u002Fp>\u003Cp dir=\"ltr\">The webhook URL is the credential. There's no username, no password, and no signature on the transport itself. If your endpoint accepts a message and acts on it, then any request arriving at that URL in the right shape places a trade. The URL is not a location, it's a bearer token that happens to look like a link.\u003C\u002Fp>\u003Cp dir=\"ltr\">Three consequences follow.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Never put it in a screenshot.\u003C\u002Fstrong> This is the single most common way these leak, and it happens constantly in support threads and YouTube tutorials where someone films their alert configuration. Blur the whole field, not the last few characters.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Allowlist the source.\u003C\u002Fstrong> TradingView publishes the small set of IP addresses its webhooks originate from, all in one AWS region. Restricting your endpoint to those addresses means a leaked URL is close to useless to anyone who isn't spoofing from inside that range. Take the current addresses from TradingView's own documentation rather than from any blog, this one included, because they can change and a stale allowlist fails closed and silently.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Put a shared secret in the message body.\u003C\u002Fstrong> If your bridge supports it, include a token as a field and have the receiver reject anything without it. That gives you something you can rotate without rebuilding the endpoint, which matters because rotating a URL means editing every alert you have.\u003C\u002Fp>\u003Cp dir=\"ltr\">Hosted platforms generally handle the first two for you and give you a per-account endpoint you can regenerate. A self-built receiver on a VPS handles exactly as much of this as you wrote, which for most people's first attempt is none of it.\u003C\u002Fp>\u003Ch2 id=\"section-5\" dir=\"ltr\">Does a strategy alert mean what you think it means?\u003C\u002Fh2>\u003Cp dir=\"ltr\">This is where the most expensive misunderstanding lives, and it has nothing to do with plumbing.\u003C\u002Fp>\u003Cp dir=\"ltr\">Pine has two relevant script types. An \u003Ccode>indicator\u003C\u002Fcode> script calculates and draws. A \u003Ccode>strategy\u003C\u002Fcode> script also maintains a simulated position: it records entries and exits, tracks a hypothetical equity curve, and produces the numbers you see in the Strategy Tester.\u003C\u002Fp>\u003Cp dir=\"ltr\">When a \u003Ccode>strategy\u003C\u002Fcode> script fires an alert, that alert is generated from the simulated position. TradingView filled the order in its own model. Whether anything happened at your broker is not something the strategy knows or checks, and the Strategy Tester will keep reporting a position it believes you hold long after your real one was rejected for invalid volume.\u003C\u002Fp>\u003Cp dir=\"ltr\">So the two never reconcile. They aren't connected. And the divergence compounds: a strategy that missed its entry will still fire the matching exit, which arrives at your bridge as a close instruction for a position that doesn't exist.\u003C\u002Fp>\u003Cp dir=\"ltr\">What that means in practice is that your bridge's behaviour on an unmatched exit is a real configuration decision, not an edge case. Some ignore it. Some send a close for zero volume and error. Some open a position in the opposite direction. Find out which yours does before it happens, because the first time this fires you want it to be boring.\u003C\u002Fp>\u003Cp dir=\"ltr\">Alert frequency is the related trap. An alert set to trigger \u003Cstrong>Once Per Bar\u003C\u002Fstrong> fires while the bar is still forming, on a condition that can un-happen before the bar closes. \u003Cstrong>Once Per Bar Close\u003C\u002Fstrong> fires on confirmed data. The difference changes which trades you take, not just when. It also interacts badly with any indicator that repaints. That's its own subject and it gets its own article.\u003C\u002Fp>\u003Ch2 id=\"section-6\" dir=\"ltr\">Where does position state actually live?\u003C\u002Fh2>\u003Cp dir=\"ltr\">In three places, and they never automatically agree.\u003C\u002Fp>\u003Ctable style=\"min-width: 75px;\">\u003Ccolgroup>\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003C\u002Fcolgroup>\u003Ctbody>\u003Ctr>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Where\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>What it thinks it knows\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>When it's wrong\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>TradingView \u002F Pine\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>The strategy's simulated position\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Whenever a real order was rejected, resized, or slipped\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>The bridge\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>What it believes it sent\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Whenever the venue rejected after acceptance\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Broker or exchange\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>The only real position\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Never. This one is the truth\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp dir=\"ltr\">Only the third row is real. The other two are models of it.\u003C\u002Fp>\u003Cp dir=\"ltr\">Most automation failures I've watched are a divergence between rows that nobody noticed for days. The strategy is flat and the account isn't. The bridge thinks it has one position open and the account has two, because a retry landed. Nothing errors, because from each system's own point of view nothing went wrong.\u003C\u002Fp>\u003Cp dir=\"ltr\">The discipline that prevents it is unglamorous: reconcile against the venue, not against the chart. Your broker's position list is the answer to \"am I in this trade.\" The Strategy Tester is the answer to \"what would this strategy have done,\" which is a different question and always has been.\u003C\u002Fp>\u003Ch2 id=\"section-7\" dir=\"ltr\">What kind of bridge do you need?\u003C\u002Fh2>\u003Cp dir=\"ltr\">Four architectural shapes exist. Vendors differ inside each shape, but the shape decides more about your setup than the brand does.\u003C\u002Fp>\u003Ctable style=\"min-width: 125px;\">\u003Ccolgroup>\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003C\u002Fcolgroup>\u003Ctbody>\u003Ctr>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Shape\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Where it runs\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Survives your PC dying\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Cross-venue\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Typical cost\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Terminal-resident EA\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>An Expert Advisor on your own MT5 install\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>No. The terminal is the system\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>MT5 only\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Low, often one-time\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Local application\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>A desktop app on the same machine, tunnelling inbound\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>No\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Usually one venue type\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Low\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Cloud relay plus EA\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Vendor's server receives, an EA on your terminal executes\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Partly. Relay lives, terminal doesn't\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>MT5 only\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Low to mid, subscription\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Hosted execution platform\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Everything server-side, connectors to venues\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Crypto yes, MT5 no\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Crypto and MT5 possible\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Mid, subscription\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp dir=\"ltr\">The trade-off is the same in every row. The closer the logic sits to your terminal, the less it depends on a vendor being alive, and the less it can ever see beyond that one terminal. The further out it sits, the more it can coordinate across accounts and venues, and the more it needs a live connection to act.\u003C\u002Fp>\u003Cp dir=\"ltr\">The fourth row has a split worth reading carefully. A crypto exchange account connects over the internet with nothing on your machine, so it keeps running with your computer off. MT5 has no equivalent, so even a fully server-side platform still needs a terminal awake somewhere to reach your broker. Same product, different answer depending on the venue.\u003C\u002Fp>\u003Cp dir=\"ltr\">Two things follow that catch people out. A same-machine architecture means your trading laptop closing its lid is an outage. And an MT5-only bridge means a crypto account isn't part of the same system, no matter what the marketing page groups together.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Ca href=\"\u002Fplatform\u002Fsignal-execution\u002F\">Vectorhelm\u003C\u002Fa> is the fourth shape. Alerts arrive at our endpoint, the logic runs on our side, and connectors carry instructions to \u003Ca href=\"\u002Fintegrations\u002Fmetatrader-5\u002F\">MT5 brokers\u003C\u002Fa> and crypto exchanges. The honest counterweight is in that same row of the table: it needs a live connection to act, which is a real constraint and one worth reading about before choosing an architecture rather than after.\u003C\u002Fp>\u003Ch2 id=\"section-8\" dir=\"ltr\">What does your TradingView plan gate?\u003C\u002Fh2>\u003Cp dir=\"ltr\">Webhooks are a paid feature. The free tier gives you a small number of price alerts, no technical alerts, and no webhook delivery at all. A Pine script alert of any kind, let alone an automated one, needs a paid plan before anything else in this article applies.\u003C\u002Fp>\u003Cp dir=\"ltr\">Above that, the two things that matter for automation are how many alerts you can hold active at once and whether they expire. Lower paid tiers expire alerts after roughly two months; the top tiers don't. An expired alert doesn't error. It stops existing, and your strategy goes quiet in a way that looks exactly like a market with no setups.\u003C\u002Fp>\u003Cp dir=\"ltr\">Exact counts and prices move, and they changed in April 2026, so check the current numbers rather than trusting any table on any blog, including a table on this one. The tier detail gets its own page.\u003C\u002Fp>\u003Ch2 id=\"section-9\" dir=\"ltr\">What breaks, roughly in order\u003C\u002Fh2>\u003Cp dir=\"ltr\">Ranked by how often I've seen each one actually be the cause:\u003C\u002Fp>\u003Col dir=\"ltr\">\u003Cli>\u003Cp>The alert expired, or the alert cap was silently reached\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The message isn't valid JSON, so it arrived as \u003Ccode>text\u002Fplain\u003C\u002Fcode> and got rejected\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The symbol on the chart doesn't map to the symbol at the broker\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Volume rounding: the calculated size isn't a legal multiple of the venue's step\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The receiver took longer than three seconds and the request was cancelled\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The alert is set to a frequency that doesn't match what the strategy intended\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Something on the machine died: the VPS rebooted, the terminal closed, the app was never restarted\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Cp dir=\"ltr\">Notice how few of those are exotic. The top four are configuration, and three of the four produce no visible error anywhere in TradingView. Each of these gets a page of its own, because \"why isn't my alert firing\" and \"why did my order get rejected for invalid volume\" are different problems with different fixes and people search for them separately.\u003C\u002Fp>\u003Ch2 id=\"section-10\" dir=\"ltr\">What arrives at the venue isn't what the alert said\u003C\u002Fh2>\u003Cp dir=\"ltr\">An alert says \"buy.\" An order says \"buy 0.37 lots of EURUSD.raw at market.\" Everything between those two sentences is the bridge's arithmetic, and it's where the chain most often produces something legal but wrong.\u003C\u002Fp>\u003Cp dir=\"ltr\">Position size has to be derived from something: a fixed lot, a percentage of equity, or a risk-per-trade calculation against the stop distance. Then it has to be rounded to the venue's volume step and clamped to its minimum and maximum. Symbols have to be mapped, because the EURUSD on your chart and the EURUSD.raw or EURUSD_i at your broker are different strings. Both of these have their own failure signatures and their own articles.\u003C\u002Fp>\u003Cp dir=\"ltr\">The point for this page is narrower: an automated setup that works on paper and fails in practice usually fails here, in translation, not in the strategy.\u003C\u002Fp>\u003Ch2 id=\"section-11\" dir=\"ltr\">The honest limitation\u003C\u002Fh2>\u003Cp dir=\"ltr\">Automation removes hesitation, which is the point, and it removes the pause where you would have noticed something was wrong, which is the cost.\u003C\u002Fp>\u003Cp dir=\"ltr\">A discretionary trader whose feed breaks sees a flat chart. An automated trader whose bridge breaks sees nothing at all, because absence of trades looks identical to absence of signals. That's the failure mode specific to this whole category, and it's not solved by a better bridge. It's solved by checking, on a schedule, that the thing is alive — and by treating a quiet week as a question rather than as a market condition.\u003C\u002Fp>\u003Cp dir=\"ltr\">If you won't do that, automation is a worse fit for you than manual execution, and it's better to know that now than after a month of silence.\u003C\u002Fp>\u003Ch2 id=\"section-12\" dir=\"ltr\">Where to start\u003C\u002Fh2>\u003Cp dir=\"ltr\">Build it in this order, and don't skip forward.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Get a signal out of TradingView before you connect anything to money.\u003C\u002Fstrong> Point a webhook at any endpoint that shows you what it received. Confirm the alert fires when you expect, that the body arrives as JSON, and that the content type is what you think.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Then connect one venue, one strategy, on a demo or sandbox account.\u003C\u002Fstrong> Not three strategies. One, until you've seen it place an entry, take an exit, and handle a rejection.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Then decide where your limits live.\u003C\u002Fstrong> Before you go live, not after. An automated strategy with no account-level ceiling above it can spend a full day's budget in the time it takes to notice, which is the failure this whole category is best at producing.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Then add the second strategy.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp dir=\"ltr\">We're building the fourth-shape version of this: \u003Ca href=\"\u002Fsolutions\u002Ftradingview\u002F\">alerts in, risk enforced, orders out across MT5 and crypto\u003C\u002Fa>, with \u003Ca href=\"\u002Fplatform\u002Frisk-management\u002F\">limits at strategy and account level\u003C\u002Fa>. It isn't open yet. Early access is here if you want it when it is.\u003C\u002Fp>\u003Chr>\u003Cp dir=\"ltr\">\u003Cem>Vectorhelm is execution software. It runs the rules you define on accounts you own and control. Nothing here is trading advice, and no automation setup prevents losses.\u003C\u002Fem>\u003C\u002Fp>","How to Automate a TradingView Strategy End to End","What sits between an alert firing and a filled order. Webhook mechanics, bridge types, and every point where automating a TradingView strategy breaks.","13 min read",[49,52,55,58,61,64,67,70,73,76,79,82,85],{"id":50,"text":51},"section-0","What actually happens between an alert firing and an order existing?",{"id":53,"text":54},"section-1","Why doesn't TradingView just place the trade?",{"id":56,"text":57},"section-2","What does TradingView actually send, and under what rules?",{"id":59,"text":60},"section-3","What goes in the alert message?",{"id":62,"text":63},"section-4","Who else can post to your webhook URL?",{"id":65,"text":66},"section-5","Does a strategy alert mean what you think it means?",{"id":68,"text":69},"section-6","Where does position state actually live?",{"id":71,"text":72},"section-7","What kind of bridge do you need?",{"id":74,"text":75},"section-8","What does your TradingView plan gate?",{"id":77,"text":78},"section-9","What breaks, roughly in order",{"id":80,"text":81},"section-10","What arrives at the venue isn't what the alert said",{"id":83,"text":84},"section-11","The honest limitation",{"id":86,"text":87},"section-12","Where to start",40,{"related":90},[91,112,137],{"id":92,"status":36,"publishedAt":93,"updatedAt":93,"author":38,"authorSlug":39,"coverId":9,"coverUrl":9,"ogImageUrl":9,"languageCode":40,"slug":94,"title":95,"excerpt":96,"body":97,"metaTitle":98,"metaDescription":99,"readingTime":100,"headings":101,"category":16,"midCtaAfterBlock":111},"98e5e7e4-5372-4e0b-b14d-3c1f08b5b7dd","2026-09-17T11:54:00.000Z","tradingview-alerts-not-firing","TradingView Alerts Not Firing: Every Cause in Order","An alert that stops firing almost never announces it. Here are the causes ranked by how often they're actually the problem, and the one-click check that halves the search.","\u003Cp>The worst thing about a broken alert is that it looks exactly like a quiet market. No error, no email, no red banner. Your strategy just stops taking trades and you find out on Thursday that the last one was Monday.\u003C\u002Fp>\u003Cp dir=\"ltr\">Most of the time it's one of three things, and two of them fail without telling you anything.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Start with the alert log rather than the alert settings. Open the Alerts panel, click the alert, open its Log tab. If there are no entries, the alert never fired and the problem is on TradingView's side. If there are entries but nothing reached your platform, the alert fired and delivery failed. That single check cuts the list of possible causes in half, and it takes ten seconds.\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch2 id=\"section-0\" dir=\"ltr\">Causes on TradingView's side, in order\u003C\u002Fh2>\u003Cp dir=\"ltr\">\u003Cstrong>1. You've hit your plan's active alert limit.\u003C\u002Fstrong> This is the most common cause and the nastiest, because creating an alert past the cap can appear to succeed. The dialog closes, the alert looks saved, and it never fires. Count your active alerts against your plan: Essential allows 20, Plus 100, Premium 400. Delete dead ones before adding new ones.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>2. The alert expired.\u003C\u002Fstrong> Alerts on most paid tiers stop after roughly two months. Not deleted, just dormant, sitting in the inactive section of the alert manager where you won't see them unless you look. Check the expiry column. When you create an alert for automation, set the expiry to open-ended rather than accepting the default.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>3. The trigger frequency is \"Only Once.\"\u003C\u002Fstrong> It fired, once, and switched itself off. Working exactly as designed and almost never what you wanted. For anything running continuously, use Once Per Bar Close, or Once Per Bar if you accept acting on an unconfirmed candle.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>4. Your plan doesn't include webhooks at all.\u003C\u002Fstrong> Webhooks start at Essential. The free plan cannot send them, and the giveaway is simple: if the alert dialog shows no Webhook URL field, your plan doesn't have it.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>5. The script changed underneath the alert.\u003C\u002Fstrong> Update the indicator or strategy an alert is built on and the alert can be left pointing at something that no longer exists in the same form. It survives the edit and quietly stops. Any time you republish a script, check the alerts attached to it.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>6. The condition never actually became true.\u003C\u002Fstrong> Boring, common, and worth ruling out before you blame the plumbing. An alert set to fire on bar close won't fire mid-candle even when price is clearly through your level, and an intrabar condition that reverses before the close may fire and then look wrong. That's timing, not failure.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>7. The market was closed.\u003C\u002Fstrong> For stocks and forex, alerts are only evaluated while the instrument is trading. An alert set on a Saturday sits there doing nothing until the session opens, which catches people who test on a weekend and conclude the setup is broken.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>8. The chart is a synthetic series.\u003C\u002Fstrong> Heikin Ashi, Renko and similar transformed charts don't have real bars in the way an alert expects. Conditions on them can lag or skip. Build the alert on a standard candle series and apply the transformation visually if you want it.\u003C\u002Fp>\u003Ch2 id=\"section-1\" dir=\"ltr\">Causes on the receiving side\u003C\u002Fh2>\u003Cp dir=\"ltr\">If the log shows the alert fired but nothing happened downstream, the failure is in delivery or in what received it.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>The address has to be reachable and secure.\u003C\u002Fstrong> TradingView only sends to a public address over a secure connection. A local address on your own machine, or an address on a nonstandard port, will not work. If you've built your own receiver behind a tunnel, tunnels change address on restart, and the alert is still pointing at the old one.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>The receiving end has three seconds.\u003C\u002Fstrong> If it doesn't answer in that window, TradingView cancels and moves on. Nothing retries a timeout. A slow receiver looks identical to a broken one from where you're sitting.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>The message was malformed.\u003C\u002Fstrong> If your platform expects structured text and yours has a missing bracket, a smart quote pasted from a document, or a trailing comma, the whole message arrives as plain text and gets rejected. The alert log shows the refusal even when TradingView did its part correctly.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Repeated failures can get the webhook switched off.\u003C\u002Fstrong> If an address fails often enough, TradingView may stop attempting it. Fix the receiver first, then rebuild the alert rather than assuming the old one will resume.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>It arrived and was refused for a reason.\u003C\u002Fstrong> This is the case people can't diagnose, because TradingView reports a successful delivery and the trade still doesn't exist. The alert was accepted, then the platform on the other end declined to act on it: the strategy was paused, the symbol wasn't one the connected account trades, a risk limit was already reached, or the message didn't match what the strategy expected.\u003C\u002Fp>\u003Cp dir=\"ltr\">Whether you can see that depends entirely on what you're using. Some tools record every refused signal with the reason attached, which turns a mystery into a one-line answer. Others accept quietly and log nothing, and you're left comparing timestamps. It's worth knowing which kind you have before you need to know.\u003C\u002Fp>\u003Ch2 id=\"section-2\" dir=\"ltr\">The two-minute test\u003C\u002Fh2>\u003Cp dir=\"ltr\">When you're stuck, stop reading settings and send one.\u003C\u002Fp>\u003Cp dir=\"ltr\">Create a fresh alert on a condition you can force — a price level a few ticks away — with the same webhook address and the same message as the broken one. Watch whether it fires, and watch what the log says.\u003C\u002Fp>\u003Cp dir=\"ltr\">If the test alert works, the original was in a bad state and the fix is to rebuild it rather than repair it. If the test alert fails identically, the problem is the address, the message, or the plan, and you've just narrowed it to three things.\u003C\u002Fp>\u003Ch2 id=\"section-3\" dir=\"ltr\">The honest limitation\u003C\u002Fh2>\u003Cp dir=\"ltr\">You can't fully monitor this from inside TradingView, because the failure mode that costs the most produces no event at all.\u003C\u002Fp>\u003Cp dir=\"ltr\">An expired alert doesn't fire, so it writes nothing to a log. A capped alert never activates, so it has no log to write to. In both cases the evidence is an absence, and absences don't trigger notifications. The only reliable defence is a habit rather than a feature: check your active alert count and your expiry dates on a schedule, and treat a quiet week as something to verify rather than something to accept.\u003C\u002Fp>\u003Ch2 id=\"section-4\" dir=\"ltr\">Before you go back to the chart\u003C\u002Fh2>\u003Cp dir=\"ltr\">Open the Alerts panel now and check three columns: status, expiry, and how many you have against your plan's limit. That covers the top two causes on this page and takes under a minute.\u003C\u002Fp>\u003Cp dir=\"ltr\">Then set every automation alert to open-ended expiry and Once Per Bar Close, so the two silent failures can't happen to you again.\u003C\u002Fp>\u003Cp dir=\"ltr\">If you want the whole path an alert travels, from the condition firing to an order existing at your broker, the \u003Ca href=\"\u002Fblog\u002Ftradingview\u002Ftradingview-automation-end-to-end\u002F\">end-to-end version is here\u003C\u002Fa> — including why a delivered webhook proves less than people assume.\u003C\u002Fp>\u003Cp dir=\"ltr\">Vectorhelm records every signal it receives, including the ones it refuses and why, so a missing trade is a line you can read rather than a timestamp you have to reconstruct. \u003Ca href=\"\u002Fsolutions\u002Ftradingview\u002F\">Alerts in, risk enforced, orders out\u003C\u002Fa> across MT5 and crypto. It isn't open yet. Early access is here if you want it when it is.\u003C\u002Fp>\u003Chr>\u003Cp dir=\"ltr\">\u003Cem>Vectorhelm is execution software. It runs the rules you define on accounts you own and control. Nothing here is trading advice, and no automation setup prevents losses.\u003C\u002Fem>\u003C\u002Fp>","TradingView Alerts Not Firing: Every Cause Ranked","TradingView alerts not firing? The causes ranked by how often they're actually to blame, starting with the two that fail silently and show no error.","6 min read",[102,104,106,108,109],{"id":50,"text":103},"Causes on TradingView's side, in order",{"id":53,"text":105},"Causes on the receiving side",{"id":56,"text":107},"The two-minute test",{"id":59,"text":84},{"id":62,"text":110},"Before you go back to the chart",15,{"id":113,"status":36,"publishedAt":114,"updatedAt":114,"author":38,"authorSlug":39,"coverId":9,"coverUrl":9,"ogImageUrl":9,"languageCode":40,"slug":115,"title":116,"excerpt":117,"body":118,"metaTitle":119,"metaDescription":120,"readingTime":121,"headings":122,"category":27,"midCtaAfterBlock":136},"6379d2da-30b0-4439-8363-e86f43693769","2026-10-15T08:43:00.000Z","tradingview-dca-martingale","TradingView Alert to DCA or Martingale: The Real Numbers","One setting turns a DCA ladder into a Martingale ladder. Here's what each costs at eight rungs, what bounce gets you out, and which limit actually stops it.","\u003Cp>Every page selling a Martingale bot shows you the exit. The ladder goes underwater, the average entry drops, price bounces half a percent, the whole thing closes green. What none of them shows is the size of the position at the moment of that bounce.\u003C\u002Fp>\u003Cp>Here are the numbers, side by side with DCA, because they're the same ladder with one setting changed.\u003C\u002Fp>\u003Cp>\u003Cstrong>A DCA ladder and a Martingale ladder are the same thing: a sequence of entries at set price intervals, closed together at one take-profit above the average entry. The only difference is the multiplier. At 1, every rung is the same size, which is DCA. At 2, every rung doubles, which is Martingale. At eight rungs, doubling needs a 1.5% bounce to exit where equal sizing needs 4.1%, and it holds 32 times the exposure to get it. The limit that stops either one is max drawdown, not daily loss.\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch2 id=\"section-0\">What a ladder actually is\u003C\u002Fh2>\u003Cp>A signal fires and the first order opens. Price falls a set distance, and a second order opens below it. It falls again, a third. Every rung lowers the ladder's average entry, so the price it needs to climb back to in order to close in profit gets nearer with each one.\u003C\u002Fp>\u003Cp>All rungs share one take-profit, set a fixed percentage above the average entry, and the whole ladder closes together when price reaches it. There's no stop-loss on the rungs. The ladder either reaches its take-profit, or you close it, or a risk limit closes it.\u003C\u002Fp>\u003Cp>That last sentence is the whole subject of this article.\u003C\u002Fp>\u003Ch2 id=\"section-1\">One setting, two strategies\u003C\u002Fh2>\u003Cp>Here's a ladder with eight rungs, entries 1% apart starting at 100, and a take-profit 0.5% above the average. The first order is one unit.\u003C\u002Fp>\u003Ctable style=\"min-width: 75px;\">\u003Ccolgroup>\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003C\u002Fcolgroup>\u003Ctbody>\u003Ctr>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Multiplier 2 (Martingale)\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Multiplier 1 (DCA)\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Rung sizes\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>1, 2, 4, 8, 16, 32, 64, 128\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>1, 1, 1, 1, 1, 1, 1, 1\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Total exposure\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>255 × the first order\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>8 × the first order\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Deepest entry\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>93.21\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>93.21\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Average entry\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>94.13\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>96.57\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Take-profit\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>94.60\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>97.05\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Bounce needed from the deepest rung\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>+1.5%\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>+4.1%\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp>Read the last two rows together. Doubling pulls the average entry down to within a point of the deepest rung, so a 1.5% bounce closes the ladder in profit. Equal sizing leaves the average three points higher, so the bounce has to be 4.1%, nearly three times as far.\u003C\u002Fp>\u003Cp>Now read the second row. The doubling ladder bought that easier exit with 255 units of exposure against 8. If the first order was 1% of your balance, the doubling ladder at depth eight holds 255% of the balance in position value, and every further 1% drop costs about 2.5% of the balance. The DCA ladder holds 8% and loses about 0.08% per further 1% drop.\u003C\u002Fp>\u003Cp>Martingale isn't a cleverer DCA. It's a bet that price bounces 1.5% before it falls another few percent, made with everything you have.\u003C\u002Fp>\u003Cfigure>\u003Cimg src=\"\u002Fmedia\u002F462c0e4e-0290-4da9-8087-9673e9372a23-e8fd42e2.webp\" alt=\"Dca Vs Martingale Ladder Exposure\" loading=\"lazy\">\u003Cfigcaption>Same eight entries, same prices. Doubling pulls the take-profit down to 94.60, just above the deepest rung; equal sizing leaves it at 97.05, at a cost of 255× the first order against 8×.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"section-2\">What you set, and what each setting does to the maths\u003C\u002Fh2>\u003Cp>On a Vectorhelm Martingale strategy the ladder is defined by a short list, and each item changes the table above.\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>Direction.\u003C\u002Fstrong> Long or short. A hedging account can run one of each on the same symbol, as two strategies.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>First order size.\u003C\u002Fstrong> A fixed amount or a percent of balance. Everything scales from this.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Multiplier.\u003C\u002Fstrong> Each rung is the previous one times this. 1 is DCA. 2 is doubling. 1.5 is between: eight rungs total about 49 times the first order, with the average entry and the bounce landing between the two columns above.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Price step.\u003C\u002Fstrong> The minimum distance between entries, in percent. Wider steps mean a deeper ladder covers more price for the same number of rungs, and a larger loss at the bottom.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Max steps.\u003C\u002Fstrong> The number of rungs. This is where the exposure is decided. Doubling to eight rungs is 255×; to ten it's 1,023×.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Take-profit.\u003C\u002Fstrong> Percent above the ladder's average entry, shared by every rung.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>What starts the ladder.\u003C\u002Fstrong> A TradingView alert, builder conditions, or always.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Cooldown.\u003C\u002Fstrong> An optional pause before a new ladder can start after one closes.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>When a risk limit fires.\u003C\u002Fstrong> Keep the open ladder with its take-profit, or close it.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Three of those settings decide the exposure between them: first order size, multiplier and max steps. Vectorhelm doesn't work the ladder out for you, so do it before you launch, the way the table above does. Multiply the first order by the multiplier for each rung, add them up, and ask whether you'd hold that total at the deepest entry. If you wouldn't, lower max steps or the multiplier until you would. \u003Ca href=\"https:\u002F\u002Fwww.notion.so\u002Fplatform\u002Fexecution-modes\u002F\">Execution modes\u003C\u002Fa> covers how the four modes differ.\u003C\u002Fp>\u003Cfigure>\u003Cimg src=\"\u002Fmedia\u002F5f48d3e3-3596-4cfa-bf4b-7a37f736e87f-8ed1b335.webp\" alt=\"Vectorhelm Martingale Strategy Settings\" loading=\"lazy\">\u003Cfigcaption>The three settings that decide exposure: first order size, multiplier and max steps. Everything in the table above follows from these.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"section-3\">What the next alert does while a ladder is open\u003C\u002Fh2>\u003Cp>A Martingale strategy takes open signals in its direction, and nothing else. There's no close signal for a ladder; it closes at its take-profit.\u003C\u002Fp>\u003Cp>An open signal while the ladder is already open adds a rung, but only if price has moved at least the step distance from the last entry. If it hasn't, the signal is recorded and skipped. That's what stops a script alerting on every bar from stacking five positions at the same price. Above max steps, the signal is refused and the refusal is logged with that reason.\u003C\u002Fp>\u003Cp>If you close one rung by hand, the ladder carries on with the rest, and the take-profit is recomputed from the remaining average.\u003C\u002Fp>\u003Ch2 id=\"section-4\">The limit that actually stops a ladder\u003C\u002Fh2>\u003Cp>This is the part that catches people, and it's worth being precise.\u003C\u002Fp>\u003Cp>A daily loss limit counts closed trades. A ladder that's eight rungs deep and 15% underwater has closed nothing, so the daily loss limit sees nothing. It will not fire. The same is true of any tool that measures loss on realized P&amp;L only.\u003C\u002Fp>\u003Cp>The limit that sees an open ladder is \u003Cstrong>max drawdown\u003C\u002Fstrong>, measured from peak equity, because equity includes the floating loss. Set at the strategy level, it stops that ladder at the depth you chose. Set at the account level, it stops everything on the account, which is the right call when the ladder is one of several strategies sharing a balance.\u003C\u002Fp>\u003Cp>Depth is also capped twice: by the ladder's own max steps, and by the strategy's max open positions limit. The lower one wins. A ladder with max steps at ten and max open positions at six stops at six.\u003C\u002Fp>\u003Cp>So the honest configuration for a Martingale strategy is three numbers, not one. Max steps sets how deep it can go. Max drawdown sets how much it can lose on the way, floating loss included. And the account's max drawdown sits above both, in case the ladder isn't the only thing having a bad day. The ladder has no stop-loss of its own. The limits are the stop.\u003C\u002Fp>\u003Cfigure>\u003Cimg src=\"\u002Fmedia\u002F0b4e11ef-d51b-4165-959a-53c217f9b38f-b2f5a7c9.webp\" alt=\"Vectorhelm Strategy Risk Limits Max Drawdown\">\u003Cfigcaption>Max drawdown is the limit that sees an open ladder. Daily loss counts closed trades only and never fires on a ladder that’s still underwater.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"section-5\">The honest limitation\u003C\u002Fh2>\u003Cp>A ladder with a stop is a strategy with a stop. The appeal of Martingale is that it never takes the loss, and a max drawdown limit takes it for you, at the depth you set, on a day that might have bounced.\u003C\u002Fp>\u003Cp>That's the trade. Without the limit, the ladder's loss is bounded only by the account, and the table above shows how fast that bound arrives at eight rungs doubling. With the limit, some ladders get closed that would have recovered. There's no setting that gives you the recovery without the risk, and any tool suggesting there is has left a row out of its table.\u003C\u002Fp>\u003Cp>On a funded account, the arithmetic is worse than it looks here, because the firm's drawdown rule is measured on equity too. A doubling ladder that's 5% underwater on a 10% max drawdown rule has used half the account's life on one trade idea. Most firms also name martingale specifically in their rules, so read yours before the first ladder opens.\u003C\u002Fp>\u003Ch2 id=\"section-6\">Before you run one\u003C\u002Fh2>\u003Cp>Work out the total exposure at max steps for your first order size and multiplier, and decide whether you'd hold that position at the deepest entry. If not, lower max steps or the multiplier until you would.\u003C\u002Fp>\u003Cp>Set max drawdown on the strategy. Then set it on the account.\u003C\u002Fp>\u003Cp>Run it on demo through at least one losing stretch, not just the bounce.\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.notion.so\u002Fearly-access\u002F\">Join the waitlist\u003C\u002Fa>. It's free, needs no card, and your invitation comes with a \u003Ca href=\"https:\u002F\u002Fwww.notion.so\u002Fplatform\u002Fdemo-accounts\u002F\">demo account\u003C\u002Fa> running the full risk engine. Build a ladder from a TradingView alert, set the drawdown limit, and watch it close the ladder before it closes the account.\u003C\u002Fp>\u003Chr>\u003Cp>\u003Cem>Vectorhelm is execution software. It runs the rules you define on accounts you own and control. Nothing here is trading advice. Martingale and DCA ladders can lose more than the first order many times over, and no configuration of risk limits prevents losses.\u003C\u002Fem>\u003C\u002Fp>","TradingView DCA Bot vs Martingale: The Real Numbers","Run a TradingView alert as a DCA or Martingale ladder. The exposure at eight rungs, the bounce each needs to exit, and the one limit that stops a ladder.","7 min read",[123,125,127,129,131,133,134],{"id":50,"text":124},"What a ladder actually is",{"id":53,"text":126},"One setting, two strategies",{"id":56,"text":128},"What you set, and what each setting does to the maths",{"id":59,"text":130},"What the next alert does while a ladder is open",{"id":62,"text":132},"The limit that actually stops a ladder",{"id":65,"text":84},{"id":68,"text":135},"Before you run one",37,{"id":138,"status":36,"publishedAt":139,"updatedAt":139,"author":38,"authorSlug":39,"coverId":9,"coverUrl":9,"ogImageUrl":9,"languageCode":40,"slug":140,"title":141,"excerpt":142,"body":143,"metaTitle":144,"metaDescription":145,"readingTime":121,"headings":146,"category":12,"midCtaAfterBlock":162},"e282d174-7f10-4302-9b07-1dc8a688c0f9","2026-10-12T18:43:00.000Z","prop-firm-copy-trading-rules","Prop Firm Copy Trading Rules: Self-Copy vs Third-Party","Copying your own trades between your own accounts is allowed almost everywhere. Copying anyone else's gets the account closed. Here's where firms draw the line, and how they see it.","\u003Cp>Two traders at the same firm, running the same copy setup, one gets paid and one gets terminated. The difference isn't the software. It's whose account the trades came from.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Cstrong>Most forex prop firms allow copy trading between accounts you own, including accounts at other firms, and FTMO, FundingPips and Alpha Capital say so on their own pages. What they prohibit is any arrangement where trades from someone else's account land in yours, or yours land in theirs. The rules are written around ownership, not technology, and firms detect the difference from the trades themselves.\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp dir=\"ltr\">Rules below were checked on each firm's own pages on 14 October 2026. They change often, and the firm's page is the only version that counts.\u003C\u002Fp>\u003Ch2 id=\"section-0\" dir=\"ltr\">The one line every firm draws\u003C\u002Fh2>\u003Cp dir=\"ltr\">Your accounts, copied between themselves: allowed. Anyone else's account, in either direction: not.\u003C\u002Fp>\u003Cp dir=\"ltr\">The reason is the same one behind every prop firm's EA rules. A firm's payout model assumes the funded traders on its book are making independent decisions. When one person's trades land in twenty accounts, the firm isn't funding twenty traders. It's funding one, twenty times, and all twenty win or lose together. Copying between your own accounts doesn't change that picture, because the firm already sized you as one trader with a capital cap. Copying from a stranger does.\u003C\u002Fp>\u003Cp dir=\"ltr\">Everything else in the rules follows from that.\u003C\u002Fp>\u003Ch2 id=\"section-1\" dir=\"ltr\">What the firms actually say\u003C\u002Fh2>\u003Ctable style=\"min-width: 100px;\">\u003Ccolgroup>\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003Ccol style=\"min-width: 25px;\">\u003C\u002Fcolgroup>\u003Ctbody>\u003Ctr>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Firm\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Copying between your own accounts\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>Copying from or to someone else\u003C\u002Fp>\u003C\u002Fth>\u003Cth colspan=\"1\" rowspan=\"1\">\u003Cp>The condition\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>\u003Cstrong>FTMO\u003C\u002Fstrong>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Allowed, within the $400,000 maximum capital allocation per trader or strategy\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Not permitted; holding accounts under separate registrations to get around the cap is also prohibited\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Total capital across all your accounts stays inside the cap\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>\u003Cstrong>FundingPips\u003C\u002Fstrong>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Allowed. \"Copying trades between your own accounts in the same direction\" is permitted\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>\"Copy trading between different users' accounts is strictly prohibited\"\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Your FundingPips account as the master for an external copier is fine; use the investor password, since \"using your main account password may trigger further investigation\"\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>\u003Cstrong>Alpha Capital\u003C\u002Fstrong>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Allowed under its copy-trading policy, on approval through support\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Account management by a third party is listed as a prohibited strategy\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd colspan=\"1\" rowspan=\"1\">\u003Cp>Same strategy on two accounts counts against the $300,000 per-strategy cap unless trades open and close at different times\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Cp dir=\"ltr\">Alpha Capital's definition is the one to read twice. Two $200k accounts trading EURUSD on the same signal are one $400k strategy, which breaches its $300k per-strategy limit. The same two accounts trading EURUSD with entries and exits at different times are two trade ideas. The firm defines a strategy by when it trades, not by what it's called.\u003C\u002Fp>\u003Ch2 id=\"section-2\" dir=\"ltr\">How a firm tells self-copy from third-party\u003C\u002Fh2>\u003Cp dir=\"ltr\">From the trades. Not from the software, and not from what you call it.\u003C\u002Fp>\u003Cp dir=\"ltr\">A risk desk compares accounts in pairs and counts how often their trades match inside a short window: same symbol, same direction, entries within a second or two, identical stop and target distances, lot sizes that are exact multiples of each other because they came from the same risk percentage on standard account sizes. Past a threshold, the accounts are one cluster. The broker's server also records how each order was placed, by hand on desktop, from mobile, from the web terminal, or by an Expert Advisor.\u003C\u002Fp>\u003Cp dir=\"ltr\">Self-copy produces that cluster. So does third-party copy. What separates them is who owns the accounts in it. If every account in the cluster is registered to you, you're inside the rules and inside your capital cap. If the cluster spans several registrations, the firm has found exactly what the rule prohibits, and it doesn't matter whether the trades arrived through a copier, a shared EA, a Telegram channel or a friend with your login.\u003C\u002Fp>\u003Cp dir=\"ltr\">That last case is the one traders underrate. Giving someone your credentials so they can trade your challenge is third-party account management, however you describe it, and it's the version firms terminate without discussion.\u003C\u002Fp>\u003Ch2 id=\"section-3\" dir=\"ltr\">What a trade copier gets wrong on a funded account\u003C\u002Fh2>\u003Cp dir=\"ltr\">A trade copier mirrors lots. Master opens 2.0 lots, every follower opens 2.0 lots, or a fixed multiple of it. That's the copy, and that's the problem.\u003C\u002Fp>\u003Cp dir=\"ltr\">Your $100k account and your $25k account have different daily limits, different drawdown floors, and often different rules entirely if they're at different firms. A mirrored lot that's reasonable on the first is four times too big on the second. The copier doesn't know, because it's copying a trade, not running a strategy.\u003C\u002Fp>\u003Cp dir=\"ltr\">Then there's the limit itself. A copier has no account-level view. If the master account hits its daily loss and stops, the followers stop too, but only because the master stopped. If a follower account is closer to its own limit, nothing stops it first.\u003C\u002Fp>\u003Ch2 id=\"section-4\" dir=\"ltr\">Self-copy, done the way the rules describe\u003C\u002Fh2>\u003Cp dir=\"ltr\">On Vectorhelm, you don't copy trades. You run one strategy on several of your own accounts, and each account trades it as its own.\u003C\u002Fp>\u003Cp dir=\"ltr\">The strategy defines size once, in terms that don't depend on the venue: a fixed amount per order, a percentage of balance, or a risk percentage against the stop. Each account turns that into its own order from its own balance, its own broker's contract size and lot step, and its own symbol name. Then two sets of limits apply on each account separately: the strategy's five (daily realized loss, daily realized profit, max drawdown, max open positions, max trades per day) and the account's five, with the day reset in that firm's timezone. The more restrictive limit wins, and a limit firing on one account never touches the others.\u003C\u002Fp>\u003Cp dir=\"ltr\">So two accounts running the same strategy don't carry identical lots. They carry whatever each account's balance and limits allow, which is what a firm's rules are asking for.\u003C\u002Fp>\u003Cp dir=\"ltr\">A strategy routes to any of your connected accounts: two at different firms, two at the same firm, or an MT5 account and a crypto exchange account together. Each route sizes in the venue's own units and uses the venue's own symbol name, so BTCUSD at the broker and BTCUSDT at the exchange are the same strategy. The one condition is that the symbol exists on both.\u003C\u002Fp>\u003Cfigure>\u003Cimg src=\"\u002Fmedia\u002F32fa9bea-ed5a-40b7-9fe2-d8e7505e818e-acfecc83.webp\" alt=\"Vectorhelm multi-account view with one strategy routed to a $100k prop firm account and a smaller account, each showing its own lot size and risk limits\" loading=\"lazy\">\u003Cfigcaption>One strategy, two accounts, two different lot sizes. Each account sizes from its own balance and runs inside its own limits, which is what a prop firm’s self-copy rule is asking for.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"section-5\" dir=\"ltr\">For signal providers\u003C\u002Fh2>\u003Cp dir=\"ltr\">The question providers ask is how to let followers trade their signals without breaking the followers' prop rules. The answer is the same line the firms draw: distribute signals, not account access.\u003C\u002Fp>\u003Cp dir=\"ltr\">Vectorhelm never copies trades from one person's account into another's. A follower connects your signals as a source, TradingView alerts from your script or a Telegram channel, and runs their own strategy on their own account, with their own sizing and their own limits. You never touch their account and never see their credentials. Their account only receives orders that their own strategy and their own limits produced, which is the arrangement every firm's rule permits.\u003C\u002Fp>\u003Cp dir=\"ltr\">There is no feature to publish a strategy and mirror it into followers' accounts. That's by design, because that feature is the thing the rules prohibit.\u003C\u002Fp>\u003Ch2 id=\"section-6\" dir=\"ltr\">The honest limitation\u003C\u002Fh2>\u003Cp dir=\"ltr\">Self-copy inside a capital cap is allowed. Self-copy that pushes you past the cap isn't, and it's the easier mistake to make.\u003C\u002Fp>\u003Cp dir=\"ltr\">FTMO's cap is $400,000 per trader or strategy, across all accounts, before scaling. Run one strategy on three $200k accounts and you're over it, however many of them are yours. Alpha Capital's cap is per strategy at $300,000, and the firm counts two accounts on one signal as one strategy. Before you route a strategy to a second account, add up the capital it will trade and check it against the firm's number.\u003C\u002Fp>\u003Cp dir=\"ltr\">And firms don't publish where the detection threshold sits. Two of your own strategies that happen to enter on the same bar can look like one strategy to a review. Different timeframes and different entry logic keep them apart; a different name doesn't.\u003C\u002Fp>\u003Ch2 id=\"section-7\" dir=\"ltr\">Before you connect a second account\u003C\u002Fh2>\u003Cp dir=\"ltr\">Add up the capital the strategy will trade across every account, and check it against each firm's cap.\u003C\u002Fp>\u003Cp dir=\"ltr\">If the accounts are at different firms, read both firms' copy and EA rules. They differ, and the stricter one governs that account.\u003C\u002Fp>\u003Cp dir=\"ltr\">Use your investor password for anything that reads your account, never your main one.\u003C\u002Fp>\u003Cp dir=\"ltr\">Then run the strategy on both accounts in demo first and compare the lot sizes. If they're identical, you're copying trades; if they differ, each account is trading its own risk.\u003C\u002Fp>\u003Cp dir=\"ltr\">\u003Ca href=\"\u002Fearly-access\u002F\">Join the waitlist\u003C\u002Fa>. It's free, needs no card, and your invitation comes with a \u003Ca href=\"\u002Fplatform\u002Fdemo-accounts\u002F\">demo account\u003C\u002Fa> running the full risk engine, so you can route one strategy to two accounts and watch each one size and limit itself before a real challenge is involved. \u003Ca href=\"\u002Fplatform\u002Fmulti-account\u002F\">Multi-account\u003C\u002Fa> covers how routing works, and \u003Ca href=\"\u002Fsolutions\u002Fprop-firm-traders\u002F\">prop firm traders\u003C\u002Fa> covers the limits.\u003C\u002Fp>\u003Chr>\u003Cp dir=\"ltr\">\u003Cem>Vectorhelm is execution software. It runs the rules you define on accounts you own and control. Nothing here is trading advice, and no configuration of risk limits prevents losses. Prop firm rules change; verify against each firm's own published terms before relying on anything here.\u003C\u002Fem>\u003C\u002Fp>","Prop Firm Copy Trading Rules: What's Allowed in 2026","Prop firms that allow copy trading draw one line: your own accounts, yes; anyone else's, no. FTMO, FundingPips and Alpha Capital rules, and how firms tell.",[147,149,151,153,155,157,159,160],{"id":50,"text":148},"The one line every firm draws",{"id":53,"text":150},"What the firms actually say",{"id":56,"text":152},"How a firm tells self-copy from third-party",{"id":59,"text":154},"What a trade copier gets wrong on a funded account",{"id":62,"text":156},"Self-copy, done the way the rules describe",{"id":65,"text":158},"For signal providers",{"id":68,"text":84},{"id":71,"text":161},"Before you connect a second account",33,{"categories":164},[165,166,167,168,169,170,171],{"slug":6,"sort":7,"name":8,"description":9,"metaTitle":9,"metaDescription":9,"articles":10},{"slug":12,"sort":10,"name":13,"description":9,"metaTitle":9,"metaDescription":9,"articles":14},{"slug":16,"sort":17,"name":18,"description":9,"metaTitle":9,"metaDescription":9,"articles":10},{"slug":20,"sort":21,"name":22,"description":9,"metaTitle":9,"metaDescription":9,"articles":17},{"slug":24,"sort":14,"name":25,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},{"slug":27,"sort":28,"name":29,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},{"slug":31,"sort":32,"name":33,"description":9,"metaTitle":9,"metaDescription":9,"articles":7},1792269979744]