tarf_monte_carlo 3.40 → 3.45
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 +41 -31
- 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: 9686343290fbaf7a6efc80b914581c01c3b8b6c3fae2ee230143beb545d48700
|
|
4
|
+
data.tar.gz: 83b9cd1f3a9aecab8068ca3f95b80d47aebc3d6bb4a3eaa2fa830eabcd826fe5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7dbaceded908b6a57c4fc569cc5a9858dce6e1468cd9966b35bc5e79bee00c43ac736e7c56baaf54bd5eb3aec8bc43b2631b8afae32ad8fa0c7449568e1e11bc
|
|
7
|
+
data.tar.gz: c0efcc18cab06eb9d13da7d427d0523155e33cad5e2ea2064be63822afc3ead1617e02ed10856967534985d2b04b0ca6cd9559ff6aa9c0a79922103364b70cc4
|
|
@@ -196,7 +196,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
196
196
|
double **metrics;
|
|
197
197
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
198
198
|
metrics = ( double** ) malloc( 3 * sizeof(double*) );
|
|
199
|
-
for( metric = 0; metric <
|
|
199
|
+
for( metric = 0; metric < 4; metric++ ) {
|
|
200
200
|
metrics[metric] = ( double* ) malloc( DATAPOINTS * sizeof(double) );
|
|
201
201
|
for(leg = 0; leg < DATAPOINTS; leg++) {
|
|
202
202
|
metrics[metric][leg] = 0.0;
|
|
@@ -417,11 +417,16 @@ 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 ((sim_count % INTERVAL) == 0){
|
|
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
|
+
|
|
426
|
+
metrics[2][point_pos] = sim_pos[NL-1];
|
|
427
|
+
metrics[2][point_pos+1] = sim_dash_pos[NL-1];
|
|
428
|
+
metrics[3][point_pos] = knockedLeg;
|
|
429
|
+
metrics[3][point_pos+1] = knockedLeg_dash;
|
|
425
430
|
}
|
|
426
431
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
427
432
|
if(knockedLeg >= 0){
|
|
@@ -439,11 +444,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
439
444
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
|
440
445
|
}
|
|
441
446
|
|
|
442
|
-
if ((sim_count % INTERVAL) == 0){
|
|
443
|
-
metrics[0][
|
|
444
|
-
metrics[1][
|
|
445
|
-
metrics[0][
|
|
446
|
-
metrics[1][
|
|
447
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
|
448
|
+
metrics[0][point_pos] = (knockedLeg >= 0) ? sim[knockedLeg] : sim[NL-1];
|
|
449
|
+
metrics[1][point_pos] = ( *( Xs_array + 0 ) );
|
|
450
|
+
metrics[0][point_pos+1] = (knockedLeg_dash >= 0) ? sim[knockedLeg_dash] : sim[NL-1];
|
|
451
|
+
metrics[1][point_pos+1] = ( *( Xs_array + 0 ) );
|
|
447
452
|
}
|
|
448
453
|
|
|
449
454
|
} else if( KType == ABSOLUTE || KType == PIVOT_ABSOLUTE || KType == COLLAR_ABSOLUTE || KType == DOUBLE_STRIKE_ABSOLUTE ) {
|
|
@@ -572,19 +577,25 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
572
577
|
pvs_pos[sim_count + 1] = sim_dash_pos_sum;
|
|
573
578
|
pvs_neg[sim_count] = sim_neg_sum;
|
|
574
579
|
pvs_neg[sim_count + 1] = sim_dash_neg_sum;
|
|
575
|
-
if ((sim_count % INTERVAL) == 0){
|
|
576
|
-
metrics[2][sim_count] = sim_pos_sum;
|
|
577
|
-
metrics[2][sim_count+1] = sim_dash_pos_sum;
|
|
578
|
-
}
|
|
579
580
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
581
|
+
|
|
582
|
+
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
583
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
|
584
|
+
// metrics[2][point_pos] = sim_pos_sum;
|
|
585
|
+
// metrics[2][point_pos+1] = sim_dash_pos_sum;
|
|
586
|
+
point_pos += 2;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
else{
|
|
590
|
+
//
|
|
591
|
+
// increment metric storing point by 4
|
|
592
|
+
// Note: no limit condition here
|
|
593
|
+
//
|
|
594
|
+
if( (sim_count + 2) % INTERVAL == 0 ) {
|
|
595
|
+
// rb_p(rb_str_new2("T:"));
|
|
596
|
+
// rb_p(INT2NUM(point_pos));
|
|
597
|
+
point_pos += 4;
|
|
598
|
+
}
|
|
588
599
|
}
|
|
589
600
|
}
|
|
590
601
|
// run simulations loop
|
|
@@ -618,9 +629,9 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
618
629
|
//
|
|
619
630
|
// rb_p(rb_str_new2("Converting metrics"));
|
|
620
631
|
VALUE final_metrics = rb_ary_new();
|
|
621
|
-
|
|
632
|
+
|
|
622
633
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
623
|
-
for(metric = 0; metric <
|
|
634
|
+
for(metric = 0; metric < 4; metric++) {
|
|
624
635
|
VALUE leg_metrics = rb_ary_new();
|
|
625
636
|
|
|
626
637
|
for(leg = 0; leg < DATAPOINTS; leg++) {
|
|
@@ -652,12 +663,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
652
663
|
//
|
|
653
664
|
// free your arrays from memory once you're done using them
|
|
654
665
|
//
|
|
655
|
-
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ?
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
free(metrics);
|
|
666
|
+
// int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ? 4 : DATAPOINTS;
|
|
667
|
+
// for(metric = 0; metric < dp; metric++) {
|
|
668
|
+
// free( metrics[metric] );
|
|
669
|
+
// }
|
|
670
|
+
// free(metrics);
|
|
661
671
|
|
|
662
672
|
return final_pvs;
|
|
663
673
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.45'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vivek Routh
|
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
140
140
|
- !ruby/object:Gem::Version
|
|
141
141
|
version: '0'
|
|
142
142
|
requirements: []
|
|
143
|
-
rubygems_version: 3.0.
|
|
143
|
+
rubygems_version: 3.0.8
|
|
144
144
|
signing_key:
|
|
145
145
|
specification_version: 4
|
|
146
146
|
summary: Monte Carlo Simulation.
|