LET'S ALGOIT Python SDK for XTS Interactive and Market Data APIs
Project description
XTS-LAI
Official LET'S ALGOIT Python SDK wrapper for XTS Interactive and Market Data APIs.
Installation
pip install XTS-LAI
Login
from XTS_LAI import LetsAlgoIt
xts_lai = login(
interactive_api_key="YOUR_INTERACTIVE_API_KEY",
interactive_api_secret="YOUR_INTERACTIVE_API_SECRET",
market_api_key="YOUR_MARKET_API_KEY",
market_api_secret="YOUR_MARKET_API_SECRET",
clientID="YOUR_CLIENT_ID",
)
The returned xts_lai object provides access to market data, historical candles, indicators, option utilities, account details, order management, instrument validation, and Telegram alerts.
Important safety notes
- Never publish API keys, API secrets, client IDs, PyPI tokens, or Telegram bot tokens.
- Keep
RUN_LIVE_ORDER_EXAMPLES = Falseunless you intentionally want to place, modify, or cancel real orders. - Test one section at a time with valid symbols and current expiry contracts.
- XTS login may require your current public IP address to be whitelisted by your broker or administrator.
Complete SDK usage
The following reference includes usage examples for all public SDK functions.
"""Complete XTS_LAI SDK usage reference.
IMPORTANT
---------
1. Replace all credential placeholders before running.
2. Keep RUN_LIVE_ORDER_EXAMPLES = False unless you intentionally want to
place, modify, or cancel real orders.
3. Run one example section at a time while testing.
"""
from XTS_LAI import LetsAlgoIt
import pandas as pd
# ============================================================
# LOGIN
# ============================================================
xts_lai = login(
interactive_api_key="YOUR_INTERACTIVE_API_KEY",
interactive_api_secret="YOUR_INTERACTIVE_API_SECRET",
market_api_key="YOUR_MARKET_API_KEY",
market_api_secret="YOUR_MARKET_API_SECRET",
clientID="YOUR_CLIENT_ID",
)
# Change these symbols according to your account and current contracts.
EQUITY_SYMBOL = "ACC-EQ"
INDEX_SYMBOL = "BANKNIFTY"
OPTION_SYMBOL = "BANKNIFTY_OPTION_SYMBOL"
EXPIRY_DATE = "YYYY-MM-DDTHH:MM:SS"
# Live order and Telegram examples remain disabled by default.
RUN_LIVE_ORDER_EXAMPLES = False
RUN_TELEGRAM_EXAMPLE = False
# ============================================================
# 1. LOGIN AGAIN, WHEN REQUIRED
# ============================================================
# login_call() is already called by login(). Use this only after logout/session
# expiry when you intentionally want to authenticate the same object again.
# xts_lai.login_call()
# ============================================================
# 2. PARAMETER VALIDATION
# ============================================================
parameter_types = {"ACC-EQ": str, 1: int}
xts_lai.check_if_parameter_is_correct(parameter_types)
print("Parameter validation completed")
# ============================================================
# 3. INSTRUMENT MASTER
# ============================================================
instrument_master = xts_lai.get_instrument_file()
print(instrument_master.head())
# ============================================================
# 4. HISTORICAL DATA
# ============================================================
historical_df = xts_lai.get_historical_data(
EQUITY_SYMBOL,
"5minute",
xts_lai.intervals_dict["5minute"],
)
print(historical_df.tail())
# ============================================================
# 5. PUT/CALL RATIO
# ============================================================
# Replace these sample DataFrames with actual CE and PE historical data.
ce_data = pd.DataFrame({
"date": pd.date_range("2026-01-01", periods=3, freq="5min"),
"volume": [100, 120, 150],
})
pe_data = pd.DataFrame({
"date": pd.date_range("2026-01-01", periods=3, freq="5min"),
"volume": [110, 140, 135],
})
pcr_df = xts_lai.calculate_pcr(ce_data, pe_data)
print(pcr_df)
# ============================================================
# 6. VWAP
# ============================================================
if not historical_df.empty:
vwap_df = xts_lai.calculate_vwap(historical_df.copy())
print(vwap_df.tail())
# ============================================================
# 7. ATR SUPPORT DATA
# ============================================================
if not historical_df.empty:
atr_df = xts_lai.atr(historical_df.copy(), period=14)
print(atr_df.tail())
# ============================================================
# 8. SUPER TREND
# ============================================================
if not historical_df.empty:
supertrend_df = xts_lai.add_super_trend(
historical_df.copy(),
period=10,
multiplier=3,
supertrendname="SuperTrend",
)
print(supertrend_df.tail())
# ============================================================
# 9. LIVE PNL
# ============================================================
# Current implementation reads positions from XTS. The two parameters are kept
# for compatibility with the SDK function signature.
live_pnl = xts_lai.get_pnl(complete_order={}, script_details={})
print("Live PnL:", live_pnl)
# ============================================================
# 10. FUTURE/SPOT DESCRIPTION
# ============================================================
spot_value = xts_lai.get_spot_value("CRUDEOIL", series="FUTCOM")
print("Spot/Future value:", spot_value)
# ============================================================
# 11. RSI
# ============================================================
if not historical_df.empty:
rsi = xts_lai.calculate_rsi(historical_df["close"], rsi_length=14)
print(rsi.tail())
# ============================================================
# 12. MOVING AVERAGE
# ============================================================
if not historical_df.empty:
sma = xts_lai.calculate_ma(
historical_df["close"],
length=14,
ma_type="SMA",
)
print(sma.tail())
# ============================================================
# 13. LINEAR REGRESSION
# ============================================================
if not historical_df.empty:
linreg = xts_lai.calculate_linreg(historical_df["close"], length=14)
print(linreg.tail())
# ============================================================
# 14. RSI TOPS AND BOTTOMS
# ============================================================
if not historical_df.empty:
rsi_signal_df = historical_df.copy()
rsi_signal_df["RSI"] = xts_lai.calculate_rsi(
rsi_signal_df["close"],
rsi_length=14,
)
rsi_signal_df = xts_lai.detect_rsi_tops_bottoms(rsi_signal_df)
print(rsi_signal_df.tail())
# ============================================================
# 15. COMPLETE INDICATORS
# ============================================================
if not historical_df.empty:
indicator_df = xts_lai.calculate_indicators(
historical_df.copy(),
rsi_length=14,
ma_length=14,
ma_type="SMA",
linreg_length=36,
)
print(indicator_df.tail())
# ============================================================
# 16. AVAILABLE BALANCE
# ============================================================
balance = xts_lai.get_balance()
print("Available balance:", balance)
# ============================================================
# 17. EXPIRY DATES
# ============================================================
expiry_dates = xts_lai.get_expiry(INDEX_SYMBOL)
print("Expiry dates:", expiry_dates)
# ============================================================
# 18. CHECK EXPIRY DATE
# ============================================================
if expiry_dates:
expiry_is_valid = xts_lai.check_expiry_date(INDEX_SYMBOL, expiry_dates[0])
print("Expiry valid:", expiry_is_valid)
# ============================================================
# 19. LOT SIZE
# ============================================================
lot_size = xts_lai.get_lot_size(EQUITY_SYMBOL)
print("Lot size:", lot_size)
# ============================================================
# 20. FREEZE QUANTITY
# ============================================================
freeze_quantity = xts_lai.get_freeze_quantity(EQUITY_SYMBOL)
print("Freeze quantity:", freeze_quantity)
# ============================================================
# 21. SPLIT ORDER VARIABLES
# ============================================================
quantity, freeze_qty, split_count, remaining_qty = (
xts_lai.get_split_order_variables(EQUITY_SYMBOL, lots=1)
)
print(
"Quantity:", quantity,
"Freeze:", freeze_qty,
"Splits:", split_count,
"Remaining:", remaining_qty,
)
# ============================================================
# 22. ATM STRIKE SELECTION
# ============================================================
if expiry_dates:
ce_script, pe_script, atm_strike = xts_lai.ATM_Strike_Selection(
INDEX_SYMBOL,
expiry_dates[0],
)
print("ATM CE:", ce_script)
print("ATM PE:", pe_script)
print("ATM strike:", atm_strike)
# ============================================================
# 23. COMBINED OHLC DATA USING INSTRUMENT ID
# ============================================================
# Replace the ID and date strings with valid values.
# combined_df = xts_lai.get_combined_data(
# instrument_id=12345,
# start="Jul 01 2026 091500",
# end="Jul 01 2026 153000",
# )
# print(combined_df.tail())
# ============================================================
# 24. BID AND ASK TOGETHER
# ============================================================
ask, bid = xts_lai.get_bid_ask(EQUITY_SYMBOL)
print("Ask:", ask, "Bid:", bid)
# ============================================================
# 25. RAW QUOTE RESPONSE
# ============================================================
raw_quote = xts_lai.get_data_for_single_script(EQUITY_SYMBOL)
print(raw_quote)
# ============================================================
# 26. LTP — SINGLE AND MULTIPLE SYMBOLS
# ============================================================
single_ltp = xts_lai.get_ltp(EQUITY_SYMBOL)
print("Single LTP:", single_ltp)
multiple_ltp = xts_lai.get_ltp(["ACC-EQ", "DMART-EQ"])
print("Multiple LTP:", multiple_ltp)
# ============================================================
# 27. STOCK DATA — LTP, OPEN, HIGH, LOW, CLOSE
# ============================================================
stock_data = xts_lai.get_stock_data(["ACC-EQ", "DMART-EQ"])
print(stock_data)
# ============================================================
# 28. OHLC — SINGLE AND MULTIPLE SYMBOLS
# ============================================================
open_price, high, low, close = xts_lai.get_ohlc_data(EQUITY_SYMBOL)
print("OHLC:", open_price, high, low, close)
multiple_ohlc = xts_lai.get_ohlc_data(["ACC-EQ", "DMART-EQ"])
print(multiple_ohlc)
# ============================================================
# 29. OPEN INTEREST
# ============================================================
open_interest = xts_lai.open_interest_values([OPTION_SYMBOL])
print("Open interest:", open_interest)
# ============================================================
# 30. ASK PRICE — SINGLE AND MULTIPLE SYMBOLS
# ============================================================
single_ask = xts_lai.get_askprice(EQUITY_SYMBOL)
print("Single ask:", single_ask)
multiple_ask = xts_lai.get_askprice(["ACC-EQ", "DMART-EQ"])
print("Multiple ask:", multiple_ask)
# ============================================================
# 31. BID PRICE — SINGLE AND MULTIPLE SYMBOLS
# ============================================================
single_bid = xts_lai.get_bidprice(EQUITY_SYMBOL)
print("Single bid:", single_bid)
multiple_bid = xts_lai.get_bidprice(["ACC-EQ", "DMART-EQ"])
print("Multiple bid:", multiple_bid)
# ============================================================
# 32. ATM / ITM / OTM STRIKE
# ============================================================
index_ltp = xts_lai.get_ltp(INDEX_SYMBOL)
atm_strike = xts_lai.get_atm_itm_otm_strike(
index_ltp,
INDEX_SYMBOL,
multiplier=0,
script_type="CE",
expiry=0,
)
print("ATM strike:", atm_strike)
# ============================================================
# 33. ATM / ITM / OTM OPTION SCRIPT
# ============================================================
atm_option_script = xts_lai.get_atm_itm_otm_script(
index_ltp,
INDEX_SYMBOL,
multiplier=0,
script_type="CE",
expiry=0,
)
print("ATM option script:", atm_option_script)
# ============================================================
# 34. OPTION GREEKS
# ============================================================
# Replace expiry and strike with current valid contract values.
# option_delta = xts_lai.get_option_greek(
# strike=25000,
# expiry_date=EXPIRY_DATE,
# asset="NIFTY",
# interest_rate=2,
# flag="delta",
# scrip_type="CE",
# )
# print("Option delta:", option_delta)
# ============================================================
# 35. ORDER PLACEMENT — LIVE ORDER
# ============================================================
order_id = None
if RUN_LIVE_ORDER_EXAMPLES:
order_id = xts_lai.order_placement(
tradingsymbol=EQUITY_SYMBOL,
quantity=1,
price=0,
trigger_price=0,
order_type="MARKET",
transaction_type="BUY",
trade_type="MIS",
)
print("Order ID:", order_id)
# ============================================================
# 36. ORDER HISTORY
# ============================================================
if RUN_LIVE_ORDER_EXAMPLES and order_id:
order_status = xts_lai.get_orderhistory(order_id)
print("Order status:", order_status)
# ============================================================
# 37. EXECUTED PRICE
# ============================================================
if RUN_LIVE_ORDER_EXAMPLES and order_id:
executed_price = xts_lai.get_executed_price(order_id)
print("Executed price:", executed_price)
# ============================================================
# 38. ORDER REPORT
# ============================================================
order_status_report, order_price_report = xts_lai.order_report()
print("Order status report:", order_status_report)
print("Order price report:", order_price_report)
# ============================================================
# 39. MODIFY ORDER — LIVE ORDER
# ============================================================
if RUN_LIVE_ORDER_EXAMPLES and order_id:
modified_order_id = xts_lai.modify_order(
appOrderID=order_id,
modifiedOrderType="LIMIT",
modifiedOrderQuantity=1,
modifiedLimitPrice=2705,
modifiedStopPrice=0,
trade_type="MIS",
)
print("Modified order ID:", modified_order_id)
# ============================================================
# 40. CANCEL ORDER — LIVE ORDER
# ============================================================
if RUN_LIVE_ORDER_EXAMPLES and order_id:
xts_lai.cancel_order(order_id)
print("Order cancellation requested")
# ============================================================
# 41. CANCEL ALL ORDERS / CLOSE MIS POSITIONS — LIVE ACTION
# ============================================================
if RUN_LIVE_ORDER_EXAMPLES:
cancelled_orders = xts_lai.cancel_all_orders()
print("Cancelled orders:", cancelled_orders)
# ============================================================
# 42. CHECK VALID INSTRUMENT
# ============================================================
instrument_status = xts_lai.check_valid_instrument(INDEX_SYMBOL)
print(instrument_status)
# ============================================================
# 43. TELEGRAM ALERT
# ============================================================
if RUN_TELEGRAM_EXAMPLE:
xts_lai.send_telegram_alert(
message="XTS_LAI test alert",
receiver_chat_id="YOUR_TELEGRAM_CHAT_ID",
bot_token="YOUR_TELEGRAM_BOT_TOKEN",
)
print("Telegram alert requested")
Package version
Current version: 1.0.2
Support
Website: https://letsalgoit.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xts_lai-1.0.2.tar.gz.
File metadata
- Download URL: xts_lai-1.0.2.tar.gz
- Upload date:
- Size: 32.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76b8e89d5921a44d0095e3ffcb37fb2a31c54c3496fb0d52555f7f539565d92b
|
|
| MD5 |
464180bceed285c11ba6618cad8c0978
|
|
| BLAKE2b-256 |
7bde42c727aa13ee5b90956ab0c3496d8460c56bbd6ab1a910aac4035716c07b
|
File details
Details for the file xts_lai-1.0.2-py3-none-any.whl.
File metadata
- Download URL: xts_lai-1.0.2-py3-none-any.whl
- Upload date:
- Size: 28.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f716afabb62a67cf990b2655b2d4b0d4b8635594f3a08050edaa17b3797adbf
|
|
| MD5 |
ead8512122eb4541be1a9f7f18bd1461
|
|
| BLAKE2b-256 |
c034c5b091cb452b3a5279dbbada42096d169c7ec27601b6af9f6cbc0aa62012
|