# NSE

[![rust badge](https://img.shields.io/static/v1?label=Made%20with&message=Rust&style=for-the-badge&logo=rust&labelColor=e82833&color=b11522)](https://www.rust-lang.org/)
[![license badge](https://img.shields.io/github/license/TechfaneTechnologies/nse?style=for-the-badge)](https://github.com/TechfaneTechnologies/nse/blob/main/LICENSE)
[![copyleft badge](https://img.shields.io/static/v1?label=&message=Copyleft&style=for-the-badge&labelColor=silver&color=silver&logo=data:image/png;base64, )](https://en.wikipedia.org/wiki/Copyleft)
 [![Build and Release](https://github.com/TechfaneTechnologies/nse/actions/workflows/release.yml/badge.svg)](https://github.com/TechfaneTechnologies/nse/actions/workflows/release.yml)

> Check out the sister projects [NsePython](https://github.com/TechfaneTechnologies/nsepython) and [SaveKiteEnctoken](https://github.com/TechfaneTechnologies/SaveKiteEnctoken) which are Python & Javascript libraries to use the NSE and Zerodha APIs respectively

NSE is an easy to use rust CLI program and library for extracting real-time data from [National Stock Exchange (India)](https://www.nseindia.com/)

## Features

- Download EOD 1-Minute Data for NFO-FUT, NSE-EQ, NSE-Index, NSE-CDS from NSE Tame Charts.
- Download Intraday Futures & Options Data Snapshots with all LTP & OI Data.
- Multi-threading for network intensive subcommands
  - You can configure the maximum number of additional threads using the `--threads` options

## Installation

nse is a compiled, statically linked program that does not require any external dependencies.
> nse is coming to more package managers soon!

### Cargo Install

If you have the Rust toolchain, you can also compile and install nse by running `cargo install nse`.

Remember to use an add-on like [cargo-update](https://crates.io/crates/cargo-update) to keep nse updated to the latest version!

### GitHub Releases

1. Download the asset suitable for your operating system from [the latest release](https://github.com/TechfaneTechnologies/nse/releases/latest)
2. Unzip the file and move it to a folder in your path such as `~/bin`
3. Remember to check the releases page for any updates!

### First Startup

When you first start up, the program will create a new data download directory automatically named as `NSE_Downloads_Data` in which the download files will be further categorised, subcatogorised and saved into dated folders.

```bash
NSE_DOWNLOADS_DATA
├───1-Minute-OHLCV-Data
│   ├───Commodity
│   │   └───11-May-2022
│   ├───Currency
│   │   └───11-May-2022
│   ├───Equity
│   │   └───11-May-2022
│   ├───Futures
│   │   └───11-May-2022
│   └───Index
│   │   └───11-May-2022
├───BankNifty
│   ├───Futures_Intraday_Snapshots
│   │   └───11-May-2022
│   ├───GraphsData
│   │   └───11-May-2022
│   └───Options_Intraday_Snapshots
│       └───11-May-2022
├───FinNifty
│   ├───Futures_Intraday_Snapshots
│   │   └───11-May-2022
│   ├───GraphsData
│   │   └───11-May-2022
│   └───Options_Intraday_Snapshots
│       └───11-May-2022
├───Misc
│   ├───Futures_Intraday_Snapshots
│   │   └───11-May-2022
│   ├───GraphsData
│   │   └───11-May-2022
│   └───Options_Intraday_Snapshots
│       └───11-May-2022
└───Nifty
    ├───Futures_Intraday_Snapshots
    │   └───11-May-2022
    ├───GraphsData
    │   └───11-May-2022
    └───Options_Intraday_Snapshots
        └───11-May-2022
```

**WARNING:** _When upgrading, any files not downloaded by nse will be moved to the `.old` folder in the output directory_

#### Configure

_To Be Updated_

#### Manage

_To Be Updated_

#### Delete

_To Be Updated_

## Feature Requests

If you would like to make a feature request, check the [issues](https://github.com/TechfaneTechnologies/nse/issues?q=is%3Aissue) to see if the feature has already been added or is planned. If not, [create a new issue](https://github.com/TechfaneTechnologies/nse/issues/new).

## Building from Source or Working with nse

Firstly, you need the Rust toolchain which includes `cargo`, `rustup`, etc. You can install these from [the Rust website](https://www.rust-lang.org/tools/install).
You'll also need the [Just](https://github.com/casey/just#installation) command runner, its basically a much better version of `make`.

If you want to build nse without cloning the repo then run `cargo install nse`.

To build the project and install it to your Cargo binary directory, clone the project and run `just install`. If you want to install it for testing a developement version, run `just` (alias for `just install-dev`).

If you want to obtain executables for a specific OS, you can run `just build-<OS>` and replace `<OS>` with `mac`, `win`, or `linux`. The produced binaries will be zipped and moved to `out/`.

You can run clippy linters using `just lint`, and integration tests using `cargo test`. Finally you can delete all the build and test artefacts by using `just clean`.
