tarf_monte_carlo 3.42 → 3.47
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 +26 -18
- 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: a69379430c97fbbf86b791e49a7564c7504a21fa73f3ea44ede3ec1d3a876bc6
|
|
4
|
+
data.tar.gz: 3fcd6ef1020d223148c3279c80694c007373f933f434ee48258a62938188c130
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55528c53ec418a966b6e8e405ba177038e097993ac5a532bb99c4bfbc8d32048eea25ca8893749207c0ccb6e950ff0fdff6a573e99ccd71a5d627e40b3204a87
|
|
7
|
+
data.tar.gz: fd79143e72702699469613433aeffcc7fe75fa001c69a6f759582bb72059ba8847862eea11357dc365d73acf06e34a0362d3e09518ac08a865cc0480da13e3ed
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
#define FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE 14
|
|
46
46
|
|
|
47
47
|
#define DATAPOINTS 200 // data for plotting
|
|
48
|
+
#define BARRIER_DP 4 // data for plotting
|
|
48
49
|
#define INTERVAL 50
|
|
49
50
|
#define SIM_LIMIT 196 // 196 + 4 = 200 simulations nedded
|
|
50
51
|
|
|
@@ -195,8 +196,8 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
195
196
|
//
|
|
196
197
|
double **metrics;
|
|
197
198
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
198
|
-
metrics = ( double** ) malloc(
|
|
199
|
-
for( metric = 0; metric <
|
|
199
|
+
metrics = ( double** ) malloc( BARRIER_DP * sizeof(double*) );
|
|
200
|
+
for( metric = 0; metric < BARRIER_DP; metric++ ) {
|
|
200
201
|
metrics[metric] = ( double* ) malloc( DATAPOINTS * sizeof(double) );
|
|
201
202
|
for(leg = 0; leg < DATAPOINTS; leg++) {
|
|
202
203
|
metrics[metric][leg] = 0.0;
|
|
@@ -418,10 +419,12 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
418
419
|
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1], dir_sign);
|
|
419
420
|
}
|
|
420
421
|
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
|
421
|
-
metrics[0][point_pos]
|
|
422
|
-
metrics[1][point_pos]
|
|
422
|
+
metrics[0][point_pos] = sim[NL-1];
|
|
423
|
+
metrics[1][point_pos] = (knockedLeg >= 0) ? ( *( Xs_array + (knockedLeg) ) ) : 0;
|
|
424
|
+
metrics[3][point_pos] = knockedLeg;
|
|
423
425
|
metrics[0][point_pos+1] = sim_dash[NL-1];
|
|
424
426
|
metrics[1][point_pos+1] = (knockedLeg_dash >= 0) ? ( *( Xs_array + (knockedLeg_dash) ) ) : 0;
|
|
427
|
+
metrics[3][point_pos+1] = knockedLeg_dash;
|
|
425
428
|
}
|
|
426
429
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
427
430
|
if(knockedLeg >= 0){
|
|
@@ -440,10 +443,12 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
440
443
|
}
|
|
441
444
|
|
|
442
445
|
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
|
443
|
-
metrics[0][point_pos]
|
|
444
|
-
metrics[1][point_pos]
|
|
446
|
+
metrics[0][point_pos] = (knockedLeg >= 0) ? sim[knockedLeg] : sim[NL-1];
|
|
447
|
+
metrics[1][point_pos] = ( *( Xs_array + 0 ) );
|
|
448
|
+
metrics[3][point_pos] = knockedLeg;
|
|
445
449
|
metrics[0][point_pos+1] = (knockedLeg_dash >= 0) ? sim[knockedLeg_dash] : sim[NL-1];
|
|
446
450
|
metrics[1][point_pos+1] = ( *( Xs_array + 0 ) );
|
|
451
|
+
metrics[3][point_pos+1] = knockedLeg_dash;
|
|
447
452
|
}
|
|
448
453
|
|
|
449
454
|
} else if( KType == ABSOLUTE || KType == PIVOT_ABSOLUTE || KType == COLLAR_ABSOLUTE || KType == DOUBLE_STRIKE_ABSOLUTE ) {
|
|
@@ -572,17 +577,20 @@ 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 ((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;
|
|
579
|
-
}
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
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
|
+
//
|
|
586
594
|
if( (sim_count + 2) % INTERVAL == 0 ) {
|
|
587
595
|
// rb_p(rb_str_new2("T:"));
|
|
588
596
|
// rb_p(INT2NUM(point_pos));
|
|
@@ -623,7 +631,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
623
631
|
VALUE final_metrics = rb_ary_new();
|
|
624
632
|
|
|
625
633
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
|
626
|
-
for(metric = 0; metric <
|
|
634
|
+
for(metric = 0; metric < BARRIER_DP; metric++) {
|
|
627
635
|
VALUE leg_metrics = rb_ary_new();
|
|
628
636
|
|
|
629
637
|
for(leg = 0; leg < DATAPOINTS; leg++) {
|
|
@@ -655,7 +663,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
|
655
663
|
//
|
|
656
664
|
// free your arrays from memory once you're done using them
|
|
657
665
|
//
|
|
658
|
-
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ?
|
|
666
|
+
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ? BARRIER_DP : DATAPOINTS;
|
|
659
667
|
for(metric = 0; metric < dp; metric++) {
|
|
660
668
|
free( metrics[metric] );
|
|
661
669
|
}
|
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.47'
|
|
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.
|