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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 613891fdd7b41ca68d9e30b1b3106545dbfdcaab578ea5be585b8e8c33875f7a
4
- data.tar.gz: 62de3fcb90c0edfe1298938ed9e351a54a39e42366de3da5a1a01cc230c65712
3
+ metadata.gz: 401dcffa11be28cb765633d86b3b3351af887311364893a4b4e98bcda42f1f2b
4
+ data.tar.gz: 8aa5d4b647a4ead25e93d8ec6d5d77f6927d767b368915c367a1557cfcd0d578
5
5
  SHA512:
6
- metadata.gz: 4da0be66316bb60b507176f283a8d87bc02c83e3b9218fd198812c0847c94410f79ff5c87c4ceae83084546747c711264eca1c98dc104af7511e704a221c11e2
7
- data.tar.gz: b2ee2e95b2f23b628e69b6e6b4e334c9453f6325e4374d43dffbaf4cff51217899f56b48f41a7ce2bd3c0abba4c819689233aa4df0fe343d5a644d26d58b5f53
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 ((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;
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 ((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 ) );
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 ((sim_count + 2) % INTERVAL == 0){
576
- metrics[2][sim_count] = sim_pos_sum;
577
- metrics[2][sim_count+1] = sim_dash_pos_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;
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( (sim_count + 2) % INTERVAL == 0 ) {
585
- // rb_p(rb_str_new2("T:"));
586
- // rb_p(INT2NUM(point_pos));
587
- point_pos += 4;
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
  }
@@ -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.42"
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.42'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vivek Routh