investing-algorithm-framework 7.16.3__py3-none-any.whl → 7.16.5__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.
- investing_algorithm_framework/domain/models/trade/trade.py +2 -2
- investing_algorithm_framework/services/metrics/trades.py +17 -17
- {investing_algorithm_framework-7.16.3.dist-info → investing_algorithm_framework-7.16.5.dist-info}/METADATA +1 -1
- {investing_algorithm_framework-7.16.3.dist-info → investing_algorithm_framework-7.16.5.dist-info}/RECORD +7 -7
- {investing_algorithm_framework-7.16.3.dist-info → investing_algorithm_framework-7.16.5.dist-info}/LICENSE +0 -0
- {investing_algorithm_framework-7.16.3.dist-info → investing_algorithm_framework-7.16.5.dist-info}/WHEEL +0 -0
- {investing_algorithm_framework-7.16.3.dist-info → investing_algorithm_framework-7.16.5.dist-info}/entry_points.txt +0 -0
|
@@ -208,7 +208,7 @@ class Trade(BaseModel):
|
|
|
208
208
|
|
|
209
209
|
if self.last_reported_price is not None:
|
|
210
210
|
gain = (
|
|
211
|
-
self.
|
|
211
|
+
self.available_amount *
|
|
212
212
|
(self.last_reported_price - self.open_price)
|
|
213
213
|
)
|
|
214
214
|
|
|
@@ -228,7 +228,7 @@ class Trade(BaseModel):
|
|
|
228
228
|
|
|
229
229
|
if self.last_reported_price is not None:
|
|
230
230
|
gain = (
|
|
231
|
-
self.
|
|
231
|
+
self.available_amount *
|
|
232
232
|
(self.last_reported_price - self.open_price)
|
|
233
233
|
)
|
|
234
234
|
|
|
@@ -27,7 +27,7 @@ def get_positive_trades(
|
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
positive_trades = [
|
|
30
|
-
trade for trade in closed_trades if trade.
|
|
30
|
+
trade for trade in closed_trades if trade.net_gain_absolute > 0
|
|
31
31
|
]
|
|
32
32
|
number_of_positive_trades = len(positive_trades)
|
|
33
33
|
percentage_positive_trades = (
|
|
@@ -60,7 +60,7 @@ def get_negative_trades(
|
|
|
60
60
|
]
|
|
61
61
|
|
|
62
62
|
negative_trades = [
|
|
63
|
-
trade for trade in closed_trades if trade.
|
|
63
|
+
trade for trade in closed_trades if trade.net_gain_absolute < 0
|
|
64
64
|
]
|
|
65
65
|
number_of_negative_trades = len(negative_trades)
|
|
66
66
|
percentage_negative_trades = (
|
|
@@ -241,11 +241,11 @@ def get_average_trade_return(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
241
241
|
if not closed_trades:
|
|
242
242
|
return 0.0, 0.0
|
|
243
243
|
|
|
244
|
-
total_return = sum(t.
|
|
244
|
+
total_return = sum(t.net_gain_absolute for t in closed_trades)
|
|
245
245
|
average_return = total_return / len(closed_trades)
|
|
246
246
|
|
|
247
247
|
percentage_returns = [
|
|
248
|
-
(t.
|
|
248
|
+
(t.net_gain_absolute / t.cost) for t in closed_trades if t.cost > 0
|
|
249
249
|
]
|
|
250
250
|
average_return_percentage = (
|
|
251
251
|
sum(percentage_returns) / len(percentage_returns)
|
|
@@ -274,11 +274,11 @@ def get_current_average_trade_return(
|
|
|
274
274
|
"Trades list is empty, cannot compute average return."
|
|
275
275
|
)
|
|
276
276
|
|
|
277
|
-
total_return = sum(t.
|
|
277
|
+
total_return = sum(t.net_gain_absolute for t in trades)
|
|
278
278
|
average_return = total_return / len(trades)
|
|
279
279
|
|
|
280
280
|
percentage_returns = [
|
|
281
|
-
(t.
|
|
281
|
+
(t.net_gain_absolute / t.cost) for t in trades if t.cost > 0
|
|
282
282
|
]
|
|
283
283
|
average_return_percentage = (
|
|
284
284
|
sum(percentage_returns) / len(percentage_returns)
|
|
@@ -306,8 +306,8 @@ def get_average_trade_gain(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
306
306
|
"Trades list is empty or None, cannot calculate average gain."
|
|
307
307
|
)
|
|
308
308
|
|
|
309
|
-
gains = [t.
|
|
310
|
-
cost = sum(t.cost for t in trades if t.
|
|
309
|
+
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
311
|
|
|
312
312
|
if not gains:
|
|
313
313
|
return 0.0, 0.0
|
|
@@ -337,8 +337,8 @@ def get_current_average_trade_gain(
|
|
|
337
337
|
"Trades list is empty or None, cannot calculate average gain."
|
|
338
338
|
)
|
|
339
339
|
|
|
340
|
-
gains = [t.
|
|
341
|
-
cost = sum(t.cost for t in trades if t.
|
|
340
|
+
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
342
|
|
|
343
343
|
if not gains:
|
|
344
344
|
return 0.0, 0.0
|
|
@@ -371,10 +371,10 @@ def get_average_trade_loss(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
371
371
|
if not losing_trades or len(losing_trades) == 0:
|
|
372
372
|
return 0.0, 0.0
|
|
373
373
|
|
|
374
|
-
losses = [t.
|
|
374
|
+
losses = [t.net_gain_absolute for t in losing_trades]
|
|
375
375
|
average_loss = sum(losses) / len(losses)
|
|
376
376
|
percentage_returns = [
|
|
377
|
-
(t.
|
|
377
|
+
(t.net_gain_absolute / t.cost) for t in losing_trades if t.cost > 0
|
|
378
378
|
]
|
|
379
379
|
average_return_percentage = (
|
|
380
380
|
sum(percentage_returns) / len(percentage_returns)
|
|
@@ -404,15 +404,15 @@ def get_current_average_trade_loss(
|
|
|
404
404
|
"Trades list is empty or None, cannot calculate average loss."
|
|
405
405
|
)
|
|
406
406
|
|
|
407
|
-
losing_trades = [t for t in trades if t.
|
|
407
|
+
losing_trades = [t for t in trades if t.net_gain_absolute < 0]
|
|
408
408
|
|
|
409
409
|
if not losing_trades or len(losing_trades) == 0:
|
|
410
410
|
return 0.0, 0.0
|
|
411
411
|
|
|
412
|
-
losses = [t.
|
|
412
|
+
losses = [t.net_gain_absolute for t in losing_trades]
|
|
413
413
|
average_loss = sum(losses) / len(losses)
|
|
414
414
|
percentage_returns = [
|
|
415
|
-
(t.
|
|
415
|
+
(t.net_gain_absolute / t.cost) for t in losing_trades if t.cost > 0
|
|
416
416
|
]
|
|
417
417
|
average_return_percentage = (
|
|
418
418
|
sum(percentage_returns) / len(percentage_returns)
|
|
@@ -438,7 +438,7 @@ def get_median_trade_return(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
438
438
|
if not trades:
|
|
439
439
|
return 0.0, 0.0
|
|
440
440
|
|
|
441
|
-
sorted_returns = sorted(t.
|
|
441
|
+
sorted_returns = sorted(t.net_gain_absolute for t in trades)
|
|
442
442
|
n = len(sorted_returns)
|
|
443
443
|
mid = n // 2
|
|
444
444
|
|
|
@@ -466,7 +466,7 @@ def get_best_trade(trades: List[Trade]) -> Trade:
|
|
|
466
466
|
if not trades:
|
|
467
467
|
return None
|
|
468
468
|
|
|
469
|
-
return max(trades, key=lambda t: t.
|
|
469
|
+
return max(trades, key=lambda t: t.net_gain_absolute)
|
|
470
470
|
|
|
471
471
|
|
|
472
472
|
def get_worst_trade(trades: List[Trade]) -> Trade:
|
|
@@ -127,7 +127,7 @@ investing_algorithm_framework/domain/models/time_unit.py,sha256=dCi1lcVK-QGlOt6y
|
|
|
127
127
|
investing_algorithm_framework/domain/models/tracing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
128
|
investing_algorithm_framework/domain/models/tracing/trace.py,sha256=iAVEN102-y_7Wj9Qg7kdti8-2I63Y8UG0SF3V2pkHj8,699
|
|
129
129
|
investing_algorithm_framework/domain/models/trade/__init__.py,sha256=2hX5zmAodsEuFeFghsQhinNobXVuc4oYcMeczY2sbsc,308
|
|
130
|
-
investing_algorithm_framework/domain/models/trade/trade.py,sha256=
|
|
130
|
+
investing_algorithm_framework/domain/models/trade/trade.py,sha256=lsiBYs_cJKrSCoprag6hhhL9uGmgi--hBycIPXMLGHM,12855
|
|
131
131
|
investing_algorithm_framework/domain/models/trade/trade_risk_type.py,sha256=f-1bOc2GkdphPL3ewPzgsZ5OLX2_fc2e1DVARDl1RRc,839
|
|
132
132
|
investing_algorithm_framework/domain/models/trade/trade_status.py,sha256=9b5QDwg8vsu_iRtGWatJ1rJFubjIWslKHTG3cK0zVQ4,1004
|
|
133
133
|
investing_algorithm_framework/domain/models/trade/trade_stop_loss.py,sha256=B9mBALaqOu2VI9v_PTv6C2ZrP6afTEi7seBD8kZi7bw,10366
|
|
@@ -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=
|
|
228
|
+
investing_algorithm_framework/services/metrics/trades.py,sha256=BR-9jcgVq9vXxfborngS7gYWwbDkcS2HikjYjQwnjRQ,13632
|
|
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.
|
|
256
|
-
investing_algorithm_framework-7.16.
|
|
257
|
-
investing_algorithm_framework-7.16.
|
|
258
|
-
investing_algorithm_framework-7.16.
|
|
259
|
-
investing_algorithm_framework-7.16.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|