trigerr 0.7.2__tar.gz → 0.7.4__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.
- {trigerr-0.7.2/trigerr.egg-info → trigerr-0.7.4}/PKG-INFO +1 -1
- trigerr-0.7.4/tests/test_brokerage.py +170 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/__init__.py +1 -1
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/utils.py +44 -20
- {trigerr-0.7.2 → trigerr-0.7.4/trigerr.egg-info}/PKG-INFO +1 -1
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr.egg-info/SOURCES.txt +1 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/LICENSE +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/README.md +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/pyproject.toml +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/setup.cfg +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_bt_orders.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_crypto_utils.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_data_market.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_exit_mutex.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_historical_client_config.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_ledger_contract.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_live_orders_correlation.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_logging_utils.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_orders_schema.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_package.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_reference_symbol_details.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_schema_parity.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/tests/test_symbols.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/config.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/crypto_utils.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/custom_indicators.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/data/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/data/historical.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/data/market.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/data/reference.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/bt_state.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/candle_transforms.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/catalog.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/clock.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/compiler.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/data_feeds.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/execution_core.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/exit_engine.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/expressions.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/instrument.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/point_in_time.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/position_sizing.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/framework/tick_sources.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/jobs.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/orders/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/orders/backtest.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/orders/live.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/orders/orders_utils.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/orders/virtual.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/symbols.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/__main__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/_typing.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/cdl_doji.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/cdl_inside.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/cdl_pattern.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/cdl_z.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/candle/ha.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/core.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/custom.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/cycle/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/cycle/ebsw.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/cycle/reflex.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/ma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/maps.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/ao.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/apo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/bias.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/bop.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/brar.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/cci.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/cfo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/cg.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/cmo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/coppock.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/crsi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/cti.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/dm.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/er.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/eri.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/exhc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/fisher.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/inertia.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/kdj.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/kst.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/macd.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/mom.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/pgo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/ppo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/psl.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/qqe.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/roc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/rsi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/rsx.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/rvgi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/slope.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/smc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/smi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/squeeze.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/squeeze_pro.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/stc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/stoch.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/stochf.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/stochrsi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/tmo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/trix.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/tsi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/uo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/momentum/willr.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/alligator.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/alma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/dema.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/ema.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/fwma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/hilo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/hl2.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/hlc3.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/hma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/hwma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/ichimoku.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/jma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/kama.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/linreg.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/mama.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/mcgd.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/midpoint.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/midprice.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/ohlc4.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/pivots.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/pwma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/rma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/sinwma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/sma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/smma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/ssf.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/ssf3.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/supertrend.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/swma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/t3.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/tema.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/trima.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/vidya.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/wcp.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/wma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/overlap/zlma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/performance/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/performance/drawdown.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/performance/log_return.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/performance/percent_return.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/py.typed +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/entropy.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/kurtosis.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/mad.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/median.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/quantile.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/skew.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/stdev.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/tos_stdevall.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/variance.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/statistics/zscore.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/adx.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/alphatrend.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/amat.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/aroon.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/chop.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/cksp.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/decay.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/decreasing.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/dpo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/ht_trendline.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/increasing.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/long_run.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/psar.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/qstick.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/rwi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/short_run.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/trendflex.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/ttm_trend.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/vhf.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/vortex.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/trend/zigzag.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_candles.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_core.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_math.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_numba.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_signals.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_study.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_time.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/utils/_validate.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/aberration.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/accbands.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/atr.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/atrts.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/bbands.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/chandelier_exit.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/donchian.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/hwc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/kc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/massi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/natr.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/pdist.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/rvi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/thermo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/true_range.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volatility/ui.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/__init__.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/ad.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/adosc.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/aobv.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/cmf.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/efi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/eom.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/kvo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/mfi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/nvi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/obv.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/pvi.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/pvo.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/pvol.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/pvr.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/pvt.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/tsv.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/vhm.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/vp.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/vwap.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr/ta/volume/vwma.py +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr.egg-info/dependency_links.txt +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr.egg-info/requires.txt +0 -0
- {trigerr-0.7.2 → trigerr-0.7.4}/trigerr.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
""" calculate_brokerage for the Indian market: the charge schedule every number below is worked out from.
|
|
2
|
+
|
|
3
|
+
Statutory charges are the same at every broker; brokerage is the one part that differs. Rates in force from 1 April 2026:
|
|
4
|
+
STT delivery 0.1% buy and sell; intraday equity 0.025% sell; futures 0.05% sell; options 0.15% of the premium, sell
|
|
5
|
+
Exchange (NSE) equity 0.00307%, futures 0.00183%, options 0.03553% of premium (NSE/FA/73061, from 1 March 2026);
|
|
6
|
+
BSE equity 0.00375%, futures nil, options 0.0325%
|
|
7
|
+
SEBI Rs 10 per crore (0.0001%) of turnover
|
|
8
|
+
Stamp duty on the buy side: delivery 0.015%, intraday equity and options 0.003%, futures 0.002%
|
|
9
|
+
GST 18% on brokerage + exchange charges + SEBI fee (+ DP charges on delivery)
|
|
10
|
+
STT and stamp duty on futures/options are rounded to the rupee/paisa as the function does; every total here was added up by
|
|
11
|
+
hand from those components, not read back from the function.
|
|
12
|
+
"""
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
from trigerr.utils import calculate_brokerage
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def charges(broker="zerodha", **kwargs):
|
|
19
|
+
args = dict(market_type="options", holding_type="intraday", exchange="NFO", market="IN", lot_size=25, order_type="MARKET")
|
|
20
|
+
return calculate_brokerage(broker=broker, **{**args, **kwargs})
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ---- options: 44 lots of 25 bought at 90, sold at 100; flat Rs 20 per executed order
|
|
24
|
+
|
|
25
|
+
def test_nse_options_round_trip():
|
|
26
|
+
# brokerage 40 | SEBI 0.21 (209,000 x 0.0001%) | exchange 74.26 (209,000 x 0.03553%) | STT 165 (110,000 x 0.15%)
|
|
27
|
+
# stamp 2.97 (99,000 x 0.003%) | GST 20.60 (18% of 40 + 0.21 + 74.26) -> total 303.04
|
|
28
|
+
assert charges(buy_price=90, sell_price=100, quantity=1100) == (303.04, 10696.96)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@pytest.mark.parametrize("exchange", ["NSE", "NFO", "XNSE"])
|
|
32
|
+
def test_every_label_for_the_nse_prices_options_at_the_nse_rate(exchange):
|
|
33
|
+
# the strategies place options on "NFO", a plain cash symbol on "NSE": both are NSE
|
|
34
|
+
assert charges(buy_price=90, sell_price=100, quantity=1000, exchange=exchange) == (279.79, 9720.21)
|
|
35
|
+
# brokerage 40 | SEBI 0.19 | exchange 67.51 (190,000 x 0.03553%) | STT 150 | stamp 2.70 | GST 19.39
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@pytest.mark.parametrize("exchange", ["BSE", "BFO", "XBSE"])
|
|
39
|
+
def test_bse_options_use_the_bse_rate(exchange):
|
|
40
|
+
# exchange 61.75 (190,000 x 0.0325%) -> GST 18.35 -> total 272.99
|
|
41
|
+
assert charges(buy_price=90, sell_price=100, quantity=1000, exchange=exchange) == (272.99, 9727.01)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_a_short_is_charged_on_its_real_legs():
|
|
45
|
+
# callers pass the ENTRY as buy_price and the EXIT as sell_price whatever the side (net_pl relies on it), and a short is
|
|
46
|
+
# sold first. Sold at 100, bought back at 90: the same two fills as the long above, so the same charges (STT on the 100
|
|
47
|
+
# it sold, stamp duty on the 90 it bought); gross is (100 - 90) x 1,100 = +11,000
|
|
48
|
+
assert charges(buy_price=100, sell_price=90, quantity=1100, position_type="SHORT") == (303.04, 10696.96)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_a_losing_short_pays_stt_on_the_premium_it_sold():
|
|
52
|
+
# 17 lots of 65 (1,105), sold at 85.5, bought back at 95.05. sold 94,477.50 | bought 105,030.25 | turnover 199,507.75
|
|
53
|
+
# brokerage 40 | SEBI 0.20 | exchange 70.89 | STT 142 (94,477.50 x 0.15%) | stamp 3.15 (105,030.25 x 0.003%) | GST 20.00
|
|
54
|
+
# -> 276.24; gross is (85.5 - 95.05) x 1,105 = -10,552.75. STT on the 105,030.25 bought back would make it 291.92.
|
|
55
|
+
assert charges(buy_price=85.5, sell_price=95.05, quantity=1105, position_type="SHORT") == (276.24, -10828.99)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.parametrize("kwargs", [dict(market_type="options"), dict(market_type="futures"), dict(market_type="equity", exchange="NSE")])
|
|
59
|
+
def test_a_short_costs_what_the_same_fills_cost_as_real_legs(kwargs):
|
|
60
|
+
# the OMS prices a manual exit by its real legs (buy = the exit, sell = the entry) on the default LONG side, while
|
|
61
|
+
# strategies pass entry/exit with SHORT: the same two fills have to come out the same, charges and net
|
|
62
|
+
as_short = charges(buy_price=120, sell_price=95, quantity=300, position_type="SHORT", **kwargs)
|
|
63
|
+
as_real_legs = charges(buy_price=95, sell_price=120, quantity=300, **kwargs)
|
|
64
|
+
assert as_short == as_real_legs
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# ---- futures: one Nifty lot (75) bought at 22,000, sold at 22,100
|
|
68
|
+
|
|
69
|
+
def test_nse_futures_round_trip():
|
|
70
|
+
# brokerage 40 (the Rs 20 cap; 0.03% of 3,307,500 is 992.25) | SEBI 3.31 | exchange 60.53 (0.00183%) | STT 829 (1,657,500 x 0.05%)
|
|
71
|
+
# stamp 33.00 (1,650,000 x 0.002%) | GST 18.69 (18% of 40 + 3.31 + 60.53) -> total 984.53
|
|
72
|
+
assert charges(market_type="futures", buy_price=22000, sell_price=22100, quantity=75) == (984.53, 6515.47)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_bse_futures_pay_no_exchange_charge():
|
|
76
|
+
# brokerage 18 (0.03% of 60,000) | SEBI 0.06 | exchange 0 | STT 15 | stamp 0.60 | GST 3.25 -> 36.91
|
|
77
|
+
assert charges(market_type="futures", exchange="BFO", buy_price=100, sell_price=100, quantity=300) == (36.91, -36.91)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def test_small_futures_trades_pay_the_percentage_not_the_cap():
|
|
81
|
+
# brokerage 18 (0.03% of 60,000) | SEBI 0.06 | exchange 1.10 | STT 15 | stamp 0.60 | GST 3.45 -> 38.21
|
|
82
|
+
assert charges(market_type="futures", buy_price=100, sell_price=100, quantity=300) == (38.21, -38.21)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# ---- equity
|
|
86
|
+
|
|
87
|
+
def test_intraday_equity_round_trip():
|
|
88
|
+
# 100 shares bought at 100, sold at 102. brokerage 6.06 (0.03% of 20,200) | SEBI 0.02 | exchange 0.62 (0.00307%)
|
|
89
|
+
# STT 2.55 (10,200 x 0.025%) | stamp 0.30 | GST 1.21 -> 10.76
|
|
90
|
+
assert charges(market_type="equity", exchange="NSE", buy_price=100, sell_price=102, quantity=100) == (10.76, 189.24)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def test_delivery_equity_round_trip():
|
|
94
|
+
# zero brokerage; the DP charge is 15.34 | SEBI 0.02 | exchange 0.62 | STT 20.20 (0.1% of 10,000 and of 10,200)
|
|
95
|
+
# stamp 1.50 (0.015%) | GST 2.88 -> 40.56
|
|
96
|
+
assert charges(market_type="equity", holding_type="delivery", exchange="NSE", buy_price=100, sell_price=102, quantity=100) == (40.56, 159.44)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def test_spot_is_priced_by_the_callers_as_equity():
|
|
100
|
+
assert charges(market_type="equity", exchange="NSE", buy_price=100, sell_price=102, quantity=100) is not None
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# ---- what it still refuses (None, the signal tts_fees.has_fee_model reads)
|
|
104
|
+
|
|
105
|
+
@pytest.mark.parametrize("broker, market", [("zerodha", "US"), ("zerodha", "CRYPTO"), ("someone", "IN"), ("", "IN")])
|
|
106
|
+
def test_a_broker_or_market_with_no_schedule_returns_none(broker, market):
|
|
107
|
+
assert charges(broker=broker, market=market, buy_price=90, sell_price=100, quantity=1000) is None
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# ---- Upstox and Dhan: the same statutory charges, a different brokerage
|
|
111
|
+
# Brokerage per executed order (each broker's published schedule, read 2026-10-08):
|
|
112
|
+
# zerodha delivery nil (DP 15.34 on a sell) | intraday equity and futures: the lower of Rs 20 and 0.03% | options Rs 20
|
|
113
|
+
# upstox delivery Rs 20 (+ DP Rs 20 on a sell) | intraday equity: lower of Rs 20 and 0.1% | futures: lower of Rs 20 and 0.05% | options Rs 20
|
|
114
|
+
# dhan delivery nil (DP Rs 12.50) | intraday equity: lower of Rs 20 and 0.03% | futures and options: flat Rs 20
|
|
115
|
+
# GST is charged on the DP fee too, so it sits in the same line as brokerage below.
|
|
116
|
+
|
|
117
|
+
BROKERS = ("zerodha", "upstox", "dhan")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
@pytest.mark.parametrize("broker", BROKERS)
|
|
121
|
+
def test_options_cost_the_same_at_every_broker(broker):
|
|
122
|
+
# Rs 20 flat per order everywhere: the options round trip of test_nse_options_round_trip
|
|
123
|
+
assert charges(broker=broker, buy_price=90, sell_price=100, quantity=1100) == (303.04, 10696.96)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@pytest.mark.parametrize("broker", BROKERS)
|
|
127
|
+
def test_a_futures_lot_pays_the_cap_at_every_broker(broker):
|
|
128
|
+
# 0.03% / 0.05% of 3,307,500 is far above Rs 20, so brokerage is the cap of 40: test_nse_futures_round_trip
|
|
129
|
+
assert charges(broker=broker, market_type="futures", buy_price=22000, sell_price=22100, quantity=75) == (984.53, 6515.47)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@pytest.mark.parametrize("broker, expected_total", [
|
|
133
|
+
("zerodha", 38.21), # brokerage 18.00 (0.03% of 60,000)
|
|
134
|
+
("upstox", 52.37), # brokerage 30.00 (0.05%): SEBI 0.06 | exchange 1.10 | STT 15 | stamp 0.60 | GST 5.61
|
|
135
|
+
("dhan", 64.17), # brokerage 40.00 (flat Rs 20 per order): GST 7.41
|
|
136
|
+
])
|
|
137
|
+
def test_small_futures_trades_show_each_brokers_rule(broker, expected_total):
|
|
138
|
+
assert charges(broker=broker, market_type="futures", buy_price=100, sell_price=100, quantity=300) == (expected_total, -expected_total)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@pytest.mark.parametrize("broker, expected_total", [
|
|
142
|
+
("zerodha", 10.76), # brokerage 6.06 (0.03% of 20,200): SEBI 0.02 | exchange 0.62 | STT 2.55 | stamp 0.30 | GST 1.21
|
|
143
|
+
("upstox", 27.44), # brokerage 20.20 (0.1%): GST 3.75
|
|
144
|
+
("dhan", 10.76), # brokerage 6.06 (0.03%)
|
|
145
|
+
])
|
|
146
|
+
def test_intraday_equity_shows_each_brokers_percentage(broker, expected_total):
|
|
147
|
+
assert charges(broker=broker, market_type="equity", exchange="NSE", buy_price=100, sell_price=102, quantity=100) == \
|
|
148
|
+
(expected_total, round(200 - expected_total, 2))
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@pytest.mark.parametrize("broker, expected_total", [
|
|
152
|
+
("zerodha", 40.56), # DP 15.34: SEBI 0.02 | exchange 0.62 | STT 20.20 | stamp 1.50 | GST 2.88
|
|
153
|
+
("upstox", 93.26), # Rs 20 x 2 orders + DP Rs 20 = 60: GST 10.92
|
|
154
|
+
("dhan", 37.21), # no brokerage, DP 12.50: GST 2.37
|
|
155
|
+
])
|
|
156
|
+
def test_delivery_shows_each_brokers_fees(broker, expected_total):
|
|
157
|
+
assert charges(broker=broker, market_type="equity", holding_type="delivery", exchange="NSE",
|
|
158
|
+
buy_price=100, sell_price=102, quantity=100) == (expected_total, round(200 - expected_total, 2))
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@pytest.mark.parametrize("broker", ["upstox", "dhan"])
|
|
162
|
+
@pytest.mark.parametrize("market", ["US", "CRYPTO", "MCX"])
|
|
163
|
+
def test_the_new_brokers_are_priced_for_the_indian_market_only(broker, market):
|
|
164
|
+
assert charges(broker=broker, market=market, buy_price=90, sell_price=100, quantity=1000) is None
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
@pytest.mark.parametrize("broker", ["Upstox", "DHAN", "upstox "])
|
|
168
|
+
def test_the_broker_name_is_matched_exactly(broker):
|
|
169
|
+
# callers lower-case it (tts_fees.has_fee_model reads None as "refuse"): an unlisted spelling stays unpriced
|
|
170
|
+
assert charges(broker=broker, buy_price=90, sell_price=100, quantity=1000) is None
|
|
@@ -1480,23 +1480,51 @@ def send_order_alert(alert_dict):
|
|
|
1480
1480
|
pass
|
|
1481
1481
|
|
|
1482
1482
|
|
|
1483
|
+
# Brokerage on Indian intraday equity and futures, per executed order: (percent of the order's value, cap in rupees).
|
|
1484
|
+
# The lower of the two is charged; percent None = the flat cap. As the Zerodha branch always did, the percentage is
|
|
1485
|
+
# taken on the round trip's turnover against the cap of all its orders. Options are a flat 20 an order at all three.
|
|
1486
|
+
# Each broker's published schedule, read 2026-10-08 (upstox.com/brokerage-charges, dhan.co/pricing, zerodha.com/charges).
|
|
1487
|
+
# Dhan lists futures with options at a flat 20; another copy of its page puts them under the 0.03% rule, which only
|
|
1488
|
+
# differs below a Rs 66,667 notional.
|
|
1489
|
+
_IN_BROKERAGE = {
|
|
1490
|
+
"zerodha": {"equity": (0.03, 20), "futures": (0.03, 20)},
|
|
1491
|
+
"upstox": {"equity": (0.1, 20), "futures": (0.05, 20)},
|
|
1492
|
+
"dhan": {"equity": (0.03, 20), "futures": (None, 20)},
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
|
|
1496
|
+
def _in_brokerage(broker, product, turnover, no_of_orders):
|
|
1497
|
+
percent, cap = _IN_BROKERAGE[broker][product]
|
|
1498
|
+
flat = cap * no_of_orders
|
|
1499
|
+
return flat if percent is None else min(flat, round(turnover * (percent / 100), 2))
|
|
1500
|
+
|
|
1501
|
+
|
|
1483
1502
|
def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", market_type="options", order_type="MARKET", lot_size=100, position_type="LONG", holding_type="intraday", no_of_orders=2, market="IN", exchange="NSE", spot_price=None, exit_spot_price=None, underlying=None):
|
|
1484
1503
|
"""Function to calculate brokerage"""
|
|
1485
1504
|
try:
|
|
1486
1505
|
|
|
1487
|
-
if broker
|
|
1506
|
+
if broker in _IN_BROKERAGE:
|
|
1488
1507
|
|
|
1489
1508
|
if market == "IN":
|
|
1490
1509
|
gst = 0.18
|
|
1491
1510
|
sebi_fees = 0.0001
|
|
1492
1511
|
clearing_charge = 0
|
|
1512
|
+
# Orders carry the segment they went to ("NFO" for NSE options and futures), cash symbols the exchange.
|
|
1513
|
+
nse = exchange in ("NSE", "NFO", "XNSE")
|
|
1514
|
+
# Callers pass the ENTRY as buy_price and the EXIT as sell_price whatever the side (net_pl below relies on it).
|
|
1515
|
+
# STT falls on the sale and stamp duty on the purchase, and a short is sold first: its entry is the sale.
|
|
1516
|
+
bought, sold = (sell_price, buy_price) if position_type.upper() == "SHORT" else (buy_price, sell_price)
|
|
1517
|
+
# Statutory rates in force from 1 April 2026: exchange charges per NSE/FA/73061 (from 1 March 2026), STT on
|
|
1518
|
+
# futures and options per Budget 2026. Not modelled: STT on exercised options, physical settlement.
|
|
1493
1519
|
|
|
1494
1520
|
# Calculating Turn Over
|
|
1495
1521
|
turnover = (buy_price * quantity) + (sell_price * quantity)
|
|
1496
1522
|
|
|
1497
1523
|
if market_type == "equity" and holding_type == "delivery":
|
|
1498
|
-
|
|
1499
|
-
|
|
1524
|
+
# Delivery brokerage is nil at Zerodha and Dhan, so this is their DP charge on the sell (Zerodha's
|
|
1525
|
+
# includes the GST that the total adds again); Upstox charges Rs 20 an order and Rs 20 DP.
|
|
1526
|
+
broker_fees = {"zerodha": 15.34, "upstox": 20 * no_of_orders + 20, "dhan": 12.5}[broker]
|
|
1527
|
+
transaction_fees = 0.00307 if nse else 0.00375
|
|
1500
1528
|
stt_fees = 0.1
|
|
1501
1529
|
stamp_fees = 0.015
|
|
1502
1530
|
|
|
@@ -1512,52 +1540,48 @@ def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", marke
|
|
|
1512
1540
|
stamp_charge = round((quantity * buy_price * stamp_fees)/100, 2)
|
|
1513
1541
|
|
|
1514
1542
|
elif market_type == "equity" and holding_type == "intraday":
|
|
1515
|
-
|
|
1516
|
-
broker_fees_2 = round(turnover * (0.03 / 100), 2)
|
|
1517
|
-
broker_fees = min(broker_fees_1, broker_fees_2)
|
|
1543
|
+
broker_fees = _in_brokerage(broker, "equity", turnover, no_of_orders)
|
|
1518
1544
|
|
|
1519
|
-
transaction_fees = 0.
|
|
1545
|
+
transaction_fees = 0.00307 if nse else 0.00375
|
|
1520
1546
|
stamp_fees = 0.003
|
|
1521
1547
|
stt_fees = 0.025
|
|
1522
1548
|
|
|
1523
1549
|
# Calculating STT Charge
|
|
1524
|
-
stt_charge = round(quantity *
|
|
1550
|
+
stt_charge = round(quantity * sold * stt_fees / 100, 2)
|
|
1525
1551
|
|
|
1526
1552
|
# Calculating Transaction Fees
|
|
1527
1553
|
transaction_charge = round(turnover * transaction_fees / 100, 2)
|
|
1528
1554
|
|
|
1529
1555
|
# Calculating Stamp Fees
|
|
1530
|
-
stamp_charge = round(quantity *
|
|
1556
|
+
stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
|
|
1531
1557
|
|
|
1532
1558
|
elif market_type == "futures":
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
broker_fees = min(broker_fees_1, broker_fees_2)
|
|
1536
|
-
transaction_fees = 0.00173 if exchange == "NSE" else 0
|
|
1559
|
+
broker_fees = _in_brokerage(broker, "futures", turnover, no_of_orders)
|
|
1560
|
+
transaction_fees = 0.00183 if nse else 0
|
|
1537
1561
|
stamp_fees = 0.002
|
|
1538
|
-
stt_fees = 0.
|
|
1562
|
+
stt_fees = 0.05
|
|
1539
1563
|
|
|
1540
1564
|
# Calculating STT Charge
|
|
1541
|
-
stt_charge = round(quantity *
|
|
1565
|
+
stt_charge = round(quantity * sold * stt_fees / 100)
|
|
1542
1566
|
|
|
1543
1567
|
# Calculating Transaction Fees
|
|
1544
1568
|
transaction_charge = round(turnover * transaction_fees / 100, 2)
|
|
1545
1569
|
|
|
1546
1570
|
# Calculating Stamp Fees
|
|
1547
|
-
stamp_charge = round(quantity *
|
|
1571
|
+
stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
|
|
1548
1572
|
|
|
1549
1573
|
else:
|
|
1550
1574
|
broker_fees = 20 * no_of_orders
|
|
1551
|
-
transaction_fees = 0.
|
|
1575
|
+
transaction_fees = 0.03553 if nse else 0.0325
|
|
1552
1576
|
stamp_fees = 0.003
|
|
1553
1577
|
|
|
1554
|
-
stt_fees = 0.
|
|
1578
|
+
stt_fees = 0.15
|
|
1555
1579
|
|
|
1556
1580
|
# Calculating STT Charge
|
|
1557
|
-
stt_charge = round(quantity *
|
|
1581
|
+
stt_charge = round(quantity * sold * stt_fees / 100)
|
|
1558
1582
|
|
|
1559
1583
|
# Calculating Stamp Fees
|
|
1560
|
-
stamp_charge = round(quantity *
|
|
1584
|
+
stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
|
|
1561
1585
|
|
|
1562
1586
|
# Calculating Transaction Fees
|
|
1563
1587
|
transaction_charge = round(turnover * transaction_fees / 100, 2)
|
|
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
|
|
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
|