logs module¶
Base class for working with log records.
Order records capture information on simulation logs. Logs are populated when simulating a portfolio and can be accessed as Portfolio.logs.
>>> from vectorbtpro import *
>>> np.random.seed(42)
>>> price = pd.DataFrame({
... 'a': np.random.uniform(1, 2, size=100),
... 'b': np.random.uniform(1, 2, size=100)
... }, index=[datetime(2020, 1, 1) + timedelta(days=i) for i in range(100)])
>>> size = pd.DataFrame({
... 'a': np.random.uniform(-100, 100, size=100),
... 'b': np.random.uniform(-100, 100, size=100),
... }, index=[datetime(2020, 1, 1) + timedelta(days=i) for i in range(100)])
>>> pf = vbt.Portfolio.from_orders(price, size, fees=0.01, freq='d', log=True)
>>> logs = pf.logs
>>> logs.filled.count()
a 88
b 99
Name: count, dtype: int64
>>> logs.ignored.count()
a 0
b 0
Name: count, dtype: int64
>>> logs.rejected.count()
a 12
b 1
Name: count, dtype: int64
Stats¶
Hint
See StatsBuilderMixin.stats() and Logs.metrics.
>>> logs['a'].stats()
Start 2020-01-01 00:00:00
End 2020-04-09 00:00:00
Period 100 days 00:00:00
Total Records 100
Status Counts: None 0
Status Counts: Filled 88
Status Counts: Ignored 0
Status Counts: Rejected 12
Status Info Counts: None 88
Status Info Counts: NoCashLong 12
Name: a, dtype: object
StatsBuilderMixin.stats() also supports (re-)grouping:
>>> logs.stats(group_by=True)
Start 2020-01-01 00:00:00
End 2020-04-09 00:00:00
Period 100 days 00:00:00
Total Records 200
Status Counts: None 0
Status Counts: Filled 187
Status Counts: Ignored 0
Status Counts: Rejected 13
Status Info Counts: None 187
Status Info Counts: NoCashLong 13
Name: group, dtype: object
Plots¶
Hint
See PlotsBuilderMixin.plots() and Logs.subplots.
This class does not have any subplots.
logs_attach_field_config ReadonlyConfig¶
Config of fields to be attached to Logs.
ReadonlyConfig(
res_side=dict(
attach_filters=True
),
res_status=dict(
attach_filters=True
),
res_status_info=dict(
attach_filters=True
)
)
logs_field_config ReadonlyConfig¶
Field config for Logs.
ReadonlyConfig(
dtype=np.dtype([
('id', 'int64'),
('group', 'int64'),
('col', 'int64'),
('idx', 'int64'),
('price_area_open', 'float64'),
('price_area_high', 'float64'),
('price_area_low', 'float64'),
('price_area_close', 'float64'),
('st0_cash', 'float64'),
('st0_position', 'float64'),
('st0_debt', 'float64'),
('st0_locked_cash', 'float64'),
('st0_free_cash', 'float64'),
('st0_val_price', 'float64'),
('st0_value', 'float64'),
('req_size', 'float64'),
('req_price', 'float64'),
('req_size_type', 'int64'),
('req_direction', 'int64'),
('req_fees', 'float64'),
('req_fixed_fees', 'float64'),
('req_slippage', 'float64'),
('req_min_size', 'float64'),
('req_max_size', 'float64'),
('req_size_granularity', 'float64'),
('req_leverage', 'float64'),
('req_leverage_mode', 'int64'),
('req_reject_prob', 'float64'),
('req_price_area_vio_mode', 'int64'),
('req_allow_partial', 'bool'),
('req_raise_reject', 'bool'),
('req_log', 'bool'),
('res_size', 'float64'),
('res_price', 'float64'),
('res_fees', 'float64'),
('res_side', 'int64'),
('res_status', 'int64'),
('res_status_info', 'int64'),
('st1_cash', 'float64'),
('st1_position', 'float64'),
('st1_debt', 'float64'),
('st1_locked_cash', 'float64'),
('st1_free_cash', 'float64'),
('st1_val_price', 'float64'),
('st1_value', 'float64'),
('order_id', 'int64')
]),
settings=dict(
id=dict(
title='Log Id'
),
col=dict(
title='Column'
),
idx=dict(
title='Index'
),
group=dict(
title='Group'
),
price_area_open=dict(
title='[PA] Open'
),
price_area_high=dict(
title='[PA] High'
),
price_area_low=dict(
title='[PA] Low'
),
price_area_close=dict(
title='[PA] Close'
),
st0_cash=dict(
title='[ST0] Cash'
),
st0_position=dict(
title='[ST0] Position'
),
st0_debt=dict(
title='[ST0] Debt'
),
st0_locked_cash=dict(
title='[ST0] Locked Cash'
),
st0_free_cash=dict(
title='[ST0] Free Cash'
),
st0_val_price=dict(
title='[ST0] Valuation Price'
),
st0_value=dict(
title='[ST0] Value'
),
req_size=dict(
title='[REQ] Size'
),
req_price=dict(
title='[REQ] Price'
),
req_size_type=dict(
title='[REQ] Size Type',
mapping=SizeTypeT(
Amount=0,
Value=1,
Percent=2,
Percent100=3,
ValuePercent=4,
ValuePercent100=5,
TargetAmount=6,
TargetValue=7,
TargetPercent=8,
TargetPercent100=9
)
),
req_direction=dict(
title='[REQ] Direction',
mapping=DirectionT(
LongOnly=0,
ShortOnly=1,
Both=2
)
),
req_fees=dict(
title='[REQ] Fees'
),
req_fixed_fees=dict(
title='[REQ] Fixed Fees'
),
req_slippage=dict(
title='[REQ] Slippage'
),
req_min_size=dict(
title='[REQ] Min Size'
),
req_max_size=dict(
title='[REQ] Max Size'
),
req_size_granularity=dict(
title='[REQ] Size Granularity'
),
req_leverage=dict(
title='[REQ] Leverage'
),
req_leverage_mode=dict(
title='[REQ] Leverage Mode',
mapping=LeverageModeT(
Lazy=0,
Eager=1
)
),
req_reject_prob=dict(
title='[REQ] Rejection Prob'
),
req_price_area_vio_mode=dict(
title='[REQ] Price Area Violation Mode',
mapping=PriceAreaVioModeT(
Ignore=0,
Cap=1,
Error=2
)
),
req_allow_partial=dict(
title='[REQ] Allow Partial'
),
req_raise_reject=dict(
title='[REQ] Raise Rejection'
),
req_log=dict(
title='[REQ] Log'
),
res_size=dict(
title='[RES] Size'
),
res_price=dict(
title='[RES] Price'
),
res_fees=dict(
title='[RES] Fees'
),
res_side=dict(
title='[RES] Side',
mapping=OrderSideT(
Buy=0,
Sell=1
)
),
res_status=dict(
title='[RES] Status',
mapping=OrderStatusT(
Filled=0,
Ignored=1,
Rejected=2
)
),
res_status_info=dict(
title='[RES] Status Info',
mapping=OrderStatusInfoT(
SizeNaN=0,
PriceNaN=1,
ValPriceNaN=2,
ValueNaN=3,
ValueZeroNeg=4,
SizeZero=5,
NoCash=6,
NoOpenPosition=7,
MaxSizeExceeded=8,
RandomEvent=9,
CantCoverFees=10,
MinSizeNotReached=11,
PartialFill=12
)
),
st1_cash=dict(
title='[ST1] Cash'
),
st1_position=dict(
title='[ST1] Position'
),
st1_debt=dict(
title='[ST1] Debt'
),
st1_locked_cash=dict(
title='[ST1] Locked Cash'
),
st1_free_cash=dict(
title='[ST1] Free Cash'
),
st1_val_price=dict(
title='[ST1] Valuation Price'
),
st1_value=dict(
title='[ST1] Value'
),
order_id=dict(
title='Order Id',
mapping='ids'
)
)
)
Logs class¶
Extends PriceRecords for working with log records.
Superclasses
- Analyzable
- AttrResolverMixin
- Cacheable
- Chainable
- Comparable
- Configured
- ExtPandasIndexer
- HasSettings
- IndexApplier
- IndexingBase
- Itemable
- PandasIndexer
- Paramable
- Pickleable
- PlotsBuilderMixin
- Prettified
- PriceRecords
- Records
- RecordsWithFields
- StatsBuilderMixin
- Wrapping
Inherited members
- AttrResolverMixin.deep_getattr()
- AttrResolverMixin.post_resolve_attr()
- AttrResolverMixin.pre_resolve_attr()
- AttrResolverMixin.resolve_attr()
- AttrResolverMixin.resolve_shortcut_attr()
- Cacheable.get_ca_setup()
- Chainable.pipe()
- Configured.copy()
- Configured.equals()
- Configured.get_writeable_attrs()
- Configured.prettify()
- Configured.resolve_merge_kwargs()
- Configured.update_config()
- HasSettings.get_path_setting()
- HasSettings.get_path_settings()
- HasSettings.get_setting()
- HasSettings.get_settings()
- HasSettings.has_path_setting()
- HasSettings.has_path_settings()
- HasSettings.has_setting()
- HasSettings.has_settings()
- HasSettings.reset_settings()
- HasSettings.resolve_setting()
- HasSettings.resolve_settings_paths()
- HasSettings.set_settings()
- IndexApplier.add_levels()
- IndexApplier.drop_duplicate_levels()
- IndexApplier.drop_levels()
- IndexApplier.drop_redundant_levels()
- IndexApplier.rename_levels()
- IndexApplier.select_levels()
- IndexingBase.indexing_setter_func()
- PandasIndexer.xs()
- Pickleable.decode_config()
- Pickleable.decode_config_node()
- Pickleable.dumps()
- Pickleable.encode_config()
- Pickleable.encode_config_node()
- Pickleable.file_exists()
- Pickleable.getsize()
- Pickleable.load()
- Pickleable.loads()
- Pickleable.modify_state()
- Pickleable.resolve_file_path()
- Pickleable.save()
- PlotsBuilderMixin.build_subplots_doc()
- PlotsBuilderMixin.override_subplots_doc()
- PlotsBuilderMixin.plots()
- PriceRecords.bar_close
- PriceRecords.bar_close_time
- PriceRecords.bar_high
- PriceRecords.bar_low
- PriceRecords.bar_open
- PriceRecords.bar_open_time
- PriceRecords.close
- PriceRecords.cls_dir
- PriceRecords.col_arr
- PriceRecords.col_mapper
- PriceRecords.column_only_select
- PriceRecords.config
- PriceRecords.field_names
- PriceRecords.from_records()
- PriceRecords.get_bar_close()
- PriceRecords.get_bar_close_time()
- PriceRecords.get_bar_high()
- PriceRecords.get_bar_low()
- PriceRecords.get_bar_open()
- PriceRecords.get_bar_open_time()
- PriceRecords.group_select
- PriceRecords.high
- PriceRecords.id_arr
- PriceRecords.idx_arr
- PriceRecords.iloc
- PriceRecords.indexing_func()
- PriceRecords.indexing_func_meta()
- PriceRecords.indexing_kwargs
- PriceRecords.loc
- PriceRecords.low
- PriceRecords.open
- PriceRecords.pd_mask
- PriceRecords.range_only_select
- PriceRecords.readable
- PriceRecords.rec_state
- PriceRecords.records
- PriceRecords.records_arr
- PriceRecords.records_readable
- PriceRecords.resample()
- PriceRecords.resolve_column_stack_kwargs()
- PriceRecords.resolve_row_stack_kwargs()
- PriceRecords.self_aliases
- PriceRecords.values
- PriceRecords.wrapper
- PriceRecords.xloc
- Records.apply()
- Records.apply_mask()
- Records.build_field_config_doc()
- Records.column_stack()
- Records.column_stack_records_arrs()
- Records.count()
- Records.coverage_map()
- Records.first_n()
- Records.get_apply_mapping_arr()
- Records.get_apply_mapping_str_arr()
- Records.get_column_stack_record_indices()
- Records.get_field_arr()
- Records.get_field_mapping()
- Records.get_field_name()
- Records.get_field_setting()
- Records.get_field_title()
- Records.get_map_field()
- Records.get_map_field_to_columns()
- Records.get_map_field_to_index()
- Records.get_pd_mask()
- Records.get_row_stack_record_indices()
- Records.has_conflicts()
- Records.is_sorted()
- Records.last_n()
- Records.map()
- Records.map_array()
- Records.map_field()
- Records.override_field_config_doc()
- Records.prepare_customdata()
- Records.random_n()
- Records.replace()
- Records.resample_meta()
- Records.resample_records_arr()
- Records.row_stack()
- Records.row_stack_records_arrs()
- Records.select_cols()
- Records.sort()
- Records.to_readable()
- StatsBuilderMixin.build_metrics_doc()
- StatsBuilderMixin.override_metrics_doc()
- StatsBuilderMixin.stats()
- Wrapping.apply_to_index()
- Wrapping.as_param()
- Wrapping.items()
- Wrapping.regroup()
- Wrapping.resolve_self()
- Wrapping.resolve_stack_kwargs()
- Wrapping.select_col()
- Wrapping.select_col_from_obj()
- Wrapping.split()
- Wrapping.split_apply()
col property¶
Mapped array of the field col.
field_config class variable¶
Field config of Logs.
HybridConfig(
dtype=np.dtype([
('id', 'int64'),
('group', 'int64'),
('col', 'int64'),
('idx', 'int64'),
('price_area_open', 'float64'),
('price_area_high', 'float64'),
('price_area_low', 'float64'),
('price_area_close', 'float64'),
('st0_cash', 'float64'),
('st0_position', 'float64'),
('st0_debt', 'float64'),
('st0_locked_cash', 'float64'),
('st0_free_cash', 'float64'),
('st0_val_price', 'float64'),
('st0_value', 'float64'),
('req_size', 'float64'),
('req_price', 'float64'),
('req_size_type', 'int64'),
('req_direction', 'int64'),
('req_fees', 'float64'),
('req_fixed_fees', 'float64'),
('req_slippage', 'float64'),
('req_min_size', 'float64'),
('req_max_size', 'float64'),
('req_size_granularity', 'float64'),
('req_leverage', 'float64'),
('req_leverage_mode', 'int64'),
('req_reject_prob', 'float64'),
('req_price_area_vio_mode', 'int64'),
('req_allow_partial', 'bool'),
('req_raise_reject', 'bool'),
('req_log', 'bool'),
('res_size', 'float64'),
('res_price', 'float64'),
('res_fees', 'float64'),
('res_side', 'int64'),
('res_status', 'int64'),
('res_status_info', 'int64'),
('st1_cash', 'float64'),
('st1_position', 'float64'),
('st1_debt', 'float64'),
('st1_locked_cash', 'float64'),
('st1_free_cash', 'float64'),
('st1_val_price', 'float64'),
('st1_value', 'float64'),
('order_id', 'int64')
]),
settings=dict(
id=dict(
name='id',
title='Log Id',
mapping='ids'
),
col=dict(
name='col',
title='Column',
mapping='columns',
as_customdata=False
),
idx=dict(
name='idx',
title='Index',
mapping='index'
),
group=dict(
title='Group'
),
price_area_open=dict(
title='[PA] Open'
),
price_area_high=dict(
title='[PA] High'
),
price_area_low=dict(
title='[PA] Low'
),
price_area_close=dict(
title='[PA] Close'
),
st0_cash=dict(
title='[ST0] Cash'
),
st0_position=dict(
title='[ST0] Position'
),
st0_debt=dict(
title='[ST0] Debt'
),
st0_locked_cash=dict(
title='[ST0] Locked Cash'
),
st0_free_cash=dict(
title='[ST0] Free Cash'
),
st0_val_price=dict(
title='[ST0] Valuation Price'
),
st0_value=dict(
title='[ST0] Value'
),
req_size=dict(
title='[REQ] Size'
),
req_price=dict(
title='[REQ] Price'
),
req_size_type=dict(
title='[REQ] Size Type',
mapping=SizeTypeT(
Amount=0,
Value=1,
Percent=2,
Percent100=3,
ValuePercent=4,
ValuePercent100=5,
TargetAmount=6,
TargetValue=7,
TargetPercent=8,
TargetPercent100=9
)
),
req_direction=dict(
title='[REQ] Direction',
mapping=DirectionT(
LongOnly=0,
ShortOnly=1,
Both=2
)
),
req_fees=dict(
title='[REQ] Fees'
),
req_fixed_fees=dict(
title='[REQ] Fixed Fees'
),
req_slippage=dict(
title='[REQ] Slippage'
),
req_min_size=dict(
title='[REQ] Min Size'
),
req_max_size=dict(
title='[REQ] Max Size'
),
req_size_granularity=dict(
title='[REQ] Size Granularity'
),
req_leverage=dict(
title='[REQ] Leverage'
),
req_leverage_mode=dict(
title='[REQ] Leverage Mode',
mapping=LeverageModeT(
Lazy=0,
Eager=1
)
),
req_reject_prob=dict(
title='[REQ] Rejection Prob'
),
req_price_area_vio_mode=dict(
title='[REQ] Price Area Violation Mode',
mapping=PriceAreaVioModeT(
Ignore=0,
Cap=1,
Error=2
)
),
req_allow_partial=dict(
title='[REQ] Allow Partial'
),
req_raise_reject=dict(
title='[REQ] Raise Rejection'
),
req_log=dict(
title='[REQ] Log'
),
res_size=dict(
title='[RES] Size'
),
res_price=dict(
title='[RES] Price'
),
res_fees=dict(
title='[RES] Fees'
),
res_side=dict(
title='[RES] Side',
mapping=OrderSideT(
Buy=0,
Sell=1
)
),
res_status=dict(
title='[RES] Status',
mapping=OrderStatusT(
Filled=0,
Ignored=1,
Rejected=2
)
),
res_status_info=dict(
title='[RES] Status Info',
mapping=OrderStatusInfoT(
SizeNaN=0,
PriceNaN=1,
ValPriceNaN=2,
ValueNaN=3,
ValueZeroNeg=4,
SizeZero=5,
NoCash=6,
NoOpenPosition=7,
MaxSizeExceeded=8,
RandomEvent=9,
CantCoverFees=10,
MinSizeNotReached=11,
PartialFill=12
)
),
st1_cash=dict(
title='[ST1] Cash'
),
st1_position=dict(
title='[ST1] Position'
),
st1_debt=dict(
title='[ST1] Debt'
),
st1_locked_cash=dict(
title='[ST1] Locked Cash'
),
st1_free_cash=dict(
title='[ST1] Free Cash'
),
st1_val_price=dict(
title='[ST1] Valuation Price'
),
st1_value=dict(
title='[ST1] Value'
),
order_id=dict(
title='Order Id',
mapping='ids'
)
)
)
Returns Logs._field_config, which gets (hybrid-) copied upon creation of each instance. Thus, changing this config won't affect the class.
To change fields, you can either change the config in-place, override this property, or overwrite the instance variable Logs._field_config.
group property¶
Mapped array of the field group.
id property¶
Mapped array of the field id.
idx property¶
Mapped array of the field idx.
metrics class variable¶
Metrics supported by Logs.
HybridConfig(
start_index=dict(
title='Start Index',
calc_func=<function Logs.<lambda> at 0x1646f1f80>,
agg_func=None,
tags='wrapper'
),
end_index=dict(
title='End Index',
calc_func=<function Logs.<lambda> at 0x1646f2020>,
agg_func=None,
tags='wrapper'
),
total_duration=dict(
title='Total Duration',
calc_func=<function Logs.<lambda> at 0x1646f20c0>,
apply_to_timedelta=True,
agg_func=None,
tags='wrapper'
),
total_records=dict(
title='Total Records',
calc_func='count',
tags='records'
),
res_status_counts=dict(
title='Status Counts',
calc_func='res_status.value_counts',
incl_all_keys=True,
post_calc_func=<function Logs.<lambda> at 0x1646f2160>,
tags=[
'logs',
'res_status',
'value_counts'
]
),
res_status_info_counts=dict(
title='Status Info Counts',
calc_func='res_status_info.value_counts',
post_calc_func=<function Logs.<lambda> at 0x1646f2200>,
tags=[
'logs',
'res_status_info',
'value_counts'
]
)
)
Returns Logs._metrics, which gets (hybrid-) copied upon creation of each instance. Thus, changing this config won't affect the class.
To change metrics, you can either change the config in-place, override this property, or overwrite the instance variable Logs._metrics.
order_id property¶
Mapped array of the field order_id.
plots_defaults property¶
Defaults for PlotsBuilderMixin.plots().
Merges PriceRecords.plots_defaults and plots from logs.
price_area_close property¶
Mapped array of the field price_area_close.
price_area_high property¶
Mapped array of the field price_area_high.
price_area_low property¶
Mapped array of the field price_area_low.
price_area_open property¶
Mapped array of the field price_area_open.
req_allow_partial property¶
Mapped array of the field req_allow_partial.
req_direction property¶
Mapped array of the field req_direction.
req_fees property¶
Mapped array of the field req_fees.
req_fixed_fees property¶
Mapped array of the field req_fixed_fees.
req_leverage property¶
Mapped array of the field req_leverage.
req_leverage_mode property¶
Mapped array of the field req_leverage_mode.
req_log property¶
Mapped array of the field req_log.
req_max_size property¶
Mapped array of the field req_max_size.
req_min_size property¶
Mapped array of the field req_min_size.
req_price property¶
Mapped array of the field req_price.
req_price_area_vio_mode property¶
Mapped array of the field req_price_area_vio_mode.
req_raise_reject property¶
Mapped array of the field req_raise_reject.
req_reject_prob property¶
Mapped array of the field req_reject_prob.
req_size property¶
Mapped array of the field req_size.
req_size_granularity property¶
Mapped array of the field req_size_granularity.
req_size_type property¶
Mapped array of the field req_size_type.
req_slippage property¶
Mapped array of the field req_slippage.
res_fees property¶
Mapped array of the field res_fees.
res_price property¶
Mapped array of the field res_price.
res_side property¶
Mapped array of the field res_side.
res_side_buy property¶
Records filtered by res_side == 0.
res_side_sell property¶
Records filtered by res_side == 1.
res_size property¶
Mapped array of the field res_size.
res_status property¶
Mapped array of the field res_status.
res_status_filled property¶
Records filtered by res_status == 0.
res_status_ignored property¶
Records filtered by res_status == 1.
res_status_info property¶
Mapped array of the field res_status_info.
res_status_info_cant_cover_fees property¶
Records filtered by res_status_info == 10.
res_status_info_max_size_exceeded property¶
Records filtered by res_status_info == 8.
res_status_info_min_size_not_reached property¶
Records filtered by res_status_info == 11.
res_status_info_no_cash property¶
Records filtered by res_status_info == 6.
res_status_info_no_open_position property¶
Records filtered by res_status_info == 7.
res_status_info_partial_fill property¶
Records filtered by res_status_info == 12.
res_status_info_price_nan property¶
Records filtered by res_status_info == 1.
res_status_info_random_event property¶
Records filtered by res_status_info == 9.
res_status_info_size_nan property¶
Records filtered by res_status_info == 0.
res_status_info_size_zero property¶
Records filtered by res_status_info == 5.
res_status_info_val_price_nan property¶
Records filtered by res_status_info == 2.
res_status_info_value_nan property¶
Records filtered by res_status_info == 3.
res_status_info_value_zero_neg property¶
Records filtered by res_status_info == 4.
res_status_rejected property¶
Records filtered by res_status == 2.
st0_cash property¶
Mapped array of the field st0_cash.
st0_debt property¶
Mapped array of the field st0_debt.
st0_free_cash property¶
Mapped array of the field st0_free_cash.
st0_locked_cash property¶
Mapped array of the field st0_locked_cash.
st0_position property¶
Mapped array of the field st0_position.
st0_val_price property¶
Mapped array of the field st0_val_price.
st0_value property¶
Mapped array of the field st0_value.
st1_cash property¶
Mapped array of the field st1_cash.
st1_debt property¶
Mapped array of the field st1_debt.
st1_free_cash property¶
Mapped array of the field st1_free_cash.
st1_locked_cash property¶
Mapped array of the field st1_locked_cash.
st1_position property¶
Mapped array of the field st1_position.
st1_val_price property¶
Mapped array of the field st1_val_price.
st1_value property¶
Mapped array of the field st1_value.
stats_defaults property¶
Defaults for StatsBuilderMixin.stats().
Merges PriceRecords.stats_defaults and stats from logs.
subplots class variable¶
Subplots supported by Logs.
Returns Logs._subplots, which gets (hybrid-) copied upon creation of each instance. Thus, changing this config won't affect the class.
To change subplots, you can either change the config in-place, override this property, or overwrite the instance variable Logs._subplots.