Fill data actions
Press one button in the extension to copy prices, direction, and other trade details from the page into your trading journal form.
What you get
Fill data actions read values already shown on a chart or broker page you enabled, then populate matching fields on the open or close trade form — so you spend less time retyping.
How to set one up
In the web app, create an action and map each form field (symbol, direction, entry price, and so on) to the spot on the page that shows that value. Direction and similar choice fields can translate page wording (for example buy/sell) into journal values (long/short).
Site pattern
The site field must match an enabled-site entry in extension settings exactly (for example *.example.com). Actions only load on sites you allow.
Multiple steps
Content can be one object or a JSON array. Use an array to click a control, wait, then fill fields. Each step can set action, content, and optional waitMs. If a step omits action, it uses this fillData type.
Field tips
Text is trimmed. Numbers are parsed from cell text. Timestamps map to opened or closed local times. Optional close fields include profit/loss and excursion values.
Examples
Reads entry price and side from the TradingView positions table, mapping buy/sell to long/short. Import this as a full journal action, or copy the content object into an existing fillData action.
{
"name": "Positions entry price and direction",
"site": "*.tradingview.com",
"location": "openPosition",
"action": "fillData",
"iconId": "text",
"content": {
"entryPrice": "[data-account-manager-page-id=\"positions\"] td[data-label=\"Avg Fill Price\"]",
"direction": {
"selector": "td[data-label=\"Side\"]",
"map": {
"buy": "long",
"sell": "short"
}
}
},
"enabled": true,
"sortOrder": 0
}Reads the symbol from a positions table cell using a plain CSS selector string. Import this as a full journal action, or copy the content object into an existing fillData action.
{
"name": "Positions symbol",
"site": "*.tradingview.com",
"location": "openPosition",
"action": "fillData",
"iconId": "text",
"content": {
"symbol": "[data-account-manager-page-id=\"positions\"] td[data-label=\"Symbol\"]"
},
"enabled": true,
"sortOrder": 0
}If List of Trades is not selected, clicks that tab, waits, then reads the latest replay list-of-trades row into journal fields (entry and exit prices, methods, timestamps, size, side, P/L, and timeframe).
{
"name": "Replay open position",
"site": "*.tradingview.com",
"location": "openPosition",
"action": "fillData",
"iconId": "forward",
"content": [
{
"action": "conditional",
"content": {
"mode": "if",
"selector": "button[id='List of Trades'][aria-selected='false']",
"then": [
{
"action": "click",
"content": {
"selector": "button[id='List of Trades']"
},
"waitMs": 300
}
]
}
},
{
"action": "fillData",
"content": {
"symbol": {
"selector": "div[class*=\"searchButton\"] button[title^=\"Symbol\"] span"
},
"direction": {
"map": {
"long": "long",
"short": "short"
},
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td[class*=\"tradeNumber\"] span:nth-child(2)"
},
"exitPrice": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(6) div[data-part=\"0\"] div[class*=\"value-\"]"
},
"timeframe": {
"selector": "div[data-is-fake-main-panel=\"true\"] div[role*=\"radiogroup\"] button[aria-checked=true] div[class^=value]"
},
"entryPrice": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(6) div[data-part=\"1\"] div[class*=\"value-\"]"
},
"exitMethod": {
"map": {
"SL": "stoploss",
"TP": "takeprofit",
"Open": "manual",
"Limit": "manual",
"Market": "manual",
"Stop loss": "stoploss",
"Take profit": "takeprofit"
},
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(5) div[data-part=\"0\"] div[class*=\"rowContent\"]"
},
"profitLoss": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(8)"
},
"entryMethod": {
"map": {
"Stop": "stoporder",
"Limit": "limitorder",
"Stop order": "stoporder",
"Limit order": "limitorder",
"Market order": "marketorder",
"Buy market order": "marketorder",
"Stop limit order": "stoplimitorder",
"Stop-limit order": "stoplimitorder",
"Sell market order": "marketorder"
},
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(5) div[data-part=\"1\"] div[class*=\"rowContent\"]"
},
"positionSize": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td div[class*=\"positionSize\"] div:nth-child(1)"
},
"exitTimestamp": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(4) div[data-part=\"0\"]"
},
"entryTimestamp": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(4) div[data-part=\"1\"]"
}
}
}
],
"enabled": true,
"sortOrder": 0
}If List of Trades is not selected, clicks that tab, waits, then reads the latest replay trades row into the close-position journal form (exit price, method, P/L, timestamp, run-up, and drawdown).
{
"name": "Replay close position",
"site": "*.tradingview.com",
"location": "closePosition",
"action": "fillData",
"iconId": "forward",
"content": [
{
"action": "conditional",
"content": {
"mode": "if",
"selector": "button[id='List of Trades'][aria-selected='false']",
"then": [
{
"action": "click",
"content": {
"selector": "button[id='List of Trades']"
},
"waitMs": 300
}
]
}
},
{
"action": "fillData",
"content": {
"exitPrice": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(6) div[data-part=\"0\"] div[class*=\"value-\"]"
},
"exitMethod": {
"map": {
"Buy market order": "manual",
"Bracket Stop Loss": "stoploss",
"Sell market order": "manual",
"Bracket Take Profit": "takeprofit"
},
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(5) div[data-part=\"0\"] div[class*=\"rowContent\"]"
},
"profitLoss": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(8) div[class*=value]"
},
"exitTimestamp": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(4) div[data-part=\"0\"]"
},
"adverseExcursion": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(11) div[class*=value]"
},
"favorableExcursion": {
"selector": "#bottom-area .replay_trading table.ka-table tbody tr[class*=\"ka-row\"] td:nth-child(10) div[class*=value]"
}
}
}
],
"enabled": true,
"sortOrder": 0
}If the Positions tab is not selected, clicks button#positions, waits, then reads the latest positions row into journal fields (symbol, side, size, prices, stop/take, and open time).
{
"name": "Alchemy open position",
"site": "*.tradingview.com",
"location": "openPosition",
"action": "fillData",
"iconId": "forward",
"content": [
{
"action": "conditional",
"content": {
"mode": "if",
"selector": "button[id='positions'][aria-selected='false']",
"then": [
{
"action": "click",
"content": {
"selector": "button[id='positions']"
},
"waitMs": 300
}
]
}
},
{
"action": "fillData",
"content": {
"symbol": {
"selector": "div[class*=\"searchButton\"] button[title^=\"Symbol\"] span"
},
"stopLoss": {
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Stop Loss\"] div"
},
"direction": {
"map": {
"long": "long",
"short": "short"
},
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Side\"] span"
},
"timeframe": {
"selector": "div[data-is-fake-main-panel=\"true\"] div[role*=\"radiogroup\"] button[aria-checked=true] div[class^=value]"
},
"entryPrice": {
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Avg Fill Price\"] div"
},
"takeProfit": {
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Take Profit\"] div"
},
"positionSize": {
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Qty\"] div"
},
"entryTimestampUtc": {
"selector": "#bottom-area table.ka-table tbody tr[class*=\"ka-row\"] td[data-label*=\"Open Time\"] div"
}
}
}
],
"enabled": true,
"sortOrder": 0
}Content is a JSON array: click List of Trades, wait 300ms, then copy entry price and direction. The action type is fillData so omitted step actions inherit fill. Import this as a full journal action, or paste the content array onto any existing action.
{
"name": "Open list of trades then fill",
"site": "*.tradingview.com",
"location": "openPosition",
"action": "fillData",
"iconId": "play",
"content": [
{
"action": "click",
"content": {
"selector": "#bottom-area button[id=\"List of Trades\"]"
},
"waitMs": 300
},
{
"action": "fillData",
"content": {
"entryPrice": "[data-account-manager-page-id=\"positions\"] td[data-label=\"Avg Fill Price\"]",
"direction": {
"selector": "td[data-label=\"Side\"]",
"map": {
"buy": "long",
"sell": "short"
}
}
}
}
],
"enabled": true,
"sortOrder": 0
}