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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
822a419d6a2d9783217db27fa7c2cf09171f7311a95743bdcca28de1fecec3ed
|
|
| MD5 |
860dd28a4f17d5b1b92823202b1e143d
|
|
| BLAKE2b-256 |
b0c005b282d483ef2d1cc5c555d604e533b4cd647b683f1327614b41f1600616
|