> For the complete documentation index, see [llms.txt](https://docs.unblinked.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.unblinked.com/library/python-library.md).

# Python Library

## Functions

They are the functions available in both [**analytic/python mode**](/analytics/create-chart/python.md), and [**terminal**](/terminal/create-bot-strategy/0.-how-to-write-code.md).

### 1. Get the Time-series Data

{% code overflow="wrap" %}

```python
get_raw_data(table_name: str, symbol: str, start_time: str, end_time: str) -> list
```

{% endcode %}

`get_raw_data` is a function to get the data you can find in the [data preview](/terminal/create-bot-strategy/1.-how-to-preview-data.md). It returns the data as a list of dictionaries.

#### Arguments

* `table_name` : (string) The name of the table you want to get. It can be seen right next to the data alias at data preview. Check the [**data list**](/faq/data/dataset/data-list.md) to see the list of available `table_name`.

<figure><img src="/files/HC2RvJz5fivksJbdccDz" alt="" width="310"><figcaption><p>R1's table_name is binance_um_futures_candlestick_1d.</p></figcaption></figure>

* `symbol` : (string) A category in the table\_name. For instance, if the `table_name = binance_candlestick_1h` and the `symbol = BTCUSDT`, then it would return 1 hour interval candlestick data of **BTCUSDT** in the **Binance spot**  market.
* `start_time` : (string)
* `end_time` : (string) The `start_time` and `end_time` are the time range of the data to get. They are strings of time in `yyyy-MM-dd HH:mm:ss` format. You can set them by  `strftime('%Y-%m-%d %H:%M:%S')` method of `datetime.datetime`.

#### Returns

It returns the data in a **list of the dictionaries**. In the dictionary, every numeric value is `decimal.Decimal` type, and time value is `datetime.datetime`.

{% code overflow="wrap" %}

```python
# Basic ways to get the data
btc_price = get_raw_data("binance_candlestick_1d", 
    "BTCUSDT", 
    "2022-01-01 00:00:00",
    "2022-01-08 00:00:00")
    
# Using datetime.strftime. 2hours ago ~ now.
# Format %F %T can do the same as %Y-%m-%d %H:%M:%S
xrp_price = get_raw_data("binance_um_futures_candlestick_5min", 
    "XPRBUSDT", 
    (datetime.datetime.now() - datetime.timedelta(hours=2)).strftime('%F %T'),
    datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

# The example of the result
'''
[
    {
        "time" : `object of datetime.datetime type`,
        "close" : `object of decimal.Decimal type`,
        "high" : `object of decimal.Decimal type`,
        "low" : `object of decimal.Decimal type`,
        "close" : `object of decimal.Decimal type`,
        ...
    },
    
    ...
]
'''
```

{% endcode %}

***

### 2. Get the Time-series Data in DataFrame

{% code overflow="wrap" %}

```python
get_raw_data_in_df(table_name: str, symbol: str, start_time: str, end_time: str) -> pandas.DataFrame
```

{% endcode %}

`get_raw_data_in_df` is a function that works same as `get_raw_data`, but it refines the result into `pandas.DataFrame` type, and converts `decimal.Decimal` type values in it into `float`.

It is useful to apply methods from pandas such as `ewm` to the data.

#### Arguments

* `table_name` : (string)
* `symbol` : (string)
* `start_time` : (string)
* `end_time` : (string)

#### Returns

It returns the data in `pandas.DataFrame` object. In each entry, every numeric value is `float`, and the time value is `datetime.datetime`.

```python
# The list of the arguments is same as of get_raw_data.
btc_price = get_raw_data_in_df("binance_candlestick_1d", 
    "BTCUSDT", 
    "2022-01-01 00:00:00", 
    "2022-01-08 00:00:00")
```

***

## Terminal-only Functions

Terminal-only function can be used only in the [**terminal**](/terminal/create-bot-strategy/0.-how-to-write-code.md), which means that they are not available in the analytics.

### 1. Stop Bot

{% code overflow="wrap" %}

```python
shutdown(message: str|None = None) -> None
```

{% endcode %}

It stops the bot that the code is being run. You can call this function when you want to stop your bot in a certain condition.

{% hint style="danger" %}
Do **not** wrap this function by `try ... except`, as it is implemented by raising `ShutdownException`.
{% endhint %}

#### Arguments

* `message` : (string) The message to record to the log when the function is called

#### Returns

None

{% code overflow="wrap" %}

```python
# abstract on how the shutdown() is defined.
def shutdown(message:str=None):
    print(f"Bot shutdown. {message}")
    raise ShutdownException

# Example of using `shutdown()` function

# 1. stop the bot when USDT in the balance is more than 50 or less then 30.
balance = privateAPI.get_balance('binance')
usdt_val = balance['USDT']['amount'] if 'USDT' in balance else 0

if usdt_val > 50 or usdt_val < 30:
    shutdown()
...

# 2. You shouldn't wrap it by try ... except.
try:
    shutdown() # shutdown() doesn't work in this way!
except:
    ...
```

{% endcode %}

***
