tarf_monte_carlo 3.58 → 3.59
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 +4 -4
- data/ext/tarf_monte_carlo/tarf_monte_carlo.c +10 -15
- data/lib/tarf_monte_carlo/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 384c19cb2b52b6b7f0cd0b03f0128fc6401c2455286aa206770233781685a41c
|
4
|
+
data.tar.gz: 63d22411c3a1a438f679a8ce421fea26e9b6ad8bc5f479eb66532f9b3087c652
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b17e9cc3e33b5c21bb5a2e9ab8dcb8912e0bed6522279066a903ca315a3d2b5ca8c3666b5b1687fd63f2060f297b3a0e1e2e4a312c2268bb0e31bb896c88e4e3
|
7
|
+
data.tar.gz: 4ac2992778ce44b6a7add5db8dec950ee8ad86ac140f80e064054f3871720a470e66e936eafe424d892e8082c4fe57ffae28df4a05ffa35c92539388fb7a7922
|
@@ -66,7 +66,6 @@ VALUE cTarfMonteCarlo = Qnil;
|
|
66
66
|
// Prototype for the initialization method - Ruby calls this, not you
|
67
67
|
void Init_tarf_monte_carlo();
|
68
68
|
double european_payoff(double, double, int, int, double);
|
69
|
-
double get_equivalent_notional(int, double, float);
|
70
69
|
double get_equivalent_rebate(int, double, float, int);
|
71
70
|
bool barrier_variations(int);
|
72
71
|
bool double_barrier_variations(int);
|
@@ -99,10 +98,6 @@ double european_payoff(double strike, double spot, int cp_sign, int dir_sign, do
|
|
99
98
|
return (diff * notional * dir_sign);
|
100
99
|
}
|
101
100
|
|
102
|
-
double get_equivalent_notional(int conversion_sign, double notional, float rate){
|
103
|
-
return (conversion_sign == 1) ? (notional / rate) : notional;
|
104
|
-
}
|
105
|
-
|
106
101
|
double get_equivalent_rebate(int conversion_sign, double rebate, float rate, int dir_sign){
|
107
102
|
double total = (conversion_sign == 1) ? (rebate * rate) : rebate;
|
108
103
|
return (dir_sign * total);
|
@@ -453,14 +448,14 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
453
448
|
double ko_so_far = K, ko_so_far_dash = K;
|
454
449
|
if(KType == FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE || KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKIN){
|
455
450
|
if(knockedLeg >= 0){
|
456
|
-
double equivalent_notional =
|
451
|
+
double equivalent_notional = *( Ns_array + knockedLeg );
|
457
452
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
458
453
|
}
|
459
454
|
else{
|
460
455
|
sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1], dir_sign);
|
461
456
|
}
|
462
457
|
if(knockedLeg_dash >= 0 ){
|
463
|
-
double equivalent_notional =
|
458
|
+
double equivalent_notional = *( Ns_array + knockedLeg_dash );
|
464
459
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
465
460
|
}
|
466
461
|
else{
|
@@ -544,13 +539,13 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
544
539
|
if(knockedLeg2 >= 0){
|
545
540
|
sim_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[NL-1], dir_sign);
|
546
541
|
} else if(knockedLeg >= 0) {
|
547
|
-
double equivalent_notional =
|
542
|
+
double equivalent_notional = *( Ns_array + knockedLeg );
|
548
543
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
549
544
|
}
|
550
545
|
if(knockedLeg2_dash >= 0){
|
551
546
|
sim_dash_pos[NL-1] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[NL-1], dir_sign);
|
552
547
|
} else if(knockedLeg_dash >= 0) {
|
553
|
-
double equivalent_notional =
|
548
|
+
double equivalent_notional = *( Ns_array + knockedLeg_dash );
|
554
549
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
555
550
|
}
|
556
551
|
|
@@ -565,7 +560,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
565
560
|
} else if(KType == FX_AMERICAN_BARRIER_KIKO_UNTIL_KI){
|
566
561
|
if(knockedLeg >= 0 && knockedLeg2 >= 0){
|
567
562
|
if(knockedLeg < knockedLeg2){
|
568
|
-
double equivalent_notional =
|
563
|
+
double equivalent_notional = *( Ns_array + knockedLeg );
|
569
564
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
570
565
|
} else {
|
571
566
|
sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
|
@@ -573,13 +568,13 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
573
568
|
} else if(knockedLeg2 >= 0){
|
574
569
|
sim_pos[knockedLeg2] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim[knockedLeg2], dir_sign);
|
575
570
|
} else if(knockedLeg >= 0) {
|
576
|
-
double equivalent_notional =
|
571
|
+
double equivalent_notional = *( Ns_array + knockedLeg );
|
577
572
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg) ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
578
573
|
}
|
579
574
|
|
580
575
|
if(knockedLeg_dash >= 0 && knockedLeg2_dash >= 0){
|
581
576
|
if(knockedLeg_dash < knockedLeg2_dash){
|
582
|
-
double equivalent_notional =
|
577
|
+
double equivalent_notional = *( Ns_array + knockedLeg_dash );
|
583
578
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
584
579
|
} else {
|
585
580
|
sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[knockedLeg2_dash], dir_sign);
|
@@ -587,7 +582,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
587
582
|
} else if(knockedLeg2_dash >= 0){
|
588
583
|
sim_dash_pos[knockedLeg2_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + 0 ) ), sim_dash[knockedLeg2_dash], dir_sign);
|
589
584
|
} else if(knockedLeg_dash >= 0) {
|
590
|
-
double equivalent_notional =
|
585
|
+
double equivalent_notional = *( Ns_array + knockedLeg_dash );
|
591
586
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + (knockedLeg_dash) ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
592
587
|
}
|
593
588
|
|
@@ -604,14 +599,14 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
604
599
|
sim_pos[knockedLeg] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg ) ), sim[knockedLeg], dir_sign);
|
605
600
|
}
|
606
601
|
else{
|
607
|
-
double equivalent_notional =
|
602
|
+
double equivalent_notional = *( Ns_array + 0 );
|
608
603
|
sim_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim[NL-1], cp_sign, dir_sign, equivalent_notional);
|
609
604
|
}
|
610
605
|
if(knockedLeg_dash >= 0 ){
|
611
606
|
sim_dash_pos[knockedLeg_dash] = get_equivalent_rebate(rebate_conversion_sign, ( *( Rebate_array + knockedLeg_dash ) ), sim[knockedLeg_dash], dir_sign);
|
612
607
|
}
|
613
608
|
else{
|
614
|
-
double equivalent_notional =
|
609
|
+
double equivalent_notional = *( Ns_array + 0 );
|
615
610
|
sim_dash_pos[NL-1] = european_payoff(( *( Xs_array + 0 ) ), sim_dash[NL-1], cp_sign, dir_sign, equivalent_notional);
|
616
611
|
}
|
617
612
|
|
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.
|
4
|
+
version: '3.59'
|
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-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|