tarf_monte_carlo 3.29 → 3.34

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: f522654ff1db977c9473f222c2759823b5abfabec305a05f46808509a089e997
4
- data.tar.gz: 9057078c47fe076d38ba905d9bef3e857c8afff6962c3cbdc3afb73b88f41807
3
+ metadata.gz: 6ba6dd94cb23ba87cba4dfe1247ff41902d8644efacbbbf1b712ea7d61cc8341
4
+ data.tar.gz: da934c46905408ad6bc80694e4b2644535078437fd347c8f986aa9eb71c777b0
5
5
  SHA512:
6
- metadata.gz: dbe7c24227ce0280a09b0d055e1158f2585b6b46307065fa6d460ab8ed53b8a2423c398e2dd5ae6273249a0bfd10b0beb8abcedf4337597ffa2097940ed0efbd
7
- data.tar.gz: 5f59b811c836dfb9b13cbafc7264651aad54a03a7420042543549e25548de72574a82274b54e1951d9dd9d3b763af0437ef95d35ff6b6fd29161ce355280fe2f
6
+ metadata.gz: b08cf5f89f3776766cb26d99fdad66b67f2783312ce9489f9ae934ffc359601261b80f9f0f9a2bbb19fd346f8230a3934ce6080ea0b4d755b3bbba34bbc7f1e2
7
+ data.tar.gz: b016ab0298d3041ab725d37a3a7aa74be2f8fbe33d510c2f6ef1dd55298d1d1209694234a227b028ed01d50009c112a15ebeaf5a07b2edce43e3e098bc01e23f
@@ -90,11 +90,13 @@ double european_payoff(double strike, double spot, int cp_sign, int dir_sign, do
90
90
  }
91
91
 
92
92
  double get_equivalent_notional(int conversion_sign, double notional, float rate){
93
- return (conversion_sign == 1) ? (notional / rate) : notional;
93
+ double eq = (conversion_sign == 1) ? (notional / rate) : notional;
94
+ return eq;
94
95
  }
95
96
 
96
97
  double get_equivalent_rebate(int conversion_sign, double rebate, float rate){
97
- return (conversion_sign == 1) ? (rebate * rate) : rebate;
98
+ double eq = (conversion_sign == 1) ? (rebate * rate) : rebate;
99
+ return eq;
98
100
  }
99
101
 
100
102
  // main method for running monte carlo simulation from sidekiq worker/outside method
@@ -193,6 +195,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
193
195
  // first create a 1-D array of pointers, and then, for each array entry, create another 1-D array.
194
196
  //
195
197
  double **metrics;
198
+ double data[SCount];
196
199
  metrics = ( double** ) malloc( DATAPOINTS * sizeof(double*) );
197
200
  for( metric = 0; metric < DATAPOINTS; metric++ ) {
198
201
  metrics[metric] = ( double* ) malloc( NL * sizeof(double) );
@@ -205,6 +208,9 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
205
208
  // run simulations loop
206
209
  for( sim_count = 0; sim_count < SCount; sim_count += 2 ) {
207
210
  // initial spot rate for each iteration would be current spot rate
211
+ data[sim_count] = 0;
212
+ data[sim_count + 1] = 0;
213
+
208
214
  double Spot = S, Spot_dash = S;
209
215
  double sim[NL], sim_pos[NL], sim_neg[NL], sim_dash[NL], sim_dash_pos[NL], sim_dash_neg[NL];
210
216
 
@@ -243,10 +249,10 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
243
249
  double knockin = (Spot - *(Barrier_array + leg)) * dir2_sign;
244
250
  double knockin_dash = (Spot_dash - *(Barrier_array + leg)) * dir2_sign;
245
251
 
246
- if(knockedLeg == -1 && knockin > 0){
252
+ if(knockedLeg == -1 && knockin >= 0){
247
253
  knockedLeg = leg;
248
254
  }
249
- if(knockedLeg_dash == -1 && knockin_dash > 0){
255
+ if(knockedLeg_dash == -1 && knockin_dash >= 0){
250
256
  knockedLeg_dash = leg;
251
257
  }
252
258
  } else if ( KType == DOUBLE_STRIKE_POINTS || KType == DOUBLE_STRIKE_ABSOLUTE || KType == DOUBLE_STRIKE_LEGS ) {
@@ -391,6 +397,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
391
397
  if(KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE){
392
398
  if(knockedLeg >= 0){
393
399
  double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + knockedLeg ) ), sim[NL-1]);
400
+ data[sim_count] = equivalent_notional;
394
401
  sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
395
402
  }
396
403
  else{
@@ -398,6 +405,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
398
405
  }
399
406
  if(knockedLeg_dash >= 0 ){
400
407
  double equivalent_notional = get_equivalent_notional(conversion_sign, ( *( Ns_array + knockedLeg_dash ) ), sim_dash[NL-1]);
408
+ data[sim_count + 1] = equivalent_notional;
401
409
  sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
402
410
  }
403
411
  else{
@@ -584,14 +592,14 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
584
592
  //
585
593
  // rb_p(rb_str_new2("Converting metrics"));
586
594
  VALUE final_metrics = rb_ary_new();
587
- for(metric = 0; metric < DATAPOINTS; metric++) {
588
- VALUE leg_metrics = rb_ary_new();
595
+ for(metric = 0; metric < SCount; metric++) {
596
+ // VALUE leg_metrics = rb_ary_new();
589
597
 
590
- for(leg = 0; leg < NL; leg++) {
591
- rb_ary_push( leg_metrics, DBL2NUM( metrics[metric][leg] ) );
592
- }
598
+ // for(leg = 0; leg < NL; leg++) {
599
+ // rb_ary_push( leg_metrics, DBL2NUM( metrics[metric][leg] ) );
600
+ // }
593
601
 
594
- rb_ary_push(final_metrics, leg_metrics);
602
+ rb_ary_push(final_metrics, data[metric]);
595
603
  }
596
604
 
597
605
  // rb_p(rb_str_new2("Generating output hash"));
@@ -3,5 +3,5 @@
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.29"
6
+ VERSION = "3.34"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tarf_monte_carlo
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.29'
4
+ version: '3.34'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vivek Routh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-03 00:00:00.000000000 Z
11
+ date: 2020-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler