Natural Language Process Helper for getting Futures Symbol Name in NSE

def futname(name):
    name=name.upper()
    mydate = datetime.datetime.now()

    end_of_month = datetime.datetime.today() + relativedelta(day=31)

    last_thursday = end_of_month + relativedelta(weekday=TH(-1))
    last_thursday = last_thursday.replace(hour=15,minute=20,second=0,microsecond=0)

    last_friday_before_last_thursday=last_thursday+ relativedelta(weekday=FR(-1))
    last_friday_before_last_thursday = last_friday_before_last_thursday.replace(hour=15,minute=20,second=0,microsecond=0)

    if("NIFTY" not in name):
        if(mydate>last_friday_before_last_thursday): mydate = (mydate.replace(day=1) + datetime.timedelta(days=32)).replace(day=1)

    if("NIFTY" in name):
        #https://stackoverflow.com/questions/9724906/python-date-of-the-previous-month
        # first = mydate.replace(day=1)
        # mydate = first - datetime.timedelta(days=1)
        #https://stackoverflow.com/questions/57353919/how-can-i-get-the-first-day-of-the-next-month-in-python
        if(mydate>last_thursday): mydate = (mydate.replace(day=1) + datetime.timedelta(days=32)).replace(day=1)

    name = name+mydate.strftime("%y")+mydate.strftime("%b")+"FUT"
    return name.upper()

It will return next month’s futures scrip name after Last Thursday’s post 15:20. If it is stock, then it will show next month’s futures scrip name after Last Friday’s post 15:20 which comes before the Last Thursday i.e. expiry week.

Slight complex to hear but if you’re trader in NSE, You will know the pain.