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
}