Exemple #1
0
def fetch_futures(futures, current_month_last_thurs, near_month_last_thurs,
                  fetched_futures, calcul_limit, option_lots):
    future_status = {}
    for future in futures:
        stock_id = outil.get_stock_id(future[nse_bse.STOCK_ID])
        future_status[stock_id] = {
            'curr_mon_enable': True,
            'near_mon_enable': True
        }

        future_cur_mon_symbol = outil.get_future_symbol(
            stock_id, current_month_last_thurs)
        future_near_mon_symbol = outil.get_future_symbol(
            stock_id, near_month_last_thurs)

        fetched_futures[future_cur_mon_symbol] = future_near_mon_symbol

        fetched_futures[future_near_mon_symbol] = {
            'ltp': None,
            'liquid': False,
            'c_ltp': None,
            'c_liquid': False,
            'c_symbol': future_cur_mon_symbol,
            'sd_buy':
            calcul_limit.calculated_calendar_spread_limits[stock_id][0],
            'sd_sell':
            calcul_limit.calculated_calendar_spread_limits[stock_id][1],
            'lot': option_lots[stock_id],
            'stock': stock_id
        }

        fetched_futures['future_status'] = future_status
        fetched_futures['futures'] = futures
async def fetch_future_with_orderbook(stock_id, fetched_futures, last_thurs,
                                      index):
    bids, asks, ltp, spot = outil.get_all_bids(stock_id, last_thurs)
    future = outil.Futures()
    future.bids = bids
    future.asks = asks
    future.ltp = ltp
    future.stock_id = stock_id
    future.spot_price = spot
    future.symbol = outil.get_future_symbol(stock_id, last_thurs)

    fetched_futures.insert(index, future)
Exemple #3
0
def pcr_null_illiquid_check(atm_option_call, atm_option_put, futures,
                            month_str):
    if atm_option_call is None:
        print('Null atm_option_call', month_str)
        return False

    if atm_option_call.liquidity is False or atm_option_call.volume is None or atm_option_call.volume <= 0:
        print('Illiquid atm_option_call', month_str)
        return False

    if atm_option_put is None:
        print('Null atm_option_put', month_str)
        return False

    if atm_option_put.liquidity is False or atm_option_put.volume is None or atm_option_put.volume <= 0:
        print('Illiquid atm_option_put', month_str)
        return False

    if futures is None:
        print('Null futures', month_str)
        return False

    if outil.is_instrument_liquid(futures.bids, futures.asks) is False:
        print('Illiquid futures', month_str)
        return False

    return True
Exemple #4
0
def set_pe_ce_data(options_data):
    data = {}
    first_row_excluded = False

    for option_data in options_data:
        if not first_row_excluded:
            first_row_excluded = True
            continue

        curr_date = parser.parse(option_data[1].strip())
        expiry_date = parser.parse(option_data[2].strip())

        spot = bank_nifty_spot[curr_date]

        last_thurs = outil.get_last_thurday_of_month(curr_date.month,
                                                     curr_date.year)

        if curr_date.month != expiry_date.month or abs(
            (expiry_date - last_thurs).days) > 1:
            continue

        strike = float(util.remove_non_no_chars(option_data[4].strip()))

        if curr_date not in data:
            data[curr_date] = {
                'spot':
                spot,
                'atm_strike':
                strike,
                'prem_open':
                float(util.remove_non_no_chars(option_data[5].strip())),
                'prem_high':
                float(util.remove_non_no_chars(option_data[6].strip())),
                'prem_low':
                float(util.remove_non_no_chars(option_data[7].strip())),
                'prem_close':
                float(util.remove_non_no_chars(option_data[8].strip())),
                'buy_date':
                curr_date,
                'expiry_date':
                expiry_date
            }

        elif abs(strike -
                 data[curr_date]['spot']) < abs(data[curr_date]['atm_strike'] -
                                                data[curr_date]['spot']):
            data[curr_date].update({
                'atm_strike':
                strike,
                'prem_open':
                float(util.remove_non_no_chars(option_data[5].strip())),
                'prem_high':
                float(util.remove_non_no_chars(option_data[6].strip())),
                'prem_low':
                float(util.remove_non_no_chars(option_data[7].strip())),
                'prem_close':
                float(util.remove_non_no_chars(option_data[8].strip()))
            })

    return data
Exemple #5
0
def get_atm_call_puts(stock_id, last_thurs):
    options = outil.get_all_strikes(stock_id, last_thurs.month,
                                    last_thurs.year)

    atm_strike = outil.get_atm_strike(options)

    atm_option_call = None

    atm_option_put = None

    for option in options:
        if option.strike_price == atm_strike:
            if option.is_call:
                atm_option_call = option
            else:
                atm_option_put = option

    return atm_option_call, atm_option_put
Exemple #6
0
def append_to_otm_strategy_response(stock_id, itm_option, otm_option, strategy_name, net_credit, net_debit,
                                    stock_volatility):
    if itm_option.implied_volatility is None:
        itm_option.implied_volatility = 0

    otm_strategy_responses.append(
        [stock_id, strategy_name, itm_option.strike_price, otm_option.strike_price, itm_option.ltp, otm_option.ltp,
         itm_option.spot_price, net_credit, net_debit, stock_volatility, itm_option.implied_volatility,
         otm_option.implied_volatility, [1, 0][stock_volatility > itm_option.implied_volatility],
         outil.is_stock_physically_settled(stock_id), option_lots[stock_id]])
def event_handler_quote_update(quote):
    for order in orders_to_monitor:
        if quote['symbol'] == order['symbol_to_track']:
            if order['symbol_to_track_action'].value == Action.LONG.value and (
                    quote['ltp'] <= order['symbol_to_track_stoploss']
                    or quote['ltp'] >= order['symbol_to_track_target']):
                dutil.sell_instrument(upstox_api, order['symbol_to_act'],
                                      order['symbol_to_act_exch'], None,
                                      order['lots'], OrderType.Market)
                exit(0)

            if order['symbol_to_track_action'].value == Action.SHORT.value and (
                    quote['ltp'] >= order['symbol_to_track_stoploss']
                    or quote['ltp'] <= order['symbol_to_track_target']):
                dutil.buy_instrument(upstox_api, order['symbol_to_act'],
                                     order['symbol_to_act_exch'], None,
                                     order['lots'], OrderType.Market)
                exit(0)

    print(quote)
Exemple #8
0
def try_short_pcr(upstox_api, atm_option_call, atm_option_put, future, lot,
                  max_earning):
    net_premium = atm_option_call.ltp - atm_option_put.ltp + atm_option_call.strike_price - future.ltp
    earning = net_premium * lot

    if earning > max_earning[0]['earning']:
        max_earning[0]['earning'] = earning
        max_earning[0]['symbol_ltps'] = [
            atm_option_call, atm_option_put, future
        ]

    if earning > minimum_pcp_earning:
        get_reduced_short_pcr_ltps(earning, atm_option_put, future,
                                   atm_option_call, lot)

        outil.buy_instrument(upstox_api, atm_option_put.symbol, nse_bse.NSE_FO,
                             atm_option_put.ltp, lot)
        outil.buy_instrument(upstox_api, future.symbol, nse_bse.NSE_FO,
                             future.ltp, lot)
        outil.sell_instrument(upstox_api, atm_option_call.symbol,
                              nse_bse.NSE_FO, atm_option_call.ltp, lot)
        print('Executed SHORT PCR(CALL):', atm_option_call.symbol,
              atm_option_call.ltp)
        print('Executed SHORT PCR(PUT):', atm_option_put.symbol,
              atm_option_put.ltp)
        print('Executed SHORT PCR FUTURE:', future.symbol, future.ltp)
        print('Earning:', earning)
        # exit (0)
    else:
        print('Low earning:', earning)
Exemple #9
0
def wait_and_buy_current_future(upstox_api, near_future, lots):
    if util.check_if_instrument_in_positions(upstox_api, near_future['symbol'],
                                             max_timeout_for_trade):
        print('Sold', near_future['symbol'])
        outil.buy_instrument(upstox_api, near_future['c_symbol'],
                             nse_bse.NSE_FO, near_future['c_ltp'], lots)
        print('Executed future 0:', near_future['c_symbol'],
              near_future['c_ltp'])
        if util.check_if_instrument_in_positions(upstox_api,
                                                 near_future['c_symbol'],
                                                 max_timeout_for_trade):
            print('Bought', near_future['c_symbol'])
        else:
            util.cancel_order(upstox_api, near_future['c_symbol'])
            print('Time out for buying future 0', near_future['c_symbol'])
            outil.buy_instrument(upstox_api, near_future['symbol'],
                                 nse_bse.NSE_FO, near_future['ltp'] - 1, lots)

        exit(0)
    else:
        util.cancel_order(upstox_api, near_future['symbol'])
        print('Time out for buying future 1', near_future['symbol'])
async def fetch_futures(futures, fetched_futures, current_month_last_thurs_yr,
                        near_month_last_thurs_mn, far_month_last_thurs_mn):
    tasks = []
    for future in futures:
        stock_id = outil.get_stock_id(future[nse_bse.STOCK_ID])
        tasks.append(
            asyncio.ensure_future(
                fetch_future(stock_id, fetched_futures,
                             current_month_last_thurs_yr,
                             near_month_last_thurs_mn,
                             far_month_last_thurs_mn)))

    await asyncio.gather(*tasks)
Exemple #11
0
def check_pcr_future(future):
    if future is None:
        print('Null futures', future.symbol)
        return False

    if outil.is_instrument_liquid(future.bids, future.asks) is False:
        print('Illiquid futures', future.symbol)
        return False

    if future.volume is None or future.volume <= 0 or future.high is None or future.high <= 0 or future.low is None or future.low <= 0 or future.open is None or future.open <= 0:
        print('Illiquid futures', future.symbol)
        return False

    return True
            otm = {'strike': None, 'start_date': None}

            spot_start_of_month = None
            for option_data in options_data:
                if not first_row_excluded:
                    first_row_excluded = True
                    continue

                curr_date = parser.parse(option_data[1].strip())
                expiry_date = parser.parse(option_data[2].strip())

                if spot_start_of_month is None:
                    spot_start_of_month = float(
                        util.remove_non_no_chars(option_data[16].strip()))

                last_thurs = outil.get_last_thurday_of_month(
                    curr_date.month, curr_date.year)

                if curr_date.month != expiry_date.month or abs(
                    (expiry_date - last_thurs).days) > 1:
                    continue

                strike = float(util.remove_non_no_chars(
                    option_data[4].strip()))

                if otm['start_date'] is None or otm['start_date'] >= curr_date:
                    if strike > spot_start_of_month and (
                            otm['strike'] is None or
                        (strike - spot_start_of_month) <
                        (otm['strike'] - spot_start_of_month)):
                        otm = {
                            'strike':
Exemple #13
0
start_date = datetime.now() - timedelta(days=diff_between_start_end_date)
end_date = datetime.now() - timedelta(days=1)
futures = []
# futures = nse_bse.get_all_nse_stocks_ids ()
indices = nse_bse.get_indices()
# futures = nse_bse.get_nse_fo_stocks ()
futures.extend(indices)
futures = [{nse_bse.STOCK_ID: 'SBIN', nse_bse.EXCHANGE: nse_bse.NSE_FO}]

cs_responses = []

option_lots = nse_bse.get_nse_fo_lots()

for future in futures:
    try:
        stock_id = outil.get_stock_id(future[nse_bse.STOCK_ID])
        future_current_month_historical_data = []
        future_near_month_historical_data = []
        future_far_month_historical_data = []

        util.get_future_historical_data(stock_id,
                                        future_current_month_historical_data,
                                        future_near_month_historical_data,
                                        future_far_month_historical_data)

        future_near_month_historical_data = util.get_equity_historical_data(
            stock_id)

        current_near_months_diffs = c_spread.check_get_calendar_spread_month_diffs(
            future_current_month_historical_data,
            future_near_month_historical_data)
def isliquid(bids):
    if bids is None or len(bids) == 0:
        return False
    for bid in bids:
        if bid['price'] is None or bid['price'] is 0 or bid[
                'quantity'] is None or bid['quantity'] is 0:
            return False

    return True


kite = util.intialize_kite_api()

current_month_last_thurs = outil.get_last_thurday_of_month(
    datetime.now().month,
    datetime.now().year)

near_month_last_thurs = current_month_last_thurs + relativedelta(months=+1)

fo_stocks = sUtils.get_nse_fo_stocks()
lots = sUtils.get_nse_fo_lots()
nse_futures = []

for fo_stock in fo_stocks:
    stock_id = fo_stock[sUtils.STOCK_ID]

    nse_futures.append(
        util.NFO + outil.get_future_symbol(stock_id, current_month_last_thurs))
    nse_futures.append(
        util.NFO + outil.get_future_symbol(stock_id, near_month_last_thurs))
Exemple #15
0
start_time = time.time ()
# futures = nse_bse.get_all_nse_stocks_ids ()
# indices = nse_bse.get_indices ()
futures = nse_bse.get_nse_fo_stocks ()
# futures.extend (indices)
# futures = nse_bse.get_indices ()
# futures = nse_bse.get_nifty50_stocks_latest_info ()
# futures = nse_bse.get_nifty100_stocks_latest_info ()
# futures = [{nse_bse.STOCK_ID: 'TATAPOWER', nse_bse.EXCHANGE: nse_bse.NSE_FO}]
# futures.extend(indices)

future_limits = {}

for future in futures:
    try:
        stock_id = outil.get_stock_id (future[nse_bse.STOCK_ID])
        future_current_month_historical_data = []
        future_near_month_historical_data = []
        future_far_month_historical_data = []

        util.get_future_historical_data (stock_id, future_current_month_historical_data,
                                         future_near_month_historical_data, future_far_month_historical_data)

        future_near_month_historical_data = util.get_equity_historical_data (stock_id)

        current_near_months_diffs = c_spread.check_get_calendar_spread_month_diffs (
            future_current_month_historical_data, future_near_month_historical_data)

        current_far_months_diffs = c_spread.check_get_calendar_spread_month_diffs (future_current_month_historical_data,
                                                                                   future_far_month_historical_data)
    [nse_bse.NSE_FO, nse_bse.NSE, nse_bse.NSE_INDEX])

today_date = datetime.today().date()
start_date = datetime.now() - timedelta(days=diff_between_start_end_date)
end_date = datetime.now() - timedelta(days=1)

# stocks_latest_info = nse_bse.get_all_nse_stocks_ids ()
indices = nse_bse.get_indices()
stocks_latest_info = nse_bse.get_nse_fo_stocks()
stocks_latest_info.extend(indices)
# stocks_latest_info = nse_bse.get_indices ()
# stocks_latest_info = nse_bse.get_nifty50_stocks_latest_info ()
# stocks_latest_info = nse_bse.get_nifty100_stocks_latest_info ()
# stocks_latest_info = [{nse_bse.STOCK_ID: 'JETAIRWAYS', nse_bse.EXCHANGE: nse_bse.NSE_INDEX}]

last_thurs = outil.get_last_thurday_of_month(today_date.month, today_date.year)

no_of_days_till_last_thurs = last_thurs.day - today_date.day + 1

required_margins = outil.get_future_margins(stocks_latest_info)

if util.is_market_open():
    available_margin = upstox_api.get_balance()['equity']['available_margin']

    stocks_latest_info[:] = [
        x for x in stocks_latest_info
        if required_margins[outil.get_stock_id(x[nse_bse.STOCK_ID])] <= (
            .95 * available_margin)
    ]

option_lots = nse_bse.get_nse_fo_lots()
today = datetime.date.today()
for stock in tradable_stocks:
    last = today
    first = last - datetime.timedelta(days=365)

    try:
        while first.year != 2014:

            first_day = first.strftime("%d-%m-%Y")
            last_day = last.strftime("%d-%m-%Y")

            last = first - datetime.timedelta(days=1)
            first = last - datetime.timedelta(days=365)

            stock_id = urllib.parse.quote(outil.get_stock_id(stock))

            option_file = FILES_LOCATION + '_' + urllib.parse.unquote(stock_id) + '_' + first_day + '_' + last_day + outil.EQ_FILE_SUFFIX
            if os.path.exists (option_file):
                print (stock_id + ' data already exists.')
                continue

            # url = NSE_EQ_HIST_DATA_URL.format(stock_id, period)
            url = NSE_EQ_HIST_DATA_URL.format(stock_id, first_day, last_day)

            response = requests.get(url, headers=outil.FUTURE_HEADERS)
            # parse the html using beautiful soup and store in variable `soup`
            soup = BeautifulSoup(response.text, 'html.parser')
            option_data = soup.findAll('div', attrs={'id': 'csvContentDiv'})

            if option_data is not None and len(option_data) > 0:
Exemple #18
0
import Utils as util
from dateutil.relativedelta import relativedelta

minimum_cs_earning = 6500
minimum_pcp_earning = 20000
max_timeout_for_trade = 180
cs_earning_sacrifical_ratio = .2
pcr_earning_sacrifical_ratio = .2
max_std_multiple_for_buy = 2
max_std_multiple_for_sell = 1
future_liquidity_margin = .1
min_no_of_bids_asks = 5

today_date = datetime.today().date()

current_month_last_thurs = outil.get_last_thurday_of_month(
    today_date.month, today_date.year)

near_month_last_thurs = current_month_last_thurs + relativedelta(months=+1)


def fetch_futures(futures, current_month_last_thurs, near_month_last_thurs,
                  fetched_futures, calcul_limit, option_lots):
    future_status = {}
    for future in futures:
        stock_id = outil.get_stock_id(future[nse_bse.STOCK_ID])
        future_status[stock_id] = {
            'curr_mon_enable': True,
            'near_mon_enable': True
        }

        future_cur_mon_symbol = outil.get_future_symbol(
# stocks_latest_info = nse_bse.get_all_nse_stocks_ids ()
indices = nse_bse.get_indices ()
stocks_latest_info = nse_bse.get_nse_fo_stocks ()
stocks_latest_info.extend (indices)
# stocks_latest_info = nse_bse.get_indices()
# stocks_latest_info = nse_bse.get_nifty50_stocks_latest_info ()
# stocks_latest_info = nse_bse.get_nifty100_stocks_latest_info ()
#stocks_latest_info = [{nse_bse.STOCK_ID: 'NIFTY_BANK', nse_bse.EXCHANGE: nse_bse.NSE_INDEX}]

otm_contract_responses = []

option_lots = nse_bse.get_nse_fo_lots()

for stock_latest_info in stocks_latest_info:
    stock_id = outil.get_stock_id(stock_latest_info[nse_bse.STOCK_ID])

    option_hist_data = []
    with open(outil.OPTION_FILE_LOCATION + stock_id + outil.OPTION_FILE_SUFFIX) as csvfile:
        options_data = csv.reader(csvfile, delimiter=',', quotechar='"')
        row_count = 0

        for option_data in options_data:
            if row_count > 0:
                close = 0
                if util.is_number (util.remove_non_no_chars (option_data[8].strip ())):
                    close = float (util.remove_non_no_chars (option_data[8].strip ()))
                else:
                    print ('Fetching prev close', stock_id, option_data)
                    close = option_hist_data[-1]['close']
import Utils as util

diff_between_start_end_date = 365
min_return_monthly = 10
no_of_sessions_to_scan_for_volatility = pr.no_of_sessions_to_scan_for_volatility
current_time = time.strftime("%Y_%m_%d#%H_%M_%S")
high_volat_options_excel_location = 'F:/Trading_Responses/High_Volat_Option_excel_' + str(
    current_time) + '.xlsx'

start_time = time.time()

today_date = datetime.today().date()
start_date = datetime.now() - timedelta(days=diff_between_start_end_date)
end_date = datetime.now() - timedelta(days=1)

last_thurs = outil.get_last_thurday_of_month(today_date.month, today_date.year)

no_of_days_till_last_thurs = last_thurs.day - today_date.day + 1

upstox_api = util.intialize_upstox_api(
    [nse_bse.NSE_FO, nse_bse.NSE, nse_bse.NSE_INDEX])

# stocks_latest_info = nse_bse.get_all_nse_stocks_ids ()
indices = nse_bse.get_indices()
stocks_latest_info = nse_bse.get_nse_fo_stocks()
stocks_latest_info.extend(indices)
# stocks_latest_info = nse_bse.get_indices ()
# stocks_latest_info = nse_bse.get_nifty50_stocks_latest_info ()
# stocks_latest_info = nse_bse.get_nifty100_stocks_latest_info ()
# stocks_latest_info = [{nse_bse.STOCK_ID: 'BHEL', nse_bse.EXCHANGE: nse_bse.NSE}]
def get_calendar_spread_responses(option_lots,
                                  stock_id,
                                  current_month_last_thurs,
                                  near_month_last_thurs,
                                  far_month_last_thurs,
                                  futures,
                                  margin,
                                  debug=True):
    cs_responses = []

    future_current_month_symbol = outil.get_future_symbol(
        stock_id, current_month_last_thurs)

    future_near_month_symbol = outil.get_future_symbol(stock_id,
                                                       near_month_last_thurs)

    future_far_month_symbol = outil.get_future_symbol(stock_id,
                                                      far_month_last_thurs)

    current_near_months_range_upper_limit_for_buy = calcul_limit.calculated_calendar_spread_limits[
        stock_id][0]

    current_near_months_range_upper_limit_for_sell = calcul_limit.calculated_calendar_spread_limits[
        stock_id][1]

    current_far_months_range_upper_limit_for_buy = calcul_limit.calculated_calendar_spread_limits[
        stock_id][2]

    current_far_months_range_upper_limit_for_sell = calcul_limit.calculated_calendar_spread_limits[
        stock_id][3]

    if current_near_months_range_upper_limit_for_buy is None or current_far_months_range_upper_limit_for_buy is None:
        print('No limits for stock:' + stock_id)
        return []

    if len(futures) > 1:
        if futures[0].ltp is not None and futures[0].ltp is not 0:

            if futures[1].ltp is not None and futures[1].ltp is not 0:
                spread = futures[1].ltp - futures[0].ltp
                if spread > current_near_months_range_upper_limit_for_buy:
                    # if True:

                    cs_responses.append([
                        future_current_month_symbol, future_near_month_symbol,
                        futures[1].ltp, futures[0].ltp,
                        current_near_months_range_upper_limit_for_buy,
                        current_near_months_range_upper_limit_for_sell, spread,
                        spread / current_near_months_range_upper_limit_for_buy,
                        (spread -
                         current_near_months_range_upper_limit_for_sell) *
                        option_lots[stock_id], margin, option_lots[stock_id]
                    ])
            else:
                if debug:
                    print('No ltp for future:' + str(futures[1]))

            if len(futures) > 2:
                if futures[2].ltp is not None and futures[2].ltp is not 0:
                    spread = futures[2].ltp - futures[0].ltp
                    if spread > current_far_months_range_upper_limit_for_buy:
                        # if True:

                        cs_responses.append([
                            future_current_month_symbol,
                            future_far_month_symbol, futures[2].ltp,
                            futures[0].ltp,
                            current_far_months_range_upper_limit_for_buy,
                            current_far_months_range_upper_limit_for_sell,
                            spread, spread /
                            current_far_months_range_upper_limit_for_buy,
                            (spread -
                             current_far_months_range_upper_limit_for_sell) *
                            option_lots[stock_id], margin,
                            option_lots[stock_id]
                        ])
                else:
                    if debug:
                        print('No ltp for future:' + str(futures[2]))
            else:
                if debug:
                    print(*futures, 'No futures:')

        else:
            if debug:
                print('No ltp for future:' + str(futures[0]))
    else:
        if debug:
            print(*futures, 'No futures:')

    return cs_responses
Exemple #22
0
import DerivativeUtils as outil
import ScrapUtils as sutils
from bs4 import BeautifulSoup
period = '12month'
# period = '24month'
NSE_FUTURE_HIST_DATA_URL = 'https://www.nseindia.com/products/dynaContent/common/productsSymbolMapping.jsp?instrumentType={0}&symbol={1}&expiryDate=select&optionType=select&strikePrice=&dateRange={2}&fromDate=&toDate=&segmentLink=9&symbolCount='

futures = []
# indices = sutils.get_indices()
futures = sutils.get_nse_fo_stocks()
# futures.extend(indices)
# futures = [{sutils.STOCK_ID: 'SBIN', sutils.EXCHANGE: sutils.NSE_FO}]

for future in futures:
    try:
        stock_id = outil.get_stock_id(future[sutils.STOCK_ID])
        stock_id = urllib.parse.quote(stock_id)

        if stock_id == sutils.NIFTY_50_NSE_SYMBOL:
            url = NSE_FUTURE_HIST_DATA_URL.format(outil.FUTIDX, stock_id,
                                                  period)
        elif stock_id == sutils.NIFTY_BANK_NSE_SYMBOL:
            url = NSE_FUTURE_HIST_DATA_URL.format(outil.FUTIDX, stock_id,
                                                  period)
        else:
            url = NSE_FUTURE_HIST_DATA_URL.format(outil.FUTSTK, stock_id,
                                                  period)

        page = urlopen(Request(url, headers=outil.FUTURE_HEADERS))
        # parse the html using beautiful soup and store in variable `soup`
        soup = BeautifulSoup(page, 'html.parser')
Exemple #23
0
NSE_EQ_HIST_DATA_URL = 'https://www1.nseindia.com/products/dynaContent/common/productsSymbolMapping.jsp?symbol={0}&segmentLink=3&symbolCount=2&series=EQ&dateRange=12month&fromDate=&toDate=&dataType=PRICEVOLUMEDELIVERABLE'
# stocks = sutils.get_nse_fo_stocks()

# indices = sutils.get_indices()
tradable_stocks = scrap.get_nse_fo_stocks()
# tradable_stocks = sutils.get_all_nse_stocks_ids()
# tradable_stocks = sutils.get_tradable_stocks_ids()
# top_20_traded_stocks = sutils.get_top_20_nse_traded_stocks(tradable_stocks)
# tradable_stocks.extend(top_20_traded_stocks)

# stocks.extend(indices)
# stocks = [{sutils.STOCK_ID: 'ESCORTS', sutils.EXCHANGE: sutils.NSE_FO}]

for stock in tradable_stocks:
    try:
        stock_id = sutils.get_stock_id(stock[scrap.STOCK_ID])
        # stock_id = urllib.parse.quote(stock_id)

        # if stock_id == 'NBVENTURES':
        #     start = True
        #
        # if not start:
        #     continue

        option_file = sutils.EQ_FILE_LOCATION + urllib.parse.unquote (stock_id) + sutils.EQ_FILE_SUFFIX

        if os.path.exists (option_file):
            print (stock_id + ' option data already exists.')
            continue

        url = NSE_EQ_HIST_DATA_URL.format(stock_id)
upstox_api = util.intialize_upstox_api([nse_bse.NSE_FO, nse_bse.NSE])
# upstox_api = None

# futures = nse_bse.get_all_nse_stocks_ids ()
futures = nse_bse.get_nse_fo_stocks()
# futures = nse_bse.get_indices ()
# futures = nse_bse.get_nifty50_stocks_latest_info ()
# futures = nse_bse.get_nifty100_stocks_latest_info ()
futures = [{nse_bse.STOCK_ID: 'IBULHSGFIN', nse_bse.EXCHANGE: nse_bse.NSE_FO}]

fetched_futures = {}
symbols_to_subscribe = []

today_date = datetime.today().date()
current_month_last_thurs = d_util.get_last_thurday_of_month(today_date.month, today_date.year)
near_month_last_thurs = current_month_last_thurs + relativedelta(months=+1)

for future in futures:
    stock_id = d_util.get_stock_id(future[nse_bse.STOCK_ID])

    future_cur_mon_symbol = d_util.get_future_symbol(stock_id, current_month_last_thurs)
    future_near_mon_symbol = d_util.get_future_symbol(stock_id, near_month_last_thurs)

    near_future = upstox_api.get_instrument_by_symbol(nse_bse.NSE_FO, future_near_mon_symbol)
    curr_future = upstox_api.get_instrument_by_symbol(nse_bse.NSE_FO, future_cur_mon_symbol)

    if near_future is not None and curr_future is not None:
        symbols_to_subscribe.append(curr_future)
        symbols_to_subscribe.append(near_future)
Exemple #25
0
import DerivativeUtils as dutil
import ScrapUtils as nse_bse
import Utils as util

start_time = time.time()

upstox_api = util.intialize_upstox_api([nse_bse.NSE])

max_bearable_loss = 3000
max_limit_sacrifice = 400

orders = []

today_date = datetime.today().date()
last_thurs = dutil.get_last_thurday_of_month(today_date.month, today_date.year)
# future_lots = dutil.get_nse_fo_lots_on_future(last_thurs)
future_lots = nse_bse.get_nse_fo_lots()

PRICE_DIFF = 'price_diff'
max_price_rise_wrt_today = {nse_bse.STOCK_ID: None, PRICE_DIFF: -math.inf}
max_price_fall_wrt_today = {nse_bse.STOCK_ID: None, PRICE_DIFF: math.inf}


def update_prices(stock_id, ltp, open):
    price_change_wrt_today = (ltp - open) / open
    if price_change_wrt_today > 0 and price_change_wrt_today > max_price_rise_wrt_today[
            PRICE_DIFF]:
        max_price_rise_wrt_today[nse_bse.STOCK_ID] = stock_id
        max_price_rise_wrt_today[PRICE_DIFF] = price_change_wrt_today
    elif price_change_wrt_today < 0 and price_change_wrt_today < max_price_fall_wrt_today[
Exemple #26
0
today_date = datetime.today().date()
start_date = datetime.now() - timedelta(days=diff_between_start_end_date)
end_date = datetime.now() - timedelta(days=1)

no_of_sessions_to_scan_for_volatility = pr.no_of_sessions_to_scan_for_volatility

# stocks_latest_info = nse_bse.get_all_nse_stocks_ids ()
indices = nse_bse.get_indices()
stocks_latest_info = nse_bse.get_nse_fo_stocks()
stocks_latest_info.extend(indices)
# stocks_latest_info = nse_bse.get_indices ()
# stocks_latest_info = nse_bse.get_nifty50_stocks_latest_info ()
# stocks_latest_info = nse_bse.get_nifty100_stocks_latest_info ()
# stocks_latest_info = [{nse_bse.STOCK_ID: 'HDFC', nse_bse.EXCHANGE: nse_bse.NSE}]

last_thurs = outil.get_last_thurday_of_month(today_date.month, today_date.year)

fetched_options = {}
outil.run_fetch_options(stocks_latest_info, fetched_options, today_date)

fetched_stocks_data = {}
stocks_data_obj = pickle.load(open(util.STOCK_DATA_OBJ_FILE, 'rb'))
upstox_api = util.intialize_upstox_api([nse_bse.NSE_FO, nse_bse.NSE, nse_bse.NSE_INDEX])
util.run_fetch_stocks_data(stocks_latest_info, fetched_stocks_data, upstox_api, start_date, end_date, stocks_data_obj,
                           False)

otm_strategy_responses = []
option_lots = nse_bse.get_nse_fo_lots()


def append_to_otm_strategy_response(stock_id, itm_option, otm_option, strategy_name, net_credit, net_debit,
async def fetch_future(stock_id, fetched_futures, current_month_last_thurs_yr,
                       near_month_last_thurs_mn, far_month_last_thurs_mn):
    fetched_futures[stock_id] = outil.get_all_futures(
        stock_id, current_month_last_thurs_yr, near_month_last_thurs_mn,
        far_month_last_thurs_mn)
Exemple #28
0
import traceback
import urllib.parse
import GenericStatPrinter as gstats
import DerivativeUtils as outil
import TradingScripts.ScrapUtils as sutils
import TradingScripts.Utils as util
import os
from datetime import datetime

stocks = sutils.get_nse_fo_stocks()
nse_fo_stocks = []
for stock in stocks:
    stock_id = urllib.parse.quote (outil.get_stock_id (stock[sutils.STOCK_ID]))
    nse_fo_stocks.append(stock_id)

today_date = datetime.now ().strftime ('%Y-%m-%d')
excel_location = ['G:', 'F:'][os.path.exists('F:')] + '/Trading_Responses/TradableStocks_' + str (today_date) + '.xlsx'

stocks = sutils.get_all_nse_stocks_ids()
# stocks = sutils.get_nse_fo_stocks()
# stocks = [{sutils.STOCK_ID: 'ASIANPAINT'}]
max_duration_to_consider = 180
min_daily_order_size = 500000
stock_market_cap = {}


for stock in stocks:
    try:
        stock_id = outil.get_stock_id(stock[sutils.STOCK_ID])
        stock_id = urllib.parse.quote(stock_id)
def set_pe_ce_data(options_data):
    data = {}
    first_row_excluded = False

    spot_start_of_month = None
    spot_at_expiry = None
    for option_data in options_data:
        if not first_row_excluded:
            first_row_excluded = True
            continue

        curr_date = parser.parse(option_data[1].strip())
        expiry_date = parser.parse(option_data[2].strip())

        if spot_start_of_month is None:
            spot_start_of_month = get_bank_nifty_spot(curr_date)

        last_thurs = outil.get_last_thurday_of_month(curr_date.month,
                                                     curr_date.year)

        if curr_date.month != expiry_date.month or abs(
            (expiry_date - last_thurs).days) > 1:
            continue

        if spot_at_expiry is None:
            spot_at_expiry = get_bank_nifty_spot(expiry_date)

        strike = float(util.remove_non_no_chars(option_data[4].strip()))

        if 'expiry_date' not in data:
            data = {
                'spot':
                spot_start_of_month,
                'spot_at_expiry':
                spot_at_expiry,
                'atm_strike':
                strike,
                'prem_buy':
                float(util.remove_non_no_chars(option_data[5].strip())),
                'buy_date':
                curr_date,
                'expiry_date':
                expiry_date,
                'dates': {},
                'prem_buy_high':
                float(util.remove_non_no_chars(option_data[6].strip())),
                'prem_buy_low':
                float(util.remove_non_no_chars(option_data[7].strip())),
                'prem_buy_close':
                float(util.remove_non_no_chars(option_data[8].strip()))
            }

        elif abs(strike - data['spot']) < abs(
                data['atm_strike'] -
                data['spot']) and curr_date <= data['buy_date']:
            data.update({
                'atm_strike':
                strike,
                'prem_buy':
                float(util.remove_non_no_chars(option_data[5].strip())),
                'buy_date':
                curr_date,
                'prem_buy_high':
                float(util.remove_non_no_chars(option_data[6].strip())),
                'prem_buy_low':
                float(util.remove_non_no_chars(option_data[7].strip())),
                'prem_buy_close':
                float(util.remove_non_no_chars(option_data[8].strip()))
            })

        if expiry_date == curr_date and data['atm_strike'] == strike:
            data.update({
                'exit_premium':
                float(util.remove_non_no_chars(option_data[8].strip())),
                'exit_premium_high':
                float(util.remove_non_no_chars(option_data[6].strip())),
                'exit_premium_low':
                float(util.remove_non_no_chars(option_data[7].strip())),
                'exit_premium_open':
                float(util.remove_non_no_chars(option_data[5].strip()))
            })

        if data['atm_strike'] == strike and curr_date != data[
                'buy_date'] and curr_date != data['expiry_date']:
            data['dates'].update({
                curr_date: {
                    'prem_open':
                    float(util.remove_non_no_chars(option_data[5].strip())),
                    'prem_high':
                    float(util.remove_non_no_chars(option_data[6].strip())),
                    'prem_low':
                    float(util.remove_non_no_chars(option_data[7].strip())),
                    'prem_close':
                    float(util.remove_non_no_chars(option_data[8].strip()))
                }
            })

    return data
Exemple #30
0
# stocks_latest_info = nse_bse.get_all_nse_stocks_ids ()
# indices = nse_bse.get_indices ()
stocks_latest_info = nse_bse.get_nse_fo_stocks()
# stocks_latest_info.extend (indices)
# stocks_latest_info = nse_bse.get_indices ()
# stocks_latest_info = nse_bse.get_nifty50_stocks_latest_info ()
# stocks_latest_info = nse_bse.get_nifty100_stocks_latest_info ()
# stocks_latest_info = [{nse_bse.STOCK_ID: 'HDFCBANK', nse_bse.EXCHANGE: nse_bse.NSE}]

pcr_responses = []

option_lots = nse_bse.get_nse_fo_lots()

for stock_latest_info in stocks_latest_info:
    try:
        stock_id = outil.get_stock_id(stock_latest_info[nse_bse.STOCK_ID])

        option_ce_hist_data = []
        with open(outil.OPTION_FILE_LOCATION + stock_id + 'CE' +
                  outil.OPTION_FILE_SUFFIX) as csvfile:
            options_data = csv.reader(csvfile, delimiter=',', quotechar='"')
            row_count = 0

            for option_data in options_data:
                if row_count > 0:
                    close = 0
                    if util.is_number(
                            util.remove_non_no_chars(option_data[8].strip())):
                        close = float(
                            util.remove_non_no_chars(option_data[8].strip()))
                    else: