コード例 #1
0
ファイル: tuning.py プロジェクト: shvimas/diploma
def optimize_model(model: str, info: List[Info], data: Data, metric: str,
                   day: int, rate: float, local: bool, use_fft: bool,
                   **kwargs) -> opt.OptimizeResult:
    print(f"Optimizing {model} with {metric} on day {day}")

    actual_calls = data.prices[True][day]
    actual_puts = data.prices[False][day]
    pricer = GenPricer(model=model,
                       market=EvalArgs.from_structure(data=data,
                                                      info=info,
                                                      rate=rate,
                                                      day=day),
                       use_fft=use_fft)
    optimizer = opt.minimize if local else opt.differential_evolution

    t0 = time()
    result = pricer.optimize_pars(metric=metric,
                                  actual_calls=actual_calls,
                                  actual_puts=actual_puts,
                                  bounds=par_bounds[model],
                                  optimizer=optimizer,
                                  **kwargs)
    with open(hf.get_log_file_name(model=model, metric=metric), 'a+') as log:
        hf.log_print(
            f"Time spent for {model}, day {day}: {timedelta(seconds=(time() - t0))}\n",
            out1=log)

    return result
コード例 #2
0
ファイル: data_helpers.py プロジェクト: shvimas/diploma
def cut_by_bs_delta(data: Data,
                    info: List[Info],
                    rate=0.008,
                    disp=False) -> Tuple[Data, List[Info]]:
    for day, is_call in [(d, c) for d in range(len(info))
                         for c in [True, False]]:
        pricer = gp.GenPricer(model='bs',
                              market=EvalArgs.from_structure(data=data,
                                                             info=info,
                                                             rate=rate,
                                                             day=day),
                              use_fft=False)

        result: opt.OptimizeResult = pricer.optimize_pars(
            metric='MAE',
            actual_calls=data.prices[True][day],
            actual_puts=data.prices[False][day],
            bounds=config.par_bounds['bs'],
            optimizer=opt.differential_evolution,
            polish=True,
            disp=disp)
        bs_sigma = result.x[0]
        bs_sigma = bs_sigma

        deltas = bs.bs_delta(spot=info[day].spot,
                             strikes=data.strikes[is_call][day],
                             r=rate,
                             q=rate,
                             t=info[day].mat,
                             bs_sigma=bs_sigma,
                             is_call=is_call)

        data.prices[is_call][day] = data.prices[is_call][day][
            np.abs(deltas) >= .1]
        data.strikes[is_call][day] = data.strikes[is_call][day][
            np.abs(deltas) >= .1]

    return data, info