investing-algorithm-framework 7.16.5__py3-none-any.whl → 7.16.7__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.

Potentially problematic release.


This version of investing-algorithm-framework might be problematic. Click here for more details.

@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import os
3
+ from typing import Dict
3
4
  from pathlib import Path
4
5
  from datetime import datetime, timezone
5
6
  from dataclasses import dataclass, field
@@ -82,7 +83,8 @@ class BacktestRun:
82
83
  number_of_positions: int = 0
83
84
  backtest_metrics: BacktestMetrics = None
84
85
  backtest_date_range_name: str = None
85
- data_sources: List[dict] = field(default_factory=list)
86
+ data_sources: List[Dict] = field(default_factory=list)
87
+ metadata: Dict[str, str] = field(default_factory=dict)
86
88
 
87
89
  def to_dict(self) -> dict:
88
90
  """
@@ -114,7 +116,8 @@ class BacktestRun:
114
116
  "number_of_trades_closed": self.number_of_trades_closed,
115
117
  "number_of_trades_open": self.number_of_trades_open,
116
118
  "number_of_orders": self.number_of_orders,
117
- "number_of_positions": self.number_of_positions
119
+ "number_of_positions": self.number_of_positions,
120
+ "metadata": self.metadata,
118
121
  }
119
122
 
120
123
  @staticmethod
@@ -298,8 +298,7 @@ def get_average_trade_gain(trades: List[Trade]) -> Tuple[float, float]:
298
298
  trades (List[Trade]): List of trades.
299
299
 
300
300
  Returns:
301
- Tuple[float, float]: The average gain
302
- percentage of the average loss
301
+ Tuple[float, float]: The average gain and average gain percentage
303
302
  """
304
303
  if trades is None or len(trades) == 0:
305
304
  raise OperationalException(
@@ -307,19 +306,26 @@ def get_average_trade_gain(trades: List[Trade]) -> Tuple[float, float]:
307
306
  )
308
307
 
309
308
  gains = [t.net_gain_absolute for t in trades if t.net_gain_absolute > 0]
310
- cost = sum(t.cost for t in trades if t.net_gain_absolute > 0)
311
309
 
312
310
  if not gains:
313
311
  return 0.0, 0.0
314
312
 
315
313
  average_gain = sum(gains) / len(gains)
316
- percentage = (average_gain / cost) if cost > 0 else 0.0
317
- return average_gain, percentage
318
314
 
315
+ # Updated percentage calculation to match other functions
316
+ percentage_returns = [
317
+ (t.net_gain_absolute / t.cost) for t in trades
318
+ if t.net_gain_absolute > 0 and t.cost > 0
319
+ ]
320
+ average_gain_percentage = (
321
+ sum(percentage_returns) / len(percentage_returns)
322
+ if percentage_returns else 0.0
323
+ )
319
324
 
320
- def get_current_average_trade_gain(
321
- trades: List[Trade]
322
- ) -> Tuple[float, float]:
325
+ return average_gain, average_gain_percentage
326
+
327
+
328
+ def get_current_average_trade_gain(trades: List[Trade]) -> Tuple[float, float]:
323
329
  """
324
330
  Calculate the average gain from a list of trades,
325
331
  including both closed and open trades.
@@ -329,8 +335,7 @@ def get_current_average_trade_gain(
329
335
  Args:
330
336
  trades (List[Trade]): List of trades.
331
337
  Returns:
332
- Tuple[float, float]: The average gain
333
- percentage of the average loss
338
+ Tuple[float, float]: The average gain and average gain percentage
334
339
  """
335
340
  if trades is None or len(trades) == 0:
336
341
  raise OperationalException(
@@ -338,14 +343,23 @@ def get_current_average_trade_gain(
338
343
  )
339
344
 
340
345
  gains = [t.net_gain_absolute for t in trades if t.net_gain_absolute > 0]
341
- cost = sum(t.cost for t in trades if t.net_gain_absolute > 0)
342
346
 
343
347
  if not gains:
344
348
  return 0.0, 0.0
345
349
 
346
350
  average_gain = sum(gains) / len(gains)
347
- percentage = (average_gain / cost) if cost > 0 else 0.0
348
- return average_gain, percentage
351
+
352
+ # Updated percentage calculation to match other functions
353
+ percentage_returns = [
354
+ (t.net_gain_absolute / t.cost) for t in trades
355
+ if t.net_gain_absolute > 0 and t.cost > 0
356
+ ]
357
+ average_gain_percentage = (
358
+ sum(percentage_returns) / len(percentage_returns)
359
+ if percentage_returns else 0.0
360
+ )
361
+
362
+ return average_gain, average_gain_percentage
349
363
 
350
364
 
351
365
  def get_average_trade_loss(trades: List[Trade]) -> Tuple[float, float]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: investing-algorithm-framework
3
- Version: 7.16.5
3
+ Version: 7.16.7
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10
@@ -89,7 +89,7 @@ investing_algorithm_framework/domain/backtesting/backtest_date_range.py,sha256=e
89
89
  investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py,sha256=ZGfJm-zjsWudQMOdYKfW_2T7K3SBy-JjaMoJp9zijWE,3010
90
90
  investing_algorithm_framework/domain/backtesting/backtest_metrics.py,sha256=HR0bEDT3xh-TQq50PLDcKhYggjtnE-JTRuY2TlXz54w,19552
91
91
  investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py,sha256=8JXdu3EgFh2f2Yc41OYwIBwlYtjFiumyAJUrN5kL078,6703
92
- investing_algorithm_framework/domain/backtesting/backtest_run.py,sha256=JOGmTuzMkRlr_s41TpdISSKQZrhmurhcXLDIVQoyk_Y,14187
92
+ investing_algorithm_framework/domain/backtesting/backtest_run.py,sha256=ffQgilEkyixGrGvKeCZF670OPoY3ljixlgsXPajHpZY,14310
93
93
  investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py,sha256=BupJ1WKiqdZTe3CEPjHJ7j0Bg-eeJcTE29kKkVvZ1y0,6686
94
94
  investing_algorithm_framework/domain/backtesting/combine_backtests.py,sha256=JjqlAu6ae565s-ccjHY1SdHgz0vc22g1awFYBdbpacM,9726
95
95
  investing_algorithm_framework/domain/config.py,sha256=_VkaJvrdqIKAT3_l-Y8XTEKNEaw5uVIwQ7vxomuCpUw,3003
@@ -225,7 +225,7 @@ investing_algorithm_framework/services/metrics/risk_free_rate.py,sha256=bATheWxy
225
225
  investing_algorithm_framework/services/metrics/sharpe_ratio.py,sha256=XDEiTUBoK-qpoeqmbhrcy1v-AuNagWhTWx_Myn0g8-A,5497
226
226
  investing_algorithm_framework/services/metrics/sortino_ratio.py,sha256=WA8uTkyk8RMG6uMplCvV8okAlKG_aeTP4ZAX2VyNkpA,2993
227
227
  investing_algorithm_framework/services/metrics/standard_deviation.py,sha256=oObshTljORuE3x1cS0wej8QCqmDzAwHQgOA5u_HdfbU,4533
228
- investing_algorithm_framework/services/metrics/trades.py,sha256=BR-9jcgVq9vXxfborngS7gYWwbDkcS2HikjYjQwnjRQ,13632
228
+ investing_algorithm_framework/services/metrics/trades.py,sha256=SFp3Zc71xzjux06dNUm9H352OGO2XBXk8W_WrQ8-kd4,14052
229
229
  investing_algorithm_framework/services/metrics/treynor_ratio.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
230
  investing_algorithm_framework/services/metrics/ulcer.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
231
  investing_algorithm_framework/services/metrics/value_at_risk.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -252,8 +252,8 @@ investing_algorithm_framework/services/trade_order_evaluator/default_trade_order
252
252
  investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py,sha256=pNnmgaKMR9RY6Kxq7xS0nURKoaQDe2ehrP5GfElkkcI,1328
253
253
  investing_algorithm_framework/services/trade_service/__init__.py,sha256=AcwPyJjDRdiREnl_MWMkDSc-V-ZjXtvpHD6eQT9mc1o,68
254
254
  investing_algorithm_framework/services/trade_service/trade_service.py,sha256=OtzIS5EebByGcqDvV2AFeBjXSarvrgubMXDaVKg6Rbw,41193
255
- investing_algorithm_framework-7.16.5.dist-info/LICENSE,sha256=wbVEDvoZiMPHufRY3sLEffvAr7GH5hOIngHF8y4HFQg,11343
256
- investing_algorithm_framework-7.16.5.dist-info/METADATA,sha256=PDdQOPVtpBaJR049eQ2TRI4iNvN-_76E74zrCoT1HdI,19635
257
- investing_algorithm_framework-7.16.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
258
- investing_algorithm_framework-7.16.5.dist-info/entry_points.txt,sha256=jrPF0YksDs27vYzEvj3tXLe3OGWU24EJA05z5xHqmq8,91
259
- investing_algorithm_framework-7.16.5.dist-info/RECORD,,
255
+ investing_algorithm_framework-7.16.7.dist-info/LICENSE,sha256=wbVEDvoZiMPHufRY3sLEffvAr7GH5hOIngHF8y4HFQg,11343
256
+ investing_algorithm_framework-7.16.7.dist-info/METADATA,sha256=lxKOB3Dv7NGVbPO2C9aoG3UBLzKJxVzopwGe1wp00Gc,19635
257
+ investing_algorithm_framework-7.16.7.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
258
+ investing_algorithm_framework-7.16.7.dist-info/entry_points.txt,sha256=jrPF0YksDs27vYzEvj3tXLe3OGWU24EJA05z5xHqmq8,91
259
+ investing_algorithm_framework-7.16.7.dist-info/RECORD,,