tarf_monte_carlo 3.28 → 3.29
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 +8 -6
- 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: f522654ff1db977c9473f222c2759823b5abfabec305a05f46808509a089e997
|
4
|
+
data.tar.gz: 9057078c47fe076d38ba905d9bef3e857c8afff6962c3cbdc3afb73b88f41807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbe7c24227ce0280a09b0d055e1158f2585b6b46307065fa6d460ab8ed53b8a2423c398e2dd5ae6273249a0bfd10b0beb8abcedf4337597ffa2097940ed0efbd
|
7
|
+
data.tar.gz: 5f59b811c836dfb9b13cbafc7264651aad54a03a7420042543549e25548de72574a82274b54e1951d9dd9d3b763af0437ef95d35ff6b6fd29161ce355280fe2f
|
@@ -90,11 +90,11 @@ double european_payoff(double strike, double spot, int cp_sign, int dir_sign, do
|
|
90
90
|
}
|
91
91
|
|
92
92
|
double get_equivalent_notional(int conversion_sign, double notional, float rate){
|
93
|
-
return (conversion_sign == 1) ? (notional / rate) : notional
|
93
|
+
return (conversion_sign == 1) ? (notional / rate) : notional;
|
94
94
|
}
|
95
95
|
|
96
96
|
double get_equivalent_rebate(int conversion_sign, double rebate, float rate){
|
97
|
-
return (conversion_sign == 1) ? (rebate * rate) : rebate
|
97
|
+
return (conversion_sign == 1) ? (rebate * rate) : rebate;
|
98
98
|
}
|
99
99
|
|
100
100
|
// main method for running monte carlo simulation from sidekiq worker/outside method
|
@@ -122,6 +122,8 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
122
122
|
int dir_sign = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("direction_sign")) );
|
123
123
|
int dir2_sign = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("direction2_sign")) );
|
124
124
|
int cp_sign = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("callput_sign")) );
|
125
|
+
int conversion_sign = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("conversion_sign")) );
|
126
|
+
int rebate_conversion_sign = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("rebate_conversion_sign")) );
|
125
127
|
|
126
128
|
// assign leg specific attributes
|
127
129
|
double *pvs_pos = ( double* ) malloc( SCount * sizeof(double) );
|
@@ -392,25 +394,25 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
392
394
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
393
395
|
}
|
394
396
|
else{
|
395
|
-
sim_pos[NL-1] = get_equivalent_rebate(
|
397
|
+
sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1]);
|
396
398
|
}
|
397
399
|
if(knockedLeg_dash >= 0 ){
|
398
400
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + knockedLeg_dash ) ), sim_dash[NL-1]);
|
399
401
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
400
402
|
}
|
401
403
|
else{
|
402
|
-
sim_dash_pos[NL-1] = get_equivalent_rebate(
|
404
|
+
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1]);
|
403
405
|
}
|
404
406
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
405
407
|
if(knockedLeg >= 0){
|
406
|
-
sim_pos[knockedLeg] = get_equivalent_rebate(
|
408
|
+
sim_pos[knockedLeg] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg ) ), sim[knockedLeg]);
|
407
409
|
}
|
408
410
|
else{
|
409
411
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim[NL-1]);
|
410
412
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
411
413
|
}
|
412
414
|
if(knockedLeg_dash >= 0 ){
|
413
|
-
sim_dash_pos[knockedLeg_dash] = get_equivalent_rebate(
|
415
|
+
sim_dash_pos[knockedLeg_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg_dash ) ), sim[knockedLeg_dash]);
|
414
416
|
}
|
415
417
|
else{
|
416
418
|
double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + 0 ) ), sim_dash[NL-1]);
|