Natural Language Process Helper for getting Futures Symbol Name in NSE

def futname(name):
    mydate =

    end_of_month = + 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):
        # first = mydate.replace(day=1)
        # mydate = first - datetime.timedelta(days=1)
        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.