tarf_monte_carlo 3.41 → 3.46
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 +39 -28
- 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: 189ce30c759cdc40444b5ffc5443e8d93680adb392be409beb2f8d6445e1f667
|
4
|
+
data.tar.gz: 93b441a9d9481e0595b9b029e28792d2a4bf08299b0bd0ca3396a680bb85184c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61030c67b76c62f00b682f135f753d4d82d5fb91e3a5c822e57bf865138befd9b19d574ed9a8c70140fc7ea5aa7a14067a34a69d46ad663165d15849d587d17b
|
7
|
+
data.tar.gz: a2844c3dd6b4a9591cc6bed56edc3a896e8b83b162d7db9f5546573fe8d2e1fcf1bf2338e125a80145835aebfa2f6b7c55bb8f970f5db47e0317f682e242d3fc
|
@@ -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;
|
@@ -417,11 +418,16 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
417
418
|
else{
|
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
|
-
if ((
|
421
|
-
metrics[0][
|
422
|
-
metrics[1][
|
423
|
-
metrics[0][
|
424
|
-
metrics[1][
|
421
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
422
|
+
metrics[0][point_pos] = sim[NL-1];
|
423
|
+
metrics[1][point_pos] = (knockedLeg >= 0) ? ( *( Xs_array + (knockedLeg) ) ) : 0;
|
424
|
+
metrics[0][point_pos+1] = sim_dash[NL-1];
|
425
|
+
metrics[1][point_pos+1] = (knockedLeg_dash >= 0) ? ( *( Xs_array + (knockedLeg_dash) ) ) : 0;
|
426
|
+
|
427
|
+
metrics[2][point_pos] = sim_pos[NL-1];
|
428
|
+
metrics[2][point_pos+1] = sim_dash_pos[NL-1];
|
429
|
+
metrics[3][point_pos] = knockedLeg;
|
430
|
+
metrics[3][point_pos+1] = knockedLeg_dash;
|
425
431
|
}
|
426
432
|
} else if(KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
427
433
|
if(knockedLeg >= 0){
|
@@ -439,11 +445,11 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
439
445
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
440
446
|
}
|
441
447
|
|
442
|
-
if ((
|
443
|
-
metrics[0][
|
444
|
-
metrics[1][
|
445
|
-
metrics[0][
|
446
|
-
metrics[1][
|
448
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
449
|
+
metrics[0][point_pos] = (knockedLeg >= 0) ? sim[knockedLeg] : sim[NL-1];
|
450
|
+
metrics[1][point_pos] = ( *( Xs_array + 0 ) );
|
451
|
+
metrics[0][point_pos+1] = (knockedLeg_dash >= 0) ? sim[knockedLeg_dash] : sim[NL-1];
|
452
|
+
metrics[1][point_pos+1] = ( *( Xs_array + 0 ) );
|
447
453
|
}
|
448
454
|
|
449
455
|
} else if( KType == ABSOLUTE || KType == PIVOT_ABSOLUTE || KType == COLLAR_ABSOLUTE || KType == DOUBLE_STRIKE_ABSOLUTE ) {
|
@@ -572,19 +578,25 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
572
578
|
pvs_pos[sim_count + 1] = sim_dash_pos_sum;
|
573
579
|
pvs_neg[sim_count] = sim_neg_sum;
|
574
580
|
pvs_neg[sim_count + 1] = sim_dash_neg_sum;
|
575
|
-
if ((sim_count + 2) % INTERVAL == 0){
|
576
|
-
metrics[2][sim_count] = sim_pos_sum;
|
577
|
-
metrics[2][sim_count+1] = sim_dash_pos_sum;
|
578
|
-
}
|
579
581
|
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
582
|
+
|
583
|
+
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
584
|
+
if ((point_pos < DATAPOINTS) && (sim_count % INTERVAL) == 0){
|
585
|
+
// metrics[2][point_pos] = sim_pos_sum;
|
586
|
+
// metrics[2][point_pos+1] = sim_dash_pos_sum;
|
587
|
+
point_pos += 2;
|
588
|
+
}
|
589
|
+
}
|
590
|
+
else{
|
591
|
+
//
|
592
|
+
// increment metric storing point by 4
|
593
|
+
// Note: no limit condition here
|
594
|
+
//
|
595
|
+
if( (sim_count + 2) % INTERVAL == 0 ) {
|
596
|
+
// rb_p(rb_str_new2("T:"));
|
597
|
+
// rb_p(INT2NUM(point_pos));
|
598
|
+
point_pos += 4;
|
599
|
+
}
|
588
600
|
}
|
589
601
|
}
|
590
602
|
// run simulations loop
|
@@ -618,9 +630,9 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
618
630
|
//
|
619
631
|
// rb_p(rb_str_new2("Converting metrics"));
|
620
632
|
VALUE final_metrics = rb_ary_new();
|
621
|
-
|
633
|
+
|
622
634
|
if (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE){
|
623
|
-
for(metric = 0; metric <
|
635
|
+
for(metric = 0; metric < BARRIER_DP; metric++) {
|
624
636
|
VALUE leg_metrics = rb_ary_new();
|
625
637
|
|
626
638
|
for(leg = 0; leg < DATAPOINTS; leg++) {
|
@@ -652,8 +664,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
652
664
|
//
|
653
665
|
// free your arrays from memory once you're done using them
|
654
666
|
//
|
655
|
-
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ?
|
656
|
-
|
667
|
+
int dp = (KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE) ? BARRIER_DP : DATAPOINTS;
|
657
668
|
for(metric = 0; metric < dp; metric++) {
|
658
669
|
free( metrics[metric] );
|
659
670
|
}
|
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.46'
|
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.
|