robcarver17 / pysystemtrade

Systematic Trading in python
GNU General Public License v3.0
2.57k stars 816 forks source link

From interactive_documents cannot produce a strategy report : error index -1 is out of bounds for axis 0 with size 0 #285

Closed rorymac closed 3 years ago

rorymac commented 3 years ago

here is the output:

10: Roll report
11: P&L report
12: Status report
13: Trade report
14: Reconcile report
15: Strategy report
16: Risk report

Your choice? <RETURN for Back> 15
0: live_300
1: ALL

Your choice? <RETURN for ALL> 0
Choose the backtest to load:

0: 20210121_063932
1: 20210121_071332
2: 20210121_074535
3: 20210121_084019
4: 20210121_091946
5: 20210122_073324
6: 20210122_185059
7: 20210131_152645
8: 20210202_102858
9: 20210202_113713
10: 20210203_092201
11: 20210203_093914

Your choice? <RETURN for 20210203_093914> 11
1: Email or 2: print? <RETURN for Print> 
2021-02-03:1216.53 {'type': ''}  Running report Strategy report sysproduction.diagnostic.strategies.strategy_report console {'strategy_name': 'live_300', 'timestamp': '20210203_093914'}
Library created, but couldn't enable sharding: no such command: 'enablesharding', full error: {'ok': 0.0, 'errmsg': "no such command: 'enablesharding'", 'code': 59, 'codeName': 'CommandNotFound'}. This is OK if you're not 'admin'
Library created, but couldn't enable sharding: no such command: 'enablesharding', full error: {'ok': 0.0, 'errmsg': "no such command: 'enablesharding'", 'code': 59, 'codeName': 'CommandNotFound'}. This is OK if you're not 'admin'
Library created, but couldn't enable sharding: no such command: 'enablesharding', full error: {'ok': 0.0, 'errmsg': "no such command: 'enablesharding'", 'code': 59, 'codeName': 'CommandNotFound'}. This is OK if you're not 'admin'
Calculating capped forecast for BOBL ewmac2_8
Calculating raw forecast BOBL for ewmac2_8
Calculating daily prices for BOBL
/home/rorym/.local/lib/python3.8/site-packages/arctic/serialization/numpy_records.py:256: FutureWarning: 'from_array' is deprecated and will be removed in a future version. Please use the pd.Series(..) constructor instead.
  return Series.from_array(data, index=index, name=name)
Calculating capped forecast for CORN ewmac2_8
Calculating raw forecast CORN for ewmac2_8
Calculating daily prices for CORN
Calculating capped forecast for EDOLLAR ewmac2_8
Calculating raw forecast EDOLLAR for ewmac2_8
Calculating daily prices for EDOLLAR
Calculating capped forecast for US2 ewmac2_8
Calculating raw forecast US2 for ewmac2_8
Calculating daily prices for US2
Calculating capped forecast for V2X ewmac2_8
Calculating raw forecast V2X for ewmac2_8
Calculating daily prices for V2X
Calculating capped forecast for EDOLLAR ewmac4_16
Calculating raw forecast EDOLLAR for ewmac4_16
Calculating daily prices for EDOLLAR
Calculating actual buffers for position for BOBL
Calculating pandl for portfolio
Calculating pandl for instrument for BOBL
Calculating buffered positions
Calculating pandl for instrument for CAC
Calculating buffered positions
Calculating pandl for instrument for COPPER
Calculating buffered positions
Calculating pandl for instrument for CORN
Calculating buffered positions
Calculating pandl for instrument for CRUDE_W
Calculating buffered positions
Calculating pandl for instrument for EDOLLAR
Calculating buffered positions
Calculating pandl for instrument for EUROSTX
Calculating buffered positions
Calculating pandl for instrument for GAS_US
Calculating buffered positions
Calculating pandl for instrument for GBP
Calculating buffered positions
Calculating pandl for instrument for LEANHOG
Calculating buffered positions
Calculating pandl for instrument for MXP
Calculating buffered positions
Calculating pandl for instrument for PLAT
Calculating buffered positions
Calculating pandl for instrument for US2
Calculating buffered positions
Calculating pandl for instrument for V2X
Calculating buffered positions
Calculating pandl for instrument for VIX
Calculating buffered positions
Calculating actual buffers for position for CAC
Calculating actual buffers for position for COPPER
Calculating actual buffers for position for CORN
Calculating actual buffers for position for CRUDE_W
Calculating actual buffers for position for EDOLLAR
Calculating actual buffers for position for EUROSTX
Calculating actual buffers for position for GAS_US
Calculating actual buffers for position for GBP
Calculating actual buffers for position for LEANHOG
Calculating actual buffers for position for MXP
Calculating actual buffers for position for PLAT
Calculating actual buffers for position for US2
Calculating actual buffers for position for V2X
Calculating actual buffers for position for VIX

********************************************************************************
Report Strategy report failed to process with error index -1 is out of bounds for axis 0 with size 0
********************************************************************************
robcarver17 commented 3 years ago

I've removed the try: catch from reporting so if you update and run this it will still fail but with a more verbose error.

rorymac commented 3 years ago

Here you go, truncated some of the output:

Calculating actual buffers for position for CAC
Calculating actual buffers for position for COPPER
Calculating actual buffers for position for CORN
Calculating actual buffers for position for CRUDE_W
Calculating actual buffers for position for EDOLLAR
Calculating actual buffers for position for EUROSTX
Calculating actual buffers for position for GAS_US
Calculating actual buffers for position for GBP
Calculating actual buffers for position for LEANHOG
Calculating actual buffers for position for MXP
Calculating actual buffers for position for PLAT
Calculating actual buffers for position for US2
Calculating actual buffers for position for V2X
Calculating actual buffers for position for VIX
Traceback (most recent call last):
  File "run.py", line 64, in <module>
    func(*args, **kwargs)
  File "/home/rorym/pysystemtrade/sysproduction/interactive_diagnostics.py", line 64, in interactive_diagnostics
    method_chosen(data)
  File "/home/rorym/pysystemtrade/sysproduction/interactive_diagnostics.py", line 197, in strategy_report
    run_report(report_config, data=data)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/reporting.py", line 23, in run_report
    run_report_with_data_blob(report_config, data)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/reporting.py", line 37, in run_report_with_data_blob
    report_results = report_function(data, **report_kwargs)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 35, in strategy_report
    formatted_output = get_strategies_report_output(
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 49, in get_strategies_report_output
    strategy_format_output_list = get_output_for_single_strategy(
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 70, in get_output_for_single_strategy
    strategy_format_output_list = strategy_reporting_function(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 139, in report_system_classic
    timestamp_positions = get_position_at_timestamp_df_for_instrument_code_list(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 482, in get_position_at_timestamp_df_for_instrument_code_list
    position_list = [
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 483, in <listcomp>
    get_position_for_instrument_code_at_timestamp(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 503, in get_position_for_instrument_code_at_timestamp
    positions_over_time[:datetime_cutoff].ffill().values[-1]
TypeError: '_named_object' object is not subscriptable
robcarver17 commented 3 years ago

OK it's a classic start up from cold issue; there are no positions in the database before the backtest was run and it doesn't handle it gracefully.

Try the latest commit.

rorymac commented 3 years ago

Unfortunately an error

rorym@mintserverone:~/pysystemtrade$ git pull origin master
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 4), reused 7 (delta 4), pack-reused 0
Unpacking objects: 100% (10/10), 9.82 KiB | 1.09 MiB/s, done.
From https://github.com/robcarver17/pysystemtrade
 * branch            master     -> FETCH_HEAD
   f9f5dee..dea0b9a  master     -> origin/master
Updating f9f5dee..dea0b9a
Fast-forward
 sysproduction/interactive_order_stack.py             |  2 +-
 sysproduction/strategy_code/report_system_classic.py | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

Output ..truncated

Calculating actual buffers for position for US2
Calculating actual buffers for position for V2X
Calculating actual buffers for position for VIX
Traceback (most recent call last):
  File "run.py", line 64, in <module>
    func(*args, **kwargs)
  File "/home/rorym/pysystemtrade/sysproduction/interactive_diagnostics.py", line 64, in interactive_diagnostics
    method_chosen(data)
  File "/home/rorym/pysystemtrade/sysproduction/interactive_diagnostics.py", line 197, in strategy_report
    run_report(report_config, data=data)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/reporting.py", line 23, in run_report
    run_report_with_data_blob(report_config, data)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/reporting.py", line 37, in run_report_with_data_blob
    report_results = report_function(data, **report_kwargs)
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 35, in strategy_report
    formatted_output = get_strategies_report_output(
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 49, in get_strategies_report_output
    strategy_format_output_list = get_output_for_single_strategy(
  File "/home/rorym/pysystemtrade/sysproduction/diagnostic/strategies.py", line 70, in get_output_for_single_strategy
    strategy_format_output_list = strategy_reporting_function(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 139, in report_system_classic
    timestamp_positions = get_position_at_timestamp_df_for_instrument_code_list(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 482, in get_position_at_timestamp_df_for_instrument_code_list
    position_list = [
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 483, in <listcomp>
    get_position_for_instrument_code_at_timestamp(
  File "/home/rorym/pysystemtrade/sysproduction/strategy_code/report_system_classic.py", line 501, in get_position_for_instrument_code_at_timestamp
    positions_over_time_ffill =  positions_over_time.ffill()
AttributeError: '_named_object' object has no attribute 'ffill'
robcarver17 commented 3 years ago

Try again with latest commit

rorymac commented 3 years ago

Worked Like a charm lets close this down! Again thank you Rob.