Corporate Actions#
This section contains 7 examples for Corporate Actions 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__'
Adjusting for Additive Dividends by PRICE#
Retrieve corporate action adjusted daily price history for additive cash dividends, including the original prices
using corp_actions() with parameters adjust_rule='PRICE', apply_cash_dividend=True.
Additive cash dividends can produce negative adjusted price histories across long time horizons.
Adjusting for Multiplicative Dividends does not have this problem and is recommended instead.
import onetick.py as otp
data = otp.DataSource(db='US_COMP_SAMPLE_DAILY', tick_type='DAY')
data = data[['CLOSE', 'VOLUME', 'EXCHANGE']]
data = data.where(data['EXCHANGE'] == '')
data['ORIG_CLOSE'] = data['CLOSE']
data = data.corp_actions(fields='CLOSE', adjust_rule='PRICE', apply_cash_dividend=True)
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='America/New_York',
symbols='AAPL',
symbol_date=otp.dt.now())
result
| Time | CLOSE | VOLUME | EXCHANGE | ORIG_CLOSE | |
|---|---|---|---|---|---|
| 0 | 2024-01-02 20:15:00 | 185.40 | 82488674 | 185.64 | |
| 1 | 2024-01-03 20:15:00 | 184.01 | 58414460 | 184.25 | |
| 2 | 2024-01-04 20:15:00 | 181.67 | 71983570 | 181.91 | |
| 3 | 2024-01-05 20:15:00 | 180.94 | 62379661 | 181.18 | |
| 4 | 2024-01-08 20:15:00 | 185.32 | 59144470 | 185.56 | |
| ... | ... | ... | ... | ... | ... |
| 56 | 2024-03-22 20:15:00 | 172.28 | 71160138 | 172.28 | |
| 57 | 2024-03-25 20:15:00 | 170.85 | 54288328 | 170.85 | |
| 58 | 2024-03-26 20:15:00 | 169.71 | 57388449 | 169.71 | |
| 59 | 2024-03-27 20:15:00 | 173.31 | 60273265 | 173.31 | |
| 60 | 2024-03-28 20:15:00 | 171.48 | 65672690 | 171.48 |
61 rows × 5 columns
Adjusting for Corporate Actions by PRICE and SIZE#
Retrieve corporate action adjusted daily price history for splits, including the original prices
where the closing price and volume should be adjusted in different ways due to the split
using corp_actions() with parameters adjust_rule='...', apply_split=True.
import onetick.py as otp
data = otp.DataSource(db='US_COMP_SAMPLE_DAILY', tick_type='DAY')
data = data[['CLOSE', 'VOLUME', 'EXCHANGE']]
data = data.where(data['EXCHANGE'] == '')
data['ORIG_CLOSE'] = data['CLOSE']
data['ORIG_VOLUME'] = data['VOLUME']
data = data.corp_actions(fields='CLOSE', adjust_rule='PRICE', apply_split=True)
data = data.corp_actions(fields='VOLUME', adjust_rule='SIZE', apply_split=True)
result = otp.run(data,
start=otp.dt(2024, 2, 10),
end=otp.dt(2024, 3, 10),
timezone='America/New_York',
symbols='WMT',
symbol_date=otp.dt.now())
result
| Time | CLOSE | VOLUME | EXCHANGE | ORIG_CLOSE | ORIG_VOLUME | |
|---|---|---|---|---|---|---|
| 0 | 2024-02-12 20:15:00 | 56.766666 | 1.479504e+07 | 170.30 | 4931680 | |
| 1 | 2024-02-13 20:15:00 | 56.379999 | 1.857422e+07 | 169.14 | 6191405 | |
| 2 | 2024-02-14 20:15:00 | 56.199999 | 1.848460e+07 | 168.60 | 6161534 | |
| 3 | 2024-02-15 20:15:00 | 56.429999 | 1.694886e+07 | 169.29 | 5649619 | |
| 4 | 2024-02-16 20:15:00 | 56.786666 | 2.237354e+07 | 170.36 | 7457847 | |
| ... | ... | ... | ... | ... | ... | ... |
| 14 | 2024-03-04 20:15:00 | 59.300000 | 1.603330e+07 | 59.30 | 16033298 | |
| 15 | 2024-03-05 20:15:00 | 60.040000 | 1.967688e+07 | 60.04 | 19676884 | |
| 16 | 2024-03-06 20:15:00 | 60.570000 | 1.269871e+07 | 60.57 | 12698714 | |
| 17 | 2024-03-07 20:15:00 | 60.360000 | 1.619530e+07 | 60.36 | 16195303 | |
| 18 | 2024-03-08 20:15:00 | 60.120000 | 1.214364e+07 | 60.12 | 12143645 |
19 rows × 6 columns
Adjusting for Multiplicative Dividends by PRICE#
Retrieve corporate action adjusted daily price history for additive cash dividends, including the original prices
using corp_actions() with parameters adjust_rule='PRICE', apply_others='MULTI_ADJ_CASH'.
import onetick.py as otp
data = otp.DataSource(db='US_COMP_SAMPLE_DAILY', tick_type='DAY')
data = data[['CLOSE', 'VOLUME', 'EXCHANGE']]
data = data.where(data['EXCHANGE'] == '')
data['ORIG_CLOSE'] = data['CLOSE']
data = data.corp_actions(fields='CLOSE', adjust_rule='PRICE', apply_others='MULTI_ADJ_CASH')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='America/New_York',
symbols='AAPL',
symbol_date=otp.dt.now())
result
| Time | CLOSE | VOLUME | EXCHANGE | ORIG_CLOSE | |
|---|---|---|---|---|---|
| 0 | 2024-01-02 20:15:00 | 185.403495 | 82488674 | 185.64 | |
| 1 | 2024-01-03 20:15:00 | 184.015265 | 58414460 | 184.25 | |
| 2 | 2024-01-04 20:15:00 | 181.678247 | 71983570 | 181.91 | |
| 3 | 2024-01-05 20:15:00 | 180.949177 | 62379661 | 181.18 | |
| 4 | 2024-01-08 20:15:00 | 185.323597 | 59144470 | 185.56 | |
| ... | ... | ... | ... | ... | ... |
| 56 | 2024-03-22 20:15:00 | 172.280000 | 71160138 | 172.28 | |
| 57 | 2024-03-25 20:15:00 | 170.850000 | 54288328 | 170.85 | |
| 58 | 2024-03-26 20:15:00 | 169.710000 | 57388449 | 169.71 | |
| 59 | 2024-03-27 20:15:00 | 173.310000 | 60273265 | 173.31 | |
| 60 | 2024-03-28 20:15:00 | 171.480000 | 65672690 | 171.48 |
61 rows × 5 columns
Adjusting for Splits by PRICE#
Retrieve corporate action adjusted daily price history for splits, including the original prices
using corp_actions() with parameters adjust_rule='PRICE', apply_split=True.
import onetick.py as otp
data = otp.DataSource(db='US_COMP_SAMPLE_DAILY', tick_type='DAY')
data = data[['CLOSE', 'VOLUME', 'EXCHANGE']]
data = data.where(data['EXCHANGE'] == '')
data['ORIG_CLOSE'] = data['CLOSE']
data = data.corp_actions(fields='CLOSE', adjust_rule='PRICE', apply_split=True)
result = otp.run(data,
start=otp.dt(2024, 2, 10),
end=otp.dt(2024, 3, 10),
timezone='America/New_York',
symbols='WMT',
symbol_date=otp.dt.now())
result
| Time | CLOSE | VOLUME | EXCHANGE | ORIG_CLOSE | |
|---|---|---|---|---|---|
| 0 | 2024-02-12 20:15:00 | 56.766666 | 4931680 | 170.30 | |
| 1 | 2024-02-13 20:15:00 | 56.379999 | 6191405 | 169.14 | |
| 2 | 2024-02-14 20:15:00 | 56.199999 | 6161534 | 168.60 | |
| 3 | 2024-02-15 20:15:00 | 56.429999 | 5649619 | 169.29 | |
| 4 | 2024-02-16 20:15:00 | 56.786666 | 7457847 | 170.36 | |
| ... | ... | ... | ... | ... | ... |
| 14 | 2024-03-04 20:15:00 | 59.300000 | 16033298 | 59.30 | |
| 15 | 2024-03-05 20:15:00 | 60.040000 | 19676884 | 60.04 | |
| 16 | 2024-03-06 20:15:00 | 60.570000 | 12698714 | 60.57 | |
| 17 | 2024-03-07 20:15:00 | 60.360000 | 16195303 | 60.36 | |
| 18 | 2024-03-08 20:15:00 | 60.120000 | 12143645 | 60.12 |
19 rows × 5 columns
Retrieving Adjustment Factors#
Retrieving corporate action adjustment factors across a specified time range.
Using ref_data() with parameter ref_data_type='corp_actions'.
import onetick.py as otp
dbs = otp.databases()
db = otp.databases()['US_COMP_SAMPLE_DAILY']
result = db.ref_data(ref_data_type='corp_actions',
symbol='WMT',
start=otp.dt(2024, 2, 10),
end=otp.dt(2024, 3, 10),
symbol_date=otp.dt.now())
result
| Time | MULTIPLICATIVE_ADJUSTMENT | ADDITIVE_ADJUSTMENT | ADJUSTMENT_TYPE | |
|---|---|---|---|---|
| 0 | 2024-02-26 | 0.333333 | 0.0 | SPLIT |
Retrieving all OQD Corporate Actions for Period#
Quering corporate action history from OQD for all symbols.
Specifically OQD_CACT_SAMPLE, and table CACT.
The Symbol is specified as PAY_DATE, ANN_DATE, EX_DATE or REC_DATE.
import onetick.py as otp
data = otp.DataSource(db='OQD_CACT_SAMPLE', tick_type='CACT')
result = otp.run(data,
start=otp.dt(2024, 2, 1),
end=otp.dt(2024, 2, 2),
timezone='UTC',
# Or ANN_DATE, EX_DATE or REC_DATE
symbols=['PAY_DATE'])
result
Time |
OID |
ACTION_ID |
ACTION_TYPE |
ACTION_ADJUST |
ACTION_CURRENCY |
ACTION_DATE |
DELETED_TIME |
TICK_STATUS |
OMDSEQ |
|
|---|---|---|---|---|---|---|---|---|---|---|
0 |
2024-02-01 |
1000012662 |
7197356 |
CASH_DIVIDEND |
0.266044 |
USD |
20240201 |
1970-01-01 |
0 |
21116 |
1 |
2024-02-01 |
1000012663 |
7197357 |
CASH_DIVIDEND |
0.090344 |
EUR |
20240201 |
1970-01-01 |
0 |
21117 |
2 |
2024-02-01 |
1000012667 |
7197358 |
CASH_DIVIDEND |
0.347669 |
USD |
20240201 |
1970-01-01 |
0 |
21118 |
3 |
2024-02-01 |
1000013831 |
7198677 |
CASH_DIVIDEND |
0.266044 |
USD |
20240201 |
1970-01-01 |
0 |
21119 |
4 |
2024-02-01 |
1000013832 |
7198678 |
CASH_DIVIDEND |
0.347669 |
USD |
20240201 |
1970-01-01 |
0 |
21120 |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
2864 |
2024-02-01 |
97063 |
17951542 |
CASH_DIVIDEND |
0.350394 |
USD |
20240201 |
1970-01-01 |
0 |
23980 |
2865 |
2024-02-01 |
99218 |
17997558 |
CASH_DIVIDEND |
0.028032 |
USD |
20240201 |
1970-01-01 |
0 |
23981 |
2866 |
2024-02-01 |
99220 |
17997559 |
CASH_DIVIDEND |
0.018951 |
USD |
20240201 |
1970-01-01 |
0 |
23982 |
2867 |
2024-02-01 |
99221 |
17997560 |
CASH_DIVIDEND |
0.028018 |
USD |
20240201 |
1970-01-01 |
0 |
23983 |
2868 |
2024-02-01 |
99318 |
17937167 |
CASH_DIVIDEND |
0.450000 |
USD |
20240201 |
1970-01-01 |
0 |
23984 |
2869 rows x 10 columns
Retrieving OQD Corporate Actions for Bloomberg Symbol#
Quering corporate action history from OQD.
Specifically OQD_CACT_SAMPLE, and table CACS, for two symbols.
Bloomberg symbols have been specified using the prefix BSYM::::.
import onetick.py as otp
data = otp.DataSource(db='OQD_CACT_SAMPLE', tick_type='CACS')
result = otp.run(data,
start=otp.dt(2024, 1, 1),
end=otp.dt(2024, 4, 1),
timezone='UTC',
symbols=['BSYM::::WMT US Equity', 'BSYM::::AAPL US Equity'],
symbol_date=otp.dt.now())
result
{'BSYM::::WMT US Equity':
Time OID ACTION_ID ACTION_TYPE ACTION_ADJUST ACTION_CURRENCY ANN_DATE EX_DATE PAY_DATE REC_DATE TERM_NOTE TERM_RECORD_TYPE ACTION_STATUS DELETED_TIME TICK_STATUS OMDSEQ
0 2024-02-26 203776 17992444 SPLIT 0.333333 20240130 20240226 20240223 20240222 STOCK:2.00000000@203776 NORMAL 1970-01-01 0 380
1 2024-03-14 203776 18004769 CASH_DIVIDEND 0.207500 USD 20240220 20240314 20240401 20240315 CASH:0.2075@USD NORMAL 1970-01-01 0 2864,
'BSYM::::AAPL US Equity':
Time OID ACTION_ID ACTION_TYPE ACTION_ADJUST ACTION_CURRENCY ANN_DATE EX_DATE PAY_DATE REC_DATE TERM_NOTE TERM_RECORD_TYPE ACTION_STATUS DELETED_TIME TICK_STATUS OMDSEQ
0 2024-02-09 9706 17996883 CASH_DIVIDEND 0.24 USD 20240201 20240209 20240215 20240212 CASH:0.24@USD NORMAL 1970-01-01 0 559
}