# Corporate Actions

This section contains 7 examples for Corporate Actions using the `onetick-py`.<br />
\\\\
Each example is a self-contained script that can be run against the OneTick Cloud sample databases.

```default
# 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()`](https://docs.pip.distribution.sol.onetick.com/api/source/corp_actions.html.md#onetick.py.Source.corp_actions) with parameters `adjust_rule='PRICE',  apply_cash_dividend=True`.<br />
\\\\
Additive cash dividends can produce negative adjusted price histories across long time horizons.<br />
\\\\
Adjusting for Multiplicative Dividends does not have this problem and is recommended instead.

```ipython3
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
```

```myst-ansi
                  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 x 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()`](https://docs.pip.distribution.sol.onetick.com/api/source/corp_actions.html.md#onetick.py.Source.corp_actions) with parameters `adjust_rule='...', apply_split=True`.

```ipython3
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
```

```myst-ansi
                  Time      CLOSE        VOLUME EXCHANGE  ORIG_CLOSE  \
0  2024-02-12 20:15:00  56.766666  1.479504e+07               170.30   
1  2024-02-13 20:15:00  56.379999  1.857422e+07               169.14   
2  2024-02-14 20:15:00  56.199999  1.848460e+07               168.60   
3  2024-02-15 20:15:00  56.429999  1.694886e+07               169.29   
4  2024-02-16 20:15:00  56.786666  2.237354e+07               170.36   
..                 ...        ...           ...      ...         ...   
14 2024-03-04 20:15:00  59.300000  1.603330e+07                59.30   
15 2024-03-05 20:15:00  60.040000  1.967688e+07                60.04   
16 2024-03-06 20:15:00  60.570000  1.269871e+07                60.57   
17 2024-03-07 20:15:00  60.360000  1.619530e+07                60.36   
18 2024-03-08 20:15:00  60.120000  1.214364e+07                60.12   

    ORIG_VOLUME  
0       4931680  
1       6191405  
2       6161534  
3       5649619  
4       7457847  
..          ...  
14     16033298  
15     19676884  
16     12698714  
17     16195303  
18     12143645  

[19 rows x 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()`](https://docs.pip.distribution.sol.onetick.com/api/source/corp_actions.html.md#onetick.py.Source.corp_actions) with parameters `adjust_rule='PRICE', apply_others='MULTI_ADJ_CASH'`.

```ipython3
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
```

```myst-ansi
                  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 x 5 columns]
```

## Adjusting for Splits by PRICE

Retrieve corporate action adjusted daily price history for splits, including the original prices
using [`corp_actions()`](https://docs.pip.distribution.sol.onetick.com/api/source/corp_actions.html.md#onetick.py.Source.corp_actions) with parameters `adjust_rule='PRICE', apply_split=True`.

```ipython3
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
```

```myst-ansi
                  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 x 5 columns]
```

## Retrieving Adjustment Factors

Retrieving corporate action adjustment factors across a specified time range.<br />
\\\\
Using [`ref_data()`](https://docs.pip.distribution.sol.onetick.com/api/data_inspection/db.html.md#onetick.py.db._inspection.DB.ref_data) with parameter `ref_data_type='corp_actions'`.

```ipython3
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
```

```myst-ansi
        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.<br />
\\\\
Specifically `OQD_CACT_SAMPLE`, and table `CACT`.<br />
\\\\
The Symbol is specified as `PAY_DATE`, `ANN_DATE`, `EX_DATE` or `REC_DATE`.

```python
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.<br />
\\\\
Specifically `OQD_CACT_SAMPLE`, and table `CACS`, for two symbols.<br />
\\\\
Bloomberg symbols have been specified using the prefix `BSYM::::`.

```python
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
```

```text
{'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
}
```
