tarf_monte_carlo 3.47 → 3.49
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 +17 -1
- data/lib/tarf_monte_carlo/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92ba4ec2f8c25a6704d3e7388a8a3e243ff51693b8ea1966d57b67b42d09514f
|
4
|
+
data.tar.gz: f80d07fdca106e815b442561331e1cfce8a7772e5e8b9bfb830cf6b043432fcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 944741bc4e48a44ecd97d09e36a316bb2eba4b78a6d2bbd2e645699b5e595008e443f88e78e841844ef6765af80b45a9a47144978e8628048699787a8859ee9b
|
7
|
+
data.tar.gz: a03e00f6749dcdc4358370b1d49056032b9d97ff4293208633045dddeb970fea0b9be734037383734a117f13dce003d5fa851e734a6b725cd72f4908a47b6e9f
|
@@ -43,6 +43,8 @@
|
|
43
43
|
|
44
44
|
#define FX_AMERICAN_BARRIER_KNOCKIN_DISCRETE 13
|
45
45
|
#define FX_AMERICAN_BARRIER_KNOCKOUT_DISCRETE 14
|
46
|
+
#define FX_AMERICAN_BARRIER_WINDOW_KNOCKIN 15
|
47
|
+
#define FX_AMERICAN_BARRIER_WINDOW_KNOCKOUT 16
|
46
48
|
|
47
49
|
#define DATAPOINTS 200 // data for plotting
|
48
50
|
#define BARRIER_DP 4 // data for plotting
|
@@ -143,6 +145,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
143
145
|
double *USts_array = ( double* ) malloc( NL * sizeof(double) );
|
144
146
|
double *TempNs_array = ( double* ) malloc( NL * sizeof(double) );
|
145
147
|
double *Barrier_array = ( double* ) malloc( NL * sizeof(double) );
|
148
|
+
double *Barrier2_array = ( double* ) malloc( NL * sizeof(double) );
|
146
149
|
double *Rebate_array = ( double* ) malloc( NL * sizeof(double) );
|
147
150
|
|
148
151
|
VALUE Ls = rb_hash_aref(MCInputs, rb_str_new2("leverage_ratios") );
|
@@ -157,6 +160,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
157
160
|
VALUE LSts = rb_hash_aref(MCInputs, rb_str_new2("lower_strikes") );
|
158
161
|
VALUE USts = rb_hash_aref(MCInputs, rb_str_new2("upper_strikes") );
|
159
162
|
VALUE Brs = rb_hash_aref(MCInputs, rb_str_new2("barriers") );
|
163
|
+
VALUE Brs2 = rb_hash_aref(MCInputs, rb_str_new2("barriers2") );
|
160
164
|
VALUE Rbts = rb_hash_aref(MCInputs, rb_str_new2("rebates") );
|
161
165
|
|
162
166
|
for (leg = 0; leg < NL; ++leg) {
|
@@ -189,6 +193,8 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
189
193
|
Barrier_array[leg] = NUM2DBL( rb_ary_entry(Brs, leg) );
|
190
194
|
Rebate_array[leg] = NUM2DBL( rb_ary_entry(Rbts, leg) );
|
191
195
|
}
|
196
|
+
} else if(KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKIN || KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKOUT){
|
197
|
+
Barrier2_array[leg] = NUM2DBL( rb_ary_entry(Brs2, leg) );
|
192
198
|
}
|
193
199
|
|
194
200
|
//
|
@@ -204,7 +210,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
204
210
|
}
|
205
211
|
}
|
206
212
|
}
|
207
|
-
else{
|
213
|
+
else{
|
208
214
|
metrics = ( double** ) malloc( DATAPOINTS * sizeof(double*) );
|
209
215
|
for( metric = 0; metric < DATAPOINTS; metric++ ) {
|
210
216
|
metrics[metric] = ( double* ) malloc( NL * sizeof(double) );
|
@@ -262,6 +268,16 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
|
|
262
268
|
if(knockedLeg_dash == -1 && knockin_dash >= 0){
|
263
269
|
knockedLeg_dash = leg;
|
264
270
|
}
|
271
|
+
} else if(KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKIN || KType == FX_AMERICAN_BARRIER_WINDOW_KNOCKOUT){
|
272
|
+
profit_loss = Spot;
|
273
|
+
profit_loss_dash = Spot_dash;
|
274
|
+
|
275
|
+
if(knockedLeg == -1 && (Spot <= *(Barrier_array + leg) || Spot >= *(Barrier2_array + leg))){
|
276
|
+
knockedLeg = leg;
|
277
|
+
}
|
278
|
+
if(knockedLeg_dash == -1 && (Spot_dash <= *(Barrier_array + leg) || Spot_dash >= *(Barrier2_array + leg))){
|
279
|
+
knockedLeg_dash = leg;
|
280
|
+
}
|
265
281
|
} else if ( KType == DOUBLE_STRIKE_POINTS || KType == DOUBLE_STRIKE_ABSOLUTE || KType == DOUBLE_STRIKE_LEGS ) {
|
266
282
|
if ( Spot < *( LSts_array + leg ) ) {
|
267
283
|
profit_loss = Spot - (*( LSts_array + leg ));
|
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.49'
|
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-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -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.
|
143
|
+
rubygems_version: 3.0.6
|
144
144
|
signing_key:
|
145
145
|
specification_version: 4
|
146
146
|
summary: Monte Carlo Simulation.
|