示例#1
0
def get_all_data():
    nifty_data = None

    with open('nifty.json') as data_file:
        nifty_data = json.load(data_file)

    expiry_date = datetime.datetime(day=28, month=2, year=2013)
    from_date = datetime.datetime(day=4, month=2, year=2013)

    while from_date < datetime.datetime.now():
        print from_date.strftime('%d-%b-%Y')
        get_data_for_date(expiry_date, from_date, nifty_data)

        from_date = from_date + datetime.timedelta(days=1)

        if from_date > expiry_date:
            expiry_date = get_option_expiry_date(date=from_date,
                                                 expiry_series=0)
示例#2
0
def check_strangle_profitability():
    nifty_data = None
    vix_data = None

    with open('nifty.json') as data_file:
        nifty_data = json.load(data_file)


    with open('vix.json') as data_file:
        vix_data = json.load(data_file)


    results = []


    for nifty_entry in nifty_data:
        entry_date = datetime.datetime.strptime(nifty_entry['date'], '%d-%b-%Y')

        volatility = next((item['close'] for item in vix_data if item['date'] == nifty_entry['date']), None)
        if not volatility:
            continue

        expiry_date = get_option_expiry_date(entry_date, 0)
        expiry_date_string = expiry_date.strftime('%d-%b-%Y')
        close_on_expiry = next((item['close'] for item in nifty_data
                               if item['date'] == expiry_date_string), None)

        while not close_on_expiry:
            expiry_date = expiry_date + datetime.timedelta(days=-1)
            expiry_date_string = expiry_date.strftime('%d-%b-%Y')
            close_on_expiry = next((item['close'] for item in nifty_data
                               if item['date'] == expiry_date_string), None)


        days_to_expiry = (expiry_date-entry_date).days

        deviation = standard_deviation(stock_price=nifty_entry['close'],
                                       volatility=volatility,
                                       days_to_expiry=days_to_expiry
                                       ) if days_to_expiry > 0 else 0


        invest = False

        if deviation/nifty_entry['close'] > .05:
            invest = True

        put_strike = math.floor((nifty_entry['close'] - deviation)/100)*100
        call_strike = math.ceil((nifty_entry['close'] + deviation)/100)*100
        put_premium = get_premium(entry_date, put_strike, 'PE')
        call_premium = get_premium(entry_date, call_strike, 'CE')
        total_premium = put_premium + call_premium

        profit = close_on_expiry > put_strike and close_on_expiry < call_strike

        loss = 0

        if not profit:
            if close_on_expiry < put_strike:
                loss = put_strike-close_on_expiry - total_premium
            else:
                loss = close_on_expiry-call_strike - total_premium




        result = {
            'date': nifty_entry['date'],
            'price': nifty_entry['close'],
            'volatility': volatility,
            'deviation': deviation,
            'expiry_date': expiry_date_string,
            'days_to_expiry': days_to_expiry,
            'invest': invest,
            'close_on_expiry': close_on_expiry,
            'put_strike': put_strike,
            'call_strike': call_strike,
            'put_premium': put_premium,
            'call_premium': call_premium,
            'total_premium': total_premium,
            'profit': profit,
            'loss': loss
        }

        results.append(result)

    with open('nifty_strangle.json', 'w') as the_file:
        the_file.write(json.dumps(results))

    with open('nifty_strangle.csv', 'w') as the_file:
        for result in results:
            the_file.write('{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}\n'.format(
                result['date'],
                result['price'],
                result['volatility'],
                result['deviation'],
                result['expiry_date'],
                result['days_to_expiry'],
                result['invest'],
                result['close_on_expiry'],
                result['put_strike'],
                result['call_strike'],
                result['put_premium'],
                result['call_premium'],
                result['total_premium'],
                result['profit'],
                result['loss']
            ))