Navigation

    Quantiacs Community

    • Register
    • Login
    • Search
    • Categories
    • News
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Output the results in an excel or other format file

    Support
    3
    3
    298
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      anshul96go last edited by

      Hi Team

      I am running strategy in multipass mode. Is there a way to get the key result statistics in an excel or text file for analysis?

      support 1 Reply Last reply Reply Quote 1
      • support
        support @anshul96go last edited by support

        @anshul96go Hello, for the analysis probably you need the weights and the data. The weights can be downloaded in csv format inside the "Sent strategies" area.

        More in general, you can simply save csv files inside your online root directory, and then click on the "Download" buttons for storing them locally.

        You can convert them to csv using:

        weights.to_pandas().to_csv("weights.csv")
        

        You can also use pickle:

        import os
        import pickle
        
        def save_object(obj, filename):
          with open(filename, 'wb') as output:
            pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)
        
        save_object(indicators, 'indicators.pkl')
        
        1 Reply Last reply Reply Quote 0
        • A
          antinomy last edited by

          @anshul96go
          To get the actual statistics you currently have to calculate them like so:

          import qnt.stats as qns
          
          data = qndata.cryptodaily_load_data(min_date="2014-01-01") # or whenever your backtest started
          stats = qns.calc_stat(data, weights)
          

          And if you really need them as xls file you can do:

          stats.to_pandas().to_excel('stats.xls') # I got a ModuleNotFoundError the first time - pip install did the trick.
          

          Allthough I can't recommend xls because at least LibreOffice becomes very slow / unresponsive when handling such a file.

          Getting the statistics after a backtest could be a little simpler, which brings me to a feature request:
          @support
          Do you think you could add a parameter to the backtester which makes it return the statistics? They get calculated anyway by default, but we only see a truncated printout or the plots and can't use them for further analysis.
          .
          In my local environment I did it like this in qnt.backtester.py:

          1. Add the parameter return_stats: bool = False to the parameters of the backtest function
          2. From line 353 onward my backtester now looks like this:
          	qnout.write(result)
                  qnstate.write(state)
          
                  if return_stats:
                      analyze = True
          
                  out = [result]
          
                  if analyze:
                      log_info("---")
                      stats = analyze_results(result, data, competition_type, build_plots, start_date)
                      if return_stats:
                          out.append(stats)
          
                  if args_count > 1:
                      out.append(state)
          
                  if len(out) == 1:
                      out = out[0]
          
                  return out
              finally:
                  qndc.set_max_datetime(None)
          
          1. And of course I made analyze_results return the statistics like so (line 458 in the original):
              if not build_plots:
                  log_info(stat_global.to_pandas().tail())
                  return stat_global # here
              log_info("---")
              log_info("Calc stats per asset...")
              stat_per_asset = qnstat.calc_stat(data, output, per_asset=True)
              stat_per_asset = stat_per_asset.loc[output.time.values[0]:]
          
              if is_notebook():
                  build_plots_jupyter(output, stat_global, stat_per_asset)
              else:
                  build_plots_dash(output, stat_global, stat_per_asset)
          
              return stat_global # and there
          

          This might not be the most elegant solution but you get the idea.
          Now I can get the statistics immediately after the backtest with

          weights, stats = backtest(...return_stats=True)
          

          and can do further analysis.
          For instance, I started to calculate the correlations between my strategies to avoid uploading more of the same to the contest.

          It would be nice to have this feature in a future version, so I don't have to mess with the backtester after each update 😉

          Best regards

          1 Reply Last reply Reply Quote 0
          • First post
            Last post
          Powered by NodeBB | Contributors
          • Documentation
          • About
          • Career
          • My account
          • Privacy policy
          • Terms and Conditions
          • Cookies policy
          Home
          Copyright © 2014 - 2021 Quantiacs LLC.
          Powered by NodeBB | Contributors