Skip to content
New: Star-import, signal unraveling, Python 3.12 support, and more

# records module

Numba-compiled functions for portfolio records.

## best_price_idx_nb function

    best_price_idx_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None,
        relative=True
    )

Get index of best price by applying trade_best_worst_price_nb() on each trade.

## best_price_nb function

    best_price_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None
    )

Get best price by applying trade_best_worst_price_nb() on each trade.

## copy_trade_record_nb function

    copy_trade_record_nb(
        new_records,
        r,
        trade_record
    )

Copy a trade record.

## edge_ratio_nb function

    edge_ratio_nb(
        records,
        col_map,
        open,
        high,
        low,
        close,
        volatility,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None
    )

Get edge ratio of each column.

## expanding_best_price_nb function

    expanding_best_price_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None
    )

Get expanding best price of each trade.

## expanding_mae_nb function

    expanding_mae_nb(
        records,
        expanding_worst_price,
        use_returns=False
    )

Get expanding MAE of each trade.

## expanding_mfe_nb function

    expanding_mfe_nb(
        records,
        expanding_best_price,
        use_returns=False
    )

Get expanding MFE of each trade.

## expanding_worst_price_nb function

    expanding_worst_price_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None
    )

Get expanding worst price of each trade.

## expectancy_reduce_nb function

    expectancy_reduce_nb(
        pnl_arr
    )

Expectancy of a PnL array.

## fill_entry_trades_in_position_nb function

    fill_entry_trades_in_position_nb(
        order_records,
        col_map,
        col,
        first_c,
        last_c,
        init_price,
        first_entry_size,
        first_entry_fees,
        exit_idx,
        exit_size_sum,
        exit_gross_sum,
        exit_fees_sum,
        direction,
        status,
        parent_id,
        new_records,
        r
    )

Fill entry trades located within a single position.

Returns the next trade id.

## fill_position_record_nb function

    fill_position_record_nb(
        new_records,
        r,
        trade_records
    )

Fill a position record by aggregating trade records.

## fill_trade_record_nb function

    fill_trade_record_nb(
        new_records,
        r,
        col,
        size,
        entry_order_id,
        entry_idx,
        entry_price,
        entry_fees,
        exit_order_id,
        exit_idx,
        exit_price,
        exit_fees,
        direction,
        status,
        parent_id
    )

Fill a trade record.

## get_entry_trades_nb function

    get_entry_trades_nb(
        order_records,
        close,
        col_map,
        init_position=0.0,
        init_price=nan
    )

Fill entry trade records by aggregating order records.

Entry trade records are buy orders in a long position and sell orders in a short position.

Usage

    >>> from vectorbtpro import *

    >>> close = order_price = np.array([
    ...     [1, 6],
    ...     [2, 5],
    ...     [3, 4],
    ...     [4, 3],
    ...     [5, 2],
    ...     [6, 1]
    ... ])
    >>> size = np.array([
    ...     [1, -1],
    ...     [0.1, -0.1],
    ...     [-1, 1],
    ...     [-0.1, 0.1],
    ...     [1, -1],
    ...     [-2, 2]
    ... ])
    >>> target_shape = close.shape
    >>> group_lens = np.full(target_shape[1], 1)
    >>> init_cash = np.full(target_shape[1], 100)

    >>> sim_out = vbt.pf_nb.from_orders_nb(
    ...     target_shape,
    ...     group_lens,
    ...     init_cash=init_cash,
    ...     size=size,
    ...     price=close,
    ...     fees=np.asarray([[0.01]]),
    ...     slippage=np.asarray([[0.01]])
    ... )

    >>> col_map = vbt.rec_nb.col_map_nb(sim_out.order_records['col'], target_shape[1])
    >>> entry_trade_records = vbt.pf_nb.get_entry_trades_nb(sim_out.order_records, close, col_map)
    >>> pd.DataFrame.from_records(entry_trade_records)
       id  col  size  entry_order_id  entry_idx  entry_price  entry_fees  \
    0   0    0   1.0               0          0         1.01     0.01010
    1   1    0   0.1               1          1         2.02     0.00202
    2   2    0   1.0               4          4         5.05     0.05050
    3   3    0   1.0               5          5         5.94     0.05940
    4   0    1   1.0               0          0         5.94     0.05940
    5   1    1   0.1               1          1         4.95     0.00495
    6   2    1   1.0               4          4         1.98     0.01980
    7   3    1   1.0               5          5         1.01     0.01010

       exit_order_id  exit_idx  exit_price  exit_fees       pnl    return  \
    0              3         3    3.060000   0.030600  2.009300  1.989406
    1              3         3    3.060000   0.003060  0.098920  0.489703
    2              5         5    5.940000   0.059400  0.780100  0.154475
    3             -1         5    6.000000   0.000000 -0.119400 -0.020101
    4              3         3    3.948182   0.039482  1.892936  0.318676
    5              3         3    3.948182   0.003948  0.091284  0.184411
    6              5         5    1.010000   0.010100  0.940100  0.474798
    7             -1         5    1.000000   0.000000 -0.020100 -0.019901

       direction  status  parent_id
    0          0       1          0
    1          0       1          0
    2          0       1          1
    3          1       0          2
    4          1       1          0
    5          1       1          0
    6          1       1          1
    7          0       0          2

## get_exit_trades_nb function

    get_exit_trades_nb(
        order_records,
        close,
        col_map,
        init_position=0.0,
        init_price=nan
    )

Fill exit trade records by aggregating order records.

Exit trade records are sell orders in a long position and buy orders in a short position.

Usage

- Building upon the example in get_exit_trades_nb():

    >>> exit_trade_records = vbt.pf_nb.get_exit_trades_nb(sim_out.order_records, close, col_map)
    >>> pd.DataFrame.from_records(exit_trade_records)
       id  col  size  entry_order_id  entry_idx  entry_price  entry_fees  \
    0   0    0   1.0               0          0     1.101818    0.011018
    1   1    0   0.1               0          0     1.101818    0.001102
    2   2    0   1.0               4          4     5.050000    0.050500
    3   3    0   1.0               5          5     5.940000    0.059400
    4   0    1   1.0               0          0     5.850000    0.058500
    5   1    1   0.1               0          0     5.850000    0.005850
    6   2    1   1.0               4          4     1.980000    0.019800
    7   3    1   1.0               5          5     1.010000    0.010100

       exit_order_id  exit_idx  exit_price  exit_fees       pnl    return  \
    0              2         2        2.97    0.02970  1.827464  1.658589
    1              3         3        3.96    0.00396  0.280756  2.548119
    2              5         5        5.94    0.05940  0.780100  0.154475
    3             -1         5        6.00    0.00000 -0.119400 -0.020101
    4              2         2        4.04    0.04040  1.711100  0.292496
    5              3         3        3.03    0.00303  0.273120  0.466872
    6              5         5        1.01    0.01010  0.940100  0.474798
    7             -1         5        1.00    0.00000 -0.020100 -0.019901

       direction  status  parent_id
    0          0       1          0
    1          0       1          0
    2          0       1          1
    3          1       0          2
    4          1       1          0
    5          1       1          0
    6          1       1          1
    7          0       0          2

## get_position_feature_nb function

    get_position_feature_nb(
        order_records,
        close,
        col_map,
        feature=0,
        init_position=0.0,
        init_price=nan,
        fill_closed_position=False,
        fill_exit_price=True
    )

Get the position's feature at each time step.

For the list of supported features see PositionFeature.

If `fill_exit_price` is True and a part of the position is not closed yet, will fill the exit price as if the part was closed using the current close.

If `fill_closed_position` is True, will forward-fill missing values with the prices of the previously closed position.

## get_positions_nb function

    get_positions_nb(
        trade_records,
        col_map
    )

Fill position records by aggregating trade records.

Trades can be entry trades, exit trades, and even positions themselves - all will produce the same results.

Usage

- Building upon the example in get_exit_trades_nb():

    >>> col_map = vbt.rec_nb.col_map_nb(exit_trade_records['col'], target_shape[1])
    >>> position_records = vbt.pf_nb.get_positions_nb(exit_trade_records, col_map)
    >>> pd.DataFrame.from_records(position_records)
       id  col  size  entry_order_id  entry_idx  entry_price  entry_fees  \
    0   0    0   1.1               0          0     1.101818     0.01212
    1   1    0   1.0               4          4     5.050000     0.05050
    2   2    0   1.0               5          5     5.940000     0.05940
    3   0    1   1.1               0          0     5.850000     0.06435
    4   1    1   1.0               4          4     1.980000     0.01980
    5   2    1   1.0               5          5     1.010000     0.01010

       exit_order_id  exit_idx  exit_price  exit_fees      pnl    return  \
    0              3         3    3.060000    0.03366  2.10822  1.739455
    1              5         5    5.940000    0.05940  0.78010  0.154475
    2             -1         5    6.000000    0.00000 -0.11940 -0.020101
    3              3         3    3.948182    0.04343  1.98422  0.308348
    4              5         5    1.010000    0.01010  0.94010  0.474798
    5             -1         5    1.000000    0.00000 -0.02010 -0.019901

       direction  status  parent_id
    0          0       1          0
    1          0       1          1
    2          1       0          2
    3          1       1          0
    4          1       1          1
    5          0       0          2

## mae_nb function

    mae_nb(
        size,
        direction,
        entry_price,
        worst_price,
        use_returns=False
    )

Apply trade_mae_nb() on each trade.

## mfe_nb function

    mfe_nb(
        size,
        direction,
        entry_price,
        best_price,
        use_returns=False
    )

Apply trade_mfe_nb() on each trade.

## price_status_nb function

    price_status_nb(
        records,
        high,
        low
    )

Return the status of the order's price related to high and low.

See OrderPriceStatus.

## profit_factor_reduce_nb function

    profit_factor_reduce_nb(
        pnl_arr
    )

Profit factor of a PnL array.

## running_edge_ratio_nb function

    running_edge_ratio_nb(
        records,
        col_map,
        open,
        high,
        low,
        close,
        volatility,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None,
        incl_shorter=False
    )

Get running edge ratio of each column.

## sqn_reduce_nb function

    sqn_reduce_nb(
        pnl_arr,
        ddof=0
    )

SQN of a PnL array.

## trade_best_worst_price_nb function

    trade_best_worst_price_nb(
        trade,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None,
        idx_relative=True,
        cont_idx=-1,
        one_iteration=False,
        vmin=nan,
        vmax=nan,
        imin=-1,
        imax=-1
    )

Best price, worst price, and their indices during a trade.

## trade_losing_streak_nb function

    trade_losing_streak_nb(
        records
    )

Return the current losing streak of each trade.

## trade_mae_nb function

    trade_mae_nb(
        size,
        direction,
        entry_price,
        worst_price,
        use_returns=False
    )

Compute Maximum Adverse Excursion (MAE).

## trade_mfe_nb function

    trade_mfe_nb(
        size,
        direction,
        entry_price,
        best_price,
        use_returns=False
    )

Compute Maximum Favorable Excursion (MFE).

## trade_winning_streak_nb function

    trade_winning_streak_nb(
        records
    )

Return the current winning streak of each trade.

## weighted_price_reduce_meta_nb function

    weighted_price_reduce_meta_nb(
        idxs,
        col,
        size_arr,
        price_arr
    )

Size-weighted price average.

## win_rate_reduce_nb function

    win_rate_reduce_nb(
        pnl_arr
    )

Win rate of a PnL array.

## worst_price_idx_nb function

    worst_price_idx_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None,
        relative=True
    )

Get worst price by applying trade_best_worst_price_nb() on each trade.

## worst_price_nb function

    worst_price_nb(
        records,
        open,
        high,
        low,
        close,
        entry_price_open=False,
        exit_price_close=False,
        max_duration=None
    )

Get worst price by applying trade_best_worst_price_nb() on each trade.

#### Cookie consent

We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.

- Google Analytics
- GitHub

Manage settings