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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f231f81b4a9ab34e54066bb8ea45ec98a3a61f84380c30efc0d7c8f9f4f53f68
4
- data.tar.gz: eb3ca69c30ddbf3fdae6ce5f36a5c5a528e968482e5f21f140913a8b2e582721
3
+ metadata.gz: 9686343290fbaf7a6efc80b914581c01c3b8b6c3fae2ee230143beb545d48700
4
+ data.tar.gz: 83b9cd1f3a9aecab8068ca3f95b80d47aebc3d6bb4a3eaa2fa830eabcd826fe5
5
5
  SHA512:
6
- metadata.gz: 45c17a468210171ec2c7eff76561c0233940ae8567a0429f5659b8cb50b4072de504357913a2dfb983bf1aabc864aaaca05324aa53cf8f2785315d021482befe
7
- data.tar.gz: 33abb3608d5f192a993c9262e67375a40050c26bdc204a373eae876f0b457cb1739a35898198f4ba47103e93e2f71bc69f0d184e83002e0d4e02c142d56ee1ce
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 < 3; 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][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
+
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][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 ) );
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
- // 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;
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 < 3; 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) ? 3 : DATAPOINTS;
656
-
657
- for(metric = 0; metric < dp; metric++) {
658
- free( metrics[metric] );
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
  }
@@ -3,5 +3,5 @@
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.40"
6
+ VERSION = "3.45"
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.40'
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.6
143
+ rubygems_version: 3.0.8
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: Monte Carlo Simulation.