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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 613891fdd7b41ca68d9e30b1b3106545dbfdcaab578ea5be585b8e8c33875f7a
4
- data.tar.gz: 62de3fcb90c0edfe1298938ed9e351a54a39e42366de3da5a1a01cc230c65712
3
+ metadata.gz: 189ce30c759cdc40444b5ffc5443e8d93680adb392be409beb2f8d6445e1f667
4
+ data.tar.gz: 93b441a9d9481e0595b9b029e28792d2a4bf08299b0bd0ca3396a680bb85184c
5
5
  SHA512:
6
- metadata.gz: 4da0be66316bb60b507176f283a8d87bc02c83e3b9218fd198812c0847c94410f79ff5c87c4ceae83084546747c711264eca1c98dc104af7511e704a221c11e2
7
- data.tar.gz: b2ee2e95b2f23b628e69b6e6b4e334c9453f6325e4374d43dffbaf4cff51217899f56b48f41a7ce2bd3c0abba4c819689233aa4df0fe343d5a644d26d58b5f53
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( 3 * sizeof(double*) );
199
- for( metric = 0; metric < 3; 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 ((sim_count + 2) % INTERVAL == 0){
421
- metrics[0][sim_count] = sim[NL-1];
422
- metrics[1][sim_count] = (knockedLeg >= 0) ? ( *( Xs_array + (knockedLeg) ) ) : 0;
423
- metrics[0][sim_count+1] = sim_dash[NL-1];
424
- metrics[1][sim_count+1] = (knockedLeg_dash >= 0) ? ( *( Xs_array + (knockedLeg_dash) ) ) : 0;
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 ((sim_count + 2) % INTERVAL == 0){
443
- metrics[0][sim_count] = (knockedLeg >= 0) ? sim[knockedLeg] : sim[NL-1];
444
- metrics[1][sim_count] = ( *( Xs_array + 0 ) );
445
- metrics[0][sim_count+1] = (knockedLeg_dash >= 0) ? sim[knockedLeg_dash] : sim[NL-1];
446
- metrics[1][sim_count+1] = ( *( Xs_array + 0 ) );
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
- // increment metric storing point by 4
582
- // Note: no limit condition here
583
- //
584
- if( (sim_count + 2) % INTERVAL == 0 ) {
585
- // rb_p(rb_str_new2("T:"));
586
- // rb_p(INT2NUM(point_pos));
587
- point_pos += 4;
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 < 3; 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) ? 3 : DATAPOINTS;
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
  }
@@ -3,5 +3,5 @@
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.41"
6
+ VERSION = "3.46"
7
7
  end
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.41'
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.6
143
+ rubygems_version: 3.0.8
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: Monte Carlo Simulation.