tarf_monte_carlo 3.66 → 3.67

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: 1398b6cb4be3ea51154d3da07ab8db53b46e32ea5340688de66f25583834141d
4
- data.tar.gz: 73320e683ceb04104c1cc1803a3b753b104ddd7c150314f86c2408abf77558b2
3
+ metadata.gz: 4eaec9a6c923daa279367d27ae6d5c7739d54a8d6581395b887429907a028792
4
+ data.tar.gz: 91f799dc24f730b68afdd7977cf5dbdca20e3d0d9973d3b3eb78ce044a898d81
5
5
  SHA512:
6
- metadata.gz: 4af0d39d2b3e43b47060886282badc77ac70aa03bd4f9573e3cca13b45a245ecb14d99c34ced0b7d4a36b6d11384ea048a78a37e029267a6f482419a643b0dfa
7
- data.tar.gz: 0b2952a5b59c8c56a5d3b570f540c508572384f000ff82b887a7fd5d254445a726e458c1b33b3836a7949682225a11d1d57219314d3bc43fbe19d696244d6619
6
+ metadata.gz: 148485ef218f78f3bcda485866fbcb65197e47d052aab4c2266fd4df2512029b79c0ba1fcedc148a0d330444644539fadbef797b2dfaf6524e8586fb580bb0e4
7
+ data.tar.gz: fbdef2214f7d80d306b9ace4e007aa49787145fa9b0962d1a11fd0ae836797a231988ea454c979f13f8ed92ad1fcd1995839f4fa1ffea5f6178eb1d134cf39fb
@@ -212,7 +212,6 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
212
212
  // first create a 1-D array of pointers, and then, for each array entry, create another 1-D array.
213
213
  //
214
214
  double **metrics;
215
- double pffm[SCount];
216
215
  if (barrier_variations(KType)){
217
216
  metrics = ( double** ) malloc( BARRIER_DP * sizeof(double*) );
218
217
  for( metric = 0; metric < BARRIER_DP; metric++ ) {
@@ -236,9 +235,6 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
236
235
  // run simulations loop
237
236
  for( sim_count = 0; sim_count < SCount; sim_count += 2 ) {
238
237
  // initial spot rate for each iteration would be current spot rate
239
- pffm[sim_count] = 0;
240
- pffm[sim_count+1] = 0;
241
-
242
238
  double Spot = S, Spot_dash = S;
243
239
  double sim[NL], sim_pos[NL], sim_neg[NL], sim_dash[NL], sim_dash_pos[NL], sim_dash_neg[NL];
244
240
 
@@ -559,13 +555,13 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
559
555
  }
560
556
  } else if(KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_EXP){
561
557
  if(knockedLeg2 >= 0){
562
- sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1], dir_sign);
558
+ sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2 ) ), sim[NL-1], dir_sign);
563
559
  } else if(knockedLeg >= 0) {
564
560
  double equivalent_notional = *( Ns_array + knockedLeg );
565
561
  sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
566
562
  }
567
563
  if(knockedLeg2_dash >= 0){
568
- sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1], dir_sign);
564
+ sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2 ) ), sim_dash[NL-1], dir_sign);
569
565
  } else if(knockedLeg_dash >= 0) {
570
566
  double equivalent_notional = *( Ns_array + knockedLeg_dash );
571
567
  sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
@@ -585,12 +581,10 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
585
581
  double equivalent_notional = *( Ns_array + knockedLeg );
586
582
  sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
587
583
  } else {
588
- pffm[sim_count] = knockedLeg2;
589
- sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
584
+ sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2 ) ), sim[knockedLeg2], dir_sign);
590
585
  }
591
586
  } else if(knockedLeg2 >= 0){
592
- pffm[sim_count] = knockedLeg2;
593
- sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
587
+ sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2 ) ), sim[knockedLeg2], dir_sign);
594
588
  } else if(knockedLeg >= 0) {
595
589
  double equivalent_notional = *( Ns_array + knockedLeg );
596
590
  sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
@@ -601,10 +595,10 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
601
595
  double equivalent_notional = *( Ns_array + knockedLeg_dash );
602
596
  sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
603
597
  } else {
604
- sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[knockedLeg2_dash], dir_sign);
598
+ sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2_dash ) ), sim_dash[knockedLeg2_dash], dir_sign);
605
599
  }
606
600
  } else if(knockedLeg2_dash >= 0){
607
- sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[knockedLeg2_dash], dir_sign);
601
+ sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg2_dash ) ), sim_dash[knockedLeg2_dash], dir_sign);
608
602
  } else if(knockedLeg_dash >= 0) {
609
603
  double equivalent_notional = *( Ns_array + knockedLeg_dash );
610
604
  sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
@@ -845,19 +839,12 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
845
839
  }
846
840
  }
847
841
 
848
- VALUE pffm_metrics = rb_ary_new();
849
- for(metric = 0; metric < SCount; metric++) {
850
- rb_ary_push(pffm_metrics, DBL2NUM(pffm[metric]));
851
- }
852
-
853
-
854
842
  // rb_p(rb_str_new2("Generating output hash"));
855
843
  VALUE final_pvs = rb_hash_new();
856
844
  rb_hash_aset(final_pvs, rb_str_new2("positive_pv"), DBL2NUM( pvs_pos_sum / SCount ));
857
845
  rb_hash_aset(final_pvs, rb_str_new2("negative_pv"), DBL2NUM( pvs_neg_sum / SCount ));
858
846
  rb_hash_aset(final_pvs, rb_str_new2("total_pv"), DBL2NUM( (pvs_neg_sum + pvs_pos_sum) / SCount ));
859
847
  rb_hash_aset(final_pvs, rb_str_new2("metrics"), final_metrics);
860
- rb_hash_aset(final_pvs, rb_str_new2("testing"), pffm_metrics);
861
848
 
862
849
  //
863
850
  // free your arrays from memory once you're done using them
@@ -3,5 +3,5 @@
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.66"
6
+ VERSION = "3.67"
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.66'
4
+ version: '3.67'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vivek Routh