Skip to main content

Omega Point API Python Library

Project description

omegapoint

This library offers a convenient way to access the Omega Point API from Python. It has 3 components:

schema.py. This has Python classes that give full access to the Omega Point GQL API. 
It is automatically generated from sgqlc. EG: 
python -m sgqlc.introspection --exclude-deprecated --exclude-description -H "Authorization: SECRET" https://api.ompnt.com/graphql schema.json
python "C:\Program Files\Python38\Scripts\sgqlc-codegen" schema.json schema.py
(Anaconda may install your scripts in a directory like C:\Users\%username%\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\Scripts\)


omegapoint.py. This has convenience functions that let you perform common operations more
fluently than you could by using schema.py directly.
It also defines the class GqlError, which lets you capture Omega Point error messages on failed operations. 

utils.py. This has convenince functions for working with dates and splitting up large API requests.  

There are 3 default values you can set with enviroment variables:

#EG: AXWW4-SH DEFAULT_MODEL_ID = os.getenv('OMEGA_POINT_DEFAULT_MODEL_ID')

#Get this from https://pi.ompnt.com/centerbook_partners/home/platform API_KEY = os.getenv('OMEGA_POINT_API_KEY')

#https://api.ompnt.com/graphql URL = os.getenv('OMEGA_POINT_URL')

Here is a quick sample of the code. There are more examples in the examples/ directory.

from omegapoint import schema, utils, omegapoint as op
import pandas as pd
from datetime import date 

available_models = op.get_models()
model_id  = available_models[0].id
bad_model_id = 'fake'

try:
    res = op.create_portfolio(name='OpTest1', default_model_id=bad_model_id)
except op.GqlError as e:
    print(f"GQL error. Query Id is {e.errors['extensions']['queryId']}")
    print(f"Operation is:\n{e.operation}")
    print(f"Error is:\n{e.errors}")

'''
ERROR:sgqlc.endpoint.http:GraphQL query failed with 1 errors
ERROR:sgqlc.endpoint.http:Failed query:
mutation {
  createPortfolio(portfolio: {name: "OpTest1", defaultModelId: "fake"}) {
    id
  }
}

GQL error. Query Id is c5fb462d-653f-4632-a0cf-12557a17573b
Operation is:
mutation {
  createPortfolio(portfolio: {name: "OpTest1", defaultModelId: "fake"}) {
    id
  }
}
Error is:
{'errors': [{'message': 'Access to model fake forbidden', 'locations': [{'line': 2, 'column': 1}], 'path': ['createPortfolio']}], 'data': {'createPortfolio': None}, 'extensions': {'queryId': 'c5fb462d-653f-4632-a0cf-12557a17573b'}}
Portfolio(id=68d1d99a-e0ba-4c3f-9bf5-6a29c155042d)
'''

res = op.create_portfolio(name='OpTest1', default_model_id=model_id)
print(res)
#Portfolio(id=68d1d99a-e0ba-4c3f-9bf5-6a29c155042d)
print([p for p in op.get_portfolios() if p.name == 'OpTest1'])
#[PortfolioMetadata(name='OpTest1', id='68d1d99a-e0ba-4c3f-9bf5-6a29c155042d')]

#There's a file test\port_test.csv in this repo. 
df = pd.read_csv(r'c:\users\ross\omegapoint\test\port_test.csv')
op.upload_portfolio_positions('OpTest1', df)

for dt in utils.weekdays(start = date(2019,11,4), stop = date(2019,11,7)):
    perf = op.get_performance_contributors(portfolio_name = 'OpTest1', start_date = dt, end_date = dt,model_id = model_id)
    print(dt, perf)
'''
2019-11-04      sedol model_provider_id  average_percent_equity     total   factors  \
0  2005973         RM8T7MA55                0.316215  0.004993 -0.000084   
1  BYY88Y7         3U74B69J1                0.683785  0.009464  0.004385   

   specific  trading  
0  0.005077      0.0  
1  0.005079      0.0  

2019-11-05      sedol model_provider_id  average_percent_equity     total   factors  \
0  BYY88Y7         3U74B69J1                0.683369  0.000349 -0.002349   
1  2005973         RM8T7MA55                0.316631  0.000506 -0.001168   

   specific  trading  
0  0.002698      0.0  
1  0.001674      0.0  

2019-11-06      sedol model_provider_id  average_percent_equity     total   factors  \
0  2005973         RM8T7MA55                0.316866  0.002045  0.000241   
1  BYY88Y7         3U74B69J1                0.683134 -0.000122 -0.004280   

   specific  trading  
0  0.001804      0.0  
1  0.004158      0.0  
'''

op.delete_portfolio('OpTest1')

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

omegapoint-0.0.3-py3-none-any.whl (26.9 kB view details)

Uploaded Python 3

File details

Details for the file omegapoint-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: omegapoint-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 26.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.0

File hashes

Hashes for omegapoint-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 822a419d6a2d9783217db27fa7c2cf09171f7311a95743bdcca28de1fecec3ed
MD5 860dd28a4f17d5b1b92823202b1e143d
BLAKE2b-256 b0c005b282d483ef2d1cc5c555d604e533b4cd647b683f1327614b41f1600616

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