quantplay 2.0.49__tar.gz → 2.0.51__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantplay-2.0.49 → quantplay-2.0.51}/PKG-INFO +1 -1
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/aliceblue.py +8 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/zerodha.py +48 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay.egg-info/PKG-INFO +1 -1
- {quantplay-2.0.49 → quantplay-2.0.51}/setup.py +1 -1
- {quantplay-2.0.49 → quantplay-2.0.51}/README.md +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/pyproject.toml +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/angelone.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/auto_login/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/auto_login/aliceblue.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/broker_factory.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/dhan.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/finvasia_utils/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/five_paisa.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/flattrade.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/ft_utils/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/ft_utils/flattrade_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/ft_utils/ft_noren.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/generics/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/generics/broker.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/iifl_xts.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/kite_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/motilal.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/noren.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/shoonya.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/uplink/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/uplink/uplink_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/upstox.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/xts.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/xts_utils/Connect.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/xts_utils/Exception.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/broker/xts_utils/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/exception/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/exception/exceptions.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/model/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/model/broker.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/model/generics.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/model/instrument_data.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/model/order_event.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/py.typed +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/caching.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/constant.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/exchange.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/number_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/pickle_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/utils/selenium_utils.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/wrapper/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay/wrapper/aws/s3.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay.egg-info/SOURCES.txt +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay.egg-info/dependency_links.txt +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay.egg-info/requires.txt +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/quantplay.egg-info/top_level.txt +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/setup.cfg +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/tests/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/tests/conftest.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/tests/wrapper/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/tests/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.49 → quantplay-2.0.51}/tests/wrapper/aws/s3_test.py +0 -0
|
@@ -598,6 +598,12 @@ class Aliceblue(Broker):
|
|
|
598
598
|
|
|
599
599
|
def margins(self) -> Dict[str, float]:
|
|
600
600
|
margins = self.invoke_aliceblue_api(self.alice.get_balance)
|
|
601
|
+
if margins is None:
|
|
602
|
+
return {
|
|
603
|
+
"margin_used": 0.0,
|
|
604
|
+
"total_balance": 0.0,
|
|
605
|
+
"margin_available": 0.0,
|
|
606
|
+
}
|
|
601
607
|
|
|
602
608
|
margins = [a for a in margins if a["segment"] == "ALL"][0]
|
|
603
609
|
|
|
@@ -625,6 +631,8 @@ class Aliceblue(Broker):
|
|
|
625
631
|
|
|
626
632
|
if "emsg" in response and "expired" in response["emsg"].lower():
|
|
627
633
|
raise TokenException("Session expired")
|
|
634
|
+
elif "emsg" in response and "unauthorized" in response["emsg"].lower():
|
|
635
|
+
raise TokenException("Session expired")
|
|
628
636
|
elif (
|
|
629
637
|
"stat" in response
|
|
630
638
|
and response["stat"].lower() == "not_ok"
|
|
@@ -2,6 +2,7 @@ import codecs
|
|
|
2
2
|
import pickle
|
|
3
3
|
import traceback
|
|
4
4
|
from typing import Any, Callable, Dict, Hashable, List
|
|
5
|
+
from datetime import datetime
|
|
5
6
|
|
|
6
7
|
import polars as pl
|
|
7
8
|
from kiteconnect import KiteConnect, KiteTicker
|
|
@@ -556,3 +557,50 @@ class Zerodha(Broker):
|
|
|
556
557
|
"pnl": float(self.positions()["pnl"].sum()),
|
|
557
558
|
}
|
|
558
559
|
return response
|
|
560
|
+
|
|
561
|
+
@retry(
|
|
562
|
+
wait_exponential_multiplier=3000,
|
|
563
|
+
wait_exponential_max=10000,
|
|
564
|
+
stop_max_attempt_number=3,
|
|
565
|
+
retry_on_exception=retry_exception,
|
|
566
|
+
)
|
|
567
|
+
def historical_data(
|
|
568
|
+
self,
|
|
569
|
+
exchange: ExchangeType,
|
|
570
|
+
tradingsymbol: str,
|
|
571
|
+
start_time: datetime,
|
|
572
|
+
interval: str,
|
|
573
|
+
end_time: datetime = datetime.now(),
|
|
574
|
+
) -> pl.DataFrame:
|
|
575
|
+
tradingsymbol = self.get_symbol(tradingsymbol, exchange=exchange)
|
|
576
|
+
instrument_token = self.symbol_data[f"{exchange}:{tradingsymbol}"][ # type: ignore
|
|
577
|
+
"instrument_token"
|
|
578
|
+
]
|
|
579
|
+
|
|
580
|
+
Constants.logger.info(
|
|
581
|
+
f"[HISTORICAL_DATA] requesting {interval} candles for {instrument_token}/{tradingsymbol} from {start_time} till {end_time}"
|
|
582
|
+
)
|
|
583
|
+
data = self.wrapper.historical_data(
|
|
584
|
+
instrument_token,
|
|
585
|
+
start_time,
|
|
586
|
+
end_time,
|
|
587
|
+
interval, # type: ignore
|
|
588
|
+
continuous=False,
|
|
589
|
+
)
|
|
590
|
+
data = pl.DataFrame(data)
|
|
591
|
+
|
|
592
|
+
if len(data) == 0:
|
|
593
|
+
return data
|
|
594
|
+
|
|
595
|
+
data = data.cast(
|
|
596
|
+
{
|
|
597
|
+
"date": pl.Datetime,
|
|
598
|
+
"open": pl.Float64,
|
|
599
|
+
"high": pl.Float64,
|
|
600
|
+
"low": pl.Float64,
|
|
601
|
+
"close": pl.Float64,
|
|
602
|
+
"volume": pl.Int64,
|
|
603
|
+
}
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
return data.sort("date")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|