openbacktesting 0.2.0__py3-none-any.whl

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 (350) hide show
  1. openbacktesting/__init__.py +85 -0
  2. openbacktesting/aggregation.py +8 -0
  3. openbacktesting/broker/__init__.py +54 -0
  4. openbacktesting/broker/commission.py +57 -0
  5. openbacktesting/broker/core.py +1122 -0
  6. openbacktesting/broker/execution.py +62 -0
  7. openbacktesting/broker/instrument.py +106 -0
  8. openbacktesting/broker/ledger.py +60 -0
  9. openbacktesting/broker/models.py +236 -0
  10. openbacktesting/broker/observations.py +99 -0
  11. openbacktesting/broker/requests.py +192 -0
  12. openbacktesting/broker/sizing.py +76 -0
  13. openbacktesting/colors.py +175 -0
  14. openbacktesting/data/__init__.py +20 -0
  15. openbacktesting/data/aggregation.py +39 -0
  16. openbacktesting/data/context.py +30 -0
  17. openbacktesting/data/core.py +218 -0
  18. openbacktesting/data/generators.py +54 -0
  19. openbacktesting/data/strategy_data.py +103 -0
  20. openbacktesting/data/timeframe.py +69 -0
  21. openbacktesting/engine.py +34 -0
  22. openbacktesting/helpers.py +77 -0
  23. openbacktesting/indicator_api.py +10 -0
  24. openbacktesting/indicator_methods.py +123 -0
  25. openbacktesting/indicator_types.py +19 -0
  26. openbacktesting/indicators/__init__.py +7 -0
  27. openbacktesting/indicators/api.py +97 -0
  28. openbacktesting/indicators/calculus.py +75 -0
  29. openbacktesting/indicators/candles/__init__.py +0 -0
  30. openbacktesting/indicators/candles/cdl_doji.py +17 -0
  31. openbacktesting/indicators/candles/cdl_engulfing.py +14 -0
  32. openbacktesting/indicators/candles/cdl_eveningstar.py +15 -0
  33. openbacktesting/indicators/candles/cdl_hammer.py +14 -0
  34. openbacktesting/indicators/candles/cdl_harami.py +14 -0
  35. openbacktesting/indicators/candles/cdl_inside.py +14 -0
  36. openbacktesting/indicators/candles/cdl_marubozu.py +14 -0
  37. openbacktesting/indicators/candles/cdl_morningstar.py +15 -0
  38. openbacktesting/indicators/candles/cdl_shootingstar.py +14 -0
  39. openbacktesting/indicators/candles/cdl_z.py +28 -0
  40. openbacktesting/indicators/candles/ha.py +19 -0
  41. openbacktesting/indicators/catalog.json +8348 -0
  42. openbacktesting/indicators/common.py +94 -0
  43. openbacktesting/indicators/cycles/__init__.py +0 -0
  44. openbacktesting/indicators/cycles/dsp.py +10 -0
  45. openbacktesting/indicators/cycles/ebsw.py +10 -0
  46. openbacktesting/indicators/cycles/ht_dcperiod.py +10 -0
  47. openbacktesting/indicators/cycles/ht_dcphase.py +10 -0
  48. openbacktesting/indicators/cycles/ht_phasor.py +17 -0
  49. openbacktesting/indicators/cycles/ht_sine.py +17 -0
  50. openbacktesting/indicators/cycles/ht_trendmode.py +10 -0
  51. openbacktesting/indicators/cycles/msw.py +19 -0
  52. openbacktesting/indicators/methods.py +5762 -0
  53. openbacktesting/indicators/momentum/__init__.py +0 -0
  54. openbacktesting/indicators/momentum/ac.py +9 -0
  55. openbacktesting/indicators/momentum/ao.py +10 -0
  56. openbacktesting/indicators/momentum/apo.py +10 -0
  57. openbacktesting/indicators/momentum/bias.py +10 -0
  58. openbacktesting/indicators/momentum/bop.py +10 -0
  59. openbacktesting/indicators/momentum/brar.py +26 -0
  60. openbacktesting/indicators/momentum/cci.py +10 -0
  61. openbacktesting/indicators/momentum/cfo.py +10 -0
  62. openbacktesting/indicators/momentum/cg.py +10 -0
  63. openbacktesting/indicators/momentum/cmo.py +10 -0
  64. openbacktesting/indicators/momentum/coppock.py +10 -0
  65. openbacktesting/indicators/momentum/crsi.py +28 -0
  66. openbacktesting/indicators/momentum/cti.py +10 -0
  67. openbacktesting/indicators/momentum/dm.py +17 -0
  68. openbacktesting/indicators/momentum/er.py +10 -0
  69. openbacktesting/indicators/momentum/eri.py +17 -0
  70. openbacktesting/indicators/momentum/fisher.py +17 -0
  71. openbacktesting/indicators/momentum/fosc.py +10 -0
  72. openbacktesting/indicators/momentum/gator.py +13 -0
  73. openbacktesting/indicators/momentum/ibs.py +7 -0
  74. openbacktesting/indicators/momentum/inertia.py +22 -0
  75. openbacktesting/indicators/momentum/kdj.py +18 -0
  76. openbacktesting/indicators/momentum/kst.py +30 -0
  77. openbacktesting/indicators/momentum/lrsi.py +10 -0
  78. openbacktesting/indicators/momentum/macd.py +27 -0
  79. openbacktesting/indicators/momentum/macdext.py +27 -0
  80. openbacktesting/indicators/momentum/macdfix.py +18 -0
  81. openbacktesting/indicators/momentum/mom.py +10 -0
  82. openbacktesting/indicators/momentum/pgo.py +10 -0
  83. openbacktesting/indicators/momentum/pmo.py +13 -0
  84. openbacktesting/indicators/momentum/po.py +10 -0
  85. openbacktesting/indicators/momentum/ppo.py +20 -0
  86. openbacktesting/indicators/momentum/psl.py +12 -0
  87. openbacktesting/indicators/momentum/pvo.py +20 -0
  88. openbacktesting/indicators/momentum/qqe.py +31 -0
  89. openbacktesting/indicators/momentum/rci.py +20 -0
  90. openbacktesting/indicators/momentum/rmi.py +7 -0
  91. openbacktesting/indicators/momentum/roc.py +10 -0
  92. openbacktesting/indicators/momentum/rocp.py +10 -0
  93. openbacktesting/indicators/momentum/rocr.py +10 -0
  94. openbacktesting/indicators/momentum/rocr100.py +10 -0
  95. openbacktesting/indicators/momentum/rsi.py +10 -0
  96. openbacktesting/indicators/momentum/rsx.py +10 -0
  97. openbacktesting/indicators/momentum/rvgi.py +26 -0
  98. openbacktesting/indicators/momentum/slope.py +17 -0
  99. openbacktesting/indicators/momentum/smc_sweep.py +18 -0
  100. openbacktesting/indicators/momentum/smi.py +21 -0
  101. openbacktesting/indicators/momentum/smi_stochastic.py +15 -0
  102. openbacktesting/indicators/momentum/squeeze.py +47 -0
  103. openbacktesting/indicators/momentum/squeeze_pro.py +53 -0
  104. openbacktesting/indicators/momentum/stc.py +20 -0
  105. openbacktesting/indicators/momentum/stoch.py +19 -0
  106. openbacktesting/indicators/momentum/stochf.py +19 -0
  107. openbacktesting/indicators/momentum/stochrsi.py +19 -0
  108. openbacktesting/indicators/momentum/td_seq.py +17 -0
  109. openbacktesting/indicators/momentum/trix.py +19 -0
  110. openbacktesting/indicators/momentum/trixh.py +20 -0
  111. openbacktesting/indicators/momentum/tsi.py +26 -0
  112. openbacktesting/indicators/momentum/uo.py +22 -0
  113. openbacktesting/indicators/momentum/vwmacd.py +20 -0
  114. openbacktesting/indicators/momentum/wavetrend.py +15 -0
  115. openbacktesting/indicators/momentum/willr.py +10 -0
  116. openbacktesting/indicators/overlap/__init__.py +0 -0
  117. openbacktesting/indicators/overlap/alligator.py +13 -0
  118. openbacktesting/indicators/overlap/alma.py +33 -0
  119. openbacktesting/indicators/overlap/anchored_vwap.py +50 -0
  120. openbacktesting/indicators/overlap/anchored_vwap_bands.py +13 -0
  121. openbacktesting/indicators/overlap/avgprice.py +10 -0
  122. openbacktesting/indicators/overlap/dema.py +10 -0
  123. openbacktesting/indicators/overlap/ema.py +12 -0
  124. openbacktesting/indicators/overlap/frama.py +29 -0
  125. openbacktesting/indicators/overlap/fwma.py +10 -0
  126. openbacktesting/indicators/overlap/hilo.py +26 -0
  127. openbacktesting/indicators/overlap/hl2.py +10 -0
  128. openbacktesting/indicators/overlap/hlc3.py +10 -0
  129. openbacktesting/indicators/overlap/hma.py +10 -0
  130. openbacktesting/indicators/overlap/ht_trendline.py +10 -0
  131. openbacktesting/indicators/overlap/hwma.py +10 -0
  132. openbacktesting/indicators/overlap/ichimoku.py +44 -0
  133. openbacktesting/indicators/overlap/jma.py +10 -0
  134. openbacktesting/indicators/overlap/kama.py +10 -0
  135. openbacktesting/indicators/overlap/linreg.py +15 -0
  136. openbacktesting/indicators/overlap/linregangle.py +10 -0
  137. openbacktesting/indicators/overlap/linregintercept.py +10 -0
  138. openbacktesting/indicators/overlap/linregslope.py +10 -0
  139. openbacktesting/indicators/overlap/ma.py +10 -0
  140. openbacktesting/indicators/overlap/ma_envelopes.py +16 -0
  141. openbacktesting/indicators/overlap/mama.py +17 -0
  142. openbacktesting/indicators/overlap/mavp.py +17 -0
  143. openbacktesting/indicators/overlap/mcgd.py +10 -0
  144. openbacktesting/indicators/overlap/medprice.py +10 -0
  145. openbacktesting/indicators/overlap/midpoint.py +10 -0
  146. openbacktesting/indicators/overlap/midprice.py +10 -0
  147. openbacktesting/indicators/overlap/mmar.py +21 -0
  148. openbacktesting/indicators/overlap/ohlc4.py +10 -0
  149. openbacktesting/indicators/overlap/pwma.py +10 -0
  150. openbacktesting/indicators/overlap/rainbow.py +25 -0
  151. openbacktesting/indicators/overlap/rma.py +10 -0
  152. openbacktesting/indicators/overlap/sinwma.py +10 -0
  153. openbacktesting/indicators/overlap/sma.py +14 -0
  154. openbacktesting/indicators/overlap/ssf.py +10 -0
  155. openbacktesting/indicators/overlap/supertrend.py +21 -0
  156. openbacktesting/indicators/overlap/swma.py +10 -0
  157. openbacktesting/indicators/overlap/t3.py +10 -0
  158. openbacktesting/indicators/overlap/tema.py +10 -0
  159. openbacktesting/indicators/overlap/trima.py +10 -0
  160. openbacktesting/indicators/overlap/tsf.py +10 -0
  161. openbacktesting/indicators/overlap/typprice.py +10 -0
  162. openbacktesting/indicators/overlap/vidya.py +10 -0
  163. openbacktesting/indicators/overlap/vwap.py +10 -0
  164. openbacktesting/indicators/overlap/vwma.py +10 -0
  165. openbacktesting/indicators/overlap/wcp.py +10 -0
  166. openbacktesting/indicators/overlap/wma.py +10 -0
  167. openbacktesting/indicators/overlap/zlma.py +10 -0
  168. openbacktesting/indicators/performance/__init__.py +0 -0
  169. openbacktesting/indicators/performance/drawdown.py +18 -0
  170. openbacktesting/indicators/performance/log_return.py +10 -0
  171. openbacktesting/indicators/performance/percent_return.py +10 -0
  172. openbacktesting/indicators/predicates.py +88 -0
  173. openbacktesting/indicators/registry.py +571 -0
  174. openbacktesting/indicators/runtime.py +290 -0
  175. openbacktesting/indicators/statistics/__init__.py +0 -0
  176. openbacktesting/indicators/statistics/beta.py +10 -0
  177. openbacktesting/indicators/statistics/correl.py +10 -0
  178. openbacktesting/indicators/statistics/entropy.py +10 -0
  179. openbacktesting/indicators/statistics/kurtosis.py +10 -0
  180. openbacktesting/indicators/statistics/mad.py +10 -0
  181. openbacktesting/indicators/statistics/md.py +10 -0
  182. openbacktesting/indicators/statistics/median.py +10 -0
  183. openbacktesting/indicators/statistics/mode.py +48 -0
  184. openbacktesting/indicators/statistics/quantile.py +10 -0
  185. openbacktesting/indicators/statistics/skew.py +10 -0
  186. openbacktesting/indicators/statistics/stderr.py +10 -0
  187. openbacktesting/indicators/statistics/stdev.py +10 -0
  188. openbacktesting/indicators/statistics/variance.py +10 -0
  189. openbacktesting/indicators/statistics/zscore.py +10 -0
  190. openbacktesting/indicators/trend/__init__.py +0 -0
  191. openbacktesting/indicators/trend/adx.py +28 -0
  192. openbacktesting/indicators/trend/adxr.py +28 -0
  193. openbacktesting/indicators/trend/amat.py +19 -0
  194. openbacktesting/indicators/trend/aroon.py +18 -0
  195. openbacktesting/indicators/trend/atr_stop.py +33 -0
  196. openbacktesting/indicators/trend/chop.py +20 -0
  197. openbacktesting/indicators/trend/cksp.py +17 -0
  198. openbacktesting/indicators/trend/cpr.py +57 -0
  199. openbacktesting/indicators/trend/decay.py +10 -0
  200. openbacktesting/indicators/trend/decreasing.py +18 -0
  201. openbacktesting/indicators/trend/dpo.py +12 -0
  202. openbacktesting/indicators/trend/dx.py +19 -0
  203. openbacktesting/indicators/trend/edecay.py +10 -0
  204. openbacktesting/indicators/trend/increasing.py +18 -0
  205. openbacktesting/indicators/trend/long_run.py +10 -0
  206. openbacktesting/indicators/trend/minus_dm.py +10 -0
  207. openbacktesting/indicators/trend/pivot_points.py +89 -0
  208. openbacktesting/indicators/trend/pivothigh.py +23 -0
  209. openbacktesting/indicators/trend/pivotlow.py +23 -0
  210. openbacktesting/indicators/trend/plus_dm.py +10 -0
  211. openbacktesting/indicators/trend/pmax.py +18 -0
  212. openbacktesting/indicators/trend/psar.py +19 -0
  213. openbacktesting/indicators/trend/qstick.py +10 -0
  214. openbacktesting/indicators/trend/sarext.py +35 -0
  215. openbacktesting/indicators/trend/short_run.py +10 -0
  216. openbacktesting/indicators/trend/tsignals.py +26 -0
  217. openbacktesting/indicators/trend/ttm_trend.py +16 -0
  218. openbacktesting/indicators/trend/vhf.py +10 -0
  219. openbacktesting/indicators/trend/volatility_stop.py +33 -0
  220. openbacktesting/indicators/trend/vortex.py +17 -0
  221. openbacktesting/indicators/trend/xsignals.py +29 -0
  222. openbacktesting/indicators/types.py +344 -0
  223. openbacktesting/indicators/utility/__init__.py +0 -0
  224. openbacktesting/indicators/utility/barssince.py +21 -0
  225. openbacktesting/indicators/utility/change.py +7 -0
  226. openbacktesting/indicators/utility/cross.py +12 -0
  227. openbacktesting/indicators/utility/crossover.py +11 -0
  228. openbacktesting/indicators/utility/crossunder.py +11 -0
  229. openbacktesting/indicators/utility/cum.py +7 -0
  230. openbacktesting/indicators/utility/falling.py +10 -0
  231. openbacktesting/indicators/utility/highest.py +7 -0
  232. openbacktesting/indicators/utility/highestbars.py +29 -0
  233. openbacktesting/indicators/utility/lowest.py +7 -0
  234. openbacktesting/indicators/utility/lowestbars.py +29 -0
  235. openbacktesting/indicators/utility/percentile_linear_interpolation.py +12 -0
  236. openbacktesting/indicators/utility/percentile_nearest_rank.py +16 -0
  237. openbacktesting/indicators/utility/percentrank.py +7 -0
  238. openbacktesting/indicators/utility/range.py +8 -0
  239. openbacktesting/indicators/utility/rising.py +10 -0
  240. openbacktesting/indicators/utility/rolling_count.py +12 -0
  241. openbacktesting/indicators/utility/rolling_sum.py +7 -0
  242. openbacktesting/indicators/utility/running_max.py +7 -0
  243. openbacktesting/indicators/utility/running_min.py +7 -0
  244. openbacktesting/indicators/utility/shift.py +7 -0
  245. openbacktesting/indicators/utility/valuewhen.py +25 -0
  246. openbacktesting/indicators/volatility/__init__.py +0 -0
  247. openbacktesting/indicators/volatility/aberration.py +21 -0
  248. openbacktesting/indicators/volatility/accbands.py +20 -0
  249. openbacktesting/indicators/volatility/adr.py +7 -0
  250. openbacktesting/indicators/volatility/atr.py +12 -0
  251. openbacktesting/indicators/volatility/avolume.py +10 -0
  252. openbacktesting/indicators/volatility/bbands.py +20 -0
  253. openbacktesting/indicators/volatility/ce.py +25 -0
  254. openbacktesting/indicators/volatility/cvi.py +10 -0
  255. openbacktesting/indicators/volatility/donchian.py +20 -0
  256. openbacktesting/indicators/volatility/hvol.py +10 -0
  257. openbacktesting/indicators/volatility/hwc.py +27 -0
  258. openbacktesting/indicators/volatility/kc.py +27 -0
  259. openbacktesting/indicators/volatility/massi.py +10 -0
  260. openbacktesting/indicators/volatility/natr.py +19 -0
  261. openbacktesting/indicators/volatility/pdist.py +10 -0
  262. openbacktesting/indicators/volatility/rvi.py +21 -0
  263. openbacktesting/indicators/volatility/starc.py +11 -0
  264. openbacktesting/indicators/volatility/thermo.py +28 -0
  265. openbacktesting/indicators/volatility/true_range.py +31 -0
  266. openbacktesting/indicators/volatility/ui.py +10 -0
  267. openbacktesting/indicators/volume/__init__.py +0 -0
  268. openbacktesting/indicators/volume/ad.py +10 -0
  269. openbacktesting/indicators/volume/adosc.py +19 -0
  270. openbacktesting/indicators/volume/aobv.py +31 -0
  271. openbacktesting/indicators/volume/cmf.py +12 -0
  272. openbacktesting/indicators/volume/efi.py +12 -0
  273. openbacktesting/indicators/volume/emv.py +10 -0
  274. openbacktesting/indicators/volume/eom.py +19 -0
  275. openbacktesting/indicators/volume/iii.py +9 -0
  276. openbacktesting/indicators/volume/kvo.py +28 -0
  277. openbacktesting/indicators/volume/marketfi.py +10 -0
  278. openbacktesting/indicators/volume/mfi.py +12 -0
  279. openbacktesting/indicators/volume/nvi.py +26 -0
  280. openbacktesting/indicators/volume/obv.py +10 -0
  281. openbacktesting/indicators/volume/pvi.py +26 -0
  282. openbacktesting/indicators/volume/pvol.py +10 -0
  283. openbacktesting/indicators/volume/pvr.py +10 -0
  284. openbacktesting/indicators/volume/pvt.py +10 -0
  285. openbacktesting/indicators/volume/rvol.py +8 -0
  286. openbacktesting/indicators/volume/vfi.py +18 -0
  287. openbacktesting/indicators/volume/vosc.py +10 -0
  288. openbacktesting/indicators/volume/wad.py +10 -0
  289. openbacktesting/indicators/volume/wvad.py +9 -0
  290. openbacktesting/inputs.py +51 -0
  291. openbacktesting/lib.py +31 -0
  292. openbacktesting/logs.py +129 -0
  293. openbacktesting/optimization.py +8 -0
  294. openbacktesting/optimizer/__init__.py +25 -0
  295. openbacktesting/optimizer/_semantics.py +155 -0
  296. openbacktesting/optimizer/identity.py +45 -0
  297. openbacktesting/optimizer/models.py +92 -0
  298. openbacktesting/optimizer/plan.py +129 -0
  299. openbacktesting/optimizer/portfolio-result.schema.json +4984 -0
  300. openbacktesting/optimizer/query.py +257 -0
  301. openbacktesting/optimizer/runner.py +98 -0
  302. openbacktesting/optimizer/storage.py +261 -0
  303. openbacktesting/optimizer/validation.py +64 -0
  304. openbacktesting/parallel.py +9 -0
  305. openbacktesting/plotting/__init__.py +23 -0
  306. openbacktesting/plotting/collector.py +509 -0
  307. openbacktesting/plotting/encoding.py +102 -0
  308. openbacktesting/plotting/types.py +92 -0
  309. openbacktesting/portfolio/__init__.py +15 -0
  310. openbacktesting/portfolio/analysis.py +245 -0
  311. openbacktesting/portfolio/builder.py +381 -0
  312. openbacktesting/portfolio/catalog.json +1404 -0
  313. openbacktesting/portfolio/helpers.py +92 -0
  314. openbacktesting/portfolio/metrics.py +186 -0
  315. openbacktesting/portfolio/models.py +63 -0
  316. openbacktesting/portfolio/periods.py +164 -0
  317. openbacktesting/portfolio/rates.py +14 -0
  318. openbacktesting/portfolio/snapshot.py +111 -0
  319. openbacktesting/portfolio/stats.py +272 -0
  320. openbacktesting/portfolio/trades.py +136 -0
  321. openbacktesting/portfolio/trading.py +215 -0
  322. openbacktesting/py.typed +0 -0
  323. openbacktesting/runtime.py +330 -0
  324. openbacktesting/simulation/__init__.py +17 -0
  325. openbacktesting/simulation/collection.py +13 -0
  326. openbacktesting/simulation/config.py +241 -0
  327. openbacktesting/simulation/core.py +528 -0
  328. openbacktesting/simulation/optimization.py +326 -0
  329. openbacktesting/simulation/parallel.py +145 -0
  330. openbacktesting/simulation/variants.py +107 -0
  331. openbacktesting/strategy/__init__.py +19 -0
  332. openbacktesting/strategy/bar_state.py +14 -0
  333. openbacktesting/strategy/base.py +810 -0
  334. openbacktesting/strategy/declaration.py +90 -0
  335. openbacktesting/strategy/helpers.py +198 -0
  336. openbacktesting/strategy/inputs.py +460 -0
  337. openbacktesting/strategy/sizing.py +80 -0
  338. openbacktesting/strategy/templates.py +160 -0
  339. openbacktesting/strategy_data.py +10 -0
  340. openbacktesting/test/BTCUSD.csv +157 -0
  341. openbacktesting/test/EURUSD.csv +5001 -0
  342. openbacktesting/test/GOOG.csv +2149 -0
  343. openbacktesting/test/__init__.py +29 -0
  344. openbacktesting/test/__main__.py +11 -0
  345. openbacktesting/test/_test.py +1312 -0
  346. openbacktesting/util.py +31 -0
  347. openbacktesting-0.2.0.dist-info/METADATA +151 -0
  348. openbacktesting-0.2.0.dist-info/RECORD +350 -0
  349. openbacktesting-0.2.0.dist-info/WHEEL +4 -0
  350. openbacktesting-0.2.0.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,31 @@
1
+ from __future__ import annotations
2
+
3
+ from multiprocessing import parent_process
4
+
5
+ from openbacktesting.data.core import ( # noqa: F401
6
+ _Array,
7
+ _Data,
8
+ _data_period,
9
+ _Indicator,
10
+ _indicator_warmup_nbars,
11
+ _strategy_indicators,
12
+ )
13
+ from openbacktesting.helpers import _as_list, _as_str, patch, try_ # noqa: F401
14
+ from openbacktesting.simulation.parallel import ( # noqa: F401
15
+ SharedMemory,
16
+ SharedMemoryManager,
17
+ _batch,
18
+ )
19
+
20
+ try:
21
+ from tqdm.auto import tqdm as _progress
22
+ except ImportError:
23
+ _progress = None
24
+
25
+
26
+ def _tqdm(seq, **kwargs):
27
+ # fork may inherit a tqdm lock whose owner is gone; disable=True still acquires the lock during construction.
28
+ # Child processes do not construct progress bars; the main process reports progress for outer tasks.
29
+ if _progress is None or parent_process() is not None:
30
+ return seq
31
+ return _progress(seq, **{"leave": False, **kwargs})
@@ -0,0 +1,151 @@
1
+ Metadata-Version: 2.5
2
+ Name: openbacktesting
3
+ Version: 0.2.0
4
+ Summary: OpenBacktesting native historical backtesting engine
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
7
+ Requires-Python: <3.15,>=3.12
8
+ Requires-Dist: numpy<3,>=2
9
+ Requires-Dist: pandas-ta-classic==0.8.32
10
+ Requires-Dist: pandas<4,>=2.2
11
+ Provides-Extra: optimize
12
+ Requires-Dist: sambo<2,>=1.25; extra == 'optimize'
13
+ Requires-Dist: scikit-learn<2,>=1.5; extra == 'optimize'
14
+ Provides-Extra: test
15
+ Requires-Dist: ipywidgets<9,>=8; extra == 'test'
16
+ Requires-Dist: pytest<10,>=8.4; extra == 'test'
17
+ Requires-Dist: sambo<2,>=1.25; extra == 'test'
18
+ Requires-Dist: scikit-learn<2,>=1.5; extra == 'test'
19
+ Requires-Dist: tqdm<5,>=4.66; extra == 'test'
20
+ Description-Content-Type: text/markdown
21
+
22
+ # OpenBacktesting
23
+
24
+ **Historical backtesting in Python, from strategy rules to inspectable results.**
25
+
26
+ **English** · [简体中文](docs/readme/README.zh-CN.md) · [Español](docs/readme/README.es.md) · [Português (Brasil)](docs/readme/README.pt-BR.md) · [Français](docs/readme/README.fr.md) · [Deutsch](docs/readme/README.de.md) · [Italiano](docs/readme/README.it.md) · [हिन्दी](docs/readme/README.hi.md)
27
+
28
+ Write bar-by-bar strategies, evaluate them on historical market data, and inspect orders, trades, equity, and risk statistics. OpenBacktesting is a standalone Python package with indicators, parameter optimization, Portfolio reports, and plotting-data export.
29
+
30
+ **Python 3.12–3.14** · **Version 0.2.0** · Distribution and import: `openbacktesting`
31
+
32
+ [Quick start](#quick-start) · [Manual](https://docs.openbacktesting.com/) · [Examples](https://docs.openbacktesting.com/examples/) · [Report an issue](https://github.com/lucidcog/openbacktesting/issues)
33
+
34
+ ## Top sponsor — Pineify
35
+
36
+ <a href="https://pineify.app">
37
+ <img src="docs/assets/pineify-logo.svg" alt="Pineify" width="96">
38
+ </a>
39
+
40
+ **[Pineify](https://pineify.app) is OpenBacktesting's top paid sponsor.** Its financial support helps fund this project.
41
+
42
+ Pineify is an AI trading toolkit for building indicators and strategies across multiple platforms. It brings together Pine Script AI, a Finance Agent, AI stock picking, market screening, chart analysis, and MCP tools. [Explore Pineify →](https://pineify.app)
43
+
44
+ ## What you can do
45
+
46
+ - **Build strategies:** use a bar-by-bar lifecycle, typed inputs, built-in indicators, and composable helpers.
47
+ - **Inspect execution:** examine orders, fills, position sizing, fees, closed trades, and open lots.
48
+ - **Analyze results:** read pandas statistics, equity curves, and immutable Portfolio reports for each run.
49
+ - **Compare parameters:** run grid searches or optional SAMBO optimization, save experiment results, and export plotting data for your own renderer.
50
+
51
+ ## Quick start
52
+
53
+ Install [uv](https://docs.astral.sh/uv/getting-started/installation/) and use Python `>=3.12,<3.15`. From a terminal:
54
+
55
+ ```sh
56
+ git clone https://github.com/lucidcog/openbacktesting.git
57
+ cd openbacktesting
58
+ uv sync --locked
59
+ uv run --locked python examples/advanced/native_run.py
60
+ ```
61
+
62
+ The example uses bundled GOOG historical data; no market-data download is required. It prints return, trade count, maximum drawdown, and result tables. See [your first backtest](https://docs.openbacktesting.com/quickstart/) for a walkthrough.
63
+
64
+ To install the checked-out source into an existing Python environment instead:
65
+
66
+ ```sh
67
+ python -m pip install .
68
+ ```
69
+
70
+ The base dependencies are NumPy, pandas, and `pandas-ta-classic==0.8.32`. For SAMBO optimization, use `python -m pip install '.[optimize]'` or `uv sync --locked --extra optimize`. These are source-installation instructions; they do not assume a PyPI release. [Build and distribution details](https://docs.openbacktesting.com/development/).
71
+
72
+ ## Minimal backtest
73
+
74
+ Save this as `quickstart.py` in the repository root and run `uv run --locked python quickstart.py`:
75
+
76
+ ```python
77
+ from openbacktesting import Backtest, Strategy
78
+ from openbacktesting.test import GOOG
79
+
80
+
81
+ class BuyAndHold(Strategy):
82
+ def init(self):
83
+ pass
84
+
85
+ def next(self):
86
+ if self.bar_index == 0:
87
+ self.buy(qty=1)
88
+
89
+
90
+ result = Backtest(GOOG, BuyAndHold, end_policy="close_at_last_close").run()
91
+ print(result[["Return [%]", "# Trades", "Max. Drawdown [%]"]])
92
+ ```
93
+
94
+ This strategy requests one unit on the first bar. Default execution occurs at the next bar's open; `close_at_last_close` closes the remaining position at the final close.
95
+
96
+ `run()` returns a pandas Series. Use `result["_trades"]` for trades and `result["_equity_curve"]` for equity history. See the [results guide](https://docs.openbacktesting.com/guides/results/) for the full field list and Portfolio export; underscore-prefixed fields are native diagnostics, not a stable cross-language contract.
97
+
98
+ ## Documentation
99
+
100
+ [Manual](https://docs.openbacktesting.com/)
101
+
102
+ The detailed manual and examples are currently in English.
103
+
104
+ The online manual includes sidebar navigation, page outlines, and full-text search. To preview documentation changes locally:
105
+
106
+ ```sh
107
+ uv run --locked --group docs mkdocs serve
108
+ ```
109
+
110
+ Open `http://127.0.0.1:8000`. The server reloads when documentation changes. Build a static site with `bash scripts/build_docs.sh`; the output is in `build/docs/`. See [Cloudflare Pages deployment](https://docs.openbacktesting.com/deployment/) for the build settings.
111
+
112
+ | Topic | Reference |
113
+ | --- | --- |
114
+ | Getting started | [First backtest](https://docs.openbacktesting.com/quickstart/) · [Example index](https://docs.openbacktesting.com/examples/) |
115
+ | Strategies and data | [Strategy lifecycle](https://docs.openbacktesting.com/guides/author/) · [Market data](https://docs.openbacktesting.com/guides/data/) · [Strategy API](https://docs.openbacktesting.com/reference/strategy/) · [Backtest API](https://docs.openbacktesting.com/reference/core/) |
116
+ | Orders and positions | [Order, Position, and Trade](https://docs.openbacktesting.com/reference/trading/) |
117
+ | Indicators | [Indicator catalog](https://docs.openbacktesting.com/reference/indicators/) |
118
+ | Execution and optimization | [Running strategies](https://docs.openbacktesting.com/guides/runtime/) · [Parameter experiments](https://docs.openbacktesting.com/guides/optimizer/) |
119
+ | Results and plotting | [Results and Portfolio](https://docs.openbacktesting.com/guides/results/) · [Plotting-data export](https://docs.openbacktesting.com/guides/plotting/) |
120
+ | Development | [Verification and builds](https://docs.openbacktesting.com/development/) · [Current limitations](https://docs.openbacktesting.com/limitations/) |
121
+
122
+ ## Scope and compatibility
123
+
124
+ - The trading model is **single asset, single settlement currency**. Portfolio reports describe one run; they are not multi-asset portfolio accounts.
125
+ - The package provides computation and plotting data. It includes **no chart renderer, live-trading engine, code sandbox, or Pine Script converter**, and does not promise Pine-equivalent semantics. Run only trusted strategy code.
126
+ - Windows support and full Pine comparisons have not been validated. See [current limitations](https://docs.openbacktesting.com/limitations/) for execution and market-model boundaries.
127
+
128
+ The distribution and import name are both `openbacktesting`; there are no legacy-name entry points. Old module-path pickles are not migrated automatically, earlier branded archives are not guaranteed to load, and experiments created under an old execution identity must be rerun. [Migration and provenance details](https://docs.openbacktesting.com/development/#provenance-and-behavioral-boundaries).
129
+
130
+ ## Support and contributing
131
+
132
+ Use [GitHub Issues](https://github.com/lucidcog/openbacktesting/issues) for bugs, questions, and feature requests. Include your Python/package versions, a minimal reproducer, and expected versus actual behavior. Contributions are welcome through [pull requests](https://github.com/lucidcog/openbacktesting/pulls).
133
+
134
+ Before submitting a code change, run:
135
+
136
+ ```sh
137
+ uv sync --locked --extra test
138
+ uv run --locked python -m pytest
139
+ uv run --locked python -m openbacktesting.test
140
+ uv run --locked python scripts/check_package.py
141
+ ```
142
+
143
+ Follow the [development guide](https://docs.openbacktesting.com/development/) for the complete checks. Public behavior changes need corresponding documentation, runnable examples, and execution validation. Code, comments, and technical documentation default to English; localized README content is intentional.
144
+
145
+ ## Translations
146
+
147
+ This English README is the source of truth. Translations cover Simplified Chinese, Spanish, Brazilian Portuguese, French, German, Italian, and Hindi. Use the language links above, and follow the [translation guide](docs/readme/TRANSLATING.md) when updating them. Keep commands, API identifiers, capability boundaries, and sponsor attribution consistent across languages.
148
+
149
+ ## License and provenance
150
+
151
+ The project license declaration is [Apache-2.0](LICENSE). Third-party materials retain their original licensing terms, including the [indicator reference data](tests/fixtures/indicator_expansion/README.md).
@@ -0,0 +1,350 @@
1
+ openbacktesting/__init__.py,sha256=OTWJEq4mjyhSGCVX58W9cCEbZdTfUw_NqyAGLgbv-o4,3089
2
+ openbacktesting/aggregation.py,sha256=-UcqxpSx-d7Nm505wlFo-sVZrQpAFxWFyiS8FWPIl0E,211
3
+ openbacktesting/colors.py,sha256=KNM7yS-S5C-W5jPZPQER5y4bsFRhhZnMq3FgF6-vvUk,6938
4
+ openbacktesting/engine.py,sha256=wKIJ5CMIxNGeYxvzRHtPDAIIxmQDxKSmPHr1bVbqZVo,1947
5
+ openbacktesting/helpers.py,sha256=CYSPSV70eVio081BKOs-b233GpxHEg6vs5GxnJoE8lg,2430
6
+ openbacktesting/indicator_api.py,sha256=z5KIkjRMUXHg-SlsQ6iS2iCZWNGEV4_cZQcQuH_l65E,265
7
+ openbacktesting/indicator_methods.py,sha256=Q-nt5Wrh4i3OPfy8RjVjfUNaIl8WHaiWlvU2ZPq7L5U,2244
8
+ openbacktesting/indicator_types.py,sha256=M4YBBjg0OtXppLtvw8WuWkCC56OnF2ByNRF1_ZHT0S8,374
9
+ openbacktesting/inputs.py,sha256=qGoqBgSic6MHix6TXl7bILcaingl-fqDs21KTTd-Ccw,1308
10
+ openbacktesting/lib.py,sha256=k2OSHH6XPGYOyUWSbrraFSvPH_0MovT8Th_TTIZtrm8,1163
11
+ openbacktesting/logs.py,sha256=knfqsk1Ck5ZJMWs0uQqFUZPv6wqq4SMeVKbTm_NDe_Y,4601
12
+ openbacktesting/optimization.py,sha256=TzaPvUzvttAkZTHLYBcwpN8vWRzrPynTSrPXlbBp7LA,303
13
+ openbacktesting/parallel.py,sha256=xdsWiNoFZD_JYqkLzoKoIA48oF6P9hoa3fFz-MJIh7U,299
14
+ openbacktesting/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ openbacktesting/runtime.py,sha256=RuWaz9z1q4donmK2hUvn0gGi8m6SAO-0aBPrNNlYdJk,11694
16
+ openbacktesting/strategy_data.py,sha256=XyCV781ICswKrSx99AH72S5YlK3HsGwjcTpmvPItGwU,283
17
+ openbacktesting/util.py,sha256=yz-xvQ3RG8NxAU4dSTbqmkmFV_ucuOzfaqD8S30cmAA,921
18
+ openbacktesting/broker/__init__.py,sha256=sdSujH4kAy642qp-JdeST1WyJUMMCBcTI-OEqjUkZkQ,1338
19
+ openbacktesting/broker/commission.py,sha256=PXXyCBw96r5ZO3glDPy9g7BtIQeSjTLXZ6jPeMF0K5Q,2503
20
+ openbacktesting/broker/core.py,sha256=IfF9mHgN1Q7iTie-7iVnBcKr6nMX3ZfvcIEKzVdGKx0,41633
21
+ openbacktesting/broker/execution.py,sha256=bCXmb9qpffde_Jkre5Lu-n-0Y8kgGHGWxzwJwaql24Y,2526
22
+ openbacktesting/broker/instrument.py,sha256=vCWbVKJNHnZolotRbeDJ68Bgic-s1N_kCC6FwAlS-uQ,5020
23
+ openbacktesting/broker/ledger.py,sha256=NQLe9_zrKZvkSjT-GLt3AmQSKd7usjxJSP2pDcCm7Qo,2311
24
+ openbacktesting/broker/models.py,sha256=rpLYWczjAOy0kQRvcIcJA8znK3mFZXoT4-TIx--p6Os,6623
25
+ openbacktesting/broker/observations.py,sha256=NMq2XoglFep0_xK-H9aXytBsmPU7JHaZcIVx4b8oJwA,3550
26
+ openbacktesting/broker/requests.py,sha256=uhd-TwiLhWAD8gz_JvWLPPNEUidsBe3Am9X152ASGQA,7020
27
+ openbacktesting/broker/sizing.py,sha256=BColfAp6ZjXpVNV9rcK0t87NW1bOLP9SvdJU0nca858,3001
28
+ openbacktesting/data/__init__.py,sha256=42b_B6WAd-YXTKhQV8p_5tPSiOFAjc-1V-McXcw-LxM,542
29
+ openbacktesting/data/aggregation.py,sha256=rESj0q-WXh-W6ww_RXiY9CJlQRWYRFtIkcgSxBob2ns,923
30
+ openbacktesting/data/context.py,sha256=Tnx6Ma8RCVb3nuTfoG1NegfnisQQYKrjnZVbpBbOPa0,1285
31
+ openbacktesting/data/core.py,sha256=xivfcMEmGBpgFpVSdlL0bX-3W49OCTBzU7vkpv3eJEA,6523
32
+ openbacktesting/data/generators.py,sha256=8_1-Kgp2BjAzWVH8ZQ9Nl_cihid1VHg-ay4zI3cowis,1915
33
+ openbacktesting/data/strategy_data.py,sha256=qmbqKecOjnQz67RweEA7XXBdneOrB2Bloa4XV7ondNU,4265
34
+ openbacktesting/data/timeframe.py,sha256=p7GYIuX3jB1bl_4uXtD4w0c3MoELn9ekqCCFAmLAaOE,2218
35
+ openbacktesting/indicators/__init__.py,sha256=m2Hwq5YQ3MkBX806vFw0aafl5PHSPoS7jGm0JjdLNkE,348
36
+ openbacktesting/indicators/api.py,sha256=vPhENeSacVjc7jIobm5xwDlLQCC1ghhLe8LU6TN0ZUQ,3366
37
+ openbacktesting/indicators/calculus.py,sha256=g1vFqbUDnTK2cYYjyRBL_yyIfX8DfBEhBy-l0qJGIVU,2896
38
+ openbacktesting/indicators/catalog.json,sha256=PvyO1YJZLpVolT8TjL8SbbMt0ZRlMhRZsYqxYEbOT1w,199165
39
+ openbacktesting/indicators/common.py,sha256=A3dQYwFhCLCXz3sNQon1AjW1K89HJq2OB1-WDLEvIWw,4083
40
+ openbacktesting/indicators/methods.py,sha256=PdV8zsET2rstBIp3PH1YSZox4PVw3I0nuKfx9BIpUyw,174257
41
+ openbacktesting/indicators/predicates.py,sha256=wFmKQwTz7I5l2EJcp_3UCR3U_9wsyU1RmyMOkYJ4eqA,4226
42
+ openbacktesting/indicators/registry.py,sha256=Jo6Ltx5t4c2Mc_40SuNMw5-JYGPIgju0q1BOFwfX3Lk,24293
43
+ openbacktesting/indicators/runtime.py,sha256=XkDBk_0wZE82sckBXO3g2z8bADSnCKMdLcRNOo6oP-k,11321
44
+ openbacktesting/indicators/types.py,sha256=HSXKOsAr3DVov3AooiSNSkG9oIJ0aKF14Nh2ONm_F5A,13784
45
+ openbacktesting/indicators/candles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ openbacktesting/indicators/candles/cdl_doji.py,sha256=26c5eUTk5taGd7O0C2NjJg_BZSUIRiddkx6AV7zLItw,754
47
+ openbacktesting/indicators/candles/cdl_engulfing.py,sha256=dUQxphwhlIUWhiqxFchdhd0wTAZVzrolQdFFs5-lt-c,400
48
+ openbacktesting/indicators/candles/cdl_eveningstar.py,sha256=ETsC7Y8ndI1d3hcfdSDxVYTEqD8UMqwp8ab6hKH3400,455
49
+ openbacktesting/indicators/candles/cdl_hammer.py,sha256=oP8yXJ-5FcCp4l7_iTeyDIoPyNsNfAVvdIkmzSKrZ7M,389
50
+ openbacktesting/indicators/candles/cdl_harami.py,sha256=95tYi2jhk3_CL__w7Z6bANLTyYArVzjcnuoYQMLSwpA,389
51
+ openbacktesting/indicators/candles/cdl_inside.py,sha256=kP6ilywzXvFXkxe_zKp2h3erm2w0SGx8-abXz1LQgXQ,388
52
+ openbacktesting/indicators/candles/cdl_marubozu.py,sha256=JKMrBVoOhz3kqAjdx4mvCdshfIOepFp7iZG9lehYGVc,397
53
+ openbacktesting/indicators/candles/cdl_morningstar.py,sha256=0Ez4v6TMt1h8MdgRmLUqdzd5D_3vr3l36RmIPWqAQAM,455
54
+ openbacktesting/indicators/candles/cdl_shootingstar.py,sha256=zSA8gPZECxlOcYCT_SH66ZvWD-WBX0wH3_d_01o_Cxk,413
55
+ openbacktesting/indicators/candles/cdl_z.py,sha256=NHVYpLeWGUmbtL5ADliY0nv0rLElFgcAsgL2v4uP9oo,741
56
+ openbacktesting/indicators/candles/ha.py,sha256=TXpZhhDUZUUo_klzJ0iczuAD_TE2rXaxLtwwYyPlQ0M,517
57
+ openbacktesting/indicators/cycles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ openbacktesting/indicators/cycles/dsp.py,sha256=lMvL2zXJjv5kGFPFg2Qs3eQdRNjdqVo8k_EZrLS8NIw,333
59
+ openbacktesting/indicators/cycles/ebsw.py,sha256=bUSD0FpZzRkYY8xJAuga_eWqnHD0ubcap0BrtUCFrJs,355
60
+ openbacktesting/indicators/cycles/ht_dcperiod.py,sha256=AmiyXLoxRdmvTJRy_lbLqCUcKpnmzbW5d8fK4SJYp_w,350
61
+ openbacktesting/indicators/cycles/ht_dcphase.py,sha256=ylPRj7CSCLtS2fgJ_qgXwDGsfuz0Mhb3tsun_QasxFI,345
62
+ openbacktesting/indicators/cycles/ht_phasor.py,sha256=VqSD12N1UGYdGlEVXZ6kcMfqbmfdsDxF_LNxWo2MZ88,457
63
+ openbacktesting/indicators/cycles/ht_sine.py,sha256=qTxJuKAHsm2mdk9QYWyu5dMESEwhh_VNFb7fpdbQ0_M,432
64
+ openbacktesting/indicators/cycles/ht_trendmode.py,sha256=19ou5WP9TcnxlAYqt-9i_DxX_-A15Q1kaAE7JDhX7HA,355
65
+ openbacktesting/indicators/cycles/msw.py,sha256=H-PvLGwzReaTEj--uxyvQgFXWsmRVqOUhYqIiDGaz0E,592
66
+ openbacktesting/indicators/momentum/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ openbacktesting/indicators/momentum/ac.py,sha256=z6zrd6_M9jP8EWK8zsTd2CZU9Tl3AXXMJ3rK6fWfGlQ,318
68
+ openbacktesting/indicators/momentum/ao.py,sha256=yPy902o0aa7ENwaZYiBTZOSbcvtoiTcvq1DtUzTgKDg,352
69
+ openbacktesting/indicators/momentum/apo.py,sha256=JAEsjYdFLpb2zrj13LDA5d-YRLBuWzVCVAmFBUDrUHc,369
70
+ openbacktesting/indicators/momentum/bias.py,sha256=FYoVEUYSOHCR7yZ3UxEB9SNmHo_BQaxCrSAMwEcW-xI,363
71
+ openbacktesting/indicators/momentum/bop.py,sha256=wPc7apHOYuCy6vxvIjjexzIE6c5fgcsVFfu8H82wr6g,386
72
+ openbacktesting/indicators/momentum/brar.py,sha256=mcKqxSoRbUZoo8My9LnEJnpox58umcTATV0ABfr24fc,607
73
+ openbacktesting/indicators/momentum/cci.py,sha256=v_3fCL84N2uW1lov-Pygy2aPKv8UHBOPOeUm-aYqjho,374
74
+ openbacktesting/indicators/momentum/cfo.py,sha256=nvEVSb5d3WSoxCEaAJ8HlpOVYIzFp-l2Dnr15WNHgFU,378
75
+ openbacktesting/indicators/momentum/cg.py,sha256=iodhLqkWzeBe2wdX_KLr8oFYO6M1L791Jue88pZbcQo,330
76
+ openbacktesting/indicators/momentum/cmo.py,sha256=usSOXgCTBZpELGvJjf7gwH9dMGjEabHqkXXet3qFVI0,378
77
+ openbacktesting/indicators/momentum/coppock.py,sha256=hShntq1VCUSnT0wLObC4o2FCWLW-dKVpb4EycjeoQTc,389
78
+ openbacktesting/indicators/momentum/crsi.py,sha256=X7cek2XMRIaw0Q9Ggx_w0BvdcsVxFkm4lYuHhCBhdUo,981
79
+ openbacktesting/indicators/momentum/cti.py,sha256=20ZmNqRsK0Kp4KDQVwZAD-EyQ1eiLYCWhU9Kq5cwE6k,335
80
+ openbacktesting/indicators/momentum/dm.py,sha256=JW_OA2AQm2reDKrEr0via_CsLw627CPYlr7_ZJOiXaI,502
81
+ openbacktesting/indicators/momentum/er.py,sha256=KjwoVLRx5bdYTMnmUaydN3cj__IJJ1EmTwrlUar6W1U,350
82
+ openbacktesting/indicators/momentum/eri.py,sha256=CIU5FRHqwRXjHrauzAeii25-dDUE-tPBqs1ergh9eNA,491
83
+ openbacktesting/indicators/momentum/fisher.py,sha256=LTbCdRzyFb9EDUPOo98W2bJvlHw86Wi6YpC3cLCX02A,521
84
+ openbacktesting/indicators/momentum/fosc.py,sha256=wO8S9XinfN3nYffKcN0-Nw0eOa_blwiczT7d74Csl0k,340
85
+ openbacktesting/indicators/momentum/gator.py,sha256=A8qhBxRfEjZBVLydFvKoLLqNCWHxx4Eb8qWnNaOAD8o,438
86
+ openbacktesting/indicators/momentum/ibs.py,sha256=RIQnugBLO138Y0KZDnwuo9JSlQhAOD1rE1qEuJmDQN0,229
87
+ openbacktesting/indicators/momentum/inertia.py,sha256=c1sobgY-wc5q1ejMEQmw0h3NVnIfRijL0xr6MnGBkEA,631
88
+ openbacktesting/indicators/momentum/kdj.py,sha256=BAHADFjhfpehV0ouD_k-e-eLNc-aIGj3OqU5yh64YF4,547
89
+ openbacktesting/indicators/momentum/kst.py,sha256=V0FtDq2FVlJmkGIRsZeDpo48ATf4n0cNLB1mg8Xpm74,752
90
+ openbacktesting/indicators/momentum/lrsi.py,sha256=wTuST1K24UWg2MufyaCJA-4zvKOFtVPPKJwyLTOLLq0,360
91
+ openbacktesting/indicators/momentum/macd.py,sha256=1vPM2tmIdV-WLZ6d4Izq5vCdoivP0nbF2j2N86akENc,746
92
+ openbacktesting/indicators/momentum/macdext.py,sha256=UhtObRI6yc9OksdhY1-rYNiqzj7QQ7OMsMAcWGswF9A,776
93
+ openbacktesting/indicators/momentum/macdfix.py,sha256=Ku_mcPRI7Ft8Z6b70aBcqtXEibctYQ0-KK-btyOsVgs,545
94
+ openbacktesting/indicators/momentum/mom.py,sha256=-MJyOvr0gN36xDDkl8pMFgATXNtQe4reUQiXB3wxMpI,335
95
+ openbacktesting/indicators/momentum/pgo.py,sha256=J95NpmoxQK2NL7neOA39qtsBS7z5u6qkjcz9eGYijRA,366
96
+ openbacktesting/indicators/momentum/pmo.py,sha256=ppFCp2HzD_Kc4nPR0pMdnptDCDxRJc1HqDrln4hQxmM,441
97
+ openbacktesting/indicators/momentum/po.py,sha256=YrLbqd4ibfMXV6Wu8XtsD_iFRfp0OgkG3pIfAXRrMvY,330
98
+ openbacktesting/indicators/momentum/ppo.py,sha256=huwDWIjUzrye2jysg8GWQRU1ODoppo-Y_7LAg8G01Gc,625
99
+ openbacktesting/indicators/momentum/psl.py,sha256=fYIrOYjQWgMHDtTPXlW7jt_rjbfVWOhy7LTGV1ZRM5E,412
100
+ openbacktesting/indicators/momentum/pvo.py,sha256=2QuQoSPJ1YZrnP2mkEYS7caEfkzus_vyjs0YixiGRsM,605
101
+ openbacktesting/indicators/momentum/qqe.py,sha256=ilI1d1TlU0YVlK2NycDPnmXrONdwPUIEKD0LAbjxgkA,1052
102
+ openbacktesting/indicators/momentum/rci.py,sha256=ox8ZdGMk6F3ibbd7-nSl6XxgwtB6ApYn7BV6HJDOGlE,677
103
+ openbacktesting/indicators/momentum/rmi.py,sha256=I7PWs6gL8-VZoI8juj2mzGYzs828_4zeKMmiu0iLTBY,226
104
+ openbacktesting/indicators/momentum/roc.py,sha256=OXVpY_0fNRk-cBEBRXDe2mIgbQVzlUcaY02qpEpmErI,358
105
+ openbacktesting/indicators/momentum/rocp.py,sha256=NDXAW3v8xCLEvv33migxdpWO9Pi4dMAOSmhWNQVuGh0,340
106
+ openbacktesting/indicators/momentum/rocr.py,sha256=qwo7OBzRwhKzGWIVlArn362KkaBQFULITtknRapaVBQ,340
107
+ openbacktesting/indicators/momentum/rocr100.py,sha256=BK8IBCMPb8oAZVz4_0k-LqRsX0TK2Rsd7q6GCtG2Faw,355
108
+ openbacktesting/indicators/momentum/rsi.py,sha256=NvCOfseBskIykjAj2K7RWg_9n9T59yn6kcDHqLSzkw0,378
109
+ openbacktesting/indicators/momentum/rsx.py,sha256=Aq8eKpwXqP21SQeHTt1CoYvmh8wd76VzRtu1_4jMt9k,355
110
+ openbacktesting/indicators/momentum/rvgi.py,sha256=AvyDPXF89iwzUbc05KNOi0JQhe2HxrrSbZzeqmKb0uE,691
111
+ openbacktesting/indicators/momentum/slope.py,sha256=xxW6BRMkDlLz6s58dELizKUaVkvQItwpJ-D-gGwIRQI,493
112
+ openbacktesting/indicators/momentum/smc_sweep.py,sha256=YM2mFDiJnKarwas1RTmpQ4okeQLLN48XJ5qeecZZs0Y,511
113
+ openbacktesting/indicators/momentum/smi.py,sha256=H4NE-UYTbczXe-8MTgcyCttPTytSIUsj8zAq_eddrf8,676
114
+ openbacktesting/indicators/momentum/smi_stochastic.py,sha256=H6Y7k-Nd-TYZgkD9HZFi1LHutgnx397brNzCR7ONWEM,668
115
+ openbacktesting/indicators/momentum/squeeze.py,sha256=AG1lR6YG6var-xK7we0fX58oLwA3Zsbb2vixa0WmPOM,988
116
+ openbacktesting/indicators/momentum/squeeze_pro.py,sha256=L1mr5UgMfffxNpWN3qcYb_jhRB3QXkRzKXV0XFFXC68,1325
117
+ openbacktesting/indicators/momentum/stc.py,sha256=vrUTZTIIxiOzE6PgRG23qKJfDm5_Frlw_7QSOrhMEwg,647
118
+ openbacktesting/indicators/momentum/stoch.py,sha256=C6k6VjeHG01LbkyHSy3L12AryQ6DXjOukWq7HS7TT8Q,562
119
+ openbacktesting/indicators/momentum/stochf.py,sha256=-_d_RkM0GTP1loPnPmn3AlF4qHAbwOtHGGbH5Kf4nh4,557
120
+ openbacktesting/indicators/momentum/stochrsi.py,sha256=erJk7RfHk2LuUMPxBeD2R7OQIuOpl9FuNPbZGdLVTqE,600
121
+ openbacktesting/indicators/momentum/td_seq.py,sha256=w5gDMwwxcK3BA8VHyqPtBfo0Qn82PV_37vSMfmAhJrQ,474
122
+ openbacktesting/indicators/momentum/trix.py,sha256=URqECRC84TwnnKU7fIjpTbdLwjIZCewdwFDsro7hEH0,551
123
+ openbacktesting/indicators/momentum/trixh.py,sha256=yTV5ajSdKWeN1iDiD1EFeRC6X_cL2XregaM71mApBHQ,608
124
+ openbacktesting/indicators/momentum/tsi.py,sha256=sbSAtxYlKtfOwPfUXv7muFNhYYSoHTLjH7GTdTpufAU,645
125
+ openbacktesting/indicators/momentum/uo.py,sha256=9DvqrTiJP-mZo5kX52sH7GfIdFwzSjoMI4Pn0yxATxA,585
126
+ openbacktesting/indicators/momentum/vwmacd.py,sha256=hTR-XulbJRKfowpKXNgDvV3CfY5CgvQ-FUYStSTP00E,624
127
+ openbacktesting/indicators/momentum/wavetrend.py,sha256=L2ksTZigglkcRDADVok8kkrdjzdYHUPAucmcm8U1bqg,589
128
+ openbacktesting/indicators/momentum/willr.py,sha256=vSeyjBq1Ckvr-fZdJcugHeug4lJBHt7fSLTNe-IjWFU,376
129
+ openbacktesting/indicators/overlap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
+ openbacktesting/indicators/overlap/alligator.py,sha256=mIrHvRmpiU7FUOVqC-7gx0SVlDrIYjX7Eb4XZefC4og,426
131
+ openbacktesting/indicators/overlap/alma.py,sha256=iuFJLqE8HLrjEuAF_XTu4bg0AGbLsFtZ8zLYkhcQTaA,1412
132
+ openbacktesting/indicators/overlap/anchored_vwap.py,sha256=Z41WwPnbp3ww9u9a-aakflt-a6WADSjg899CRlktXxU,2003
133
+ openbacktesting/indicators/overlap/anchored_vwap_bands.py,sha256=7kYks5FuMuBucUVpRd2OkpbwGEldZLBLlsbJ-ZSEfDs,346
134
+ openbacktesting/indicators/overlap/avgprice.py,sha256=V-2fUgMDBdUdMAvGqh8PgshM4w-mTpi1XdNMTC7cTfE,387
135
+ openbacktesting/indicators/overlap/dema.py,sha256=C0jM0GGBSSag2o6UUoH7GC2DWBeKVZcG_bBPppsKp80,339
136
+ openbacktesting/indicators/overlap/ema.py,sha256=ZfcC8mvCUS6izc1K0hTKPB2pXaQnYby6SxfHkFTRymo,408
137
+ openbacktesting/indicators/overlap/frama.py,sha256=UN2g7yJe5XoM7RA_Oh2VV3sWr4LqspZM_ip4TogV_rU,1155
138
+ openbacktesting/indicators/overlap/fwma.py,sha256=3iyUAj7dzLvewa9P73Yc8qtrxVS77dzMKvTLLCQZHI0,353
139
+ openbacktesting/indicators/overlap/hilo.py,sha256=vuify9pFca46ZUyPh04HTmWaVZPZyYwOpadoAGXYOsU,711
140
+ openbacktesting/indicators/overlap/hl2.py,sha256=GJliH_lUW4dY9hce5dRwhzL92YneLaf-CGcpwF-bdcE,322
141
+ openbacktesting/indicators/overlap/hlc3.py,sha256=O1FoxB7xxk6XyhiSk5Hwqa23LqfKT_G8MAzR2YofQV0,347
142
+ openbacktesting/indicators/overlap/hma.py,sha256=46DciyUkQzvg-WixL6EQWhvOa8TW3UmRHD9NNpOZ5K0,334
143
+ openbacktesting/indicators/overlap/ht_trendline.py,sha256=XDCVV0eRS4DBRXsvlwRcaHjtm5Yyh7BODne38k8PAm8,356
144
+ openbacktesting/indicators/overlap/hwma.py,sha256=oZ67HWxx2FIv6bWY0j5TuJZ0NNMNIgTih9DqTGgv35o,349
145
+ openbacktesting/indicators/overlap/ichimoku.py,sha256=vWP3qSy_hKPvhYe0DNRiiPqkvV2R3oSDtw9D3EpqUrs,920
146
+ openbacktesting/indicators/overlap/jma.py,sha256=ZEi3o9bkexcPMtsBJoQyIk7_f7cubr0lg77SVdpVqKQ,354
147
+ openbacktesting/indicators/overlap/kama.py,sha256=vzc2m0bqqFHccwX0rLgOorFsNVW0kkF1EdWEk5cbV58,393
148
+ openbacktesting/indicators/overlap/linreg.py,sha256=32RccNDAPit94InMinIwp8CiGo_PtLyjbaPJl_vMlCE,605
149
+ openbacktesting/indicators/overlap/linregangle.py,sha256=beVN-L0ounfh_p6lrpjya6u3ascfGTCccIpv3RIiV-o,374
150
+ openbacktesting/indicators/overlap/linregintercept.py,sha256=3G6E2VrGIey5Gajs2FlqNUKgw2U_gDyBQ6ABzt8-6S0,394
151
+ openbacktesting/indicators/overlap/linregslope.py,sha256=Gfa5ce9AD3exjDppDbwD0F_6ukUUfhU5OV7y3CQ6rRM,374
152
+ openbacktesting/indicators/overlap/ma.py,sha256=GdOwcU4UsGvsFh_jM4JU9WtzzQgTMti4PyaA4GSUdXk,349
153
+ openbacktesting/indicators/overlap/ma_envelopes.py,sha256=zrm9OEUWY_3mQ4nlmZboVFODj2ByIufHOofJpzk_UQA,470
154
+ openbacktesting/indicators/overlap/mama.py,sha256=eDjtMlHwoxlJ0NKbqcweUffdGXBTKwIR-b7OsTq-Xmc,520
155
+ openbacktesting/indicators/overlap/mavp.py,sha256=xQMuMJqg2tbgkLtIYPhVB31xzYzwRDqmTlQVkRSo8Dc,484
156
+ openbacktesting/indicators/overlap/mcgd.py,sha256=qKRazikt6FCOSqa7wjNDpgyEzhOfaqKkT_s4wWMtdz0,347
157
+ openbacktesting/indicators/overlap/medprice.py,sha256=OR_sgmhLfsB5Aj8M02WzB1GIvPWnWZ4nqge6Mwlm1m0,347
158
+ openbacktesting/indicators/overlap/midpoint.py,sha256=mSytBbJjnNjrNFqchTnHJAYI0Vcl7a6QJF01DHsGmyQ,359
159
+ openbacktesting/indicators/overlap/midprice.py,sha256=x9PhFS1-H_LHtIEAOcZN2FpBpUVAo32ccir_wwvdvbM,370
160
+ openbacktesting/indicators/overlap/mmar.py,sha256=fd2byKJgwOt0m6-QdTrQUtLOM8CONnIVzt9KccmGfOk,619
161
+ openbacktesting/indicators/overlap/ohlc4.py,sha256=xnnxi9tQYL6HYSrXgDwZyRhx63qEGhCOzxFLF_iZS2o,372
162
+ openbacktesting/indicators/overlap/pwma.py,sha256=NlbIxwgZHw1KVWPgRf3Ox1O0oBnLSlhwkTf9TVhop8k,353
163
+ openbacktesting/indicators/overlap/rainbow.py,sha256=FKR1rAjPMaLUYqor_TmAw-V6q2IESggNcrkeDRwvBiA,707
164
+ openbacktesting/indicators/overlap/rma.py,sha256=65ex2ocM5-Io75Q6strfMC8iYduSuGxdj-Pk-lDraYc,334
165
+ openbacktesting/indicators/overlap/sinwma.py,sha256=foGcthkUAst1BlRfIiKaTqdWEwF-vwCF610P8WOCczo,349
166
+ openbacktesting/indicators/overlap/sma.py,sha256=TcyaduciYpySk21DGw0MExZx9v24ACFlWCwh3MMAGSY,493
167
+ openbacktesting/indicators/overlap/ssf.py,sha256=AkozCzYWKJR-SMBfcpnbTkuSrh2gwP-NmRcNkDdtVpY,354
168
+ openbacktesting/indicators/overlap/supertrend.py,sha256=644Tv0OUGwgK_ALjI5FCs7P6nuZtMA1mmMsEGZ5dfN4,699
169
+ openbacktesting/indicators/overlap/swma.py,sha256=wuWbPeAACpH-CE1uwqKa5LCESQHjx20WiDg9oMPdiHE,353
170
+ openbacktesting/indicators/overlap/t3.py,sha256=8pWv5zZfMvOkE7IFMlZAM8OQX6xwgVB3yAdo966JJBU,337
171
+ openbacktesting/indicators/overlap/tema.py,sha256=62P-HpHqmKzYU_0Jjvrdeq8o05_rGz6X5D86dnJNPW8,339
172
+ openbacktesting/indicators/overlap/trima.py,sha256=tRWJ4k19h_w3IrmfztuElwoYvGnrFnX6gmB1uPB4wY0,344
173
+ openbacktesting/indicators/overlap/tsf.py,sha256=F312IyaS4m7AghfjlQsRO6yFCpJbtwaaTBISv2aRCmE,334
174
+ openbacktesting/indicators/overlap/typprice.py,sha256=bzq6xj3H1bW9DC6BlufrveTMxXBXyskPwIVBPsCUnDM,367
175
+ openbacktesting/indicators/overlap/vidya.py,sha256=1EKa5NALbCbwKxP_sroww3D_t9LEp5rM0xLgbRA9Lqw,364
176
+ openbacktesting/indicators/overlap/vwap.py,sha256=E-9hQsqJMz7oiYEltRcnxsPAqW6QFfMA1qTIQpkhp28,393
177
+ openbacktesting/indicators/overlap/vwma.py,sha256=ISfgriy0_FvPt-_D-SyRBinR26-HJuXvpyp8ifnqrDY,362
178
+ openbacktesting/indicators/overlap/wcp.py,sha256=P0kz27lvM8hicTd-YKtJzts7sZCtPvzLkg1CYfxGRcE,342
179
+ openbacktesting/indicators/overlap/wma.py,sha256=3AUi_uQ72qQLvthwNebYl7H7uTzTtELWQ7Nxcmz2Xfw,348
180
+ openbacktesting/indicators/overlap/zlma.py,sha256=3uejM48jzAtQzJUsBG53wvBWTpPSUSSSUMjhgCa9iek,362
181
+ openbacktesting/indicators/performance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
+ openbacktesting/indicators/performance/drawdown.py,sha256=q9ePinujoWX8ja2c_uPpzVT4qeISCMJrVGhddE43BxY,470
183
+ openbacktesting/indicators/performance/log_return.py,sha256=hEcoAAXmT56alzpPCiKGNaoDAgj9EsqIHy3hkBgWE4I,408
184
+ openbacktesting/indicators/performance/percent_return.py,sha256=hHkmnwHTemRdtucwIE_ZeySmNHvS3GL5oJKWeXwguyM,428
185
+ openbacktesting/indicators/statistics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
+ openbacktesting/indicators/statistics/beta.py,sha256=WYTqQp_eWxFeEcoxERFf4gt5uSuyBJEE8SH_YGONIJY,374
187
+ openbacktesting/indicators/statistics/correl.py,sha256=in2fj3xWj2p2giUNpsH8VNGYefn4QoziA_t3_-1hbkY,384
188
+ openbacktesting/indicators/statistics/entropy.py,sha256=gENEgYriWNmsl6-CP22ScfhGnP479RekQYdJPUUf0Jg,374
189
+ openbacktesting/indicators/statistics/kurtosis.py,sha256=fEuH3gUggQFZazB7s60ZVSu_oGud6RvfwBWDInnnzvE,362
190
+ openbacktesting/indicators/statistics/mad.py,sha256=5HYceQq43s3tgmVOlmvSfLxmxpFzlp88qJ_VHORofDo,337
191
+ openbacktesting/indicators/statistics/md.py,sha256=AiAeUNxm7nGZfmbcqpUljJQcTf3dsXj9m7F5af7GuQw,332
192
+ openbacktesting/indicators/statistics/median.py,sha256=oBCfnTTif16Km9hSwABcV_1FiWx5r3zzD58tJAi2kuA,352
193
+ openbacktesting/indicators/statistics/mode.py,sha256=juT37ywjX9WQzBoh_wE8JdIrdE5VP1ysDdhIeOSb9VU,1514
194
+ openbacktesting/indicators/statistics/quantile.py,sha256=lxsClHfn0YrgAPoqnQRBP5D4ixRPvxH-yf6I9_d7XVs,370
195
+ openbacktesting/indicators/statistics/skew.py,sha256=1wyrNTn-ZQrkH4G8knXHWsS6XgfiwgkMH79wL16Kg80,342
196
+ openbacktesting/indicators/statistics/stderr.py,sha256=7JFwccw9hYGzNRqA9o3cPAumpey1NSWepqa0lVuxRSg,369
197
+ openbacktesting/indicators/statistics/stdev.py,sha256=PhLDVlN4AqJCUpW_91xENaRPXMvJkRZZaG4Wi57_EL8,364
198
+ openbacktesting/indicators/statistics/variance.py,sha256=kkjWpvB_XqVA6KUP7lW0C8mPveT9fo_zbefLqlE7CUo,379
199
+ openbacktesting/indicators/statistics/zscore.py,sha256=9Jbwe7FLlatSvK_z1hpNZ5-w1LeTzRJOnmjoRsSjzvI,366
200
+ openbacktesting/indicators/trend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
+ openbacktesting/indicators/trend/adx.py,sha256=k94gWtLoRZjTxXZhnDTwznCFt1Ea7vioCxz73tyAaWQ,684
202
+ openbacktesting/indicators/trend/adxr.py,sha256=RbPpfcBPpvh4LcO0NAYy4L-dEQlBFqivHoidrwJvR6c,690
203
+ openbacktesting/indicators/trend/amat.py,sha256=ZVTec0PwHbdjj-Z0TPmk65q7_x4ULAdur0__sxiBc2c,585
204
+ openbacktesting/indicators/trend/aroon.py,sha256=HSyY-Uibcu5-1yBq0131Ok7f2xcBkg3tyMWA6J85xQc,535
205
+ openbacktesting/indicators/trend/atr_stop.py,sha256=kbedmBMm0B1v2MjQUcTupH2puEQHjysbhyfbwY2_gCU,1331
206
+ openbacktesting/indicators/trend/chop.py,sha256=lhBB1C_7p42WpF4QR_dIWI5Tl7aonL8NgSgJnuOoKGg,536
207
+ openbacktesting/indicators/trend/cksp.py,sha256=rkQpfqQMnvHOzpl2pAKqEu-lhD56-KvaVyxxs7pZam4,525
208
+ openbacktesting/indicators/trend/cpr.py,sha256=ufmK_bYTVXpMFqghIo_udUWxAC3sf7z7H-1iYVSaIwc,1241
209
+ openbacktesting/indicators/trend/decay.py,sha256=_DNcEJO4hd4FLP4HkDbGKeGm2LqOH4OFaAIM-6wovjw,376
210
+ openbacktesting/indicators/trend/decreasing.py,sha256=VAhKAagH9myKv-d6hPtIN3Z7zgAmKXc8AA3XJOauFqk,519
211
+ openbacktesting/indicators/trend/dpo.py,sha256=ik8nBIec9pCJbXejxwIHzhXkfUIPWPS7EpMkHoK22pg,407
212
+ openbacktesting/indicators/trend/dx.py,sha256=ndGvtGD6Lll1bVqyg88DxIx0NQVP2WOu3AO3TBXpGlg,495
213
+ openbacktesting/indicators/trend/edecay.py,sha256=MUDo1FIPvzgKDTpWBE5WTOoDj_XmFWarOApGFIKyUVE,347
214
+ openbacktesting/indicators/trend/increasing.py,sha256=oTfkbzvLUUP24mEdnbJ6ts7Xl2DkKeEklNDfZ1DABtA,519
215
+ openbacktesting/indicators/trend/long_run.py,sha256=DQly7A7EFftB8WycsN_y933kPgjdjxohfk-9N1Tm-gM,371
216
+ openbacktesting/indicators/trend/minus_dm.py,sha256=m-qk0Y53BDkRMiI4pDyesmJ4gPFjHVqoskxXMI4htKA,388
217
+ openbacktesting/indicators/trend/pivot_points.py,sha256=hZe1RADZC-JJxMg8wEIRjL7FnKyVevudNsq19euTQ1Y,3491
218
+ openbacktesting/indicators/trend/pivothigh.py,sha256=-RK8uMNy248cDenyNJqOpFyANKB4nIe3evM9Qf5vZBY,682
219
+ openbacktesting/indicators/trend/pivotlow.py,sha256=aK-0VcrdyhXC-nCepwqmHxMVI0hTdhDY-d5FzTOn_Ig,679
220
+ openbacktesting/indicators/trend/plus_dm.py,sha256=o6_fD9TlGARbk_QUsvNoDF-Df3FlNtzMhkUg85knXz0,383
221
+ openbacktesting/indicators/trend/pmax.py,sha256=IZLPZHvr8m10ObT0G_2HUeOG9qVzybJDbPt552PYRh0,489
222
+ openbacktesting/indicators/trend/psar.py,sha256=eHieSwVX_UHeuFNibITbQuWazCmLGfMB2jSDU_aqnnc,621
223
+ openbacktesting/indicators/trend/qstick.py,sha256=7vjCQGy8Y0DL-OBP1R5bOICfGlveVj7XOSwMvngPjHI,367
224
+ openbacktesting/indicators/trend/sarext.py,sha256=d8roedWEz66CymGwEcZquinIfwb3tBch9BtytfB8AQo,935
225
+ openbacktesting/indicators/trend/short_run.py,sha256=05adUgDVnlzF-x3K6Nq19lLBUxtdSU3XjB1kkNJsNog,376
226
+ openbacktesting/indicators/trend/tsignals.py,sha256=OIV3eeCqB7V-R7kwup-GDtOcBaMahzwkVO4NQj79E2w,680
227
+ openbacktesting/indicators/trend/ttm_trend.py,sha256=bDkmdbWytIS4n11Ksv9P2YnOkkC6RPFOmJixUrKVlRM,469
228
+ openbacktesting/indicators/trend/vhf.py,sha256=tW91cn09SKW7V46kwMxbs-WBE4wE_eE_Bwfc9AfCzLM,352
229
+ openbacktesting/indicators/trend/volatility_stop.py,sha256=4dYHWOy6MhnJ_qlYseR1WAURHcwOSZiLBr83HNlcTC0,1363
230
+ openbacktesting/indicators/trend/vortex.py,sha256=EZmjA9HSEhWsxV3PoMt3JKdziwWiEeOFqs3OuS2lFMY,514
231
+ openbacktesting/indicators/trend/xsignals.py,sha256=fLge_pl53tPxiDJF3SHiNl7XwYBIxPncS-KqwZWAMcI,746
232
+ openbacktesting/indicators/utility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
+ openbacktesting/indicators/utility/barssince.py,sha256=bOzp8k4vpWE7uds_3H-9qbDtsnNW_QVkR0YT6qE382w,607
234
+ openbacktesting/indicators/utility/change.py,sha256=o1OCTdp6uPNF7vR11Rq2E86NtooA2zI2hl4H7fiG7vs,168
235
+ openbacktesting/indicators/utility/cross.py,sha256=oPQv2DjD3H_73x4dGLkxCEX7WJ2nbosqtADMbC088Xo,397
236
+ openbacktesting/indicators/utility/crossover.py,sha256=bW1bbj8XR-D74GuXkOU5MnP2nKfmvw6tuT1m12oe6sw,361
237
+ openbacktesting/indicators/utility/crossunder.py,sha256=-0D1B-9vFbFPbDvf3MJt6_NeOvERpCsh5Rf2xqXn5co,367
238
+ openbacktesting/indicators/utility/cum.py,sha256=AB2iQ2enpRSb2Tfatqg19BMHFjXXLjva5bG3rbY94x0,150
239
+ openbacktesting/indicators/utility/falling.py,sha256=J8qmRxgecZg21r76Fisok3qwnhclVtG-06avoHVkvQs,318
240
+ openbacktesting/indicators/utility/highest.py,sha256=vUSHPwJCwboZpkjW1c5BrFrbt7-OV45McJw-__lSFzM,179
241
+ openbacktesting/indicators/utility/highestbars.py,sha256=16WR8v8hs3PYahRrIkvxVu7OG1S2LsQYZWluLXYEf8M,809
242
+ openbacktesting/indicators/utility/lowest.py,sha256=NKwJjBeijfBk0Zk2PvPNTvyufnJDzkeUPupSusp4YP8,177
243
+ openbacktesting/indicators/utility/lowestbars.py,sha256=OWeq6bvCr8K2H-OsLv3tIO0UW0juV3PZs9LsKBotMeo,807
244
+ openbacktesting/indicators/utility/percentile_linear_interpolation.py,sha256=tYXnwjZl9afMlA3b7f8UHEFAZ4Dq-y5oqpmJDmcS3Ik,303
245
+ openbacktesting/indicators/utility/percentile_nearest_rank.py,sha256=dLGdhERUsX2Ca64T4H3UKokDvSx5XLQzetxVzWyvq3Q,409
246
+ openbacktesting/indicators/utility/percentrank.py,sha256=G7Nu_Avso1J6W7urWJ4satqogzGV-GPGh2uCqRAJ2M0,218
247
+ openbacktesting/indicators/utility/range.py,sha256=o22H65gVzYFjPeLDZ94sBfv5yTaupVSrmUWXvzSCphU,212
248
+ openbacktesting/indicators/utility/rising.py,sha256=h9EaKN8VELW9ci4o244V9PU2ZmO7po28g6CHibtFNf0,316
249
+ openbacktesting/indicators/utility/rolling_count.py,sha256=45LUHx1dA1yLUeqtcPND5eEHETzGa_Tiu-cZmv9Wwwo,299
250
+ openbacktesting/indicators/utility/rolling_sum.py,sha256=d5nSHR-f-XlEqP8rS1iEP9SaDDqHRg5MRbtL_O31IRc,187
251
+ openbacktesting/indicators/utility/running_max.py,sha256=2Zovmqey5oMJ2cE_fCCTGUzKiezGt_MmFmJG3w2nHDw,166
252
+ openbacktesting/indicators/utility/running_min.py,sha256=D-P6uMHNPLPdTalLdhIAnUvU40VtiaLbkIBXb5Zi154,166
253
+ openbacktesting/indicators/utility/shift.py,sha256=sR2ew3tnCFG6hmA8YRKRvUH3-VrX1bGjMNEd0yKs7eE,167
254
+ openbacktesting/indicators/utility/valuewhen.py,sha256=pOZAM_HPLFx6EufRSCupH-lYku6n0vRcPEBgONhPA5E,767
255
+ openbacktesting/indicators/volatility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
+ openbacktesting/indicators/volatility/aberration.py,sha256=Of11ujXqAKZ0OUPafeIe07Ge-w0plRJZStYMJuZTCnk,700
257
+ openbacktesting/indicators/volatility/accbands.py,sha256=stQNCIWdz54f6-WmyXWc70PgGnzYT2lpyz2c5oICkOw,609
258
+ openbacktesting/indicators/volatility/adr.py,sha256=XR8DhgJ96CuLhqvIbd6nv0LrMCwEnWRmgfrDl4be3vk,214
259
+ openbacktesting/indicators/volatility/atr.py,sha256=zpw-YPx9O8DJQ-L21ogbL4KdRsu3L9TEomXLoOw71VE,425
260
+ openbacktesting/indicators/volatility/avolume.py,sha256=kO9QF94dGMoXSQwDymBlOlzO_2s3wa-VByW81eksZKM,357
261
+ openbacktesting/indicators/volatility/bbands.py,sha256=Bn-I0BPzDvu_yltuj1ByZjb0wSEka8JvZqIM4FHh0p4,665
262
+ openbacktesting/indicators/volatility/ce.py,sha256=4HjgARSCJeiLNynTqR298eMdd_scITp_fVa-NEL2GyI,623
263
+ openbacktesting/indicators/volatility/cvi.py,sha256=sLO0vwFDuGR9GiLUVIPTXtoUUk-frya4b8KFuEAii0I,348
264
+ openbacktesting/indicators/volatility/donchian.py,sha256=XoOgEZN91KhvQg3KX0ze2N_pnvaaX2LIEpUDqtTXVMs,654
265
+ openbacktesting/indicators/volatility/hvol.py,sha256=PyOfM8on9IDsJot78bSFpxM1GwPxV8wTIzD5jutG9xs,386
266
+ openbacktesting/indicators/volatility/hwc.py,sha256=sxeR4GpSl-ylsTsf7VF4NgPOWHX6YixQcnHXfJtsmAQ,613
267
+ openbacktesting/indicators/volatility/kc.py,sha256=zau9uUC9NoVGGJEi4JB2BlwgF9YYl1ak8kxV8VsxLSs,747
268
+ openbacktesting/indicators/volatility/massi.py,sha256=-dDV_0lOgctD8unuKWYXCMYmVAaciP0RQ6kC5F9FR1w,369
269
+ openbacktesting/indicators/volatility/natr.py,sha256=L8SL6opNlUkPLLzNO80C34pD8B2MtlnSMxcLCoj88MU,510
270
+ openbacktesting/indicators/volatility/pdist.py,sha256=pJOUm5wdYPWky0PkeMmpqf71UWOU0qHqz3nsq9Op9vY,395
271
+ openbacktesting/indicators/volatility/rvi.py,sha256=RmOXlTIwwaEarpe1qL--0Jvs3nn7BKI2GTb49TsBBnA,570
272
+ openbacktesting/indicators/volatility/starc.py,sha256=eyVQ67TFh6fqhELtBMHSb6LcUL6szcWVeFt8GbHgFg4,403
273
+ openbacktesting/indicators/volatility/thermo.py,sha256=DEahtfkWlqYAVOOgHng4X1_oKiYE5Y-FZzq5muzZzuk,832
274
+ openbacktesting/indicators/volatility/true_range.py,sha256=JgkYrFAZRq1g4ZHrjSyTsaX5wwcCyEpQo0-tHpXbcro,1147
275
+ openbacktesting/indicators/volatility/ui.py,sha256=NAyxdo5_a8EPdSCRWHauBJcGQczknNv1b-klZ2wBk4o,355
276
+ openbacktesting/indicators/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
277
+ openbacktesting/indicators/volume/ad.py,sha256=-QRyIxj21HccAtYCRFKg0E5L7edw1OfAqXFVa7G8Gfc,379
278
+ openbacktesting/indicators/volume/adosc.py,sha256=7pZh6hp0JBFCJu6TmfOSsG2gHrnuEqZxt1--L4x_gG4,499
279
+ openbacktesting/indicators/volume/aobv.py,sha256=m53RSmD0J-4_21mLD-mdf7v2k1ucv81ksl9lT93zRAU,867
280
+ openbacktesting/indicators/volume/cmf.py,sha256=qsPBDZj2RVdQM5wtxIOmO_h1EtsdQI9Hn-EdXk2pqGg,421
281
+ openbacktesting/indicators/volume/efi.py,sha256=C40DVMIrFT3j3aT1GmnNUKbHussiGYUHhjRzA-HpVtU,413
282
+ openbacktesting/indicators/volume/emv.py,sha256=okOzhLVIZG5HKUvlJ-gjizKbp4Q-lDh0iOwh36GJXLM,364
283
+ openbacktesting/indicators/volume/eom.py,sha256=gteOluIebawphISIQDUL2pDG2atkzWXY6Mo8oQb1QhM,504
284
+ openbacktesting/indicators/volume/iii.py,sha256=acSg4JMiVJBvQiW2IxCvR4Byx8z6ucVA-ETFxTQd4YQ,287
285
+ openbacktesting/indicators/volume/kvo.py,sha256=OVFQL66MHTAH4GvPZJ3jRDj7jDNRqPg1qkj3P0OKNZQ,690
286
+ openbacktesting/indicators/volume/marketfi.py,sha256=YcRpxQzU3u0ICX4TsihcFKoL10P7bQd_U1sFWD6TOds,369
287
+ openbacktesting/indicators/volume/mfi.py,sha256=nrKPbuf1XY5ORnKkKCf6xZIjIXujpjyWp1ziDanih6U,421
288
+ openbacktesting/indicators/volume/nvi.py,sha256=rcKbk_F1R-j4iCwKTzuR-QnnOubYVln3FROln_BfbWo,862
289
+ openbacktesting/indicators/volume/obv.py,sha256=6oFeW1vKbZVQyh-28bB-uOaXZ-ABmeBUL5J2iV7AgwA,333
290
+ openbacktesting/indicators/volume/pvi.py,sha256=UmFNmj0TvdDt1ylJmpLV8C0jGwkLbMlq7aVbiFyi4pA,862
291
+ openbacktesting/indicators/volume/pvol.py,sha256=n0spbLb6JuDNXBg7P66bAIF2R-jjT1ljp72TeCntMck,338
292
+ openbacktesting/indicators/volume/pvr.py,sha256=3g95elu7Wtibj2zz514wdc4EF74H9gkyO9_BsJbmCB8,333
293
+ openbacktesting/indicators/volume/pvt.py,sha256=DiE-3gS6noZKes_CHWtJQJ9s1O1FBrDdYpztl0NEdIc,353
294
+ openbacktesting/indicators/volume/rvol.py,sha256=mWVeax3uwyz4UK9mGbBWW-rYFw6rqrVzAYSyaaGzNsw,251
295
+ openbacktesting/indicators/volume/vfi.py,sha256=xFcBmQHDpwmiWaxeaGLWbkA3GvmfKUzMFEZbo3flJ3k,479
296
+ openbacktesting/indicators/volume/vosc.py,sha256=SgDixTmVevcDLdpVC5K3FPyGeIzw5RRCo9avTxC21VM,352
297
+ openbacktesting/indicators/volume/wad.py,sha256=sm8rcz48eduP1VTKfW_2-_mCB2apOg2jmDLg5lUqm2g,341
298
+ openbacktesting/indicators/volume/wvad.py,sha256=52MTXahFvp2Kcb6CT4Fem2JhSRjh_DU1FmbuVPpT4R0,280
299
+ openbacktesting/optimizer/__init__.py,sha256=KIKPTWpYuNShrxUfRXsU4OFcMIpPiqrt1Tp4ro6BTTs,636
300
+ openbacktesting/optimizer/_semantics.py,sha256=5QSZND1ph3A8TzEwcDTM7ZpUdlQr3zfjqH6FRa9HLwE,6957
301
+ openbacktesting/optimizer/identity.py,sha256=vebaGakqTJtNxjXvu2b-0RYYrY-PjqWVZ2xPDFmaklw,1848
302
+ openbacktesting/optimizer/models.py,sha256=x-06ITVhnWswazHv2eFeOWVzICZYZck9PPJ1-xwB2nc,2795
303
+ openbacktesting/optimizer/plan.py,sha256=z2xIM2FUptPSNd7dwkfQNYVmlAE2KDh7abtDFAU44Tc,5593
304
+ openbacktesting/optimizer/portfolio-result.schema.json,sha256=zjkv_6UIR-v8eWHajUl2G0fRJ0lPN3duk5K_dedQdxw,153837
305
+ openbacktesting/optimizer/query.py,sha256=2lGUqHv6mDazJmJ2k6GqFedlRKcg-KFDWnWuPujbU64,11015
306
+ openbacktesting/optimizer/runner.py,sha256=RNmzAhsRcQEmQgclbdRMgeOqlPXM1nWyDvEL_mJw1Bw,4482
307
+ openbacktesting/optimizer/storage.py,sha256=GpytDQWrQT9_boGKE_uSzsSkS-4J8MsNXR0TwUNv4tA,11005
308
+ openbacktesting/optimizer/validation.py,sha256=CC2zIahB9E3SRlC-SPD_lfUrwPp7QG_PRCBCmxfySc8,2267
309
+ openbacktesting/plotting/__init__.py,sha256=XRumFV6Bk0mRC9zoUkPhEdjVx9oCAF9Gpgjd5zfRIHU,519
310
+ openbacktesting/plotting/collector.py,sha256=uWUv8wMIduiUNdTcXiOFUOyKvuDVq3Z4yEq7Tf15xIk,19305
311
+ openbacktesting/plotting/encoding.py,sha256=U4xnJef1SE2BZifyM596rJsOgNnv2VeuVORIICmrS4E,3390
312
+ openbacktesting/plotting/types.py,sha256=IudfEXL12ZcdJ_6t8jSDwGGbOEz3x03sawmQFlA-6sg,2484
313
+ openbacktesting/portfolio/__init__.py,sha256=F1rfiU4Hr9m5jnsjWeHJEJBGuk7aI0y0kyF_X6Ks4Vk,620
314
+ openbacktesting/portfolio/analysis.py,sha256=kYmKX6ilVkU64VSEygdJom4iwFpVAJRGsbFJygOzq1w,8849
315
+ openbacktesting/portfolio/builder.py,sha256=uLxwWpKlpfDBlUM-GF5z-es2pfIy7IX4IiFRD0k9lDw,16281
316
+ openbacktesting/portfolio/catalog.json,sha256=zBYKrGjvBXYEKUQSM_pjCclvYi87i_Gp8wo9q71sKlw,44896
317
+ openbacktesting/portfolio/helpers.py,sha256=Lv4fDacMc8LizaN2yoNMxBJ6TJqOmrvpAKhsIz-4kt0,3755
318
+ openbacktesting/portfolio/metrics.py,sha256=FYH-vgVlpo_HA4EvCJVaYVzOxkIxPvogkV6rlKwwH8Y,7286
319
+ openbacktesting/portfolio/models.py,sha256=evFXV2zPmlDEeWDmbVvU__c5C3_v8H7lNcRfMBYdFa0,1873
320
+ openbacktesting/portfolio/periods.py,sha256=hVkG3HDpq1GObKWRpRuetoN8sBxct8bxrddoGMYTvDc,6894
321
+ openbacktesting/portfolio/rates.py,sha256=4AcMltcNebtQ5iKD2XCtxaggHwZz5NtRdYk6gVV7AYs,580
322
+ openbacktesting/portfolio/snapshot.py,sha256=v7LuDGf1G12ett0xYjiHy89z5lSquDZfG-qYb_ZwWjc,3957
323
+ openbacktesting/portfolio/stats.py,sha256=K0xo4KH-G0Y1A5CECiHYlQqfz4TIJUxXHRKgCL-OAO4,11123
324
+ openbacktesting/portfolio/trades.py,sha256=WxHD7bAN7nJL6JD81H8yBA-zIlPObwvJTyiLPvDzLlI,5231
325
+ openbacktesting/portfolio/trading.py,sha256=iGIYopDe_H7xdc07Lwl5blLTCRRdP1JDX2TvlnYcAcI,6963
326
+ openbacktesting/simulation/__init__.py,sha256=pDThA2XTWi-W7L40AKhVircRKDeAvw8IrdFg1uKbpsw,479
327
+ openbacktesting/simulation/collection.py,sha256=F7PEyO0du7Di7abqVManV1M-8QK4zDEMug0nR_GS9tg,283
328
+ openbacktesting/simulation/config.py,sha256=dnR87tHfVItEDqFeKyVl-B2F2oW1sN54Ee9APBqS-ng,10174
329
+ openbacktesting/simulation/core.py,sha256=bacNc18fc5Nek8lUpZurD3Myq4Rvdpj-dA95R2ax4yg,24716
330
+ openbacktesting/simulation/optimization.py,sha256=kyff_vPeJrWjeVSLVdnSMAXEeCBZzv1g0AC_7tGukAE,11054
331
+ openbacktesting/simulation/parallel.py,sha256=AH85r6w3C1oIyktfov4flOzds-l0vfjsIlB6bPeW9EA,5370
332
+ openbacktesting/simulation/variants.py,sha256=mucahZ825uXOGQKjSrMcyIh0_xZOqqrVfuI8dDGhEws,3855
333
+ openbacktesting/strategy/__init__.py,sha256=8loBDhv4xE2SentWYEqQXTU3sl_P8nJI8F-iPU8Mam8,556
334
+ openbacktesting/strategy/bar_state.py,sha256=ftCX2tzBCOSiE6tdBcCoB_Lgfz91VH9YA8HezXbGA6M,391
335
+ openbacktesting/strategy/base.py,sha256=C4dCG-xC8COo23YNYf6HunU9PXiK1IJDVfXh-ZmMaj4,30786
336
+ openbacktesting/strategy/declaration.py,sha256=xgSe1WpyQEePUEHBSejGgktE8gwO6U-rdAOzMjT7oy8,4545
337
+ openbacktesting/strategy/helpers.py,sha256=aU0Ubm6IFNoHtu-B1WiLur_40t3y5MvED021hgw7bhY,7543
338
+ openbacktesting/strategy/inputs.py,sha256=VdVKdVi5BUbNoXkDpfhB2QqOT-fTb4WGUNd-oDvBECU,18975
339
+ openbacktesting/strategy/sizing.py,sha256=pS6CLJ52obzbkNL9_F9eJElID-0VKqcSrBk7rN5RZGE,3055
340
+ openbacktesting/strategy/templates.py,sha256=23UCiuSJATqNaee6nsi8Ngr6pYXj62NiJzGqYo4GeyU,5728
341
+ openbacktesting/test/BTCUSD.csv,sha256=_yU9l4kQgOUib5nYqPM0Yhzs8zxeHY5SeMtXKAJFUtk,8765
342
+ openbacktesting/test/EURUSD.csv,sha256=gel3kFoAbMj7wDTr24PJmajta6ABkdx-pe9bOG-3SoI,279689
343
+ openbacktesting/test/GOOG.csv,sha256=YOlhpWdJCxV_cYiN-eavs2GQo0pApihqo4mI4jQ_Gxo,97833
344
+ openbacktesting/test/__init__.py,sha256=EMPGxhXiqCGESOA7PXjZHaxJW1Jnxc5R8VTLf-ETjCI,835
345
+ openbacktesting/test/__main__.py,sha256=eEEPHQmkIIZrAxBpb946YVbZDXAQCrc9NH_UVi_bSwU,368
346
+ openbacktesting/test/_test.py,sha256=TpxIHlO8bur-zSFcVoIJ1gbcKh4SPoLG-f6MoGesrpE,51063
347
+ openbacktesting-0.2.0.dist-info/METADATA,sha256=AN-ygxUVRACAD6wtVOm3hVfF6iiJN58jkaUbGZ_GjRw,8999
348
+ openbacktesting-0.2.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
349
+ openbacktesting-0.2.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
350
+ openbacktesting-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any