proof-of-portfolio 0.0.98__py3-none-any.whl → 0.0.100__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.
@@ -1,2 +1,2 @@
1
1
  # This file is auto-generated during build
2
- __version__ = "0.0.98"
2
+ __version__ = "0.0.100"
@@ -31,7 +31,7 @@ fn exp_scaled(x_scaled: i64) -> i64 {
31
31
  }
32
32
 
33
33
  pub fn daily_max_drawdown(log_returns: [i64; ARRAY_SIZE], actual_len: u32) -> i64 {
34
- let mut max_drawdown_factor = SCALE;
34
+ let mut max_drawdown_decimal: i64 = 0;
35
35
 
36
36
  if actual_len > 0 {
37
37
  let mut cumulative_sum: i64 = 0;
@@ -45,21 +45,19 @@ pub fn daily_max_drawdown(log_returns: [i64; ARRAY_SIZE], actual_len: u32) -> i6
45
45
  running_max = cumulative_sum;
46
46
  }
47
47
 
48
- if running_max > 0 {
49
- let cumulative_value = exp_scaled(cumulative_sum);
50
- let max_value = exp_scaled(running_max);
51
-
52
- let drawdown_factor = (cumulative_value * SCALE) / max_value;
53
-
54
- if drawdown_factor < max_drawdown_factor {
55
- max_drawdown_factor = drawdown_factor;
48
+ let delta_scaled = cumulative_sum - running_max;
49
+ if delta_scaled < 0 {
50
+ let exp_delta = exp_scaled(delta_scaled);
51
+ let dd_decimal_i = SCALE - exp_delta;
52
+ if dd_decimal_i > max_drawdown_decimal {
53
+ max_drawdown_decimal = dd_decimal_i;
56
54
  }
57
55
  }
58
56
  }
59
57
  }
60
58
  }
61
59
 
62
- SCALE - max_drawdown_factor
60
+ max_drawdown_decimal
63
61
  }
64
62
 
65
63
  #[test]
@@ -9,6 +9,7 @@ pub fn omega(
9
9
  use_weighting: bool,
10
10
  bypass_confidence: bool,
11
11
  omega_loss_min: i64,
12
+ daily_rf: i64,
12
13
  ) -> i64 {
13
14
  if !bypass_confidence & actual_len < STATISTICAL_CONFIDENCE_MINIMUM_N {
14
15
  OMEGA_NOCONFIDENCE_VALUE
@@ -23,10 +24,10 @@ pub fn omega(
23
24
  if (i as u32) < actual_len {
24
25
  let weight = weights[i];
25
26
  let log_return = log_returns[i];
26
- if log_return > 0 {
27
+ if log_return > daily_rf {
27
28
  product_sum_positive += log_return * weight;
28
29
  sum_weights_positive += weight;
29
- } else if log_return < 0 {
30
+ } else if log_return < daily_rf {
30
31
  product_sum_negative += log_return * weight;
31
32
  sum_weights_negative += weight;
32
33
  }
@@ -58,10 +59,10 @@ pub fn omega(
58
59
 
59
60
  for i in 0..ARRAY_SIZE {
60
61
  if (i as u32) < actual_len {
61
- if log_returns[i] > 0 {
62
+ if log_returns[i] > daily_rf {
62
63
  positive_sum += log_returns[i];
63
64
  count_pos += 1;
64
- } else if log_returns[i] < 0 {
65
+ } else if log_returns[i] < daily_rf {
65
66
  negative_sum += (-log_returns[i]);
66
67
  count_neg += 1;
67
68
  }
@@ -97,7 +98,7 @@ fn test_omega_all_positive() {
97
98
  }
98
99
 
99
100
  let weights = [100000; ARRAY_SIZE];
100
- let result = omega(returns, 5, weights, false, false, 10000000);
101
+ let result = omega(returns, 5, weights, false, false, 10000000, 0);
101
102
  assert(result == 10000000);
102
103
  }
103
104
 
@@ -109,7 +110,7 @@ fn test_omega_all_negative() {
109
110
  }
110
111
 
111
112
  let weights = [100000; ARRAY_SIZE];
112
- let result = omega(returns, 5, weights, false, false, 10000000);
113
+ let result = omega(returns, 5, weights, false, false, 10000000, 0);
113
114
  assert(result == 0);
114
115
  }
115
116
 
@@ -122,7 +123,7 @@ fn test_omega_mixed_returns() {
122
123
  returns[3] = -300;
123
124
 
124
125
  let weights = [100000; ARRAY_SIZE];
125
- let result = omega(returns, 4, weights, false, false, 10000000);
126
+ let result = omega(returns, 4, weights, false, false, 10000000, 0);
126
127
  assert(result == 22500000);
127
128
  }
128
129
 
@@ -134,6 +135,6 @@ fn test_omega_zero_returns() {
134
135
  }
135
136
 
136
137
  let weights = [100000; ARRAY_SIZE];
137
- let result = omega(returns, 5, weights, false, false, 10000000);
138
+ let result = omega(returns, 5, weights, false, false, 10000000, 0);
138
139
  assert(result == 10000000);
139
140
  }
@@ -18,6 +18,7 @@ pub fn sortino(
18
18
  avg_daily_return: i64,
19
19
  variance_val: i64,
20
20
  ann_excess_return_val: i64,
21
+ daily_rf: i64,
21
22
  ) -> i64 {
22
23
  if !bypass_confidence & actual_len < STATISTICAL_CONFIDENCE_MINIMUM_N {
23
24
  SORTINO_NOCONFIDENCE_VALUE
@@ -31,7 +32,7 @@ pub fn sortino(
31
32
 
32
33
  for i in 0..ARRAY_SIZE {
33
34
  if (i as u32) < actual_len {
34
- if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
35
+ if log_returns[i] < daily_rf {
35
36
  downside_returns_sum += log_returns[i];
36
37
  negative_count += 1;
37
38
  if use_weighting {
@@ -57,7 +58,7 @@ pub fn sortino(
57
58
  let mut weighted_sum_sq_diff: i64 = 0;
58
59
  for i in 0..ARRAY_SIZE {
59
60
  if (i as u32) < actual_len {
60
- if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
61
+ if log_returns[i] < daily_rf {
61
62
  let diff = log_returns[i] - downside_mean;
62
63
  let sq_diff = (diff * diff) / 1000000;
63
64
  weighted_sum_sq_diff += sq_diff * weights[i];
@@ -73,7 +74,7 @@ pub fn sortino(
73
74
  let mut sum_sq_diff: i64 = 0;
74
75
  for i in 0..ARRAY_SIZE {
75
76
  if (i as u32) < actual_len {
76
- if log_returns[i] < DAILY_LOG_RISK_FREE_RATE {
77
+ if log_returns[i] < daily_rf {
77
78
  let diff = log_returns[i] - downside_mean;
78
79
  let sq_diff = (diff * diff) / 1000000;
79
80
  sum_sq_diff += sq_diff;
@@ -126,6 +127,7 @@ fn test_sortino_normal_case() {
126
127
  avg,
127
128
  variance_val,
128
129
  ann_excess,
130
+ 0,
129
131
  );
130
132
  assert(result != 0);
131
133
  }
@@ -151,6 +153,7 @@ fn test_sortino_no_negative_returns() {
151
153
  avg,
152
154
  variance_val,
153
155
  ann_excess,
156
+ 0,
154
157
  );
155
158
  assert(result == 0);
156
159
  }
@@ -176,6 +179,7 @@ fn test_sortino_all_negative_returns() {
176
179
  avg,
177
180
  variance_val,
178
181
  ann_excess,
182
+ 0,
179
183
  );
180
184
  assert(result != 0);
181
185
  }
@@ -203,6 +207,7 @@ fn test_sortino_high_downside_volatility() {
203
207
  avg,
204
208
  variance_val,
205
209
  ann_excess,
210
+ 0,
206
211
  );
207
212
  assert(result != 0);
208
213
  }
@@ -29,6 +29,7 @@ fn main(
29
29
  days_in_year: i64,
30
30
  omega_loss_min: i64,
31
31
  annual_risk_free: i64,
32
+ daily_rf: i64,
32
33
  drawdown_max_percent: i64,
33
34
  ) -> pub [Field; 9] {
34
35
  // Verify all trading signals are included in the merkle tree
@@ -137,6 +138,7 @@ fn main(
137
138
  use_weighting,
138
139
  bypass_confidence,
139
140
  omega_loss_min,
141
+ daily_rf,
140
142
  );
141
143
  let sortino_ratio = sortino(
142
144
  returns_array,
@@ -148,6 +150,7 @@ fn main(
148
150
  avg_daily_return,
149
151
  variance_val,
150
152
  ann_excess_return_val,
153
+ daily_rf,
151
154
  );
152
155
  let stat_confidence = statistical_confidence(
153
156
  returns_array,