tarf_monte_carlo 3.36 → 3.37
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.
- checksums.yaml +4 -4
- data/ext/tarf_monte_carlo/tarf_monte_carlo.c +7 -7
- data/lib/tarf_monte_carlo/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cde374a7687b72a44d4ac3227cce1e4145a4a8079e9196003e92da327b09ca9
|
4
|
+
data.tar.gz: '058135bcdcaec69d1f34532412061862516409723c44a7d4e83afa52e399cd5a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd79246265df4efc0d2474b69233c53a47a57e65073bc0a27ac9af8d4d5f6845b8189de8dd0f89211f26667001c0999f0a42ba7725a67eed7706bdbd4ae58272
|
7
|
+
data.tar.gz: 5412be0cec43e5f56b4c4be725bf407c093a312f0afbc1f5debc66973f9baed47b305f32447e90b899dedf2d17e349755c6cdaba56559dfc4af5e8abb34ffd7b
|
@@ -58,7 +58,7 @@ VALUE cTarfMonteCarlo = Qnil;
|
|
58
58
|
void Init_tarf_monte_carlo();
|
59
59
|
double european_payoff(double, double, int, int, double);
|
60
60
|
double get_equivalent_notional(int, double, float);
|
61
|
-
double get_equivalent_rebate(int, double, float);
|
61
|
+
double get_equivalent_rebate(int, double, float, int);
|
62
62
|
|
63
63
|
// Prototype for our methods - methods are prefixed by 'method_' here
|
64
64
|
VALUE method_box_muller( VALUE );
|
@@ -93,9 +93,9 @@ double get_equivalent_notional(int conversion_sign, double notional, float rate)
|
|
93
93
|
return (conversion_sign == 1) ? (notional / rate) : notional;
|
94
94
|
}
|
95
95
|
|
96
|
-
double get_equivalent_rebate(int conversion_sign, double rebate, float rate){
|
96
|
+
double get_equivalent_rebate(int conversion_sign, double rebate, float rate, int dir_sign){
|
97
97
|
double total = (conversion_sign == 1) ? (rebate * rate) : rebate;
|
98
|
-
return (-1 * total);
|
98
|
+
return (-1 * dir_sign * total);
|
99
99
|
}
|
100
100
|
|
101
101
|
// main method for running monte carlo simulation from sidekiq worker/outside method
|
@@ -395,25 +395,25 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
395
395
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
396
396
|
}
|
397
397
|
else{
|
398
|
-
sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1]);
|
398
|
+
sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1], dir_sign);
|
399
399
|
}
|
400
400
|
if(knockedLeg_dash >= 0 ){
|
401
401
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + knockedLeg_dash ) ), sim_dash[NL-1]);
|
402
402
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
403
403
|
}
|
404
404
|
else{
|
405
|
-
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1]);
|
405
|
+
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1], dir_sign);
|
406
406
|
}
|
407
407
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
408
408
|
if(knockedLeg >= 0){
|
409
|
-
sim_pos[knockedLeg] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg ) ), sim[knockedLeg]);
|
409
|
+
sim_pos[knockedLeg] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg ) ), sim[knockedLeg], dir_sign);
|
410
410
|
}
|
411
411
|
else{
|
412
412
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim[NL-1]);
|
413
413
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
414
414
|
}
|
415
415
|
if(knockedLeg_dash >= 0 ){
|
416
|
-
sim_dash_pos[knockedLeg_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg_dash ) ), sim[knockedLeg_dash]);
|
416
|
+
sim_dash_pos[knockedLeg_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg_dash ) ), sim[knockedLeg_dash], dir_sign);
|
417
417
|
}
|
418
418
|
else{
|
419
419
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim_dash[NL-1]);
|