Exemple #1
0
def spread_pricing(options: 'list of options', quantities: 'list of quantities', events, events_bid, events_ask, mc_iterations=10**6):
    mc_distribution = get_total_mc_distribution(events, options[0].Expiry, mc_iterations=mc_iterations)
    mc_distribution_bid = get_total_mc_distribution(events_bid, options[0].Expiry, mc_iterations=mc_iterations)
    mc_distribution_ask = get_total_mc_distribution(events_ask, options[0].Expiry, mc_iterations=mc_iterations)
     
    option_prices = []
    for i in range(len(options)):
        #mc_distribution = get_total_mc_distribution(events, option.Expiry, mc_iterations=mc_iterations)
        if quantities[i] > 0:
            option_price = OptionPriceMC(options[i], mc_distribution_bid)
            side = 'Bid'
        else:
            option_price = OptionPriceMC(options[i], mc_distribution_ask)
            side = 'Ask'
        print("Strike: {:.3f}, {} Price: {:.3f}".format(options[i].Strike, side, option_price))
        """
        try:
            call_spread = option_prices[-1] - option_price
            print("Call Spread: {:2f}".format(call_spread))
        except Exception:
            pass
        """
        option_prices.append(option_price)
    
    spread_price = sum([option_price*quantity for option_price, quantity in zip(option_prices, quantities)])
    print("Spread Price: {:.3f}".format(spread_price))
    return spread_price
Exemple #2
0
def spread_pricing(options: 'list of options',
                   quantities: 'list of quantities',
                   events,
                   mc_iterations=10**6):
    mc_distribution = get_total_mc_distribution(events,
                                                options[0].Expiry,
                                                mc_iterations=mc_iterations)

    option_prices = []
    for option in options:
        #mc_distribution = get_total_mc_distribution(events, option.Expiry, mc_iterations=mc_iterations)
        option_price = OptionPriceMC(option, mc_distribution)
        print("Strike: {:.3f}, Price: {:.3f}".format(option.Strike,
                                                     option_price))
        """
        try:
            call_spread = option_prices[-1] - option_price
            print("Call Spread: {:2f}".format(call_spread))
        except Exception:
            pass
        """
        option_prices.append(option_price)

    spread_price = sum([
        option_price * quantity
        for option_price, quantity in zip(option_prices, quantities)
    ])
    print("Spread Price: {:.3f}".format(spread_price))
    return spread_price
def get_bid_ask_sheet(event_groupings, event_grouping_names, expiry, metric = 'IV', mc_iterations = 10**5):
    #labels = ['Bid - {}'.format(metric), 'Mid - {}'.format(metric), 'Ask - {}'.format(metric), 'New - {}'.format(metric)]
    event_grouping_names = ['{} - {}'.format(label, metric) for label in event_grouping_names]

    mc_distributions = list(map(lambda events: get_total_mc_distribution(events, expiry, mc_iterations=mc_iterations), event_groupings))
    implied_vols = list(map(lambda dist: get_option_sheet_from_mc_distribution(dist, expiry).loc[:, [(expiry, metric)]], mc_distributions))
    show_mc_distributions_as_line_chart(mc_distributions, labels = event_grouping_names)
    return reduce(lambda x,y: pd.merge(x, y, left_index=True, right_index=True), implied_vols)
def option_pricing():
    option_type = 'Call'
    strike = 1.0
    expiry = dt.date(2018, 10, 10)
    option = Option(option_type, strike, expiry)

    mc_distribution = get_total_mc_distribution(events, expiry, mc_iterations=10**6)
    option_price = OptionPriceMC(option, mc_distribution)
    print("Expiry: {}, Price: {}".format(expiry, option_price))
def spread_pricing(options: 'list of options', quantities: 'list of quantities', events, description = None, mc_iterations=10**6):
    mc_distribution = get_total_mc_distribution(events, options[0].Expiry, mc_iterations=mc_iterations)
     
    option_prices = []
    for i in range(len(options)):
        option_price = OptionPriceMC(options[i], mc_distribution)
        option_prices.append(option_price)
        logger.info("Strike: {:.3f}, {} Price: {:.3f}".format(options[i].Strike, description, option_price))
    
    spread_price = sum([option_price*quantity for option_price, quantity in zip(option_prices, quantities)])
    logger.info("Spread Price: {:.3f}".format(spread_price))
    return spread_price
Exemple #6
0
def term_structure(events, expiries):
    mc_distributions = list(
        map(lambda expiry: get_total_mc_distribution(events, expiry),
            expiries))
    implied_vols = list(
        map(
            lambda dist, expiry: get_option_sheet_from_mc_distribution(
                dist, expiry).loc[:, ['IV']], mc_distributions, expiries))
    show_mc_distributions_as_line_chart(mc_distributions)
    return reduce(
        lambda x, y: pd.merge(x, y, left_index=True, right_index=True),
        implied_vols)
def individual_option_pricing():
    option_type = 'Call'
    strike = 1.0
    expiry = dt.date(2018, 5, 10)

    expiries = pd.date_range(pd.datetime.today(), periods=100).tolist()
    expiries = [expiry]*100
    print(isinstance(expiries[0], dt.datetime))
    for expiry in expiries:
        option = Option(option_type, strike, expiry)
        mc_distribution = get_total_mc_distribution(events, expiry, mc_iterations=10**6)

        option_price = OptionPriceMC(option, mc_distribution)
        print((expiry, option_price))
Exemple #8
0
def bid_ask(events_bid,
            events,
            events_ask,
            expiry,
            metric='IV',
            mc_iterations=10**5):
    mc_distributions = list(
        map(
            lambda events: get_total_mc_distribution(
                events, expiry, mc_iterations=mc_iterations),
            [events_bid, events, events_ask]))
    implied_vols = list(
        map(
            lambda dist: get_option_sheet_from_mc_distribution(dist, expiry).
            loc[:, [(expiry, metric)]], mc_distributions))
    show_mc_distributions_as_line_chart(mc_distributions,
                                        labels=[
                                            'Bid - {}'.format(metric),
                                            'Mid - {}'.format(metric),
                                            'Ask - {}'.format(metric)
                                        ])
    return reduce(
        lambda x, y: pd.merge(x, y, left_index=True, right_index=True),
        implied_vols)