tarf_monte_carlo 3.12 → 3.15.2

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: 92b03e70d933ae7e53c9b8816bae025f315a455413684e542d03fb66b391fdb5
4
- data.tar.gz: d18d1ac7aa941de3ebf8e5557635e8301a11002b468055a94c303d569edf9fdf
3
+ metadata.gz: bc23d4cbeb2b027663b1e8f6a2a3bcb559f4c63874bb2751358ce2e11e76412c
4
+ data.tar.gz: 102bee43e62b5bff5e30e478b5bf030d5b5530c1bea05f49376bc2511d6c5716
5
5
  SHA512:
6
- metadata.gz: d54912e68221632f24689f1c69c88b8ca44daed63589025adb69910c4952b3819cf26d1ba9bf18e48a3db33bb017c39f7733494144a336633fd8a1da169557d1
7
- data.tar.gz: 2a729f8b99b24bd1d7b7e9dea1d940d08bf0867efc22cb1cc18629f232bec75dd252d8360f82f11f5443af1026845293a13426193e7535af3f2c41df4de991d6
6
+ metadata.gz: c635e944069ef99ea9f7b3cb1d5d18c07b0427288c91bd7d94a221dc1ec47eaed356aada77b8e51a73a3ef18ee20b9573717269702426f73f6efdb58e8e85fee
7
+ data.tar.gz: ad0c9836a15abc620d10070c08f5cdce970543a58aad47b311151915d39d3f540e7968b02ad63c85eeace9d5bcce17af8b6a1bf7d48d81dd1d927b1ba8476eeb
data/.gitignore CHANGED
File without changes
@@ -124,11 +124,19 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
124
124
  vs_array[leg] = NUM2DBL( rb_ary_entry(vs, leg) );
125
125
  bs_array[leg] = NUM2DBL( rb_ary_entry(bs, leg) );
126
126
  DFs_array[leg] = NUM2DBL( rb_ary_entry(DFs, leg) );
127
- if (KType == PIVOT_POINTS) {
127
+ }
128
+ // extra tarf structures
129
+ if ( KType == PIVOT_POINTS ) {
130
+ for (leg = 0; leg < NL; ++leg) {
128
131
  Ps_array[leg] = NUM2DBL( rb_ary_entry(Ps, leg) );
129
- } else if (KType == COLLAR_POINTS){
132
+ }
133
+ } else if ( KType == COLLAR_POINTS ) {
134
+ for (leg = 0; leg < NL; ++leg) {
130
135
  CFs_array[leg] = NUM2DBL( rb_ary_entry(CFs, leg) );
131
- } else if (KType == DUAL_STRIKE_POINTS){
136
+ }
137
+ } else if ( KType == DUAL_STRIKE_POINTS ) {
138
+ for (leg = 0; leg < NL; ++leg) {
139
+ Ps_array[leg] = NUM2DBL( rb_ary_entry(Ps, leg) );
132
140
  LSts_array[leg] = NUM2DBL( rb_ary_entry(LSts, leg) );
133
141
  USts_array[leg] = NUM2DBL( rb_ary_entry(USts, leg) );
134
142
  }
@@ -179,27 +187,90 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
179
187
  Spot = Spot * exp( drift + vSqrdt * eps );
180
188
  Spot_dash = Spot_dash * exp( drift + vSqrdt * eps_dash );
181
189
 
182
- if ( BS == BUY ) {
183
- // profit if spot is higher than market price
184
- profit_loss = ( Spot - ( *( Xs_array + leg ) ) );
190
+ // Payoff of Dual strike points is independent of direction
191
+ if ( KType == DUAL_STRIKE_POINTS ) {
192
+ if ( Spot < *( LSts_array + leg ) ) {
193
+ profit_loss = Spot - (*( LSts_array + leg ));
194
+ } else if(Spot > *( USts_array + leg )){
195
+ profit_loss = (*( USts_array + leg ) - Spot);
196
+ } else if(Spot >= *( LSts_array + leg ) && (Spot < *(Ps_array + leg))) {
197
+ profit_loss = Spot - (*( LSts_array + leg ));
198
+ } else {
199
+ profit_loss = (*( USts_array + leg )) - Spot;
200
+ }
201
+ // dash
202
+ if ( Spot_dash < *( LSts_array + leg ) ) {
203
+ profit_loss_dash = Spot_dash - (*( LSts_array + leg ));
204
+ } else if(Spot_dash > *( USts_array + leg )){
205
+ profit_loss_dash = (*( USts_array + leg ) - Spot_dash);
206
+ } else if(Spot_dash >= *( LSts_array + leg ) && (Spot_dash < *(Ps_array + leg))) {
207
+ profit_loss_dash = Spot_dash - (*( LSts_array + leg ));
208
+ } else {
209
+ profit_loss_dash = (*( USts_array + leg )) - Spot_dash;
210
+ }
211
+ } else if ( BS == BUY ) {
212
+ if ( KType == PIVOT_POINTS ) {
213
+ if ( *( Xs_array + leg ) > Spot && Spot > *( Ps_array + leg ) ) {
214
+ profit_loss = 0.0;
215
+ } else {
216
+ profit_loss = Spot - (*( Xs_array + leg ));
217
+ }
218
+ // dash
219
+ if ( *( Xs_array + leg ) > Spot_dash && Spot_dash > *( Ps_array + leg ) ) {
220
+ profit_loss_dash = 0.0;
221
+ } else {
222
+ profit_loss_dash = Spot_dash - (*( Xs_array + leg ));
223
+ }
224
+ } else if ( KType == COLLAR_POINTS ) {
225
+ if ( *( Xs_array + leg ) > Spot && Spot > *( CFs_array + leg ) ) {
226
+ profit_loss = 0.0;
227
+ } else if(Spot <= *( CFs_array + leg )){
228
+ profit_loss = Spot - (*( CFs_array + leg ));
229
+ } else {
230
+ profit_loss = Spot - (*( Xs_array + leg ));
231
+ }
232
+ // dash
233
+ if ( *( Xs_array + leg ) > Spot_dash && Spot_dash > *( CFs_array + leg ) ) {
234
+ profit_loss_dash = 0.0;
235
+ } else if(Spot_dash <= *( CFs_array + leg )){
236
+ profit_loss_dash = Spot_dash - (*( CFs_array + leg ));
237
+ } else {
238
+ profit_loss_dash = Spot_dash - (*( Xs_array + leg ));
239
+ }
240
+ } else {
185
241
  // profit if spot is higher than market price
186
- profit_loss_dash = ( Spot_dash - ( *( Xs_array + leg ) ) );
242
+ profit_loss = ( Spot - ( *( Xs_array + leg ) ) );
243
+ // profit if spot is higher than market price
244
+ profit_loss_dash = ( Spot_dash - ( *( Xs_array + leg ) ) );
245
+ }
187
246
  } else if ( BS == SELL ) {
188
247
  if ( KType == PIVOT_POINTS ) {
189
- if ( Spot <= *( Xs_array + leg ) && Spot < *( Ps_array + leg ) ) {
190
- profit_loss = *( Xs_array + leg ) - Spot;
191
- } else if ( Spot > *( Xs_array + leg ) && Spot >= *( Ps_array + leg ) ) {
192
- profit_loss = *( Xs_array + leg ) - Spot;
193
- } else {
248
+ if ( *( Xs_array + leg ) < Spot && Spot < *( Ps_array + leg ) ) {
194
249
  profit_loss = 0.0;
250
+ } else {
251
+ profit_loss = ( ( *( Xs_array + leg ) ) - Spot );
195
252
  }
196
253
  // dash
197
- if ( Spot_dash <= *( Xs_array + leg ) && Spot_dash < *( Ps_array + leg ) ) {
198
- profit_loss_dash = *( Xs_array + leg ) - Spot_dash;
199
- } else if ( Spot_dash > *( Xs_array + leg ) && Spot_dash >= *( Ps_array + leg ) ) {
200
- profit_loss_dash = *( Xs_array + leg ) - Spot_dash;
254
+ if ( *( Xs_array + leg ) < Spot_dash && Spot_dash < *( Ps_array + leg ) ) {
255
+ profit_loss_dash = 0.0;
256
+ } else {
257
+ profit_loss_dash = ( ( *( Xs_array + leg ) ) - Spot_dash );
258
+ }
259
+ } else if ( KType == COLLAR_POINTS ) {
260
+ if ( *( Xs_array + leg ) < Spot && Spot < *( CFs_array + leg ) ) {
261
+ profit_loss = 0.0;
262
+ } else if(Spot >= *( CFs_array + leg )){
263
+ profit_loss = ( ( *( CFs_array + leg ) ) - Spot );
201
264
  } else {
265
+ profit_loss = ( ( *( Xs_array + leg ) ) - Spot );
266
+ }
267
+ // dash
268
+ if ( *( Xs_array + leg ) < Spot_dash && Spot_dash < *( CFs_array + leg ) ) {
202
269
  profit_loss_dash = 0.0;
270
+ } else if(Spot_dash >= *( CFs_array + leg )){
271
+ profit_loss_dash = ( ( *( CFs_array + leg ) ) - Spot_dash );
272
+ } else {
273
+ profit_loss_dash = ( ( *( Xs_array + leg ) ) - Spot_dash );
203
274
  }
204
275
  } else {
205
276
  // profit if spot is lower than market price
@@ -229,7 +300,6 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
229
300
  }
230
301
  }
231
302
  // legs loop end
232
-
233
303
  // start from the Knock value
234
304
  double ko_so_far = K, ko_so_far_dash = K;
235
305
  if( KType == ABSOLUTE ) {
@@ -272,7 +342,7 @@ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
272
342
  }
273
343
  }
274
344
  }
275
- } else if( KType == POINTS ) {
345
+ } else if( KType == POINTS || KType == PIVOT_POINTS || KType == COLLAR_POINTS || KType == DUAL_STRIKE_POINTS ) {
276
346
  for( leg = 0; leg < NL; ++leg ) {
277
347
  // simulation normal
278
348
  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-2.3.gem
2
+ # gem push -v tarf_monte_carlo-3.15.2.gem
3
3
  # gem yank tarf_monte_carlo -v 2.3
4
4
 
5
5
  module TarfMonteCarlo
6
- VERSION = "3.12"
6
+ VERSION = "3.15.2"
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.12'
4
+ version: 3.15.2
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-15 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler