tarf_monte_carlo 3.15.2 → 3.15.3

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: bc23d4cbeb2b027663b1e8f6a2a3bcb559f4c63874bb2751358ce2e11e76412c
4
- data.tar.gz: 102bee43e62b5bff5e30e478b5bf030d5b5530c1bea05f49376bc2511d6c5716
3
+ metadata.gz: 9f59add36257db0337d6c1a72238af5d328892cb59959117797130e5b90b0f31
4
+ data.tar.gz: d78b75d035a82c487bdc15797e3589ff4c15f33f9180eea8f8d211b847c22fc6
5
5
  SHA512:
6
- metadata.gz: c635e944069ef99ea9f7b3cb1d5d18c07b0427288c91bd7d94a221dc1ec47eaed356aada77b8e51a73a3ef18ee20b9573717269702426f73f6efdb58e8e85fee
7
- data.tar.gz: ad0c9836a15abc620d10070c08f5cdce970543a58aad47b311151915d39d3f540e7968b02ad63c85eeace9d5bcce17af8b6a1bf7d48d81dd1d927b1ba8476eeb
6
+ metadata.gz: 675daf6c71ee357cc6eca37080acc93fa5211dc9737104c92ef0adc1c9d8bd8b61275d681fa64b1fd3da8832867b1f8e879eea8198d4b29dd06d1188eb645ba7
7
+ data.tar.gz: bbc2a4bfe53e589db3225c86bec1449adee93e2f9022f6b62775eca692b6a62a832988e627be1a0edf35478aa4a876a260735d1d0288eb3fac03023eaf3ae2c7
@@ -28,9 +28,19 @@
28
28
  #define ABSOLUTE 1 // knockout by absolute
29
29
  #define POINTS 2 // knockout by points
30
30
  #define LEGS 3 // knockout by legs
31
+
31
32
  #define PIVOT_POINTS 4
32
33
  #define COLLAR_POINTS 5
33
- #define DUAL_STRIKE_POINTS 6
34
+ #define DOUBLE_STRIKE_POINTS 6
35
+
36
+ #define PIVOT_ABSOLUTE 7
37
+ #define COLLAR_ABSOLUTE 8
38
+ #define DOUBLE_STRIKE_ABSOLUTE 9
39
+
40
+ #define PIVOT_LEGS 10
41
+ #define COLLAR_LEGS 11
42
+ #define DOUBLE_STRIKE_LEGS 12
43
+
34
44
  #define DATAPOINTS 200 // data for plotting
35
45
  #define INTERVAL 50
36
46
  #define SIM_LIMIT 196 // 196 + 4 = 200 simulations nedded
@@ -126,15 +136,15 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
126
136
  DFs_array[leg] = NUM2DBL( rb_ary_entry(DFs, leg) );
127
137
  }
128
138
  // extra tarf structures
129
- if ( KType == PIVOT_POINTS ) {
139
+ if ( KType == PIVOT_POINTS || KType == PIVOT_ABSOLUTE || KType == PIVOT_LEGS ) {
130
140
  for (leg = 0; leg < NL; ++leg) {
131
141
  Ps_array[leg] = NUM2DBL( rb_ary_entry(Ps, leg) );
132
142
  }
133
- } else if ( KType == COLLAR_POINTS ) {
143
+ } else if ( KType == COLLAR_POINTS || KType == COLLAR_ABSOLUTE || KType == COLLAR_LEGS ) {
134
144
  for (leg = 0; leg < NL; ++leg) {
135
145
  CFs_array[leg] = NUM2DBL( rb_ary_entry(CFs, leg) );
136
146
  }
137
- } else if ( KType == DUAL_STRIKE_POINTS ) {
147
+ } else if ( KType == DOUBLE_STRIKE_POINTS || KType == DOUBLE_STRIKE_ABSOLUTE || KType == DOUBLE_STRIKE_LEGS) {
138
148
  for (leg = 0; leg < NL; ++leg) {
139
149
  Ps_array[leg] = NUM2DBL( rb_ary_entry(Ps, leg) );
140
150
  LSts_array[leg] = NUM2DBL( rb_ary_entry(LSts, leg) );
@@ -188,7 +198,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
188
198
  Spot_dash = Spot_dash * exp( drift + vSqrdt * eps_dash );
189
199
 
190
200
  // Payoff of Dual strike points is independent of direction
191
- if ( KType == DUAL_STRIKE_POINTS ) {
201
+ if ( KType == DOUBLE_STRIKE_POINTS || KType == DOUBLE_STRIKE_ABSOLUTE || KType == DOUBLE_STRIKE_LEGS ) {
192
202
  if ( Spot < *( LSts_array + leg ) ) {
193
203
  profit_loss = Spot - (*( LSts_array + leg ));
194
204
  } else if(Spot > *( USts_array + leg )){
@@ -209,7 +219,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
209
219
  profit_loss_dash = (*( USts_array + leg )) - Spot_dash;
210
220
  }
211
221
  } else if ( BS == BUY ) {
212
- if ( KType == PIVOT_POINTS ) {
222
+ if ( KType == PIVOT_POINTS || KType == PIVOT_ABSOLUTE || KType == PIVOT_LEGS ) {
213
223
  if ( *( Xs_array + leg ) > Spot && Spot > *( Ps_array + leg ) ) {
214
224
  profit_loss = 0.0;
215
225
  } else {
@@ -221,7 +231,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
221
231
  } else {
222
232
  profit_loss_dash = Spot_dash - (*( Xs_array + leg ));
223
233
  }
224
- } else if ( KType == COLLAR_POINTS ) {
234
+ } else if ( KType == COLLAR_POINTS || KType == COLLAR_ABSOLUTE || KType == COLLAR_LEGS ) {
225
235
  if ( *( Xs_array + leg ) > Spot && Spot > *( CFs_array + leg ) ) {
226
236
  profit_loss = 0.0;
227
237
  } else if(Spot <= *( CFs_array + leg )){
@@ -244,7 +254,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
244
254
  profit_loss_dash = ( Spot_dash - ( *( Xs_array + leg ) ) );
245
255
  }
246
256
  } else if ( BS == SELL ) {
247
- if ( KType == PIVOT_POINTS ) {
257
+ if ( KType == PIVOT_POINTS || KType == PIVOT_ABSOLUTE || KType == PIVOT_LEGS ) {
248
258
  if ( *( Xs_array + leg ) < Spot && Spot < *( Ps_array + leg ) ) {
249
259
  profit_loss = 0.0;
250
260
  } else {
@@ -256,7 +266,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
256
266
  } else {
257
267
  profit_loss_dash = ( ( *( Xs_array + leg ) ) - Spot_dash );
258
268
  }
259
- } else if ( KType == COLLAR_POINTS ) {
269
+ } else if ( KType == COLLAR_POINTS || KType == COLLAR_ABSOLUTE || KType == COLLAR_LEGS ) {
260
270
  if ( *( Xs_array + leg ) < Spot && Spot < *( CFs_array + leg ) ) {
261
271
  profit_loss = 0.0;
262
272
  } else if(Spot >= *( CFs_array + leg )){
@@ -302,7 +312,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
302
312
  // legs loop end
303
313
  // start from the Knock value
304
314
  double ko_so_far = K, ko_so_far_dash = K;
305
- if( KType == ABSOLUTE ) {
315
+ if( KType == ABSOLUTE || KType == PIVOT_ABSOLUTE || KType == COLLAR_ABSOLUTE || KType == DOUBLE_STRIKE_ABSOLUTE ) {
306
316
  for( leg = 0; leg < NL; ++leg ) {
307
317
  // simulation normal
308
318
  if( ko_so_far > 0.0 ) {
@@ -342,7 +352,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
342
352
  }
343
353
  }
344
354
  }
345
- } else if( KType == POINTS || KType == PIVOT_POINTS || KType == COLLAR_POINTS || KType == DUAL_STRIKE_POINTS ) {
355
+ } else if( KType == POINTS || KType == PIVOT_POINTS || KType == COLLAR_POINTS || KType == DOUBLE_STRIKE_POINTS ) {
346
356
  for( leg = 0; leg < NL; ++leg ) {
347
357
  // simulation normal
348
358
  if ( ko_so_far > 0.0 ) {
@@ -376,7 +386,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
376
386
  }
377
387
  }
378
388
  }
379
- } else if( KType == LEGS ) {
389
+ } else if( KType == LEGS || KType == PIVOT_LEGS || KType == COLLAR_LEGS || KType == DOUBLE_STRIKE_LEGS ) {
380
390
  for( leg = 0; leg < NL; ++leg ) {
381
391
  // simulation normal
382
392
  if ( ko_so_far > 0.0 ) {
@@ -1,7 +1,7 @@
1
1
  # gem build tarf_monte_carlo.gemspec
2
- # gem push -v tarf_monte_carlo-3.15.2.gem
2
+ # gem push -v tarf_monte_carlo-3.15.3.gem
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.15.2"
6
+ VERSION = "3.15.3"
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.15.2
4
+ version: 3.15.3
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-09-16 00:00:00.000000000 Z
11
+ date: 2020-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler