proof-of-portfolio 0.0.91__tar.gz → 0.0.93__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.
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/PKG-INFO +1 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/_version.py +1 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/calmar.nr +2 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/sortino.nr +51 -13
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/risk_normalization.nr +5 -8
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/variance.nr +1 -5
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +1 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/src/main.nr +2 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/target/circuits.json +1 -1
- proof_of_portfolio-0.0.93/proof_of_portfolio/circuits/vk/vk +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/proof_generator.py +8 -2
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/pyproject.toml +1 -1
- proof_of_portfolio-0.0.91/proof_of_portfolio/circuits/vk/vk +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/README.md +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/__init__.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/analyze_data.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/omega.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/pnl_score.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/ann_excess_return.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_cps_to_log_return/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_cps_to_log_return/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_cps_to_log_return/target/just_cps_to_log_return.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_pnl/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_pnl/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/all.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/calmar.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/drawdown.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/generate_input_data.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/log_returns.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/main.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/omega.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/sharpe.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/sortino.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/tstat.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/demos/utils.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/main.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/min_metrics.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/miner.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/parsing_utils.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/post_install.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/signal_processor.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/tree_generator/target.gz +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/validator.py +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/requires.txt +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio.egg-info/top_level.txt +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/setup.cfg +0 -0
- {proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: proof-of-portfolio
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.93
|
4
4
|
Summary: Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics
|
5
5
|
Author-email: "Inference Labs, Inc." <info@inferencelabs.com>
|
6
6
|
Requires-Python: >=3.10
|
@@ -1,2 +1,2 @@
|
|
1
1
|
# This file is auto-generated during build
|
2
|
-
__version__ = "0.0.
|
2
|
+
__version__ = "0.0.93"
|
@@ -29,7 +29,8 @@ pub fn calmar(
|
|
29
29
|
if drawdown_normalization_factor == 0 {
|
30
30
|
0
|
31
31
|
} else {
|
32
|
-
let raw_calmar = (base_return_percentage * drawdown_normalization_factor) / SCALE
|
32
|
+
let raw_calmar = ((base_return_percentage * drawdown_normalization_factor) / SCALE)
|
33
|
+
* RATIO_SCALE_FACTOR;
|
33
34
|
let calmar_cap = 10 * RATIO_SCALE_FACTOR;
|
34
35
|
if raw_calmar > calmar_cap {
|
35
36
|
calmar_cap
|
@@ -24,33 +24,71 @@ pub fn sortino(
|
|
24
24
|
} else {
|
25
25
|
let excess_return = ann_excess_return_val;
|
26
26
|
|
27
|
-
let mut
|
28
|
-
let mut
|
27
|
+
let mut weighted_sum_down: i64 = 0;
|
28
|
+
let mut sum_w_down: i64 = 0;
|
29
29
|
let mut downside_returns_sum: i64 = 0;
|
30
|
+
let mut negative_count: u32 = 0;
|
30
31
|
|
31
32
|
for i in 0..ARRAY_SIZE {
|
32
33
|
if (i as u32) < actual_len {
|
33
34
|
if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
|
34
35
|
downside_returns_sum += log_returns[i];
|
35
|
-
negative_count
|
36
|
+
negative_count += 1;
|
37
|
+
if use_weighting {
|
38
|
+
weighted_sum_down += log_returns[i] * weights[i];
|
39
|
+
sum_w_down += weights[i];
|
40
|
+
}
|
36
41
|
}
|
37
42
|
}
|
38
43
|
}
|
39
44
|
|
40
45
|
if negative_count > 1 {
|
41
|
-
let downside_mean =
|
46
|
+
let downside_mean = if use_weighting {
|
47
|
+
if sum_w_down != 0 {
|
48
|
+
weighted_sum_down / sum_w_down
|
49
|
+
} else {
|
50
|
+
0
|
51
|
+
}
|
52
|
+
} else {
|
53
|
+
downside_returns_sum / (negative_count as i64)
|
54
|
+
};
|
42
55
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
56
|
+
let downside_variance_pre = if use_weighting {
|
57
|
+
let mut weighted_sum_sq_diff: i64 = 0;
|
58
|
+
for i in 0..ARRAY_SIZE {
|
59
|
+
if (i as u32) < actual_len {
|
60
|
+
if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
|
61
|
+
let diff = log_returns[i] - downside_mean;
|
62
|
+
let sq_diff = (diff * diff) / 1000000;
|
63
|
+
weighted_sum_sq_diff += sq_diff * weights[i];
|
64
|
+
}
|
48
65
|
}
|
49
66
|
}
|
50
|
-
|
67
|
+
if sum_w_down != 0 {
|
68
|
+
weighted_sum_sq_diff / sum_w_down
|
69
|
+
} else {
|
70
|
+
0
|
71
|
+
}
|
72
|
+
} else {
|
73
|
+
let mut sum_sq_diff: i64 = 0;
|
74
|
+
for i in 0..ARRAY_SIZE {
|
75
|
+
if (i as u32) < actual_len {
|
76
|
+
if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
|
77
|
+
let diff = log_returns[i] - downside_mean;
|
78
|
+
let sq_diff = (diff * diff) / 1000000;
|
79
|
+
sum_sq_diff += sq_diff;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
if negative_count > 0 {
|
84
|
+
sum_sq_diff / (negative_count as i64)
|
85
|
+
} else {
|
86
|
+
0
|
87
|
+
}
|
88
|
+
};
|
51
89
|
|
52
|
-
let
|
53
|
-
let downside_volatility = sqrt(
|
90
|
+
let annualized_variance = downside_variance_pre * (DAYS_IN_YEAR as i64) * 1000000;
|
91
|
+
let downside_volatility = sqrt(annualized_variance as u64) as i64;
|
54
92
|
|
55
93
|
let effective_downside_volatility = if downside_volatility > SORTINO_DOWNSIDE_MINIMUM {
|
56
94
|
downside_volatility
|
@@ -60,7 +98,7 @@ pub fn sortino(
|
|
60
98
|
|
61
99
|
(excess_return * RATIO_SCALE_FACTOR) / effective_downside_volatility
|
62
100
|
} else {
|
63
|
-
|
101
|
+
0
|
64
102
|
}
|
65
103
|
}
|
66
104
|
}
|
@@ -1,20 +1,17 @@
|
|
1
1
|
use crate::utils::constants::SCALE;
|
2
2
|
|
3
3
|
pub fn mdd_augmentation(drawdown_decimal: i64) -> i64 {
|
4
|
-
let
|
4
|
+
let max_drawdown_percentage = 10;
|
5
5
|
|
6
|
-
if (
|
6
|
+
if (drawdown_decimal <= 0) | (drawdown_decimal >= SCALE) {
|
7
7
|
0
|
8
8
|
} else {
|
9
|
-
let
|
10
|
-
let max_drawdown_percentage = 10;
|
9
|
+
let dd_percent = (drawdown_decimal * 100) / SCALE;
|
11
10
|
|
12
|
-
if
|
13
|
-
0
|
14
|
-
} else if drawdown_percentage <= 0 {
|
11
|
+
if dd_percent <= 0 | dd_percent >= max_drawdown_percentage {
|
15
12
|
0
|
16
13
|
} else {
|
17
|
-
SCALE /
|
14
|
+
SCALE / dd_percent
|
18
15
|
}
|
19
16
|
}
|
20
17
|
}
|
@@ -28,7 +28,7 @@ pub fn weighting_distribution(actual_len: u32) -> [i64; ARRAY_SIZE] {
|
|
28
28
|
for i in 0..ARRAY_SIZE {
|
29
29
|
if (i as u32) < actual_len {
|
30
30
|
let position_from_newest = (actual_len - 1) - (i as u32);
|
31
|
-
let neg_x_scaled = -(decay_rate * (position_from_newest as i64)) /
|
31
|
+
let neg_x_scaled = -(decay_rate * (position_from_newest as i64)) / 1;
|
32
32
|
let exp_val_scaled = exp_decay_scaled(neg_x_scaled);
|
33
33
|
|
34
34
|
let weighted_val = (weight_range * exp_val_scaled) / scale;
|
{proof_of_portfolio-0.0.91 → proof_of_portfolio-0.0.93}/proof_of_portfolio/circuits/src/main.nr
RENAMED
@@ -25,6 +25,7 @@ fn main(
|
|
25
25
|
use_weighting: bool,
|
26
26
|
bypass_confidence: pub bool,
|
27
27
|
account_size: i64,
|
28
|
+
weights: [i64; ARRAY_SIZE],
|
28
29
|
) -> pub [Field; 9] {
|
29
30
|
// Verify all trading signals are included in the merkle tree
|
30
31
|
let mut all_verified = true;
|
@@ -51,7 +52,7 @@ fn main(
|
|
51
52
|
}
|
52
53
|
|
53
54
|
let weights = if use_weighting {
|
54
|
-
|
55
|
+
weights
|
55
56
|
} else {
|
56
57
|
// Equal weights when weighting is disabled
|
57
58
|
let mut equal_weights = [0; ARRAY_SIZE];
|