Importing

Using the column mapper for any CSV

Drop any CSV, tab or text file. If Actal does not recognise the header line, it asks which column is which, once, and remembers the mapping for every file with the same header. Twelve platforms are detected automatically; everything else goes through the mapper.

Last checked Send feedback on this article

What to do

  1. 1

    Click Import trades, pick the account, and drop the file. If the header is not recognised you land on the mapping page: "This file was not recognised; tell the journal what each column holds".

  2. 2

    Pick a mode next to "Map the columns": "One row per execution" when each row is a fill, or "One row per round trip" when each row is a finished trade. Actal guesses round trip when a header mentions exit or close.

  3. 3

    Check the guesses. Each field has a dropdown; required fields are marked with a red star. Pick "not in this file" for anything you do not have.

  4. 4

    If you mapped a Status column, type the value that counts, for example Filled, in the box under it.

  5. 5

    Give the mapping a name under "Save as" and click "Save mapping and preview".

  6. 6

    On the preview check the first rows, the day/month note, the timezone, unknown symbols and the commission, then click Import N trades.

The two modes

"One row per execution" is for order or fill exports: each row is one fill with a price and a time, and Actal pairs the fills into round trips, including scale-ins and partial exits. A position still open at the end of the file is not a trade and is listed under Parser notes. "One row per round trip" is for files where each row already is a finished trade, with an entry price, an exit price and an exit time.

Every field

FieldNeededWhat it holds
SymbolRequirede.g. MNQZ5, ES 12-25, /MNQU6. Actal works out the root and the point value.
SideOptionalBuy/Sell, Long/Short, B/S, Bought/Sold. Leave blank if the quantity is signed.
QuantityRequiredContracts, lots or shares filled.
Fill priceRequired, execution modeThe price of the fill.
Fill timeRequired, execution modeDate and time, any common format.
Entry priceRequired, round trip mode
Exit priceRequired, round trip mode
Entry timeOptional, round trip modeExit time is used when missing.
Exit timeRequired, round trip mode
P&LOptional, round trip modeTaken as authoritative when mapped, else computed from prices and the point value.
CommissionOptionalCounted as the trade's cost.
MFEOptional, round trip modeThe most the trade was in profit, in money.
MAEOptional, round trip modeThe most the trade was against you, in money.
Stop lossOptionalThe price your stop was at. Sets each trade's risk and R. In execution mode, put it on the row that opens the trade.
Order IDOptionalHelps duplicate detection.
AccountOptionalRows with different account values never pair with each other.
StatusOptionalWith an allowed value typed below it, other rows are skipped.

Guesses come from the header names: Symbol, Instrument, Contract or Ticker for the symbol; Qty, Quantity, Contracts, Size or Volume for the quantity; Fill Time, Exec Time, Timestamp, Date/Time for the time; Entry price, Open price, Exit price, Close price; PnL, P&L, Profit, Realized for the P&L; Commission, Fee, Fees; and so on. Header case does not matter. Anything wrong, change it before you save.

Side values and signed quantities

  • A buy is b, buy, bot, bought, long or l, or anything that starts with buy, bought or long.
  • A sell is s, sell, sld, sold, short or sh, or anything that starts with sell, sold or short.
  • With no side column, a positive quantity is a buy and a negative one a sell. The quantity is stored without the sign.
  • In round trip mode with no side column and unsigned quantities, the side is worked out from the P&L and the prices, and the preview says how many trades were read as shorts that way. Map a Side column to set it yourself.
  • A row with no usable symbol, quantity or side is skipped with the note "Missing symbol, quantity, or side" and its line number.

The status filter

Order exports list cancelled and working orders next to the filled ones. Map the Status column, and a box appears under it: "allowed value, e.g. Filled", prefilled with Filled. Only rows whose status equals that value are read; case does not matter. Several values separated by commas are accepted. The preview counts what was dropped: "N row(s) skipped by the status filter". If every row is skipped you get 0 trades, so check the value against the file's own spelling.

Dates, times and the day/month order

Times can be ISO (2026-08-28 09:35:12), US (08/28/2026 9:35:12 AM), European (28.08.2026 09:35), written out (Aug 8, 2025 at 08:43), with or without seconds, and with a trailing offset or a US zone such as EDT. A time Actal cannot read is skipped with the note "Unparseable time".

Slash dates like 05/10/2026 can be either way. Actal settles the order in this priority: a day number above 12 somewhere in the file proves it; otherwise your own choice on a previous file with the same header; otherwise a date in the file name, such as 2026-10-07 or 7 Oct 2026; otherwise the upload day, since a trade cannot be more than a day in the future; otherwise your region (day/month outside the Americas). When the order was not proven, the preview shows a box such as "Dates like 05/10/2026 could go either way. Read as 10 May (month/day)." with a button "Switch to" the other reading. The switch is remembered on the saved mapping.

Times with no offset are read in your profile timezone. When that happens the preview shows "File timestamps are in" so you can pick the platform's zone and click "Apply and re-check".

The stop loss column

Map a column such as Stop Loss, SL or S/L and each trade's risk is set from the distance between the entry and the stop, at the contract's dollars per point. The guess only comes from headers that cannot be a stop order's trigger price, so a column named Stop Price is never picked up by itself. A stop is kept only when it reads as one: below a long's entry or above a short's, within half the entry price of it, and never on options. Stops that fail are left out with a note saying why, for example that the column needs the stop's price, not ticks, points or dollars.

On the preview the file's stop beats the risk rules for every trade that has one, and the risk box says "The stop loss in your file sets the risk on N trade(s)." A number typed on a row still wins for that trade. See The Stop and Risk columns.

Saved mappings

A mapping is keyed by the header line, lower-cased with the spacing collapsed. The next file with the same header skips the mapper and goes straight to the preview. The import page lists them under "Your saved column mappings" with a Delete button each. To change a mapping, delete it and drop the file again. The mapper cannot be reopened from the preview.

When the preview looks wrong

  • Unknown symbols block the import until you enter a point value in the "Unknown symbols" box: the dollar value of a one-point move for one contract, or 1 for stocks and crypto. Nothing is guessed. Confirmed values live in Settings > Contracts and win over the built-in table.
  • Prices ten or a hundred times too big get a suggestion "divide prices by N" with a checkbox. Untick it to keep the file's prices.
  • No commission column mapped? The preview asks for a commission per contract, round trip, like it does for Tradovate.
  • A column you mapped that is missing from a later file is listed under Parser notes as "Mapped column(s) not found in this file".

Questions people ask

Did this not answer it?

Ask from the Feedback page in the app. The founder answers every question there, and the answer ends up in this help centre. Not signed in? Email hello@actal.io.