> For the complete documentation index, see [llms.txt](https://docs.openalgo.in/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.openalgo.in/flow-editor/flow-editor.md).

# Flow Editor

Flow is OpenAlgo's node-graph strategy builder at `/flow`. You wire market data into indicators, indicators into conditions, and conditions into order execution, no Python required.

This section is the **technical reference**. It assumes you are building a real strategy and want to know exactly what each node does, what the execution model guarantees, and where the boundaries are.

* [Concepts and Execution Model](/flow-editor/flow-editor/concepts.md): nodes, edges, variables, how a run actually proceeds
* [Node Reference](/flow-editor/flow-editor/node-reference.md): all 61 nodes, their fields and their outputs
* [Market Data and Timeframes](/flow-editor/flow-editor/market-data.md): quotes, history, lookback, bar limits
* [Indicators](/flow-editor/flow-editor/indicators.md): all 116 indicators, lookback, nesting
* [Tutorials](/flow-editor/flow-editor/tutorials.md): eight complete, tested strategies
* [Limitations and Gotchas](/flow-editor/flow-editor/limitations.md): read this before going live

***

## What Flow can do

| Capability                                                           | Nodes                                                                                         |
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| Trigger on a schedule, a webhook, a price level, or an order fill    | `start`, `webhookTrigger`, `priceAlert`, `orderUpdateTrigger`                                 |
| Read live quotes and market depth                                    | `getQuote`, `multiQuotes`, `getDepth`, `subscribeLtp/Quote/Depth`                             |
| Read historical OHLCV at any supported timeframe                     | `history`, `barOffset`, `priorPeriodOhlc`                                                     |
| Compute any of 116 technical indicators                              | `indicator`                                                                                   |
| Branch on price, time, position, funds, or any computed value        | `priceCondition`, `timeWindow`, `timeCondition`, `positionCheck`, `fundCheck`, `varCondition` |
| Combine conditions                                                   | `andGate`, `orGate`, `notGate`                                                                |
| Place equity, futures, and options orders                            | `placeOrder`, `smartOrder`, `optionsOrder`, `optionsMultiOrder`, `basketOrder`, `splitOrder`  |
| Manage open orders and positions                                     | `modifyOrder`, `cancelOrder`, `cancelAllOrders`, `closePositions`                             |
| Resolve option symbols, expiries, and chains                         | `optionSymbol`, `expiry`, `optionChain`, `syntheticFuture`                                    |
| Alert and log                                                        | `telegramAlert`, `whatsappAlert`, `log`, `httpRequest`                                        |
| Track P\&L for one strategy, not the account                         | `strategyPnl`                                                                                 |
| Read the account: orders, trades, positions, holdings, funds, margin | `orderBook`, `tradeBook`, `positionBook`, `holdings`, `funds`, `margin`, `getOrderStatus`     |
| Check exchange holidays and market timings                           | `holidays`, `timings`                                                                         |
| Detect a new day, week, month, quarter or year                       | `calendar`                                                                                    |
| Pause within a run                                                   | `delay`, `waitUntil`                                                                          |
| Arithmetic and state within a run                                    | `mathExpression`, `variable`                                                                  |

61 node types in total, every one documented in the [Node Reference](/flow-editor/flow-editor/node-reference.md). Every order node calls the same service functions as `/api/v1/`, so Analyzer (sandbox) mode, Action Center approval, and Telegram or WhatsApp alerts all behave identically to an API-placed order.

## What Flow cannot do

These are hard boundaries, not oversights. [Limitations](/flow-editor/flow-editor/limitations.md) covers each in detail with workarounds.

| Limitation                                | Practical effect                                                                                                                                                                                                                                                                                         |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **No state across runs**                  | `variable` values reset every run. "Have I already entered today?" must be answered from the broker (`positionCheck`, `orderBook`), not a counter. Period boundaries are the exception: `calendar` answers "is a new week/month/quarter" from the exchange calendar, no memory needed.                   |
| **`delay` and `waitUntil` block the run** | They hold the execution slot for their full duration. `delay` is silently capped at 300 seconds and then continues, so a workflow written as "wait 30 minutes" exits after five. `waitUntil` is uncapped. Waiting out a session means a second workflow on its own schedule, not a six-hour `waitUntil`. |
| **No loops**                              | You cannot iterate a symbol list. One workflow handles one symbol; clone it per symbol.                                                                                                                                                                                                                  |
| **No backtesting**                        | Flow runs forward only. Use the Python Strategy Host or the `openalgo` SDK to backtest.                                                                                                                                                                                                                  |
| **No pandas objects**                     | Variables are JSON. You get arrays of records and single values, not a `pandas.Series`.                                                                                                                                                                                                                  |
| **Max 200 bars per fetch**                | Deep history (10 years of 1-minute data) is refused by design. See [Market Data](/flow-editor/flow-editor/market-data.md).                                                                                                                                                                               |
| **Triggers cannot read upstream data**    | A trigger is the entry point, so its fields cannot contain `{{variables}}`.                                                                                                                                                                                                                              |
| **Indicators need one symbol**            | `correlation`, `beta`, `crossover`, `crossunder` need two independent series and are not available as a single `indicator` node. Crossovers are built from two indicator nodes, see [Tutorial 3](/flow-editor/flow-editor/tutorials.md#3-crossovers).                                                    |

## Live vs Analyzer mode

Flow does not have its own paper-trading switch. It inherits the global **Analyzer** toggle:

* **Analyzer on**: orders are simulated by the Sandbox engine. Order ids are real-looking, `mode` is `analyze`, and nothing reaches your broker.
* **Analyzer off**: orders go to the live broker.

Always build and validate a strategy with Analyzer on. Every example in this section was verified in Analyzer mode.
