コード例 #1
0
ファイル: storage_gui.py プロジェクト: seanahmad/storage
def read_fwd_curve():
    fwd_periods = []
    fwd_prices = []
    fwd_row = 0
    while fwd_input_sheet[fwd_row, 0].value != '':
        fwd_periods.append(
            pd.Period(fwd_input_sheet[fwd_row, 0].value, freq=freq))
        fwd_prices.append(fwd_input_sheet[fwd_row, 1].value)
        fwd_row += 1
    if smooth_curve_wgt.value:
        p1, p2 = itertools.tee(fwd_periods)
        next(p2, None)
        contracts = []
        for start, end, price in zip(p1, p2, fwd_prices):
            contracts.append((start, end - 1, price))
        weekend_adjust = None
        if apply_wkend_shaping_wgt.value:
            wkend_factor = wkend_factor_wgt.value
            weekend_adjust = adjustments.dayofweek(default=1.0,
                                                   saturday=wkend_factor,
                                                   sunday=wkend_factor)
        return max_smooth_interp(contracts,
                                 freq=freq,
                                 mult_season_adjust=weekend_adjust)
    else:
        return pd.Series(
            fwd_prices,
            pd.PeriodIndex(fwd_periods)).resample(freq).fillna('pad')
コード例 #2
0
    def test_max_smooth_interp_add_season_adjust_called_as_expected(self):

        adjust_arg_values = []

        def add_season_adjust(period):
            adjust_arg_values.append(period)
            return 1.0

        curve = max_smooth_interp(self.daily_contracts,
                                  freq='D',
                                  add_season_adjust=add_season_adjust)

        expected_first_arg = pd.Period('2019-5-14', freq='D')
        expected_arg_values = [expected_first_arg + i for i in range(0, 5)] * 2

        self.assertListEqual(expected_arg_values, adjust_arg_values)
コード例 #3
0
    def test_max_smooth_interp_average_weight_called_as_expected(self):

        weight_arg_values = []

        def average_weight(period):
            weight_arg_values.append(period)
            return 1.0

        curve = max_smooth_interp(self.daily_contracts,
                                  freq='D',
                                  average_weight=average_weight)

        expected_first_arg = pd.Period('2019-5-14', freq='D')
        expected_arg_values = [expected_first_arg + i for i in range(0, 5)]

        self.assertListEqual(expected_arg_values, weight_arg_values)
コード例 #4
0
 def test_max_smooth_interp_averages_back_to_inputs(self):
     for test_data in self.test_case_data:
         interp_curve = max_smooth_interp(**test_data)
         average_weight = test_data[
             'average_weight'] if 'average_weight' in test_data else lambda x: 1.0
         test_contracts = test_data['contracts']
         if isinstance(test_contracts, pd.Series):
             for period, contract_price in test_contracts.items():
                 curve_average_price = weighted_average_slice_curve(
                     interp_curve, test_data['freq'], period,
                     average_weight)
                 self.assertAlmostEqual(curve_average_price,
                                        contract_price,
                                        delta=1E-10)
         else:
             for contract in test_contracts:
                 (period, contract_price) = deconstruct_contract(contract)
                 curve_average_price = weighted_average_slice_curve(
                     interp_curve, test_data['freq'], period,
                     average_weight)
                 self.assertAlmostEqual(curve_average_price,
                                        contract_price,
                                        delta=1E-10)