Skip to main content

Python SDK for 5paisa APIs natively written in VB.NET

Project description

5paisa Python SDK

Python SDK for 5paisa APIs natively written in VB .NET

PyPI GitHub Workflow Status (branch)

5paisa logo

Documentation

Read the docs hosted here

Features

  • Order placement, modification and cancellation
  • Fetching user info including holdings, positions, margin and order book.
  • Fetching live market streaming.
  • Placing, modifying and deleting Bracket Order.
  • Fetching order status and trade information.
  • Getting live data streaming using websockets.

Installation

pip install py5paisa

Usage

Configuring API keys

Get your API keys from https://www.5paisa.com/developerapi/apikeys

Authentication

from py5paisa import FivePaisaClient
cred={
    "APP_NAME":"YOUR APP_NAME",
    "APP_SOURCE":YOUR APP_SOURCE,
    "USER_ID":"YOUR USER_ID",
    "PASSWORD":"YOUR PASSWORD",
    "USER_KEY":"YOUR USERKEY",
    "ENCRYPTION_KEY":"YOUR ENCRYPTION_KEY"
    }

client = FivePaisaClient(email="random_email@xyz.com", passwd="password", dob="YYYYMMDD",cred=cred)
client.login()

After successful authentication, you should get a Logged in!! message

Market Feed

#NOTE : Symbol has to be in the same format as specified in the example below.

req_list_=[{"Exch":"N","ExchType":"D","Symbol":"NIFTY 22 APR 2021 CE 15200.00","Expiry":"20210422","StrikePrice":"15200","OptionType":"CE"},
            {"Exch":"N","ExchType":"D","Symbol":"NIFTY 22 APR 2021 PE 15200.00","Expiry":"20210422","StrikePrice":"15200","OptionType":"PE"}]

client.fetch_market_feed(req_list_)

Fetching user info

# Fetches holdings
client.holdings()

# Fetches margin
client.margin()

# Fetches positions
client.positions()

# Fetches the order book of the client
client.order_book()

Scrip codes reference:

Note : Use these Links for getting scrip codes

BSE: https://www.bseindia.com/ Scrip Master - https://www.5paisa.com/docs/default-source/scrip-master/scripmaster-csv-format.csv

Placing an order

# Note: This is an indicative order.

from py5paisa.order import Order, OrderType, Exchange

test_order = Order(order_type='B',exchange='N',exchange_segment='C', scrip_code=1660, quantity=1, price=205,is_intraday=True,atmarket=False)
client.place_order(test_order)

Placing offline orders (After Market Orders)

By default all orders are normal orders, pass ahplaced=Y to place offline orders.

from py5paisa.order import Order, OrderType, AHPlaced
test_order = Order(order_type='B',exchange='N',exchange_segment='C', scrip_code=1660, quantity=1, price=205,is_intraday=False,atmarket=False, ahplaced='Y')

Modifying an order

test_order = Order(order_type='B', scrip_code=1660, quantity=1, price=205,is_intraday=False,exchange='N',exchange_segment='C',atmarket=True,exch_order_id="12345678" )
client.modify_order(test_order)

Canceling an order

client.cancel_order(order_type='B', scrip_code=1660, quantity=1,exchange='N',exchange_segment='C',exch_order_id='12345678')

Bracket Order

For placing Braket order

test_order=bo_co_order(scrip_code=1660,BuySell='B',Qty=1, LimitPriceInitialOrder=205,TriggerPriceInitialOrder=0,LimitPriceProfitOrder=215.0,TriggerPriceForSL=203,ExchType='C',Exch='N',RequestType='P',AtMarket=False)

client.bo_order(test_order)

Note:For placing Bracket order in FNO segment pass ExchType='D'

For Modifying Bracket Order only for Initial order (entry)

test_order=bo_co_order(scrip_code=1660,BuySell='B',Qty=1, LimitPriceInitialOrder=203,TriggerPriceInitialOrder=0,LimitPriceProfitOrder=208.0,TriggerPriceForSL=202,ExchType='C',Exch='N',RequestType='M',AtMarket=False,ExchOrderId='12345678')

client.bo_order(test_order)

#Note : For cover order just pass LimitPriceProfitOrder equal to Zero.

For Modifying LimitPriceProfitOrder

test_order=Order(order_type='S', scrip_code=1660, quantity=1, price=208.50,is_intraday=True,exchange='N',exchange_segment='C',atmarket=False,exch_order_id="12345678" ,order_for='M')

client.mod_bo_order(test_order)

For Modifying TriggerPriceForSL

test_order=Order(order_type='S', scrip_code=1660, quantity=1, price=0,is_intraday=True,exchange='N',exchange_segment='C',atmarket=True,exch_order_id="123456789" ,stoploss_price=201.50,is_stoploss_order=True,order_for='M')

client.mod_bo_order(test_order)

#Note : You have pass atmarket=true while modifying stoploss price, Pass ExchorderId for the particular leg to modify.

Fetching Order Status and Trade Information

from py5paisa.order import  Exchange

req_list= [
        {
            "Exch": "N",
            "ExchType": "C",
            "ScripCode": 20374,
            "ExchOrderID": "1000000015310807"
        }]

# Fetches the trade details
client.fetch_trade_info(req_list)

req_list_= [

        {
            "Exch": "N",
            "ExchType": "C",
            "ScripCode": 20374,
            "RemoteOrderID": "90980441"
        }]
# Fetches the order status
client.fetch_order_status(req_list_)

Live Market Feed Streaming

req_list=[
            { "Exch":"N","ExchType":"C","ScripCode":1660},

            ]

dict1=Client.Request_Feed('mf','s',req_list)

client.Streming_data(dict1)

Note: Use the following abbreviations :

Market Feed=mf

Market Depth (upto 5)=md

Open Interest=oi

Subscribe= s

Unsubscribe=u

Full Market Snapshot

a=[{"Exchange":"N","ExchangeType":"C","ScripCode":"2885"},
   {"Exchange":"N","ExchangeType":"C","ScripCode":"1660"},
   ]
print(client.fetch_market_depth(a))

Historical Data

#historical_data(<Exchange>,<Exchange Type>,<Scrip Code>,<Time Frame>,<From Data>,<To Date>)

df=client.historical_data('N','C',1660,'15m','2021-05-25','2021-06-16')
print(df)

# Note : TimeFrame Should be from this list ['1m','5m','10m','15m','30m','60m','1d']

Strategy Execution

List Of Strategies Available

  • Short Straddle
  • Short Strangle
  • Long Straddle
  • Long Strangle
  • Iron Fly(Butterfly)
  • Iron Condor
  • Call Calendar Spread
  • Put Calendar Spread
#Import strategy package
from py5paisa.strategy import *

Note: These single-commands are capable of trading multiple legs of pre-defined strategies. Like :- Short/Long Straddles and Strangles, Iron Fly and Iron Condor (many more to come) Please use these at your own risk.

#Create an Object:-
cred={
    "APP_NAME":"YOUR APP_NAME",
    "APP_SOURCE":YOUR APP_SOURCE,
    "USER_ID":"YOUR USER_ID",
    "PASSWORD":"YOUR PASSWORD",
    "USER_KEY":"YOUR USERKEY",
    "ENCRYPTION_KEY":"YOUR ENCRYPTION_KEY"
    }
strategy=strategies(user="random_email@xyz.com", passw="password", dob="YYYYMMDD",cred=cred)

Use the following to execute the strategy (note:- they are executed at market price only)

#short_straddle(<symbol>,<strike price>,<qty>,<expiry>,<Order Type>)
strategy.short_straddle("banknifty",'37000','50','20210610','I')
#short_strangle(<symbol>,<List of sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.short_strangle("banknifty",['35300','37000'],'50','20210610','D')
#long_straddle(<symbol>,<strike price>,<qty>,<expiry>,<Order Type>)
strategy.long_straddle("banknifty",'37000','50','20210610','I')
#long_strangle(<symbol>,<List of sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.long_strangle("banknifty",['35300','37000'],'50','20210610','D')
#iron_condor(<symbol>,<List of buy strike prices>,<List of sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.iron_condor("NIFTY",["15000","15200"],["15100","15150"],"75","20210603","I")
#iron_fly(<symbol>,<List of buy strike prices>,<Sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.iron_fly("NIFTY",["15000","15200"],"15100","75","20210610","I")
#call_calendar(<symbol>,<List of sell strike price>,<qty>,<list of expiry(first one will be bought and the second sold based on expiry)>,<Order Type>)
strategy.call_calendar("nifty",'15600','75',['20210603','20210610'],'I')
#put_calendar(<symbol>,<List of sell strike price>,<qty>,<list of expiry(first one will be bought and the second sold based on expiry)>,<Order Type>)
strategy.put_calendar("nifty",'15600','75',['20210603','20210610'],'I')
#call_ladder(<symbol>,<Buy strike prices>,<List of Sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.call_ladder("NIFTY","15100",["15300","15400"],"75","20210610","I")
#put_ladder(<symbol>,<Buy strike prices>,<List of Sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.put_ladder("NIFTY","15000",["14800","14500"],"75","20210610","I")
#ladder(<symbol>,<List of Buy strike prices>,<List of Sell strike price>,<qty>,<expiry>,<Order Type>)
strategy.ladder("sbin",["400","420"],["350","370","450","500"],"1500","20210729","D")

Trading Ideas

To get actionable buy trades use:-
print(Client.get_buy())


To get list of current trades use:-
print(Client.get_trade())

TODO

  • Write tests.

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py5paisa-0.3.1.tar.gz (63.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py5paisa-0.3.1-py2.py3-none-any.whl (13.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file py5paisa-0.3.1.tar.gz.

File metadata

  • Download URL: py5paisa-0.3.1.tar.gz
  • Upload date:
  • Size: 63.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.11

File hashes

Hashes for py5paisa-0.3.1.tar.gz
Algorithm Hash digest
SHA256 a87f6d267a4fecd392bf983f3f495860b03143bd0dd8a71c94f5975c5325783c
MD5 5d957f869bf33f29cf3c7bea2e74d3f8
BLAKE2b-256 4803f9a199d78f2685467bde8abd241fc953187c1df54399561d459dbea08221

See more details on using hashes here.

File details

Details for the file py5paisa-0.3.1-py2.py3-none-any.whl.

File metadata

  • Download URL: py5paisa-0.3.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.11

File hashes

Hashes for py5paisa-0.3.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 45a3d1224de204d5636acab87eb6931f68bb0387d4cfa764475fb41b0cccbf46
MD5 80df1cd6a3961cc33151815531387ab0
BLAKE2b-256 c9962cdd510fc95cf4821d6e804a602b583eaf437bb9a273d7627759eacd86f4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page