Esempio n. 1
0
    def __init__(self, scenario: str):
        if scenario not in self.SCENARIOS:
            raise NotImplementedError(
                f'Unknown scenario {scenario}. Choose from: {sorted(self.SCENARIOS)}'
            )

        self.scenario = scenario
        self.data_dir = os.path.join(settings.SIMULATION_DIR, scenario)
        self.portfolio = Portfolio.read_from_file(
            os.path.join(self.data_dir, 'start.csv'))
        self.reference_portfolio = Portfolio.read_from_file(
            os.path.join(self.data_dir, 'start.csv'))
 def _calculate_ideal_portfolio(self, input_filename: str,
                                reference_filename: str):
     input_file = os.path.join(settings.TEST_DIR, input_filename)
     reference_file = os.path.join(settings.TEST_DIR, reference_filename)
     generated_file = os.path.join(settings.TMP_DIR, reference_filename)
     portfolio = Portfolio.read_from_file(input_file)
     calculator = Calculator(portfolio)
     calculator.calculate_ideal_portfolio()
     portfolio.write_to_file(generated_file)
     self.compare_file_with_file(generated_file,
                                 reference_file,
                                 write_first=True)
     os.remove(generated_file)
            position for position in self.portfolio.positions
            if position.ideal_fraction < self.max_position
        ]
        total_ideal_fraction_under_max = sum(
            [position.ideal_fraction for position in positions_under_max])

        # Make the redistribution
        for position in positions_under_max:
            position.ideal_fraction += position.ideal_fraction / total_ideal_fraction_under_max * total_ideal_fraction_to_redistribute

        # Repeat the procedure until no position is above the maximum position
        self._redistribute_over_max()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Calculator')
    parser.add_argument(
        '--input',
        help='name of input portfolio CSV file. Defaults to demo.csv',
        default='demo.csv')
    parser.add_argument(
        '--output',
        help='name of output portfolio CSV file. Defaults to ideal.csv',
        default='ideal.csv')
    args = parser.parse_args()

    _portfolio = Portfolio.read_from_file(args.input)
    calculator = Calculator(_portfolio)
    calculator.calculate_ideal_portfolio()
    _portfolio.write_to_file(args.output)