trigerr 0.7.3__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.
Files changed (237) hide show
  1. {trigerr-0.7.3/trigerr.egg-info → trigerr-0.7.4}/PKG-INFO +1 -1
  2. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_brokerage.py +21 -3
  3. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/__init__.py +1 -1
  4. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/utils.py +9 -6
  5. {trigerr-0.7.3 → trigerr-0.7.4/trigerr.egg-info}/PKG-INFO +1 -1
  6. {trigerr-0.7.3 → trigerr-0.7.4}/LICENSE +0 -0
  7. {trigerr-0.7.3 → trigerr-0.7.4}/README.md +0 -0
  8. {trigerr-0.7.3 → trigerr-0.7.4}/pyproject.toml +0 -0
  9. {trigerr-0.7.3 → trigerr-0.7.4}/setup.cfg +0 -0
  10. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_bt_orders.py +0 -0
  11. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_crypto_utils.py +0 -0
  12. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_data_market.py +0 -0
  13. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_exit_mutex.py +0 -0
  14. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_historical_client_config.py +0 -0
  15. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_ledger_contract.py +0 -0
  16. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_live_orders_correlation.py +0 -0
  17. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_logging_utils.py +0 -0
  18. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_orders_schema.py +0 -0
  19. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_package.py +0 -0
  20. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_reference_symbol_details.py +0 -0
  21. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_schema_parity.py +0 -0
  22. {trigerr-0.7.3 → trigerr-0.7.4}/tests/test_symbols.py +0 -0
  23. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/config.py +0 -0
  24. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/crypto_utils.py +0 -0
  25. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/custom_indicators.py +0 -0
  26. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/data/__init__.py +0 -0
  27. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/data/historical.py +0 -0
  28. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/data/market.py +0 -0
  29. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/data/reference.py +0 -0
  30. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/__init__.py +0 -0
  31. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/bt_state.py +0 -0
  32. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/candle_transforms.py +0 -0
  33. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/catalog.py +0 -0
  34. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/clock.py +0 -0
  35. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/compiler.py +0 -0
  36. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/data_feeds.py +0 -0
  37. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/execution_core.py +0 -0
  38. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/exit_engine.py +0 -0
  39. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/expressions.py +0 -0
  40. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/instrument.py +0 -0
  41. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/point_in_time.py +0 -0
  42. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/position_sizing.py +0 -0
  43. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/framework/tick_sources.py +0 -0
  44. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/jobs.py +0 -0
  45. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/orders/__init__.py +0 -0
  46. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/orders/backtest.py +0 -0
  47. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/orders/live.py +0 -0
  48. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/orders/orders_utils.py +0 -0
  49. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/orders/virtual.py +0 -0
  50. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/symbols.py +0 -0
  51. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/__init__.py +0 -0
  52. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/__main__.py +0 -0
  53. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/_typing.py +0 -0
  54. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/__init__.py +0 -0
  55. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/cdl_doji.py +0 -0
  56. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/cdl_inside.py +0 -0
  57. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/cdl_pattern.py +0 -0
  58. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/cdl_z.py +0 -0
  59. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/candle/ha.py +0 -0
  60. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/core.py +0 -0
  61. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/custom.py +0 -0
  62. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/cycle/__init__.py +0 -0
  63. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/cycle/ebsw.py +0 -0
  64. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/cycle/reflex.py +0 -0
  65. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/ma.py +0 -0
  66. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/maps.py +0 -0
  67. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/__init__.py +0 -0
  68. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/ao.py +0 -0
  69. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/apo.py +0 -0
  70. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/bias.py +0 -0
  71. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/bop.py +0 -0
  72. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/brar.py +0 -0
  73. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/cci.py +0 -0
  74. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/cfo.py +0 -0
  75. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/cg.py +0 -0
  76. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/cmo.py +0 -0
  77. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/coppock.py +0 -0
  78. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/crsi.py +0 -0
  79. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/cti.py +0 -0
  80. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/dm.py +0 -0
  81. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/er.py +0 -0
  82. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/eri.py +0 -0
  83. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/exhc.py +0 -0
  84. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/fisher.py +0 -0
  85. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/inertia.py +0 -0
  86. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/kdj.py +0 -0
  87. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/kst.py +0 -0
  88. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/macd.py +0 -0
  89. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/mom.py +0 -0
  90. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/pgo.py +0 -0
  91. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/ppo.py +0 -0
  92. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/psl.py +0 -0
  93. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/qqe.py +0 -0
  94. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/roc.py +0 -0
  95. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/rsi.py +0 -0
  96. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/rsx.py +0 -0
  97. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/rvgi.py +0 -0
  98. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/slope.py +0 -0
  99. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/smc.py +0 -0
  100. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/smi.py +0 -0
  101. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/squeeze.py +0 -0
  102. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/squeeze_pro.py +0 -0
  103. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/stc.py +0 -0
  104. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/stoch.py +0 -0
  105. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/stochf.py +0 -0
  106. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/stochrsi.py +0 -0
  107. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/tmo.py +0 -0
  108. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/trix.py +0 -0
  109. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/tsi.py +0 -0
  110. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/uo.py +0 -0
  111. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/momentum/willr.py +0 -0
  112. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/__init__.py +0 -0
  113. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/alligator.py +0 -0
  114. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/alma.py +0 -0
  115. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/dema.py +0 -0
  116. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/ema.py +0 -0
  117. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/fwma.py +0 -0
  118. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/hilo.py +0 -0
  119. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/hl2.py +0 -0
  120. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/hlc3.py +0 -0
  121. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/hma.py +0 -0
  122. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/hwma.py +0 -0
  123. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/ichimoku.py +0 -0
  124. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/jma.py +0 -0
  125. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/kama.py +0 -0
  126. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/linreg.py +0 -0
  127. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/mama.py +0 -0
  128. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/mcgd.py +0 -0
  129. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/midpoint.py +0 -0
  130. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/midprice.py +0 -0
  131. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/ohlc4.py +0 -0
  132. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/pivots.py +0 -0
  133. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/pwma.py +0 -0
  134. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/rma.py +0 -0
  135. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/sinwma.py +0 -0
  136. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/sma.py +0 -0
  137. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/smma.py +0 -0
  138. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/ssf.py +0 -0
  139. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/ssf3.py +0 -0
  140. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/supertrend.py +0 -0
  141. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/swma.py +0 -0
  142. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/t3.py +0 -0
  143. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/tema.py +0 -0
  144. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/trima.py +0 -0
  145. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/vidya.py +0 -0
  146. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/wcp.py +0 -0
  147. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/wma.py +0 -0
  148. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/overlap/zlma.py +0 -0
  149. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/performance/__init__.py +0 -0
  150. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/performance/drawdown.py +0 -0
  151. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/performance/log_return.py +0 -0
  152. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/performance/percent_return.py +0 -0
  153. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/py.typed +0 -0
  154. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/__init__.py +0 -0
  155. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/entropy.py +0 -0
  156. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/kurtosis.py +0 -0
  157. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/mad.py +0 -0
  158. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/median.py +0 -0
  159. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/quantile.py +0 -0
  160. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/skew.py +0 -0
  161. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/stdev.py +0 -0
  162. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/tos_stdevall.py +0 -0
  163. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/variance.py +0 -0
  164. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/statistics/zscore.py +0 -0
  165. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/__init__.py +0 -0
  166. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/adx.py +0 -0
  167. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/alphatrend.py +0 -0
  168. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/amat.py +0 -0
  169. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/aroon.py +0 -0
  170. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/chop.py +0 -0
  171. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/cksp.py +0 -0
  172. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/decay.py +0 -0
  173. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/decreasing.py +0 -0
  174. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/dpo.py +0 -0
  175. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/ht_trendline.py +0 -0
  176. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/increasing.py +0 -0
  177. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/long_run.py +0 -0
  178. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/psar.py +0 -0
  179. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/qstick.py +0 -0
  180. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/rwi.py +0 -0
  181. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/short_run.py +0 -0
  182. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/trendflex.py +0 -0
  183. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/ttm_trend.py +0 -0
  184. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/vhf.py +0 -0
  185. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/vortex.py +0 -0
  186. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/trend/zigzag.py +0 -0
  187. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/__init__.py +0 -0
  188. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_candles.py +0 -0
  189. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_core.py +0 -0
  190. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_math.py +0 -0
  191. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_numba.py +0 -0
  192. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_signals.py +0 -0
  193. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_study.py +0 -0
  194. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_time.py +0 -0
  195. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/utils/_validate.py +0 -0
  196. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/__init__.py +0 -0
  197. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/aberration.py +0 -0
  198. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/accbands.py +0 -0
  199. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/atr.py +0 -0
  200. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/atrts.py +0 -0
  201. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/bbands.py +0 -0
  202. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/chandelier_exit.py +0 -0
  203. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/donchian.py +0 -0
  204. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/hwc.py +0 -0
  205. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/kc.py +0 -0
  206. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/massi.py +0 -0
  207. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/natr.py +0 -0
  208. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/pdist.py +0 -0
  209. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/rvi.py +0 -0
  210. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/thermo.py +0 -0
  211. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/true_range.py +0 -0
  212. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volatility/ui.py +0 -0
  213. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/__init__.py +0 -0
  214. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/ad.py +0 -0
  215. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/adosc.py +0 -0
  216. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/aobv.py +0 -0
  217. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/cmf.py +0 -0
  218. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/efi.py +0 -0
  219. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/eom.py +0 -0
  220. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/kvo.py +0 -0
  221. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/mfi.py +0 -0
  222. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/nvi.py +0 -0
  223. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/obv.py +0 -0
  224. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/pvi.py +0 -0
  225. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/pvo.py +0 -0
  226. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/pvol.py +0 -0
  227. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/pvr.py +0 -0
  228. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/pvt.py +0 -0
  229. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/tsv.py +0 -0
  230. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/vhm.py +0 -0
  231. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/vp.py +0 -0
  232. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/vwap.py +0 -0
  233. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr/ta/volume/vwma.py +0 -0
  234. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr.egg-info/SOURCES.txt +0 -0
  235. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr.egg-info/dependency_links.txt +0 -0
  236. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr.egg-info/requires.txt +0 -0
  237. {trigerr-0.7.3 → trigerr-0.7.4}/trigerr.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trigerr
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Python tools for quantitative trading research and analysis.
5
5
  Author: Anurag Singh Kushwah
6
6
  License-Expression: MIT
@@ -41,9 +41,27 @@ def test_bse_options_use_the_bse_rate(exchange):
41
41
  assert charges(buy_price=90, sell_price=100, quantity=1000, exchange=exchange) == (272.99, 9727.01)
42
42
 
43
43
 
44
- def test_a_short_position_has_the_same_charges_and_the_opposite_sign_of_gross_pnl():
45
- # the charges depend on the two prices, not on which came first; gross is (90 - 100) x 1,100 = -11,000
46
- assert charges(buy_price=90, sell_price=100, quantity=1100, position_type="SHORT") == (303.04, -11303.04)
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
47
65
 
48
66
 
49
67
  # ---- futures: one Nifty lot (75) bought at 22,000, sold at 22,100
@@ -1,6 +1,6 @@
1
1
  from .config import config
2
2
 
3
- __version__ = "0.7.3"
3
+ __version__ = "0.7.4"
4
4
 
5
5
 
6
6
  def set_api_key(key):
@@ -1511,6 +1511,9 @@ def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", marke
1511
1511
  clearing_charge = 0
1512
1512
  # Orders carry the segment they went to ("NFO" for NSE options and futures), cash symbols the exchange.
1513
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)
1514
1517
  # Statutory rates in force from 1 April 2026: exchange charges per NSE/FA/73061 (from 1 March 2026), STT on
1515
1518
  # futures and options per Budget 2026. Not modelled: STT on exercised options, physical settlement.
1516
1519
 
@@ -1544,13 +1547,13 @@ def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", marke
1544
1547
  stt_fees = 0.025
1545
1548
 
1546
1549
  # Calculating STT Charge
1547
- stt_charge = round(quantity * sell_price * stt_fees / 100, 2)
1550
+ stt_charge = round(quantity * sold * stt_fees / 100, 2)
1548
1551
 
1549
1552
  # Calculating Transaction Fees
1550
1553
  transaction_charge = round(turnover * transaction_fees / 100, 2)
1551
1554
 
1552
1555
  # Calculating Stamp Fees
1553
- stamp_charge = round(quantity * buy_price * stamp_fees / 100, 2)
1556
+ stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
1554
1557
 
1555
1558
  elif market_type == "futures":
1556
1559
  broker_fees = _in_brokerage(broker, "futures", turnover, no_of_orders)
@@ -1559,13 +1562,13 @@ def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", marke
1559
1562
  stt_fees = 0.05
1560
1563
 
1561
1564
  # Calculating STT Charge
1562
- stt_charge = round(quantity * sell_price * stt_fees / 100)
1565
+ stt_charge = round(quantity * sold * stt_fees / 100)
1563
1566
 
1564
1567
  # Calculating Transaction Fees
1565
1568
  transaction_charge = round(turnover * transaction_fees / 100, 2)
1566
1569
 
1567
1570
  # Calculating Stamp Fees
1568
- stamp_charge = round(quantity * buy_price * stamp_fees / 100, 2)
1571
+ stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
1569
1572
 
1570
1573
  else:
1571
1574
  broker_fees = 20 * no_of_orders
@@ -1575,10 +1578,10 @@ def calculate_brokerage(buy_price, sell_price, quantity, broker="zerodha", marke
1575
1578
  stt_fees = 0.15
1576
1579
 
1577
1580
  # Calculating STT Charge
1578
- stt_charge = round(quantity * sell_price * stt_fees / 100)
1581
+ stt_charge = round(quantity * sold * stt_fees / 100)
1579
1582
 
1580
1583
  # Calculating Stamp Fees
1581
- stamp_charge = round(quantity * buy_price * stamp_fees / 100, 2)
1584
+ stamp_charge = round(quantity * bought * stamp_fees / 100, 2)
1582
1585
 
1583
1586
  # Calculating Transaction Fees
1584
1587
  transaction_charge = round(turnover * transaction_fees / 100, 2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trigerr
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: Python tools for quantitative trading research and analysis.
5
5
  Author: Anurag Singh Kushwah
6
6
  License-Expression: MIT
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