tarf_monte_carlo 3.36 → 3.37
Sign up to get free protection for your applications and to get access to all the features.
- 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]);
|