tarf_monte_carlo 3.41 → 3.42
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 +22 -20
- 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: 401dcffa11be28cb765633d86b3b3351af887311364893a4b4e98bcda42f1f2b
|
4
|
+
data.tar.gz: 8aa5d4b647a4ead25e93d8ec6d5d77f6927d767b368915c367a1557cfcd0d578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a955c81445337676aa5c291fed82e34fa74b37a999926158b9cd09bb5c6ae14888f483c43dcafc33b04d43f4fc3c016374f81c19ac39aa71933c6746196a0978
|
7
|
+
data.tar.gz: 73b9c4e40243dc65b8f711d515a1ab6196fa4c17991f12d72543cb8918b990e83844f4679e55fb28ebf3bac6857ff0e9cbdd2cf5ef55f4fdeb9dc4fa1b9135f9
|
@@ -417,11 +417,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
417
417
|
else{
|
418
418
|
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1], dir_sign);
|
419
419
|
}
|
420
|
-
if ((
|
421
|
-
metrics[0][
|
422
|
-
metrics[1][
|
423
|
-
metrics[0][
|
424
|
-
metrics[1][
|
420
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
421
|
+
metrics[0][point_pos] = sim[NL-1];
|
422
|
+
metrics[1][point_pos] = (knockedLeg >= 0) ? ( *( Xs_array + (knockedLeg) ) ) : 0;
|
423
|
+
metrics[0][point_pos+1] = sim_dash[NL-1];
|
424
|
+
metrics[1][point_pos+1] = (knockedLeg_dash >= 0) ? ( *( Xs_array + (knockedLeg_dash) ) ) : 0;
|
425
425
|
}
|
426
426
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
427
427
|
if(knockedLeg >= 0){
|
@@ -439,11 +439,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
439
439
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
440
440
|
}
|
441
441
|
|
442
|
-
if ((
|
443
|
-
metrics[0][
|
444
|
-
metrics[1][
|
445
|
-
metrics[0][
|
446
|
-
metrics[1][
|
442
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
443
|
+
metrics[0][point_pos] = (knockedLeg >= 0) ? sim[knockedLeg] : sim[NL-1];
|
444
|
+
metrics[1][point_pos] = ( *( Xs_array + 0 ) );
|
445
|
+
metrics[0][point_pos+1] = (knockedLeg_dash >= 0) ? sim[knockedLeg_dash] : sim[NL-1];
|
446
|
+
metrics[1][point_pos+1] = ( *( Xs_array + 0 ) );
|
447
447
|
}
|
448
448
|
|
449
449
|
} else if( KType == ABSOLUTE || KType == PIVOT_ABSOLUTE || KType == COLLAR_ABSOLUTE || KType == DOUBLE_STRIKE_ABSOLUTE ) {
|
@@ -572,19 +572,22 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
572
572
|
pvs_pos[sim_count + 1] = sim_dash_pos_sum;
|
573
573
|
pvs_neg[sim_count] = sim_neg_sum;
|
574
574
|
pvs_neg[sim_count + 1] = sim_dash_neg_sum;
|
575
|
-
if ((
|
576
|
-
metrics[2][
|
577
|
-
metrics[2][
|
575
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
576
|
+
metrics[2][point_pos] = sim_pos_sum;
|
577
|
+
metrics[2][point_pos+1] = sim_dash_pos_sum;
|
578
|
+
point_pos += 2;
|
578
579
|
}
|
579
580
|
|
580
581
|
//
|
581
582
|
// increment metric storing point by 4
|
582
583
|
// Note: no limit condition here
|
583
584
|
//
|
584
|
-
if
|
585
|
-
|
586
|
-
|
587
|
-
|
585
|
+
if (!(KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE)){
|
586
|
+
if( (sim_count + 2) % INTERVAL == 0 ) {
|
587
|
+
// rb_p(rb_str_new2("T:"));
|
588
|
+
// rb_p(INT2NUM(point_pos));
|
589
|
+
point_pos += 4;
|
590
|
+
}
|
588
591
|
}
|
589
592
|
}
|
590
593
|
// run simulations loop
|
@@ -618,7 +621,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
618
621
|
//
|
619
622
|
// rb_p(rb_str_new2("Converting metrics"));
|
620
623
|
VALUE final_metrics = rb_ary_new();
|
621
|
-
|
624
|
+
|
622
625
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
623
626
|
for(metric = 0; metric < 3; metric++) {
|
624
627
|
VALUE leg_metrics = rb_ary_new();
|
@@ -652,8 +655,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
652
655
|
//
|
653
656
|
// free your arrays from memory once you're done using them
|
654
657
|
//
|
655
|
-
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ? 3 : DATAPOINTS;
|
656
|
-
|
658
|
+
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ? 3 : DATAPOINTS;
|
657
659
|
for(metric = 0; metric < dp; metric++) {
|
658
660
|
free( metrics[metric] );
|
659
661
|
}
|