offset=offset,
                                            start_dt=start_dt,
                                            end_dt=end_dt)

                                        # use previously calculated data to save initialization time
                                        if data_by_coin is None:
                                            bci.set_input_data(input_data)
                                        else:
                                            bci.data = data
                                            bci.dates = dates
                                            bci.data_by_coin = data_by_coin

                                        [
                                            dates, baseline_values,
                                            index_values, fees
                                        ] = bci.run()
                                        results.append([
                                            index, rebalancing,
                                            primary_volume_filter,
                                            secondary_volume_filter,
                                            max_allocation,
                                            running_avg_volume_period,
                                            primary_candidate, offset, dates,
                                            index_values, fees, baseline_values
                                        ])

                                        if data_by_coin is None:
                                            data = bci.data
                                            dates = bci.dates
                                            data_by_coin = bci.data_by_coin
                                    except Exception as e:
Exemple #2
0
                      primary_candidate_size=primary_candidate,
                      secondary_candidate_size=secondary_candidate,
                      initial_funds=1000,
                      offset=offset,
                      start_dt=start_dt,
                      end_dt=end_dt)

            # use previously calculated data to save initialization time
            if data_by_coin is None:
                bci.set_input_data(input_data)
            else:
                bci.data = data
                bci.dates = dates
                bci.data_by_coin = data_by_coin

            [dates, baseline_values, index_values, fees] = bci.run()
            results.append([dates, index_values, fees, baseline_values, label])

            if data_by_coin is None:
                data = bci.data
                dates = bci.dates
                data_by_coin = bci.data_by_coin
        except Exception as e:
            LOG.debug(e)

    LOG.info(f"Best performing index configurations:")
    for data in sorted(results, key=lambda x: x[1][-1], reverse=True):
        LOG.info(
            f"{data[4]}:{data[1][-1]:.2f}:{data[3][-1]:.2f}:{data[2]:.2f}")

    LOG.info(f"Best performing baseline configurations:")
    return vars(parser.parse_args())


if __name__ == "__main__":
    LOG.info("Bitpanda Crypto Index Simulator")

    args = parse_args()

    bci = BCI(
        index_size = args['index'],
        rebalancing_period = args['rebalancing'],
        primary_usd_filtering = args['primary_volume_filter'],
        secondary_usd_filtering = args['secondary_volume_filter'],
        max_asset_allocation = args['max_allocation'],
        fee = args['fee'],
        running_avg_volume_period = args['volume_period'],
        index_candidate_size = args['candidates'],
        primary_candidate_size = args['primary_candidates'],
        secondary_candidate_size = args['secondary_candidates'],
        initial_funds = args['funds'],
        offset = args['offset'],
        bypass_validation = args['bypass_validation'],
        input_file_name = args['input_file'],
        start_dt = args['start_date'],
        end_dt = args['end_date'],
        show_graph = args['show_graph'],
        save_graph = args['save_graph']
    )

    bci.run()