tarf_monte_carlo 3.32 → 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 +8 -7
- data/lib/tarf_monte_carlo/version.rb +1 -1
- metadata +2 -2
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,8 +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){
|
97
|
-
|
96
|
+
double get_equivalent_rebate(int conversion_sign, double rebate, float rate, int dir_sign){
|
97
|
+
double total = (conversion_sign == 1) ? (rebate * rate) : rebate;
|
98
|
+
return (-1 * dir_sign * total);
|
98
99
|
}
|
99
100
|
|
100
101
|
// main method for running monte carlo simulation from sidekiq worker/outside method
|
@@ -394,25 +395,25 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
394
395
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
395
396
|
}
|
396
397
|
else{
|
397
|
-
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);
|
398
399
|
}
|
399
400
|
if(knockedLeg_dash >= 0 ){
|
400
401
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + knockedLeg_dash ) ), sim_dash[NL-1]);
|
401
402
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
402
403
|
}
|
403
404
|
else{
|
404
|
-
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);
|
405
406
|
}
|
406
407
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
407
408
|
if(knockedLeg >= 0){
|
408
|
-
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);
|
409
410
|
}
|
410
411
|
else{
|
411
412
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim[NL-1]);
|
412
413
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
413
414
|
}
|
414
415
|
if(knockedLeg_dash >= 0 ){
|
415
|
-
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);
|
416
417
|
}
|
417
418
|
else{
|
418
419
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim_dash[NL-1]);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tarf_monte_carlo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '3.
|
4
|
+
version: '3.37'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vivek Routh
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|