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