Friday, April 21, 2023

Algotrading: Exit Positions in Fyers API

Example code snippet for exiting positions in Fyers API


Code:


if __name__ == '__main__':
    token = get_auth_code()
    fyers = fyersModel.FyersModel(client_id=client_id, token=token, log_path='/tmp/')
    print(fyers.positions())

    data = [{"id": "NSE:BANKNIFTY23APR42900CE-MARGIN"}, {"id": "NSE:BANKNIFTY23APR41300PE-MARGIN"}]
    pos_res = fyers.exit_positions(data)

    print(pos_res)

    pos_res = fyers.exit_positions()

    print(pos_res)
  

Please copy the code for get_auth_code() from previous blogpost for Fyers V2 login

 

Happy trading. Enjoy.

Saturday, April 15, 2023

Get Trading holiday list using Python

 

Code to  get the list of NSE trading holidays, to use in your algo trading.




import json
from datetime import datetime

import requests

if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0',
        'Accept': '*/*',
        'Accept-Language': 'en-US,en;q=0.5',
        # 'Accept-Encoding': 'gzip, deflate, br',
        'Connection': 'keep-alive',
        'Referer': 'https://www.nseindia.com/resources/exchange-communication-holidays',

        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
    }

    params = {
        'type': 'trading',
    }

    response = requests.get('https://www.nseindia.com/api/holiday-master', params=params, headers=headers)

    jsonResponse = response.json()

    for record in jsonResponse['FO']:
        # print(record["tradingDate"])
        print(datetime.strptime(record["tradingDate"], '%d-%b-%Y').strftime('%d/%m/%Y'))

    with open('data.json', 'w') as f:
        json.dump(jsonResponse['FO'], f, ensure_ascii=False, indent=4)

Happy Coding.

Thursday, July 22, 2021

AlgoTrading - Python code for automated login in Fyers

 In this post sharing for Fyers Automated login for AlgoTrading


I have used Fyers API v2

Note: Code has been adjusted to adopt latest changes from Fyers in API


import json
import sys
from hashlib import sha256
from urllib import parse

import pyotp
import requests
from fyers_api import fyersModel

app_secret = "api_secret"
redirect_uri = "redirect_uri"
fyers_id = "fyers_id"
pin = "pin"
client_id = "client_id"
app_id = "app_id"
TOTP_KEY = "TOTP_KEY"  # TOTP secret is generated when we enable 2Factor TOTP from myaccount portal

APP_ID_TYPE = "2"  # Keep default as 2, It denotes web login
APP_TYPE = "100"
APP_ID_HASH = sha256((client_id + ":" + app_secret).encode('utf-8')).hexdigest()

SUCCESS = 1
ERROR = -1

# API endpoints
BASE_URL = "https://api-t2.fyers.in/vagator/v2"
BASE_URL_2 = "https://api.fyers.in/api/v2"
URL_SEND_LOGIN_OTP = BASE_URL + "/send_login_otp"
URL_VERIFY_TOTP = BASE_URL + "/verify_otp"
URL_VERIFY_PIN = BASE_URL + "/verify_pin"
URL_TOKEN = BASE_URL_2 + "/token"
URL_VALIDATE_AUTH_CODE = BASE_URL_2 + "/validate-authcode"


def send_login_otp(fy_id, app_id):
    try:
        payload = {
            "fy_id": fy_id,
            "app_id": app_id
        }

        result_string = requests.post(url=URL_SEND_LOGIN_OTP, json=payload)
        if result_string.status_code != 200:
            return [ERROR, result_string.text]

        result = json.loads(result_string.text)
        request_key = result["request_key"]

        return [SUCCESS, request_key]

    except Exception as e:
        return [ERROR, e]


def generate_totp(secret):
    try:
        generated_totp = pyotp.TOTP(secret).now()
        return [SUCCESS, generated_totp]

    except Exception as e:
        return [ERROR, e]


def verify_totp(request_key, totp):
    try:
        payload = {
            "request_key": request_key,
            "otp": totp
        }

        result_string = requests.post(url=URL_VERIFY_TOTP, json=payload)
        if result_string.status_code != 200:
            return [ERROR, result_string.text]

        result = json.loads(result_string.text)
        request_key = result["request_key"]

        return [SUCCESS, request_key]

    except Exception as e:
        return [ERROR, e]


def verify_PIN(request_key, pin):
    try:
        payload = {
            "request_key": request_key,
            "identity_type": "pin",
            "identifier": pin
        }

        result_string = requests.post(url=URL_VERIFY_PIN, json=payload)
        if result_string.status_code != 200:
            return [ERROR, result_string.text]

        result = json.loads(result_string.text)
        access_token = result["data"]["access_token"]

        return [SUCCESS, access_token]

    except Exception as e:
        return [ERROR, e]


def token(fy_id, app_id, redirect_uri, app_type, access_token):
    try:
        payload = {
            "fyers_id": fy_id,
            "app_id": app_id,
            "redirect_uri": redirect_uri,
            "appType": app_type,
            "code_challenge": "",
            "state": "sample_state",
            "scope": "",
            "nonce": "",
            "response_type": "code",
            "create_cookie": True
        }
        headers = {'Authorization': f'Bearer {access_token}'}

        result_string = requests.post(
            url=URL_TOKEN, json=payload, headers=headers
        )

        if result_string.status_code != 308:
            return [ERROR, result_string.text]

        result = json.loads(result_string.text)
        url = result["Url"]
        auth_code = parse.parse_qs(parse.urlparse(url).query)['auth_code'][0]

        return [SUCCESS, auth_code]

    except Exception as e:
        return [ERROR, e]


def validate_authcode(app_id_hash, auth_code):
    try:
        payload = {
            "grant_type": "authorization_code",
            "appIdHash": app_id_hash,
            "code": auth_code,
        }

        result_string = requests.post(url=URL_VALIDATE_AUTH_CODE, json=payload)
        if result_string.status_code != 200:
            return [ERROR, result_string.text]

        result = json.loads(result_string.text)
        access_token = result["access_token"]

        return [SUCCESS, access_token]

    except Exception as e:
        return [ERROR, e]


def check_login_status():
    user_config = get_user_config()

    token_date_json = user_config['fyers']["token_date"]
    access_token = user_config['fyers']["access_token"]
    # Convert date from json to date object
    token_date = datetime.strptime(token_date_json, "%d-%m-%Y")
    if token_date.date() != date.today():
        access_token = None

    return access_token


def get_auth_code():
    access_token = check_login_status()
    if access_token is not None:
        return access_token

    # Step 1 - Retrieve request_key from send_login_otp API
    send_otp_result = send_login_otp(fy_id=fyers_id, app_id=APP_ID_TYPE)
    if send_otp_result[0] != SUCCESS:
        print(f"send_login_otp failure - {send_otp_result[1]}")
        sys.exit()
    else:
        print("send_login_otp success")

    # Step 2 - Generate totp
    generate_totp_result = generate_totp(secret=TOTP_KEY)
    if generate_totp_result[0] != SUCCESS:
        print(f"generate_totp failure - {generate_totp_result[1]}")
        sys.exit()
    else:
        print("generate_totp success")

    # Step 3 - Verify totp and get request key from verify_otp API
    request_key = send_otp_result[1]
    totp = generate_totp_result[1]
    verify_totp_result = verify_totp(request_key=request_key, totp=totp)
    if verify_totp_result[0] != SUCCESS:
        print(f"verify_totp_result failure - {verify_totp_result[1]}")
        sys.exit()
    else:
        print("verify_totp_result success")

    # Step 4 - Verify pin and send back access token
    request_key_2 = verify_totp_result[1]
    verify_pin_result = verify_PIN(request_key=request_key_2, pin=pin)
    if verify_pin_result[0] != SUCCESS:
        print(f"verify_pin_result failure - {verify_pin_result[1]}")
        sys.exit()
    else:
        print("verify_pin_result success")

    # Step 5 - Get auth code for API V2 App from trade access token
    token_result = token(
        fy_id=fyers_id, app_id=app_id, redirect_uri=redirect_uri, app_type=APP_TYPE,
        access_token=verify_pin_result[1]
    )
    if token_result[0] != SUCCESS:
        print(f"token_result failure - {token_result[1]}")
        sys.exit()
    else:
        print("token_result success")

    # Step 6 - Get API V2 access token from validating auth code
    auth_code = token_result[1]
    validate_authcode_result = validate_authcode(
        app_id_hash=APP_ID_HASH, auth_code=auth_code
    )
    if validate_authcode_result[0] != SUCCESS:
        print(f"validate_authcode failure - {validate_authcode_result[1]}")
        sys.exit()
    else:
        print("validate_authcode success")

    access_token = validate_authcode_result[1]

    update_token(access_token)
    print(f"access_token - {access_token}")
    return access_token



if __name__ == '__main__':
    token = get_auth_code()
    fyers = fyersModel.FyersModel(client_id=client_id, token=token, log_path='/tmp/')
    print(fyers.orderbook())


This is explained in the below video, leave your feedback in comments.

 

Wednesday, April 7, 2021

Python Code for Straddle Algotrading using Zerodha KITE API

In this post I am sharing code of Short Straddle Order execution using Zerodha Kite API and Python Programming Language explained in Youtube Video 

Like and Subscribe channel for more such videos.

Code:

 


import logging
from datetime import datetime

from dateutil.relativedelta import relativedelta, TH
from kiteconnect import KiteConnect


def get_kite():
    kiteObj = KiteConnect(api_key='API_KEY')
    kiteObj.set_access_token('ACCESS_TOKEN')
    return kiteObj


kite = get_kite()
instrumentsList = None


def getCMP(tradingSymbol):
    quote = kite.quote(tradingSymbol)
    if quote:
        return quote[tradingSymbol]['last_price']
    else:
        return 0


def get_symbols(expiry, name, strike, ins_type):
    global instrumentsList

    if instrumentsList is None:
        instrumentsList = kite.instruments('NFO')

    lst_b = [num for num in instrumentsList if num['expiry'] == expiry and num['strike'] == strike
             and num['instrument_type'] == ins_type and num['name'] == name]
    return lst_b[0]['tradingsymbol']


def place_order(tradingSymbol, price, qty, direction, exchangeType, product, orderType):
    try:
        orderId = kite.place_order(
            variety=kite.VARIETY_REGULAR,
            exchange=exchangeType,
            tradingsymbol=tradingSymbol,
            transaction_type=direction,
            quantity=qty,
            price=price,
            product=product,
            order_type=orderType)

        logging.info('Order placed successfully, orderId = %s', orderId)
        return orderId
    except Exception as e:
        logging.info('Order placement failed: %s', e.message)


if __name__ == '__main__':
    # Find ATM Strike of Nifty
    atm_strike = round(getCMP('NSE:NIFTY 50'), -2)

    next_thursday_expiry = datetime.today() + relativedelta(weekday=TH(1))

    symbol_ce = get_symbols(next_thursday_expiry.date(), 'NIFTY', atm_strike, 'CE')
    symbol_pe = get_symbols(next_thursday_expiry.date(), 'NIFTY', atm_strike, 'PE')

    place_order(symbol_ce, 0, 75, kite.TRANSACTION_TYPE_SELL, KiteConnect.EXCHANGE_NFO, KiteConnect.PRODUCT_MIS,
                KiteConnect.ORDER_TYPE_MARKET)

    place_order(symbol_pe, 0, 75, kite.TRANSACTION_TYPE_SELL, KiteConnect.EXCHANGE_NFO, KiteConnect.PRODUCT_MIS,
                KiteConnect.ORDER_TYPE_MARKET) 

If you have any doubt then write it in comment box below.

Enjoy Coding and Algo Trading. 

Saturday, December 19, 2020

Option Chain Analysis In Index for Intraday Trading

 In Futures and options trading Open Interest is considered to be a very important mertics to track as it represent the oustanding open contracts of the underlying security, for example for Nifty 13500 PE is having open interest as 25 means there are 25 contracts between PE buyer and seller. A new contract is open as soon as new Buyer has been introduced with new seller. If an existing contract has been exchanged between a buyer and seller it doesn't impact the open interest but it increases the volumne of instrument, let's say Person A is having a bought option contract for Nifty 13500 PE and Person B has sold the same contract, after some price action Person B wants to close his trade so he wants to buy the same contract from open market and if this is sold by person C it is just transfer of option contract from person B to person C. If person C wants to increase his traded lot size means he want to sell 1 more lot of Nifty 13500 PE and person D buys 1 lot that means a new contract has been opened on the exchange which increases the Open Interest of the instrument (Nifty 13500 PE).


Usually In Indian derivative market the trend is all big players sell the options and retailers or hedge funds buy, and during Intraday big players move the market as per their desire or positions, this is speculation not concreate but observed for a long time.


So, option interest numbers give an indication about the direction of intraday movement of index or underlying security. for this you need to consider 5-6 strikes on both side to the ATM(At the money, if nifty is trading at 13545 then nearest strike is 13550 which becomes ATM strike) and sum OI of both Puts and Calls which gives about which option is being sold aggresively. 


If put OI sum is greater than Call OI sum that means Puts are being sold by big players means Market is bullish as per OI analysis.


There are many other factors which decide market direction but option chain analysis helps in your trade taken. You should take help from Price action or candlestick pattern as well to support OI analysis.

Sheet is below: Enjoy

Best books for candlestick patterns

Candlestick chart is a chart with which is represented by candles, each candle is having Open, High, Low and Close(in short OHLC) prices for a particular timeframe.

If the chart is having these price points for a day then it is called daily timeframe chart, similarly trader use different time frame like for Intraday trading most traders use 3 min, 5 min or 15 min timeframe.

Fig: Candles representing Bullish as well as Bearish behavior.

Best Books to read about Candlestick chart pattern:

Steve Nilson has written many books on candlestick pattern but I recommend Japanese cadlestick charting techniques, it is a wonderful read and give in depth knowledge about candlestick patterns.

 

We recomment below books for indepth knowledge about candlestick charting: 

1. Japanese Candlestick Charting Techniques - Steve Nilson


Friday, November 27, 2020

सत्यनारायण लाल - किसान (Kisan - Satyanarayan Lal)

नहीं हुआ है अभी सवेरा
पूरब की लाली पहचान
चिड़ियों के जगने से पहले
खाट छोड़ उठ गया किसान ।

खिला-पिलाकर बैलों को ले
करने चला खेत पर काम
नहीं कोई त्योहार न छुट्टी
उसको नहीं काबी आराम।

गरम-गरम लू चलती सन-सन
धरती जलती तवा समान
तब भी करता काम खेत पर
बिना किए आराम किसान।

बादल गरज रहे गड़-गड़-गड़
बिजली चमक रही चम-चम
मुसलाधार बरसता पानी
ज़रा न रुकता लेता दम।

हाथ पांव ठिठुरते जाते हैं
घर से बाहर निकले कौन
फिर भी आग जला, खेतों की
रखवाली करता है वह मौन।

है किसान को चैन कहाँ, वह
करता रहता हरदम काम
सोचा नहीं कभी भी उसने
घर पर रह करना आराम।

- सत्यनारायण लाल

Wednesday, November 25, 2020

Read Option chain data from Nifty using Python

Read Option chain data from Nifty using Python


Option chain data is very crucial for Future and Options(FnO) trader analysis, many use it for positional while many use it to find day trend and it's strength as well as option strike selection for trading.


In this blog post we will try to figure out how to read options data from NSE APIs using Python.

Code:

   
  #!/usr/bin/env python3
 
import requests
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta, TH
 
# Find next thursday to figure out weekly expiry.
def next_thu_expiry_date():
    todayte = datetime.today()
 
    next_thursday_expiry = todayte + relativedelta(weekday=TH(1))
 
    str_next_thursday_expiry = str(next_thursday_expiry.strftime("%d")) + "-" + next_thursday_expiry.strftime(
        "%b") + "-" + next_thursday_expiry.strftime("%Y")
    print(str_next_thursday_expiry)
    return str_next_thursday_expiry
 
 
def find_ce_pe(spot_price, ce_values, pe_values):
    spot_price = round(spot_price, -2)
    otm_calls = []
    otm_puts = []
 
    ce_dt = pd.DataFrame(ce_values).sort_values(['strikePrice'])
    pe_dt = pd.DataFrame(pe_values).sort_values(['strikePrice'], ascending=False)
 
    for ce_value in ce_dt['strikePrice']:
        if ce_value >= spot_price:
            otm_calls.append(ce_value)
            if len(otm_calls) > 10:
                break
 
    for ce_value in pe_dt['strikePrice']:
        if ce_value <= spot_price:
            otm_puts.append(ce_value)
            if len(otm_puts) > 10:
                break
 
    return otm_calls, otm_puts
 
 
def read_oi(spot_price, ce_values, pe_values, symbol):
    sheet_name = str(datetime.today().strftime("%d-%m-%Y")) + symbol
 
    strike_oi_ce_pe = find_ce_pe(float(spot_price), ce_values, pe_values)
 
    ce_dt = pd.DataFrame(ce_values).sort_values(['strikePrice'])
    pe_dt = pd.DataFrame(pe_values).sort_values(['strikePrice'], ascending=False)
 
    drop_col = ['pchangeinOpenInterest', 'askQty', 'askPrice', 'underlyingValue', 'totalBuyQuantity',
                'totalSellQuantity', 'bidQty', 'bidprice', 'change', 'pChange', 'impliedVolatility',
                'totalTradedVolume']
    ce_dt.drop(drop_col, inplace=True, axis=1)
    pe_dt.drop(drop_col, inplace=True, axis=1)
 
    ce_dt = ce_dt.loc[ce_dt['strikePrice'].isin(strike_oi_ce_pe[0])]
    pe_dt = pe_dt.loc[pe_dt['strikePrice'].isin(strike_oi_ce_pe[1])]
 
    # print(ce_dt[['strikePrice', 'lastPrice']])
    # print(pe_dt[['strikePrice', 'changeinOpenInterest']])
 
    print(ce_dt.head(1))
    print(pe_dt.head(1))
 
    print(str([spot_price, (ce_dt['changeinOpenInterest'].sum()),
               (pe_dt['changeinOpenInterest'].sum())]))
 
 
def main():
    symbols = ["BANKNIFTY", "NIFTY"]
    base_url = 'https://www.nseindia.com/api/option-chain-indices?symbol='
    url_oc = "https://www.nseindia.com/option-chain"
 
    for symbol in symbols:
        headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ''like Gecko) '
                                 'Chrome/80.0.3987.149 Safari/537.36',
                   'accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
        session = requests.Session()
        request = session.get(url_oc, headers=headers, timeout=5)
        cookies = dict(request.cookies)
        response = session.get(base_url + symbol, headers=headers, timeout=5, cookies=cookies)
        print(response.status_code)
        dajs = response.json()
        expiry = next_thu_expiry_date()
 
        spot_price = dajs['records']['underlyingValue']
        ce_values = [data['CE'] for data in dajs['records']['data'] if "CE" in data and data['expiryDate']
                     == expiry]
        pe_values = [data['PE'] for data in dajs['records']['data'] if "PE" in data and data['expiryDate']
                     == expiry]
 
        read_oi(spot_price, ce_values, pe_values, symbol)
 
        print(len(dajs))
 
 
if __name__ == '__main__':
    main()
  
  


In case of any doubt leave a comment I will try to answer.

Note: This post is for educational purpose only.

Sunday, November 22, 2020

Automatic Login to Zerodha using Python and Selenium

Hello Readers,

 

Today we will try to learn browser automation using Python and Selenium automation tool.

 

We will write a code to automate login process of Zerodha trading platform using selenium and python in Google Chrome browser.

Place a file named zerodha-credentials.json at the same location as the actual python script with zerodha credentials as below:



Run the below script to automatically login, code is mostly self-explanatory leave a comment if any doubt, I will try to respond.

 

Note: Think before storing your credentials in plain text, potential risk of it being compromised. This post is for education purpose to learn how we can automate web surfing using Python.

Python Basic String opetations

Python is fast emerging as a programming language, so In this post I will try to explain few python String operations required for a novice learner.



Tuesday, July 28, 2020

हम दुनिया से जब तंग आया करते हैं - तैमूर हसन

हम दुनिया से जब तंग आया करते हैं

अपने साथ इक शाम मनाया करते हैं

सूरज के उस जानिब बसने वाले लोग

अक्सर हम को पास बुलाया करते हैं

यूँही ख़ुद से रूठा करते हैं पहले

देर तलक फिर ख़ुद को मनाया करते हैं

चुप रहते हैं उस के सामने जा कर हम

यूँ उस को चख याद दिलाया करते हैं

नींदों के वीरान जज़ीरे पर हर शब

ख़्वाबों का इक शहर बसाया करते हैं

इन ख़्वाबों की क़ीमत हम से पूछ कि हम

इन के सहारे उम्र बिताया करते हैं

अब तो कोई भी दूर नहीं तो फिर 'तैमूर'

हम ख़त किस के नाम लिखाया करते हैं



Hum Duniya se jab tang aaya karte hain - Taimur Hassan

फ़ैज़ अहमद फ़ैज़ की नज़्म - 'कुछ इश्क़ किया कुछ काम किया'


कुछ इश्क़ किया कुछ काम किया

वो लोग बहुत ख़ुश-क़िस्मत थे

जो इश्क़ को काम समझते थे

या काम से आशिक़ी करते थे

हम जीते-जी मसरूफ़ रहे

कुछ इश्क़ किया कुछ काम किया

काम इश्क़ के आड़े आता रहा

और इश्क़ से काम उलझता रहा

फिर आख़िर तंग आ कर हम ने

दोनों को अधूरा छोड़ दिया


Woh log bahut khush kishmat the,
Jo Ishq ko kaam samajhte the -- Faiz Ahmed faiz

Saturday, June 24, 2017

The Taxi - AMY LOWELL

The Taxi - AMY LOWELL

When I go away from you 
The world beats dead 
Like a slackened drum. 
I call out for you against the jutted stars 
And shout into the ridges of the wind. 
Streets coming fast, 
One after the other, 
Wedge you away from me, 
And the lamps of the city prick my eyes 
So that I can no longer see your face. 
Why should I leave you, 
To wound myself upon the sharp edges of the night? 

तुम मुझमें प्रिय! फिर परिचय क्या - Mahadevi Verma


तुम मुझमें प्रिय! फिर परिचय क्या
तारक में छवि, प्राणों में स्मृति,
पलकों में नीरव पद की गति,
लघु उर में पुलकों की संसृति,
           भर लाई हूँ तेरी चंचल
           और करूँ जग में संचय क्या!

तेरा मुख सहास अरुणोदय,
परछाई रजनी विषादमय,
वह जागृति वह नींद स्वप्नमय,
           खेलखेल थकथक सोने दे
           मैं समझूँगी सृष्टि प्रलय क्या!

तेरा अधरविचुंबित प्याला
तेरी ही स्मितमिश्रित हाला,
तेरा ही मानस मधुशाला,
           फिर पूछूँ क्या मेरे साकी!
           देते हो मधुमय विषमय क्या?

रोमरोम में नंदन पुलकित,
साँससाँस में जीवन शतशत,
स्वप्न स्वप्न में विश्व अपरिचित,
           मुझमें नित बनते मिटते प्रिय!
           स्वर्ग मुझे क्या निष्क्रिय लय क्या?

हारूँ तो खोऊँ अपनापन
पाऊँ प्रियतम में निर्वासन,
जीत बनूँ तेरा ही बंधन
           भर लाऊँ सीपी में सागर
           प्रिय मेरी अब हार विजय क्या?

चित्रित तू मैं हूँ रेखाक्रम,
मधुर राग तू मैं स्वर संगम,
तू असीम मैं सीमा का भ्रम,
           काया छाया में रहस्यमय।
           प्रेयसि प्रियतम का अभिनय क्या
तुम मुझमें प्रिय! फिर परिचय क्या
- महादेवी वर्मा

जो तुम आ जाते एक बार - महादेवी वर्मा

 जो तुम आ जाते एक बार
जो तुम आ जाते एक बार
कितनी करुणा कितने सँदेश,
पथ में बिछ जाते बन पराग,
गाता प्राणों का तार-तार
अनुराग-भरा उन्माद-राग;
आँसू लेते वे पद पखार !
जो तुम आ जाते एक बार !

हँस उठते पल में आर्द्र नयन
घुल जाता ओठों से विषाद,
छा जाता जीवन में वसंत
लुट जाता चिर-संचित विराग;
आँखें देतीं सर्वस्व वार |
जो तुम आ जाते एक बार !
- महादेवी वर्मा

ऐ मातृभूमि तेरी जय हो - Ram Prasad Bismil


ऐ मातृभूमि तेरी जय हो

ऐ मातृभूमि तेरी जय हो, सदा विजय हो ।
प्रत्येक भक्त तेरा, सुख-शांति-कान्तिमय हो ।।
अज्ञान की निशा में, दुख से भरी दिशा में,
संसार के हृदय में तेरी प्रभा उदय हो ।
तेरा प्रकोप सारे जग का महाप्रलय हो ।।
तेरी प्रसन्नता ही आनन्द का विषय हो ।।
वह भक्ति दे कि ‘बिस्मिल’ सुख में तुझे न भूले,
वह शक्ति दे कि दुःख में कायर न यह हृदय हो ।।

– राम प्रसाद बिस्मिल