Data Retrieval with Continuous Contracts#
This section contains 6 examples for Data Retrieval with Continuous Contracts using the onetick-py.
Each example is a self-contained script that can be run against the OneTick Cloud sample databases.
# onetick-py WebAPI configuration for OneTick Cloud
import os
os.environ['OTP_WEBAPI'] = '1'
os.environ['OTP_HTTP_ADDRESS'] = 'https://rest.cloud.onetick.com'
os.environ['OTP_ACCESS_TOKEN_URL'] = 'https://cloud-auth.parent.onetick.com/realms/OMD/protocol/openid-connect/token'
os.environ['OTP_CLIENT_ID'] = '__FILL_IN__'
os.environ['OTP_CLIENT_SECRET'] = '__FILL_IN__'
DAY Retrieval Cont Contract by Max Open Interest#
Retrieve the Front Month Continuous Contract based on Maximum Open Interest.
Using Symbol Syntax: [Product Code]_r_oi.
import onetick.py as otp
data = otp.DataSource(db='ICE_EU_COM_SAMPLE_DAILY', tick_type='DAY')
data = data.where(data['UPDATE_TYPE'] == 'Summary')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='BRN_r_oi',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | UPDATE_TYPE | OPEN | HIGH | LOW | CLOSE | SETTLE_PRICE | SETTLE_DATE | VOLUME | OPEN_INT | OPEN_INT_DATE | OMDSEQ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-01-01 23:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 | ||
| 1 | 2024-01-02 23:30:00 | Summary | 77.39 | 79.06 | 75.60 | 76.04 | 75.89 | 20240102 | 338351.0 | 552541.0 | 20231229 | 0 |
| 2 | 2024-01-03 23:30:00 | Summary | 76.06 | 78.67 | 74.79 | 78.44 | 78.25 | 20240103 | 361765.0 | 526073.0 | 20240102 | 0 |
| 3 | 2024-01-04 23:30:00 | Summary | 78.56 | 79.41 | 76.50 | 77.74 | 77.59 | 20240104 | 356646.0 | 520589.0 | 20240103 | 0 |
| 4 | 2024-01-05 23:30:00 | Summary | 77.71 | 79.26 | 77.66 | 78.90 | 78.76 | 20240105 | 291002.0 | 499963.0 | 20240104 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60 | 2024-03-25 22:30:00 | Summary | 84.83 | 86.51 | 84.79 | 86.04 | 86.08 | 20240325 | 354261.0 | 555528.0 | 20240322 | 0 |
| 61 | 2024-03-26 22:30:00 | Summary | 86.16 | 86.42 | 85.19 | 85.27 | 85.63 | 20240326 | 338858.0 | 583946.0 | 20240325 | 0 |
| 62 | 2024-03-27 22:30:00 | Summary | 85.27 | 85.70 | 84.58 | 85.70 | 85.41 | 20240327 | 369265.0 | 605142.0 | 20240326 | 0 |
| 63 | 2024-03-28 22:30:00 | Summary | 85.69 | 87.07 | 85.50 | 87.07 | 87.00 | 20240328 | 414238.0 | 610314.0 | 20240327 | 0 |
| 64 | 2024-03-29 22:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 |
65 rows × 12 columns
DAY Retrieval Cont Contract by Max Volume#
Retrieve the Front Month Continuous Contract based on Maximum Volume.
Using Symbol Syntax: [Product Code]_r_vol.
import onetick.py as otp
data = otp.DataSource(db='ICE_EU_COM_SAMPLE_DAILY', tick_type='DAY')
data = data.where(data['UPDATE_TYPE'] == 'Summary')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='BRN_r_vol',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | UPDATE_TYPE | OPEN | HIGH | LOW | CLOSE | SETTLE_PRICE | SETTLE_DATE | VOLUME | OPEN_INT | OPEN_INT_DATE | OMDSEQ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-01-01 23:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 | ||
| 1 | 2024-01-02 23:30:00 | Summary | 77.39 | 79.06 | 75.60 | 76.04 | 75.89 | 20240102 | 338351.0 | 552541.0 | 20231229 | 0 |
| 2 | 2024-01-03 23:30:00 | Summary | 76.06 | 78.67 | 74.79 | 78.44 | 78.25 | 20240103 | 361765.0 | 526073.0 | 20240102 | 0 |
| 3 | 2024-01-04 23:30:00 | Summary | 78.56 | 79.41 | 76.50 | 77.74 | 77.59 | 20240104 | 356646.0 | 520589.0 | 20240103 | 0 |
| 4 | 2024-01-05 23:30:00 | Summary | 77.71 | 79.26 | 77.66 | 78.90 | 78.76 | 20240105 | 291002.0 | 499963.0 | 20240104 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60 | 2024-03-25 22:30:00 | Summary | 84.83 | 86.51 | 84.79 | 86.04 | 86.08 | 20240325 | 354261.0 | 555528.0 | 20240322 | 0 |
| 61 | 2024-03-26 22:30:00 | Summary | 86.16 | 86.42 | 85.19 | 85.27 | 85.63 | 20240326 | 338858.0 | 583946.0 | 20240325 | 0 |
| 62 | 2024-03-27 22:30:00 | Summary | 85.27 | 85.70 | 84.58 | 85.70 | 85.41 | 20240327 | 369265.0 | 605142.0 | 20240326 | 0 |
| 63 | 2024-03-28 22:30:00 | Summary | 85.69 | 87.07 | 85.50 | 87.07 | 87.00 | 20240328 | 414238.0 | 610314.0 | 20240327 | 0 |
| 64 | 2024-03-29 22:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 |
65 rows × 12 columns
DAY Retrieval Cont Contract by Max Volume with Bloomberg Symbology#
Front Month Continous Contract by Max Volume can be specified with Bloomberg BSYM symbology:
[Bloomberg Product code]A.
For example Brent Crude (exchange symbol BRN), has Bloomberg Product code CO.
Instead of BRN_r_vol, COA Comdty can be specified.
import onetick.py as otp
data = otp.DataSource(db='ICE_EU_COM_SAMPLE_DAILY', tick_type='DAY')
data = data.where(data['UPDATE_TYPE'] == 'Summary')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='BSYM::::COA Comdty',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | UPDATE_TYPE | OPEN | HIGH | LOW | CLOSE | SETTLE_PRICE | SETTLE_DATE | VOLUME | OPEN_INT | OPEN_INT_DATE | OMDSEQ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-01-01 23:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 | ||
| 1 | 2024-01-02 23:30:00 | Summary | 77.39 | 79.06 | 75.60 | 76.04 | 75.89 | 20240102 | 338351.0 | 552541.0 | 20231229 | 0 |
| 2 | 2024-01-03 23:30:00 | Summary | 76.06 | 78.67 | 74.79 | 78.44 | 78.25 | 20240103 | 361765.0 | 526073.0 | 20240102 | 0 |
| 3 | 2024-01-04 23:30:00 | Summary | 78.56 | 79.41 | 76.50 | 77.74 | 77.59 | 20240104 | 356646.0 | 520589.0 | 20240103 | 0 |
| 4 | 2024-01-05 23:30:00 | Summary | 77.71 | 79.26 | 77.66 | 78.90 | 78.76 | 20240105 | 291002.0 | 499963.0 | 20240104 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60 | 2024-03-25 22:30:00 | Summary | 84.83 | 86.51 | 84.79 | 86.04 | 86.08 | 20240325 | 354261.0 | 555528.0 | 20240322 | 0 |
| 61 | 2024-03-26 22:30:00 | Summary | 86.16 | 86.42 | 85.19 | 85.27 | 85.63 | 20240326 | 338858.0 | 583946.0 | 20240325 | 0 |
| 62 | 2024-03-27 22:30:00 | Summary | 85.27 | 85.70 | 84.58 | 85.70 | 85.41 | 20240327 | 369265.0 | 605142.0 | 20240326 | 0 |
| 63 | 2024-03-28 22:30:00 | Summary | 85.69 | 87.07 | 85.50 | 87.07 | 87.00 | 20240328 | 414238.0 | 610314.0 | 20240327 | 0 |
| 64 | 2024-03-29 22:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 |
65 rows × 12 columns
DAY Retrieval Cont Contract by Month (1-12)#
Front Month to Twelve Month Continuous Contract can be specified
[Product code]\1 to [Product code]\12.
Rolls based on contract expiry.
import onetick.py as otp
data = otp.DataSource(db='ICE_EU_COM_SAMPLE_DAILY', tick_type='DAY')
data = data.where(data['UPDATE_TYPE'] == 'Summary')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='BRN\\1',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | UPDATE_TYPE | OPEN | HIGH | LOW | CLOSE | SETTLE_PRICE | SETTLE_DATE | VOLUME | OPEN_INT | OPEN_INT_DATE | OMDSEQ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-01-01 23:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 | ||
| 1 | 2024-01-02 23:30:00 | Summary | 77.39 | 79.06 | 75.60 | 76.04 | 75.89 | 20240102 | 338351.0 | 552541.0 | 20231229 | 0 |
| 2 | 2024-01-03 23:30:00 | Summary | 76.06 | 78.67 | 74.79 | 78.44 | 78.25 | 20240103 | 361765.0 | 526073.0 | 20240102 | 0 |
| 3 | 2024-01-04 23:30:00 | Summary | 78.56 | 79.41 | 76.50 | 77.74 | 77.59 | 20240104 | 356646.0 | 520589.0 | 20240103 | 0 |
| 4 | 2024-01-05 23:30:00 | Summary | 77.71 | 79.26 | 77.66 | 78.90 | 78.76 | 20240105 | 291002.0 | 499963.0 | 20240104 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60 | 2024-03-25 22:30:00 | Summary | 85.50 | 87.17 | 85.40 | 86.68 | 86.75 | 20240325 | 175000.0 | 206541.0 | 20240322 | 0 |
| 61 | 2024-03-26 22:30:00 | Summary | 86.81 | 87.06 | 85.80 | 85.86 | 86.25 | 20240326 | 126815.0 | 169162.0 | 20240325 | 0 |
| 62 | 2024-03-27 22:30:00 | Summary | 85.86 | 86.39 | 85.17 | 86.34 | 86.09 | 20240327 | 96507.0 | 137464.0 | 20240326 | 0 |
| 63 | 2024-03-28 22:30:00 | Summary | 85.69 | 87.07 | 85.50 | 87.07 | 87.00 | 20240328 | 414238.0 | 610314.0 | 20240327 | 0 |
| 64 | 2024-03-29 22:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 |
65 rows × 12 columns
DAY Retrieval Cont Contract by Tick Data Method#
Retrieve the Front Month Continuous Contract based on Tick Data Methology (only relevant for TDI_FUT).
Using Symbol Syntax: [Product Code]_r_tdi.
import onetick.py as otp
data = otp.DataSource(db='TDI_FUT_SAMPLE_DAILY', tick_type='DAY')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='CO_r_tdi',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | OPEN | HIGH | LOW | SETTLE_PRICE | VOLUME | OPEN_INT | |
|---|---|---|---|---|---|---|---|
| 0 | 2024-01-02 | 77.39 | 79.06 | 75.60 | 75.89 | 338351 | 552541.0 |
| 1 | 2024-01-03 | 76.06 | 78.67 | 74.79 | 78.25 | 361765 | 526073.0 |
| 2 | 2024-01-04 | 78.56 | 79.41 | 76.50 | 77.59 | 356646 | 520589.0 |
| 3 | 2024-01-05 | 77.71 | 79.26 | 77.66 | 78.76 | 291002 | 499963.0 |
| 4 | 2024-01-08 | 78.70 | 78.95 | 75.26 | 76.12 | 342629 | 494881.0 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 61 | 2024-03-24 | 84.83 | 85.10 | 84.79 | 85.10 | 2955 | 549192.0 |
| 62 | 2024-03-25 | 84.83 | 86.51 | 84.79 | 86.08 | 354261 | 555528.0 |
| 63 | 2024-03-26 | 86.16 | 86.42 | 85.19 | 85.63 | 338858 | 583946.0 |
| 64 | 2024-03-27 | 85.27 | 85.70 | 84.58 | 85.41 | 369265 | 605142.0 |
| 65 | 2024-03-28 | 85.69 | 87.07 | 85.50 | 87.00 | 414238 | 610314.0 |
66 rows × 7 columns
DAY Retrieval Cont Contract with Bloomberg Symbology#
Front Month to Twelve Month Continuous Contract can be specified with Bloomberg BSYM symbology
[Product code]1 to [Product code]12.
Rolls based on contract expiry.
For example Brent Crude (exchange symbol BRN), has Bloomberg Product code CO.
import onetick.py as otp
data = otp.DataSource(db='ICE_EU_COM_SAMPLE_DAILY', tick_type='DAY')
data = data.where(data['UPDATE_TYPE'] == 'Summary')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='Europe/London',
symbols='BSYM::::CO1 Comdty',
symbol_date=otp.dt(2024, 4, 1))
result
| Time | UPDATE_TYPE | OPEN | HIGH | LOW | CLOSE | SETTLE_PRICE | SETTLE_DATE | VOLUME | OPEN_INT | OPEN_INT_DATE | OMDSEQ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-01-01 23:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 | ||
| 1 | 2024-01-02 23:30:00 | Summary | 77.39 | 79.06 | 75.60 | 76.04 | 75.89 | 20240102 | 338351.0 | 552541.0 | 20231229 | 0 |
| 2 | 2024-01-03 23:30:00 | Summary | 76.06 | 78.67 | 74.79 | 78.44 | 78.25 | 20240103 | 361765.0 | 526073.0 | 20240102 | 0 |
| 3 | 2024-01-04 23:30:00 | Summary | 78.56 | 79.41 | 76.50 | 77.74 | 77.59 | 20240104 | 356646.0 | 520589.0 | 20240103 | 0 |
| 4 | 2024-01-05 23:30:00 | Summary | 77.71 | 79.26 | 77.66 | 78.90 | 78.76 | 20240105 | 291002.0 | 499963.0 | 20240104 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 60 | 2024-03-25 22:30:00 | Summary | 85.50 | 87.17 | 85.40 | 86.68 | 86.75 | 20240325 | 175000.0 | 206541.0 | 20240322 | 0 |
| 61 | 2024-03-26 22:30:00 | Summary | 86.81 | 87.06 | 85.80 | 85.86 | 86.25 | 20240326 | 126815.0 | 169162.0 | 20240325 | 0 |
| 62 | 2024-03-27 22:30:00 | Summary | 85.86 | 86.39 | 85.17 | 86.34 | 86.09 | 20240327 | 96507.0 | 137464.0 | 20240326 | 0 |
| 63 | 2024-03-28 22:30:00 | Summary | 85.69 | 87.07 | 85.50 | 87.07 | 87.00 | 20240328 | 414238.0 | 610314.0 | 20240327 | 0 |
| 64 | 2024-03-29 22:30:00 | Summary | NaN | NaN | NaN | NaN | NaN | 0.0 | NaN | 0 |
65 rows × 12 columns