tarf_monte_carlo 3.66 → 3.67

Sign up to get free protection for your applications and to get access to all the features.
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