option_lab 0.1.0

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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +139 -0
  4. data/.yard/hooks/before_generate.rb +7 -0
  5. data/.yardopts +11 -0
  6. data/Gemfile +26 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +180 -0
  9. data/Rakefile +44 -0
  10. data/docs/OptionLab/BinomialTree.html +1271 -0
  11. data/docs/OptionLab/BjerksundStensland.html +2022 -0
  12. data/docs/OptionLab/BlackScholes.html +2388 -0
  13. data/docs/OptionLab/Engine.html +1716 -0
  14. data/docs/OptionLab/Models/AmericanModelInputs.html +937 -0
  15. data/docs/OptionLab/Models/ArrayInputs.html +463 -0
  16. data/docs/OptionLab/Models/BaseModel.html +223 -0
  17. data/docs/OptionLab/Models/BinomialModelInputs.html +1161 -0
  18. data/docs/OptionLab/Models/BlackScholesInfo.html +967 -0
  19. data/docs/OptionLab/Models/BlackScholesModelInputs.html +851 -0
  20. data/docs/OptionLab/Models/ClosedPosition.html +445 -0
  21. data/docs/OptionLab/Models/EngineData.html +2523 -0
  22. data/docs/OptionLab/Models/EngineDataResults.html +435 -0
  23. data/docs/OptionLab/Models/Inputs.html +2241 -0
  24. data/docs/OptionLab/Models/LaplaceInputs.html +777 -0
  25. data/docs/OptionLab/Models/Option.html +736 -0
  26. data/docs/OptionLab/Models/Outputs.html +1753 -0
  27. data/docs/OptionLab/Models/PoPOutputs.html +645 -0
  28. data/docs/OptionLab/Models/PricingResult.html +848 -0
  29. data/docs/OptionLab/Models/Stock.html +583 -0
  30. data/docs/OptionLab/Models/TreeVisualization.html +688 -0
  31. data/docs/OptionLab/Models.html +251 -0
  32. data/docs/OptionLab/Plotting.html +548 -0
  33. data/docs/OptionLab/Support.html +2884 -0
  34. data/docs/OptionLab/Utils.html +619 -0
  35. data/docs/OptionLab.html +133 -0
  36. data/docs/_index.html +376 -0
  37. data/docs/class_list.html +54 -0
  38. data/docs/css/common.css +1 -0
  39. data/docs/css/full_list.css +58 -0
  40. data/docs/css/style.css +503 -0
  41. data/docs/file.LICENSE.html +70 -0
  42. data/docs/file.README.html +263 -0
  43. data/docs/file_list.html +64 -0
  44. data/docs/frames.html +22 -0
  45. data/docs/index.html +263 -0
  46. data/docs/js/app.js +344 -0
  47. data/docs/js/full_list.js +242 -0
  48. data/docs/js/jquery.js +4 -0
  49. data/docs/method_list.html +1974 -0
  50. data/docs/top-level-namespace.html +110 -0
  51. data/examples/american_options.rb +163 -0
  52. data/examples/covered_call.rb +76 -0
  53. data/lib/option_lab/binomial_tree.rb +238 -0
  54. data/lib/option_lab/bjerksund_stensland.rb +276 -0
  55. data/lib/option_lab/black_scholes.rb +323 -0
  56. data/lib/option_lab/engine.rb +492 -0
  57. data/lib/option_lab/models.rb +768 -0
  58. data/lib/option_lab/plotting.rb +182 -0
  59. data/lib/option_lab/support.rb +471 -0
  60. data/lib/option_lab/utils.rb +107 -0
  61. data/lib/option_lab/version.rb +5 -0
  62. data/lib/option_lab.rb +134 -0
  63. data/option_lab.gemspec +43 -0
  64. metadata +207 -0
@@ -0,0 +1,1716 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: OptionLab::Engine
8
+
9
+ &mdash; OptionLab Documentation
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "OptionLab::Engine";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (E)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../OptionLab.html" title="OptionLab (module)">OptionLab</a></span></span>
41
+ &raquo;
42
+ <span class="title">Engine</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Module: OptionLab::Engine
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ <dl>
80
+ <dt>Defined in:</dt>
81
+ <dd>lib/option_lab/engine.rb</dd>
82
+ </dl>
83
+
84
+ </div>
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ <h2>
95
+ Class Method Summary
96
+ <small><a href="#" class="summary_toggle">collapse</a></small>
97
+ </h2>
98
+
99
+ <ul class="summary">
100
+
101
+ <li class="public ">
102
+ <span class="summary_signature">
103
+
104
+ <a href="#_generate_outputs-class_method" title="_generate_outputs (class method)">.<strong>_generate_outputs</strong>(data) &#x21d2; Models::Outputs </a>
105
+
106
+
107
+
108
+ </span>
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+ <span class="summary_desc"><div class='inline'><p>Generate outputs from engine data.</p>
119
+ </div></span>
120
+
121
+ </li>
122
+
123
+
124
+ <li class="public ">
125
+ <span class="summary_signature">
126
+
127
+ <a href="#_init_inputs-class_method" title="_init_inputs (class method)">.<strong>_init_inputs</strong>(inputs) &#x21d2; Models::EngineData </a>
128
+
129
+
130
+
131
+ </span>
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ <span class="summary_desc"><div class='inline'><p>Initialize input data.</p>
142
+ </div></span>
143
+
144
+ </li>
145
+
146
+
147
+ <li class="public ">
148
+ <span class="summary_signature">
149
+
150
+ <a href="#_run-class_method" title="_run (class method)">.<strong>_run</strong>(data) &#x21d2; Models::EngineData </a>
151
+
152
+
153
+
154
+ </span>
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+ <span class="summary_desc"><div class='inline'><p>Run calculations.</p>
165
+ </div></span>
166
+
167
+ </li>
168
+
169
+
170
+ <li class="public ">
171
+ <span class="summary_signature">
172
+
173
+ <a href="#_run_closed_position_calcs-class_method" title="_run_closed_position_calcs (class method)">.<strong>_run_closed_position_calcs</strong>(data, i) &#x21d2; Models::EngineData </a>
174
+
175
+
176
+
177
+ </span>
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ <span class="summary_desc"><div class='inline'><p>Run closed position calculations.</p>
188
+ </div></span>
189
+
190
+ </li>
191
+
192
+
193
+ <li class="public ">
194
+ <span class="summary_signature">
195
+
196
+ <a href="#_run_option_calcs-class_method" title="_run_option_calcs (class method)">.<strong>_run_option_calcs</strong>(data, i) &#x21d2; Models::EngineData </a>
197
+
198
+
199
+
200
+ </span>
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+ <span class="summary_desc"><div class='inline'><p>Run option calculations.</p>
211
+ </div></span>
212
+
213
+ </li>
214
+
215
+
216
+ <li class="public ">
217
+ <span class="summary_signature">
218
+
219
+ <a href="#_run_stock_calcs-class_method" title="_run_stock_calcs (class method)">.<strong>_run_stock_calcs</strong>(data, i) &#x21d2; Models::EngineData </a>
220
+
221
+
222
+
223
+ </span>
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+ <span class="summary_desc"><div class='inline'><p>Run stock calculations.</p>
234
+ </div></span>
235
+
236
+ </li>
237
+
238
+
239
+ <li class="public ">
240
+ <span class="summary_signature">
241
+
242
+ <a href="#run_strategy-class_method" title="run_strategy (class method)">.<strong>run_strategy</strong>(inputs_data) &#x21d2; Models::Outputs </a>
243
+
244
+
245
+
246
+ </span>
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+ <span class="summary_desc"><div class='inline'><p>Run strategy calculation.</p>
257
+ </div></span>
258
+
259
+ </li>
260
+
261
+
262
+ </ul>
263
+
264
+
265
+
266
+
267
+ <div id="class_method_details" class="method_details_list">
268
+ <h2>Class Method Details</h2>
269
+
270
+
271
+ <div class="method_details first">
272
+ <h3 class="signature first" id="_generate_outputs-class_method">
273
+
274
+ .<strong>_generate_outputs</strong>(data) &#x21d2; <tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>
275
+
276
+
277
+
278
+
279
+
280
+ </h3><div class="docstring">
281
+ <div class="discussion">
282
+ <p>Generate outputs from engine data</p>
283
+
284
+
285
+ </div>
286
+ </div>
287
+ <div class="tags">
288
+ <p class="tag_title">Parameters:</p>
289
+ <ul class="param">
290
+
291
+ <li>
292
+
293
+ <span class='name'>data</span>
294
+
295
+
296
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
297
+
298
+
299
+
300
+ &mdash;
301
+ <div class='inline'><p>Engine data</p>
302
+ </div>
303
+
304
+ </li>
305
+
306
+ </ul>
307
+
308
+ <p class="tag_title">Returns:</p>
309
+ <ul class="return">
310
+
311
+ <li>
312
+
313
+
314
+ <span class='type'>(<tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>)</span>
315
+
316
+
317
+
318
+ &mdash;
319
+ <div class='inline'><p>Strategy outputs</p>
320
+ </div>
321
+
322
+ </li>
323
+
324
+ </ul>
325
+
326
+ </div><table class="source_code">
327
+ <tr>
328
+ <td>
329
+ <pre class="lines">
330
+
331
+
332
+ 464
333
+ 465
334
+ 466
335
+ 467
336
+ 468
337
+ 469
338
+ 470
339
+ 471
340
+ 472
341
+ 473
342
+ 474
343
+ 475
344
+ 476
345
+ 477
346
+ 478
347
+ 479
348
+ 480
349
+ 481
350
+ 482
351
+ 483
352
+ 484
353
+ 485
354
+ 486
355
+ 487
356
+ 488</pre>
357
+ </td>
358
+ <td>
359
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 464</span>
360
+
361
+ <span class='kw'>def</span> <span class='id identifier rubyid__generate_outputs'>_generate_outputs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
362
+ <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Outputs</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Models/Outputs.html#initialize-instance_method" title="OptionLab::Models::Outputs#initialize (method)">new</a></span></span><span class='lparen'>(</span>
363
+ <span class='label'>inputs:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inputs'>inputs</span><span class='comma'>,</span>
364
+ <span class='label'>data:</span> <span class='id identifier rubyid_data'>data</span><span class='comma'>,</span>
365
+ <span class='label'>probability_of_profit:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_probability'>profit_probability</span><span class='comma'>,</span>
366
+ <span class='label'>expected_profit:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_expected_profit'>expected_profit</span><span class='comma'>,</span>
367
+ <span class='label'>expected_loss:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_expected_loss'>expected_loss</span><span class='comma'>,</span>
368
+ <span class='label'>strategy_cost:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='period'>.</span><span class='id identifier rubyid_sum'>sum</span><span class='comma'>,</span>
369
+ <span class='label'>per_leg_cost:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='comma'>,</span>
370
+ <span class='label'>profit_ranges:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_ranges'>profit_ranges</span><span class='comma'>,</span>
371
+ <span class='label'>minimum_return_in_the_domain:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span><span class='comma'>,</span>
372
+ <span class='label'>maximum_return_in_the_domain:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span><span class='comma'>,</span>
373
+ <span class='label'>implied_volatility:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_implied_volatility'>implied_volatility</span><span class='comma'>,</span>
374
+ <span class='label'>in_the_money_probability:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span><span class='comma'>,</span>
375
+ <span class='label'>delta:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span><span class='comma'>,</span>
376
+ <span class='label'>gamma:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span><span class='comma'>,</span>
377
+ <span class='label'>theta:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span><span class='comma'>,</span>
378
+ <span class='label'>vega:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span><span class='comma'>,</span>
379
+ <span class='label'>rho:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span><span class='comma'>,</span>
380
+ <span class='label'>probability_of_profit_target:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_target_probability'>profit_target_probability</span><span class='comma'>,</span>
381
+ <span class='label'>probability_of_loss_limit:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit_probability'>loss_limit_probability</span><span class='comma'>,</span>
382
+ <span class='label'>profit_target_ranges:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_target_ranges'>profit_target_ranges</span><span class='comma'>,</span>
383
+ <span class='label'>loss_limit_ranges:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit_ranges'>loss_limit_ranges</span><span class='comma'>,</span>
384
+ <span class='rparen'>)</span>
385
+ <span class='kw'>end</span></pre>
386
+ </td>
387
+ </tr>
388
+ </table>
389
+ </div>
390
+
391
+ <div class="method_details ">
392
+ <h3 class="signature " id="_init_inputs-class_method">
393
+
394
+ .<strong>_init_inputs</strong>(inputs) &#x21d2; <tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>
395
+
396
+
397
+
398
+
399
+
400
+ </h3><div class="docstring">
401
+ <div class="discussion">
402
+ <p>Initialize input data</p>
403
+
404
+
405
+ </div>
406
+ </div>
407
+ <div class="tags">
408
+ <p class="tag_title">Parameters:</p>
409
+ <ul class="param">
410
+
411
+ <li>
412
+
413
+ <span class='name'>inputs</span>
414
+
415
+
416
+ <span class='type'>(<tt><span class='object_link'><a href="Models/Inputs.html" title="OptionLab::Models::Inputs (class)">Models::Inputs</a></span></tt>)</span>
417
+
418
+
419
+
420
+ &mdash;
421
+ <div class='inline'><p>Input data</p>
422
+ </div>
423
+
424
+ </li>
425
+
426
+ </ul>
427
+
428
+ <p class="tag_title">Returns:</p>
429
+ <ul class="return">
430
+
431
+ <li>
432
+
433
+
434
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
435
+
436
+
437
+
438
+ &mdash;
439
+ <div class='inline'><p>Initialized engine data</p>
440
+ </div>
441
+
442
+ </li>
443
+
444
+ </ul>
445
+
446
+ </div><table class="source_code">
447
+ <tr>
448
+ <td>
449
+ <pre class="lines">
450
+
451
+
452
+ 52
453
+ 53
454
+ 54
455
+ 55
456
+ 56
457
+ 57
458
+ 58
459
+ 59
460
+ 60
461
+ 61
462
+ 62
463
+ 63
464
+ 64
465
+ 65
466
+ 66
467
+ 67
468
+ 68
469
+ 69
470
+ 70
471
+ 71
472
+ 72
473
+ 73
474
+ 74
475
+ 75
476
+ 76
477
+ 77
478
+ 78
479
+ 79
480
+ 80
481
+ 81
482
+ 82
483
+ 83
484
+ 84
485
+ 85
486
+ 86
487
+ 87
488
+ 88
489
+ 89
490
+ 90
491
+ 91
492
+ 92
493
+ 93
494
+ 94
495
+ 95
496
+ 96
497
+ 97
498
+ 98
499
+ 99
500
+ 100
501
+ 101
502
+ 102
503
+ 103
504
+ 104
505
+ 105
506
+ 106
507
+ 107
508
+ 108
509
+ 109
510
+ 110
511
+ 111
512
+ 112
513
+ 113
514
+ 114
515
+ 115
516
+ 116
517
+ 117
518
+ 118
519
+ 119
520
+ 120
521
+ 121
522
+ 122
523
+ 123
524
+ 124
525
+ 125
526
+ 126
527
+ 127
528
+ 128
529
+ 129
530
+ 130
531
+ 131
532
+ 132
533
+ 133
534
+ 134
535
+ 135
536
+ 136
537
+ 137
538
+ 138
539
+ 139</pre>
540
+ </td>
541
+ <td>
542
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 52</span>
543
+
544
+ <span class='kw'>def</span> <span class='id identifier rubyid__init_inputs'>_init_inputs</span><span class='lparen'>(</span><span class='id identifier rubyid_inputs'>inputs</span><span class='rparen'>)</span>
545
+ <span class='comment'># Create engine data
546
+ </span> <span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">EngineData</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Models/EngineData.html#initialize-instance_method" title="OptionLab::Models::EngineData#initialize (method)">new</a></span></span><span class='lparen'>(</span>
547
+ <span class='label'>stock_price_array:</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create_price_seq'><span class='object_link'><a href="Support.html#create_price_seq-class_method" title="OptionLab::Support.create_price_seq (method)">create_price_seq</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_min_stock'>min_stock</span><span class='comma'>,</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_max_stock'>max_stock</span><span class='rparen'>)</span><span class='comma'>,</span>
548
+ <span class='label'>terminal_stock_prices:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span> <span class='op'>?</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_array'>array</span> <span class='op'>:</span> <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='period'>.</span><span class='id identifier rubyid_init_empty_array'><span class='object_link'><a href="Models.html#init_empty_array-class_method" title="OptionLab::Models.init_empty_array (method)">init_empty_array</a></span></span><span class='comma'>,</span>
549
+ <span class='label'>inputs:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='comma'>,</span>
550
+ <span class='rparen'>)</span>
551
+
552
+ <span class='comment'># Set days in year
553
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span> <span class='op'>=</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_discard_nonbusiness_days'>discard_nonbusiness_days</span> <span class='op'>?</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_business_days_in_year'>business_days_in_year</span> <span class='op'>:</span> <span class='int'>365</span>
554
+
555
+ <span class='comment'># Calculate days to target
556
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_target_date'>target_date</span>
557
+ <span class='id identifier rubyid_n_discarded_days'>n_discarded_days</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_discard_nonbusiness_days'>discard_nonbusiness_days</span>
558
+ <span class='const'><span class='object_link'><a href="Utils.html" title="OptionLab::Utils (module)">Utils</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_nonbusiness_days'><span class='object_link'><a href="Utils.html#get_nonbusiness_days-class_method" title="OptionLab::Utils.get_nonbusiness_days (method)">get_nonbusiness_days</a></span></span><span class='lparen'>(</span>
559
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span><span class='comma'>,</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_target_date'>target_date</span><span class='comma'>,</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_country'>country</span>
560
+ <span class='rparen'>)</span>
561
+ <span class='kw'>else</span>
562
+ <span class='int'>0</span>
563
+ <span class='kw'>end</span>
564
+
565
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_target_date'>target_date</span> <span class='op'>-</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>+</span> <span class='int'>1</span> <span class='op'>-</span> <span class='id identifier rubyid_n_discarded_days'>n_discarded_days</span>
566
+ <span class='kw'>else</span>
567
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span> <span class='op'>=</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target_date'>days_to_target_date</span>
568
+ <span class='kw'>end</span>
569
+
570
+ <span class='comment'># Process each strategy leg
571
+ </span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_each_with_index'>each_with_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_strategy'>strategy</span><span class='comma'>,</span> <span class='id identifier rubyid__i'>_i</span><span class='op'>|</span>
572
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span>
573
+
574
+ <span class='kw'>case</span> <span class='id identifier rubyid_strategy'>strategy</span>
575
+ <span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/Option.html" title="OptionLab::Models::Option (class)">Option</a></span></span>
576
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span>
577
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span>
578
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span>
579
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span>
580
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_prev_pos'>prev_pos</span> <span class='op'>||</span> <span class='float'>0.0</span>
581
+
582
+ <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span>
583
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span>
584
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span> <span class='op'>&lt;&lt;</span> <span class='kw'>false</span>
585
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Date</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span>
586
+ <span class='id identifier rubyid_n_discarded_days'>n_discarded_days</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_discard_nonbusiness_days'>discard_nonbusiness_days</span>
587
+ <span class='const'><span class='object_link'><a href="Utils.html" title="OptionLab::Utils (module)">Utils</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_nonbusiness_days'><span class='object_link'><a href="Utils.html#get_nonbusiness_days-class_method" title="OptionLab::Utils.get_nonbusiness_days (method)">get_nonbusiness_days</a></span></span><span class='lparen'>(</span>
588
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span><span class='comma'>,</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span><span class='comma'>,</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_country'>country</span>
589
+ <span class='rparen'>)</span>
590
+ <span class='kw'>else</span>
591
+ <span class='int'>0</span>
592
+ <span class='kw'>end</span>
593
+
594
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span> <span class='op'>-</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_start_date'>start_date</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>+</span> <span class='int'>1</span> <span class='op'>-</span> <span class='id identifier rubyid_n_discarded_days'>n_discarded_days</span>
595
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span> <span class='op'>!=</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_target_date'>target_date</span><span class='rparen'>)</span>
596
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Integer</span><span class='rparen'>)</span>
597
+ <span class='kw'>if</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span> <span class='op'>&gt;=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span>
598
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span>
599
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_expiration'>expiration</span> <span class='op'>!=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span><span class='rparen'>)</span>
600
+ <span class='kw'>else</span>
601
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Days remaining to maturity must be greater than or equal to the number of days remaining to the target date!</span><span class='tstring_end'>&#39;</span></span>
602
+ <span class='kw'>end</span>
603
+ <span class='kw'>else</span>
604
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Expiration must be a date, an int, or nil.</span><span class='tstring_end'>&#39;</span></span>
605
+ <span class='kw'>end</span>
606
+
607
+ <span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/Stock.html" title="OptionLab::Models::Stock (class)">Stock</a></span></span>
608
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span>
609
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span>
610
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_prev_pos'>prev_pos</span> <span class='op'>||</span> <span class='float'>0.0</span>
611
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
612
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
613
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span> <span class='op'>&lt;&lt;</span> <span class='kw'>false</span>
614
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span> <span class='op'>&lt;&lt;</span> <span class='op'>-</span><span class='int'>1</span>
615
+
616
+ <span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/ClosedPosition.html" title="OptionLab::Models::ClosedPosition (class)">ClosedPosition</a></span></span>
617
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_prev_pos'>prev_pos</span>
618
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
619
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;&lt;</span> <span class='int'>0</span>
620
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
621
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>n/a</span><span class='tstring_end'>&#39;</span></span>
622
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span> <span class='op'>&lt;&lt;</span> <span class='kw'>false</span>
623
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span> <span class='op'>&lt;&lt;</span> <span class='op'>-</span><span class='int'>1</span>
624
+
625
+ <span class='kw'>else</span>
626
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Type must be &#39;call&#39;, &#39;put&#39;, &#39;stock&#39; or &#39;closed&#39;!</span><span class='tstring_end'>&quot;</span></span>
627
+ <span class='kw'>end</span>
628
+ <span class='kw'>end</span>
629
+
630
+ <span class='id identifier rubyid_data'>data</span>
631
+ <span class='kw'>end</span></pre>
632
+ </td>
633
+ </tr>
634
+ </table>
635
+ </div>
636
+
637
+ <div class="method_details ">
638
+ <h3 class="signature " id="_run-class_method">
639
+
640
+ .<strong>_run</strong>(data) &#x21d2; <tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>
641
+
642
+
643
+
644
+
645
+
646
+ </h3><div class="docstring">
647
+ <div class="discussion">
648
+ <p>Run calculations</p>
649
+
650
+
651
+ </div>
652
+ </div>
653
+ <div class="tags">
654
+ <p class="tag_title">Parameters:</p>
655
+ <ul class="param">
656
+
657
+ <li>
658
+
659
+ <span class='name'>data</span>
660
+
661
+
662
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
663
+
664
+
665
+
666
+ &mdash;
667
+ <div class='inline'><p>Engine data</p>
668
+ </div>
669
+
670
+ </li>
671
+
672
+ </ul>
673
+
674
+ <p class="tag_title">Returns:</p>
675
+ <ul class="return">
676
+
677
+ <li>
678
+
679
+
680
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
681
+
682
+
683
+
684
+ &mdash;
685
+ <div class='inline'><p>Updated engine data</p>
686
+ </div>
687
+
688
+ </li>
689
+
690
+ </ul>
691
+
692
+ </div><table class="source_code">
693
+ <tr>
694
+ <td>
695
+ <pre class="lines">
696
+
697
+
698
+ 144
699
+ 145
700
+ 146
701
+ 147
702
+ 148
703
+ 149
704
+ 150
705
+ 151
706
+ 152
707
+ 153
708
+ 154
709
+ 155
710
+ 156
711
+ 157
712
+ 158
713
+ 159
714
+ 160
715
+ 161
716
+ 162
717
+ 163
718
+ 164
719
+ 165
720
+ 166
721
+ 167
722
+ 168
723
+ 169
724
+ 170
725
+ 171
726
+ 172
727
+ 173
728
+ 174
729
+ 175
730
+ 176
731
+ 177
732
+ 178
733
+ 179
734
+ 180
735
+ 181
736
+ 182
737
+ 183
738
+ 184
739
+ 185
740
+ 186
741
+ 187
742
+ 188
743
+ 189
744
+ 190
745
+ 191
746
+ 192
747
+ 193
748
+ 194
749
+ 195
750
+ 196
751
+ 197
752
+ 198
753
+ 199
754
+ 200
755
+ 201
756
+ 202
757
+ 203
758
+ 204
759
+ 205
760
+ 206
761
+ 207
762
+ 208
763
+ 209
764
+ 210
765
+ 211
766
+ 212
767
+ 213
768
+ 214
769
+ 215
770
+ 216
771
+ 217
772
+ 218
773
+ 219
774
+ 220
775
+ 221
776
+ 222
777
+ 223
778
+ 224
779
+ 225
780
+ 226
781
+ 227
782
+ 228
783
+ 229</pre>
784
+ </td>
785
+ <td>
786
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 144</span>
787
+
788
+ <span class='kw'>def</span> <span class='id identifier rubyid__run'>_run</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
789
+ <span class='id identifier rubyid_inputs'>inputs</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inputs'>inputs</span>
790
+
791
+ <span class='comment'># Calculate time to target
792
+ </span> <span class='id identifier rubyid_time_to_target'>time_to_target</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>/</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span>
793
+
794
+ <span class='comment'># Initialize arrays
795
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span> <span class='op'>=</span> <span class='const'>Array</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span>
796
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span> <span class='op'>=</span> <span class='const'>Numo</span><span class='op'>::</span><span class='const'>DFloat</span><span class='period'>.</span><span class='id identifier rubyid_zeros'>zeros</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
797
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span> <span class='op'>=</span> <span class='const'>Numo</span><span class='op'>::</span><span class='const'>DFloat</span><span class='period'>.</span><span class='id identifier rubyid_zeros'>zeros</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
798
+
799
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
800
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span> <span class='op'>=</span> <span class='const'>Numo</span><span class='op'>::</span><span class='const'>DFloat</span><span class='period'>.</span><span class='id identifier rubyid_zeros'>zeros</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_terminal_stock_prices'>terminal_stock_prices</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
801
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit_mc'>strategy_profit_mc</span> <span class='op'>=</span> <span class='const'>Numo</span><span class='op'>::</span><span class='const'>DFloat</span><span class='period'>.</span><span class='id identifier rubyid_zeros'>zeros</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_terminal_stock_prices'>terminal_stock_prices</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
802
+ <span class='kw'>end</span>
803
+
804
+ <span class='comment'># Process each strategy leg
805
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='period'>.</span><span class='id identifier rubyid_each_with_index'>each_with_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
806
+ <span class='kw'>case</span> <span class='id identifier rubyid_type'>type</span>
807
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>call</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>put</span><span class='tstring_end'>&#39;</span></span>
808
+ <span class='id identifier rubyid__run_option_calcs'>_run_option_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
809
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>stock</span><span class='tstring_end'>&#39;</span></span>
810
+ <span class='id identifier rubyid__run_stock_calcs'>_run_stock_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
811
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>closed</span><span class='tstring_end'>&#39;</span></span>
812
+ <span class='id identifier rubyid__run_closed_position_calcs'>_run_closed_position_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
813
+ <span class='kw'>end</span>
814
+
815
+ <span class='comment'># Add to strategy profit
816
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span> <span class='op'>+=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span>
817
+
818
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
819
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit_mc'>strategy_profit_mc</span> <span class='op'>+=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span>
820
+ <span class='kw'>end</span>
821
+ <span class='kw'>end</span>
822
+
823
+ <span class='comment'># Calculate probability of profit
824
+ </span> <span class='id identifier rubyid_pop_inputs'>pop_inputs</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
825
+ <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/ArrayInputs.html" title="OptionLab::Models::ArrayInputs (class)">ArrayInputs</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Models/ArrayInputs.html#initialize-instance_method" title="OptionLab::Models::ArrayInputs#initialize (method)">new</a></span></span><span class='lparen'>(</span>
826
+ <span class='label'>array:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit_mc'>strategy_profit_mc</span><span class='comma'>,</span>
827
+ <span class='rparen'>)</span>
828
+ <span class='kw'>else</span>
829
+ <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/BlackScholesModelInputs.html" title="OptionLab::Models::BlackScholesModelInputs (class)">BlackScholesModelInputs</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Models/BlackScholesModelInputs.html#initialize-instance_method" title="OptionLab::Models::BlackScholesModelInputs#initialize (method)">new</a></span></span><span class='lparen'>(</span>
830
+ <span class='label'>stock_price:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_price'>stock_price</span><span class='comma'>,</span>
831
+ <span class='label'>volatility:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_volatility'>volatility</span><span class='comma'>,</span>
832
+ <span class='label'>years_to_target_date:</span> <span class='id identifier rubyid_time_to_target'>time_to_target</span><span class='comma'>,</span>
833
+ <span class='label'>interest_rate:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_interest_rate'>interest_rate</span><span class='comma'>,</span>
834
+ <span class='label'>dividend_yield:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_dividend_yield'>dividend_yield</span><span class='comma'>,</span>
835
+ <span class='rparen'>)</span>
836
+ <span class='kw'>end</span>
837
+
838
+ <span class='id identifier rubyid_pop_out'>pop_out</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pop'><span class='object_link'><a href="Support.html#get_pop-class_method" title="OptionLab::Support.get_pop (method)">get_pop</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span><span class='comma'>,</span> <span class='id identifier rubyid_pop_inputs'>pop_inputs</span><span class='rparen'>)</span>
839
+
840
+ <span class='comment'># Store results
841
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_probability'>profit_probability</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out'>pop_out</span><span class='period'>.</span><span class='id identifier rubyid_probability_of_reaching_target'>probability_of_reaching_target</span>
842
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_expected_profit'>expected_profit</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out'>pop_out</span><span class='period'>.</span><span class='id identifier rubyid_expected_return_above_target'>expected_return_above_target</span>
843
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_expected_loss'>expected_loss</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out'>pop_out</span><span class='period'>.</span><span class='id identifier rubyid_expected_return_below_target'>expected_return_below_target</span>
844
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_ranges'>profit_ranges</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out'>pop_out</span><span class='period'>.</span><span class='id identifier rubyid_reaching_target_range'>reaching_target_range</span>
845
+
846
+ <span class='comment'># Calculate profit target probability if needed
847
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_profit_target'>profit_target</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_profit_target'>profit_target</span> <span class='op'>&gt;</span> <span class='float'>0.01</span>
848
+ <span class='id identifier rubyid_pop_out_prof_targ'>pop_out_prof_targ</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pop'><span class='object_link'><a href="Support.html#get_pop-class_method" title="OptionLab::Support.get_pop (method)">get_pop</a></span></span><span class='lparen'>(</span>
849
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span>
850
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span><span class='comma'>,</span>
851
+ <span class='id identifier rubyid_pop_inputs'>pop_inputs</span><span class='comma'>,</span>
852
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_profit_target'>profit_target</span><span class='comma'>,</span>
853
+ <span class='rparen'>)</span>
854
+
855
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_target_probability'>profit_target_probability</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out_prof_targ'>pop_out_prof_targ</span><span class='period'>.</span><span class='id identifier rubyid_probability_of_reaching_target'>probability_of_reaching_target</span>
856
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_target_ranges'>profit_target_ranges</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out_prof_targ'>pop_out_prof_targ</span><span class='period'>.</span><span class='id identifier rubyid_reaching_target_range'>reaching_target_range</span>
857
+ <span class='kw'>end</span>
858
+
859
+ <span class='comment'># Calculate loss limit probability if needed
860
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit'>loss_limit</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit'>loss_limit</span> <span class='op'>&lt;</span> <span class='float'>0.0</span>
861
+ <span class='id identifier rubyid_pop_out_loss_lim'>pop_out_loss_lim</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pop'><span class='object_link'><a href="Support.html#get_pop-class_method" title="OptionLab::Support.get_pop (method)">get_pop</a></span></span><span class='lparen'>(</span>
862
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span>
863
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strategy_profit'>strategy_profit</span><span class='comma'>,</span>
864
+ <span class='id identifier rubyid_pop_inputs'>pop_inputs</span><span class='comma'>,</span>
865
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit'>loss_limit</span> <span class='op'>+</span> <span class='float'>0.01</span><span class='comma'>,</span>
866
+ <span class='rparen'>)</span>
867
+
868
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit_probability'>loss_limit_probability</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out_loss_lim'>pop_out_loss_lim</span><span class='period'>.</span><span class='id identifier rubyid_probability_of_missing_target'>probability_of_missing_target</span>
869
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_loss_limit_ranges'>loss_limit_ranges</span> <span class='op'>=</span> <span class='id identifier rubyid_pop_out_loss_lim'>pop_out_loss_lim</span><span class='period'>.</span><span class='id identifier rubyid_missing_target_range'>missing_target_range</span>
870
+ <span class='kw'>end</span>
871
+
872
+ <span class='id identifier rubyid_data'>data</span>
873
+ <span class='kw'>end</span></pre>
874
+ </td>
875
+ </tr>
876
+ </table>
877
+ </div>
878
+
879
+ <div class="method_details ">
880
+ <h3 class="signature " id="_run_closed_position_calcs-class_method">
881
+
882
+ .<strong>_run_closed_position_calcs</strong>(data, i) &#x21d2; <tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>
883
+
884
+
885
+
886
+
887
+
888
+ </h3><div class="docstring">
889
+ <div class="discussion">
890
+ <p>Run closed position calculations</p>
891
+
892
+
893
+ </div>
894
+ </div>
895
+ <div class="tags">
896
+ <p class="tag_title">Parameters:</p>
897
+ <ul class="param">
898
+
899
+ <li>
900
+
901
+ <span class='name'>data</span>
902
+
903
+
904
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
905
+
906
+
907
+
908
+ &mdash;
909
+ <div class='inline'><p>Engine data</p>
910
+ </div>
911
+
912
+ </li>
913
+
914
+ <li>
915
+
916
+ <span class='name'>i</span>
917
+
918
+
919
+ <span class='type'>(<tt>Integer</tt>)</span>
920
+
921
+
922
+
923
+ &mdash;
924
+ <div class='inline'><p>Index of strategy leg</p>
925
+ </div>
926
+
927
+ </li>
928
+
929
+ </ul>
930
+
931
+ <p class="tag_title">Returns:</p>
932
+ <ul class="return">
933
+
934
+ <li>
935
+
936
+
937
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
938
+
939
+
940
+
941
+ &mdash;
942
+ <div class='inline'><p>Updated engine data</p>
943
+ </div>
944
+
945
+ </li>
946
+
947
+ </ul>
948
+
949
+ </div><table class="source_code">
950
+ <tr>
951
+ <td>
952
+ <pre class="lines">
953
+
954
+
955
+ 440
956
+ 441
957
+ 442
958
+ 443
959
+ 444
960
+ 445
961
+ 446
962
+ 447
963
+ 448
964
+ 449
965
+ 450
966
+ 451
967
+ 452
968
+ 453
969
+ 454
970
+ 455
971
+ 456
972
+ 457
973
+ 458
974
+ 459</pre>
975
+ </td>
976
+ <td>
977
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 440</span>
978
+
979
+ <span class='kw'>def</span> <span class='id identifier rubyid__run_closed_position_calcs'>_run_closed_position_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
980
+ <span class='comment'># Set metrics
981
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_implied_volatility'>implied_volatility</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
982
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
983
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
984
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
985
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
986
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
987
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
988
+
989
+ <span class='comment'># Set cost and profit
990
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
991
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
992
+
993
+ <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
994
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
995
+ <span class='kw'>end</span>
996
+
997
+ <span class='id identifier rubyid_data'>data</span>
998
+ <span class='kw'>end</span></pre>
999
+ </td>
1000
+ </tr>
1001
+ </table>
1002
+ </div>
1003
+
1004
+ <div class="method_details ">
1005
+ <h3 class="signature " id="_run_option_calcs-class_method">
1006
+
1007
+ .<strong>_run_option_calcs</strong>(data, i) &#x21d2; <tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+ </h3><div class="docstring">
1014
+ <div class="discussion">
1015
+ <p>Run option calculations</p>
1016
+
1017
+
1018
+ </div>
1019
+ </div>
1020
+ <div class="tags">
1021
+ <p class="tag_title">Parameters:</p>
1022
+ <ul class="param">
1023
+
1024
+ <li>
1025
+
1026
+ <span class='name'>data</span>
1027
+
1028
+
1029
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
1030
+
1031
+
1032
+
1033
+ &mdash;
1034
+ <div class='inline'><p>Engine data</p>
1035
+ </div>
1036
+
1037
+ </li>
1038
+
1039
+ <li>
1040
+
1041
+ <span class='name'>i</span>
1042
+
1043
+
1044
+ <span class='type'>(<tt>Integer</tt>)</span>
1045
+
1046
+
1047
+
1048
+ &mdash;
1049
+ <div class='inline'><p>Index of strategy leg</p>
1050
+ </div>
1051
+
1052
+ </li>
1053
+
1054
+ </ul>
1055
+
1056
+ <p class="tag_title">Returns:</p>
1057
+ <ul class="return">
1058
+
1059
+ <li>
1060
+
1061
+
1062
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
1063
+
1064
+
1065
+
1066
+ &mdash;
1067
+ <div class='inline'><p>Updated engine data</p>
1068
+ </div>
1069
+
1070
+ </li>
1071
+
1072
+ </ul>
1073
+
1074
+ </div><table class="source_code">
1075
+ <tr>
1076
+ <td>
1077
+ <pre class="lines">
1078
+
1079
+
1080
+ 235
1081
+ 236
1082
+ 237
1083
+ 238
1084
+ 239
1085
+ 240
1086
+ 241
1087
+ 242
1088
+ 243
1089
+ 244
1090
+ 245
1091
+ 246
1092
+ 247
1093
+ 248
1094
+ 249
1095
+ 250
1096
+ 251
1097
+ 252
1098
+ 253
1099
+ 254
1100
+ 255
1101
+ 256
1102
+ 257
1103
+ 258
1104
+ 259
1105
+ 260
1106
+ 261
1107
+ 262
1108
+ 263
1109
+ 264
1110
+ 265
1111
+ 266
1112
+ 267
1113
+ 268
1114
+ 269
1115
+ 270
1116
+ 271
1117
+ 272
1118
+ 273
1119
+ 274
1120
+ 275
1121
+ 276
1122
+ 277
1123
+ 278
1124
+ 279
1125
+ 280
1126
+ 281
1127
+ 282
1128
+ 283
1129
+ 284
1130
+ 285
1131
+ 286
1132
+ 287
1133
+ 288
1134
+ 289
1135
+ 290
1136
+ 291
1137
+ 292
1138
+ 293
1139
+ 294
1140
+ 295
1141
+ 296
1142
+ 297
1143
+ 298
1144
+ 299
1145
+ 300
1146
+ 301
1147
+ 302
1148
+ 303
1149
+ 304
1150
+ 305
1151
+ 306
1152
+ 307
1153
+ 308
1154
+ 309
1155
+ 310
1156
+ 311
1157
+ 312
1158
+ 313
1159
+ 314
1160
+ 315
1161
+ 316
1162
+ 317
1163
+ 318
1164
+ 319
1165
+ 320
1166
+ 321
1167
+ 322
1168
+ 323
1169
+ 324
1170
+ 325
1171
+ 326
1172
+ 327
1173
+ 328
1174
+ 329
1175
+ 330
1176
+ 331
1177
+ 332
1178
+ 333
1179
+ 334
1180
+ 335
1181
+ 336
1182
+ 337
1183
+ 338
1184
+ 339
1185
+ 340
1186
+ 341
1187
+ 342
1188
+ 343
1189
+ 344
1190
+ 345
1191
+ 346
1192
+ 347
1193
+ 348
1194
+ 349
1195
+ 350
1196
+ 351
1197
+ 352
1198
+ 353
1199
+ 354
1200
+ 355
1201
+ 356
1202
+ 357
1203
+ 358
1204
+ 359
1205
+ 360
1206
+ 361
1207
+ 362
1208
+ 363
1209
+ 364
1210
+ 365
1211
+ 366
1212
+ 367
1213
+ 368
1214
+ 369
1215
+ 370
1216
+ 371
1217
+ 372</pre>
1218
+ </td>
1219
+ <td>
1220
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 235</span>
1221
+
1222
+ <span class='kw'>def</span> <span class='id identifier rubyid__run_option_calcs'>_run_option_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
1223
+ <span class='id identifier rubyid_inputs'>inputs</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inputs'>inputs</span>
1224
+ <span class='id identifier rubyid_action'>action</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1225
+ <span class='id identifier rubyid_type'>type</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1226
+
1227
+ <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&lt;</span> <span class='float'>0.0</span>
1228
+ <span class='comment'># Previous position is closed
1229
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_implied_volatility'>implied_volatility</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1230
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1231
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1232
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1233
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1234
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1235
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1236
+
1237
+ <span class='id identifier rubyid_cost'>cost</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>+</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>*</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1238
+ <span class='id identifier rubyid_cost'>cost</span> <span class='op'>*=</span> <span class='op'>-</span><span class='float'>1.0</span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>buy</span><span class='tstring_end'>&#39;</span></span>
1239
+
1240
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_cost'>cost</span>
1241
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_cost'>cost</span>
1242
+
1243
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
1244
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_cost'>cost</span>
1245
+ <span class='kw'>end</span>
1246
+
1247
+ <span class='kw'>return</span> <span class='id identifier rubyid_data'>data</span>
1248
+ <span class='kw'>end</span>
1249
+
1250
+ <span class='comment'># Calculate option metrics
1251
+ </span> <span class='id identifier rubyid_time_to_maturity'>time_to_maturity</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>/</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span>
1252
+
1253
+ <span class='id identifier rubyid_bs'>bs</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="BlackScholes.html" title="OptionLab::BlackScholes (module)">BlackScholes</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_bs_info'><span class='object_link'><a href="BlackScholes.html#get_bs_info-class_method" title="OptionLab::BlackScholes.get_bs_info (method)">get_bs_info</a></span></span><span class='lparen'>(</span>
1254
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_price'>stock_price</span><span class='comma'>,</span>
1255
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1256
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_interest_rate'>interest_rate</span><span class='comma'>,</span>
1257
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_volatility'>volatility</span><span class='comma'>,</span>
1258
+ <span class='id identifier rubyid_time_to_maturity'>time_to_maturity</span><span class='comma'>,</span>
1259
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_dividend_yield'>dividend_yield</span><span class='comma'>,</span>
1260
+ <span class='rparen'>)</span>
1261
+
1262
+ <span class='comment'># Store Greeks
1263
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span>
1264
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span>
1265
+
1266
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_implied_volatility'>implied_volatility</span> <span class='op'>&lt;&lt;</span> <span class='const'><span class='object_link'><a href="BlackScholes.html" title="OptionLab::BlackScholes (module)">BlackScholes</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_implied_vol'><span class='object_link'><a href="BlackScholes.html#get_implied_vol-class_method" title="OptionLab::BlackScholes.get_implied_vol (method)">get_implied_vol</a></span></span><span class='lparen'>(</span>
1267
+ <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
1268
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1269
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_price'>stock_price</span><span class='comma'>,</span>
1270
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1271
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_interest_rate'>interest_rate</span><span class='comma'>,</span>
1272
+ <span class='id identifier rubyid_time_to_maturity'>time_to_maturity</span><span class='comma'>,</span>
1273
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_dividend_yield'>dividend_yield</span><span class='comma'>,</span>
1274
+ <span class='rparen'>)</span>
1275
+
1276
+ <span class='comment'># Set multiplier for buy/sell
1277
+ </span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>buy</span><span class='tstring_end'>&#39;</span></span> <span class='op'>?</span> <span class='int'>1</span> <span class='op'>:</span> <span class='op'>-</span><span class='int'>1</span>
1278
+
1279
+ <span class='comment'># Store type-specific metrics
1280
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>call</span><span class='tstring_end'>&#39;</span></span>
1281
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_call_itm_prob'>call_itm_prob</span>
1282
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_call_delta'>call_delta</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1283
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_call_theta'>call_theta</span> <span class='op'>/</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1284
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_call_rho'>call_rho</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1285
+ <span class='kw'>else</span>
1286
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_put_itm_prob'>put_itm_prob</span>
1287
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_put_delta'>put_delta</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1288
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_put_theta'>put_theta</span> <span class='op'>/</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1289
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_bs'>bs</span><span class='period'>.</span><span class='id identifier rubyid_put_rho'>put_rho</span> <span class='op'>*</span> <span class='id identifier rubyid_negative_multiplier'>negative_multiplier</span>
1290
+ <span class='kw'>end</span>
1291
+
1292
+ <span class='comment'># Use previous position premium if available
1293
+ </span> <span class='id identifier rubyid_opt_value'>opt_value</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='float'>0.0</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_premium'>premium</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1294
+
1295
+ <span class='comment'># Calculate profit/loss profile
1296
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_use_bs'>use_bs</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1297
+ <span class='id identifier rubyid_target_to_maturity'>target_to_maturity</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_maturity'>days_to_maturity</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>-</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_to_target'>days_to_target</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>/</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_days_in_year'>days_in_year</span>
1298
+
1299
+ <span class='id identifier rubyid_profit'>profit</span><span class='comma'>,</span> <span class='id identifier rubyid_cost'>cost</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile_bs'><span class='object_link'><a href="Support.html#get_pl_profile_bs-class_method" title="OptionLab::Support.get_pl_profile_bs (method)">get_pl_profile_bs</a></span></span><span class='lparen'>(</span>
1300
+ <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
1301
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1302
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1303
+ <span class='id identifier rubyid_opt_value'>opt_value</span><span class='comma'>,</span>
1304
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_interest_rate'>interest_rate</span><span class='comma'>,</span>
1305
+ <span class='id identifier rubyid_target_to_maturity'>target_to_maturity</span><span class='comma'>,</span>
1306
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_volatility'>volatility</span><span class='comma'>,</span>
1307
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1308
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span>
1309
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_dividend_yield'>dividend_yield</span><span class='comma'>,</span>
1310
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_opt_commission'>opt_commission</span><span class='comma'>,</span>
1311
+ <span class='rparen'>)</span>
1312
+
1313
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_profit'>profit</span>
1314
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_cost'>cost</span>
1315
+
1316
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
1317
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile_bs'><span class='object_link'><a href="Support.html#get_pl_profile_bs-class_method" title="OptionLab::Support.get_pl_profile_bs (method)">get_pl_profile_bs</a></span></span><span class='lparen'>(</span>
1318
+ <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
1319
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1320
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1321
+ <span class='id identifier rubyid_opt_value'>opt_value</span><span class='comma'>,</span>
1322
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_interest_rate'>interest_rate</span><span class='comma'>,</span>
1323
+ <span class='id identifier rubyid_target_to_maturity'>target_to_maturity</span><span class='comma'>,</span>
1324
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_volatility'>volatility</span><span class='comma'>,</span>
1325
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1326
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_terminal_stock_prices'>terminal_stock_prices</span><span class='comma'>,</span>
1327
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_dividend_yield'>dividend_yield</span><span class='comma'>,</span>
1328
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_opt_commission'>opt_commission</span><span class='comma'>,</span>
1329
+ <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1330
+ <span class='kw'>end</span>
1331
+ <span class='kw'>else</span>
1332
+ <span class='id identifier rubyid_profit'>profit</span><span class='comma'>,</span> <span class='id identifier rubyid_cost'>cost</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile'><span class='object_link'><a href="Support.html#get_pl_profile-class_method" title="OptionLab::Support.get_pl_profile (method)">get_pl_profile</a></span></span><span class='lparen'>(</span>
1333
+ <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
1334
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1335
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1336
+ <span class='id identifier rubyid_opt_value'>opt_value</span><span class='comma'>,</span>
1337
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1338
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span>
1339
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_opt_commission'>opt_commission</span><span class='comma'>,</span>
1340
+ <span class='rparen'>)</span>
1341
+
1342
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_profit'>profit</span>
1343
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_cost'>cost</span>
1344
+
1345
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
1346
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile'><span class='object_link'><a href="Support.html#get_pl_profile-class_method" title="OptionLab::Support.get_pl_profile (method)">get_pl_profile</a></span></span><span class='lparen'>(</span>
1347
+ <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
1348
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1349
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strike'>strike</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1350
+ <span class='id identifier rubyid_opt_value'>opt_value</span><span class='comma'>,</span>
1351
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1352
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_terminal_stock_prices'>terminal_stock_prices</span><span class='comma'>,</span>
1353
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_opt_commission'>opt_commission</span><span class='comma'>,</span>
1354
+ <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1355
+ <span class='kw'>end</span>
1356
+ <span class='kw'>end</span>
1357
+
1358
+ <span class='id identifier rubyid_data'>data</span>
1359
+ <span class='kw'>end</span></pre>
1360
+ </td>
1361
+ </tr>
1362
+ </table>
1363
+ </div>
1364
+
1365
+ <div class="method_details ">
1366
+ <h3 class="signature " id="_run_stock_calcs-class_method">
1367
+
1368
+ .<strong>_run_stock_calcs</strong>(data, i) &#x21d2; <tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+ </h3><div class="docstring">
1375
+ <div class="discussion">
1376
+ <p>Run stock calculations</p>
1377
+
1378
+
1379
+ </div>
1380
+ </div>
1381
+ <div class="tags">
1382
+ <p class="tag_title">Parameters:</p>
1383
+ <ul class="param">
1384
+
1385
+ <li>
1386
+
1387
+ <span class='name'>data</span>
1388
+
1389
+
1390
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
1391
+
1392
+
1393
+
1394
+ &mdash;
1395
+ <div class='inline'><p>Engine data</p>
1396
+ </div>
1397
+
1398
+ </li>
1399
+
1400
+ <li>
1401
+
1402
+ <span class='name'>i</span>
1403
+
1404
+
1405
+ <span class='type'>(<tt>Integer</tt>)</span>
1406
+
1407
+
1408
+
1409
+ &mdash;
1410
+ <div class='inline'><p>Index of strategy leg</p>
1411
+ </div>
1412
+
1413
+ </li>
1414
+
1415
+ </ul>
1416
+
1417
+ <p class="tag_title">Returns:</p>
1418
+ <ul class="return">
1419
+
1420
+ <li>
1421
+
1422
+
1423
+ <span class='type'>(<tt><span class='object_link'><a href="Models/EngineData.html" title="OptionLab::Models::EngineData (class)">Models::EngineData</a></span></tt>)</span>
1424
+
1425
+
1426
+
1427
+ &mdash;
1428
+ <div class='inline'><p>Updated engine data</p>
1429
+ </div>
1430
+
1431
+ </li>
1432
+
1433
+ </ul>
1434
+
1435
+ </div><table class="source_code">
1436
+ <tr>
1437
+ <td>
1438
+ <pre class="lines">
1439
+
1440
+
1441
+ 378
1442
+ 379
1443
+ 380
1444
+ 381
1445
+ 382
1446
+ 383
1447
+ 384
1448
+ 385
1449
+ 386
1450
+ 387
1451
+ 388
1452
+ 389
1453
+ 390
1454
+ 391
1455
+ 392
1456
+ 393
1457
+ 394
1458
+ 395
1459
+ 396
1460
+ 397
1461
+ 398
1462
+ 399
1463
+ 400
1464
+ 401
1465
+ 402
1466
+ 403
1467
+ 404
1468
+ 405
1469
+ 406
1470
+ 407
1471
+ 408
1472
+ 409
1473
+ 410
1474
+ 411
1475
+ 412
1476
+ 413
1477
+ 414
1478
+ 415
1479
+ 416
1480
+ 417
1481
+ 418
1482
+ 419
1483
+ 420
1484
+ 421
1485
+ 422
1486
+ 423
1487
+ 424
1488
+ 425
1489
+ 426
1490
+ 427
1491
+ 428
1492
+ 429
1493
+ 430
1494
+ 431
1495
+ 432
1496
+ 433
1497
+ 434</pre>
1498
+ </td>
1499
+ <td>
1500
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 378</span>
1501
+
1502
+ <span class='kw'>def</span> <span class='id identifier rubyid__run_stock_calcs'>_run_stock_calcs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span>
1503
+ <span class='id identifier rubyid_inputs'>inputs</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inputs'>inputs</span>
1504
+ <span class='id identifier rubyid_action'>action</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1505
+
1506
+ <span class='comment'># Set delta based on action
1507
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_delta'>delta</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='id identifier rubyid_action'>action</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>buy</span><span class='tstring_end'>&#39;</span></span> <span class='op'>?</span> <span class='float'>1.0</span> <span class='op'>:</span> <span class='op'>-</span><span class='float'>1.0</span><span class='rparen'>)</span>
1508
+
1509
+ <span class='comment'># Set other metrics
1510
+ </span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_itm_probability'>itm_probability</span> <span class='op'>&lt;&lt;</span> <span class='float'>1.0</span>
1511
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_implied_volatility'>implied_volatility</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1512
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gamma'>gamma</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1513
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_vega'>vega</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1514
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_rho'>rho</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1515
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_theta'>theta</span> <span class='op'>&lt;&lt;</span> <span class='float'>0.0</span>
1516
+
1517
+ <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&lt;</span> <span class='float'>0.0</span>
1518
+ <span class='comment'># Previous position is closed
1519
+ </span> <span class='id identifier rubyid_costtmp'>costtmp</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_price'>stock_price</span> <span class='op'>+</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>*</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
1520
+ <span class='id identifier rubyid_costtmp'>costtmp</span> <span class='op'>*=</span> <span class='op'>-</span><span class='float'>1.0</span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_action'>action</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>buy</span><span class='tstring_end'>&#39;</span></span>
1521
+
1522
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_costtmp'>costtmp</span>
1523
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_costtmp'>costtmp</span>
1524
+
1525
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
1526
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='id identifier rubyid_costtmp'>costtmp</span>
1527
+ <span class='kw'>end</span>
1528
+
1529
+ <span class='kw'>return</span> <span class='id identifier rubyid_data'>data</span>
1530
+ <span class='kw'>end</span>
1531
+
1532
+ <span class='comment'># Use previous position if available
1533
+ </span> <span class='id identifier rubyid_stockpos'>stockpos</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>&gt;</span> <span class='float'>0.0</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_previous_position'>previous_position</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_price'>stock_price</span>
1534
+
1535
+ <span class='comment'># Calculate profit/loss profile
1536
+ </span> <span class='id identifier rubyid_profit'>profit</span><span class='comma'>,</span> <span class='id identifier rubyid_cost'>cost</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile_stock'><span class='object_link'><a href="Support.html#get_pl_profile_stock-class_method" title="OptionLab::Support.get_pl_profile_stock (method)">get_pl_profile_stock</a></span></span><span class='lparen'>(</span>
1537
+ <span class='id identifier rubyid_stockpos'>stockpos</span><span class='comma'>,</span>
1538
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1539
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1540
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_stock_price_array'>stock_price_array</span><span class='comma'>,</span>
1541
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_commission'>stock_commission</span><span class='comma'>,</span>
1542
+ <span class='rparen'>)</span>
1543
+
1544
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_profit'>profit</span>
1545
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_cost'>cost</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_cost'>cost</span>
1546
+
1547
+ <span class='kw'>if</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_model'>model</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>array</span><span class='tstring_end'>&#39;</span></span>
1548
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit_mc'>profit_mc</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Support.html" title="OptionLab::Support (module)">Support</a></span></span><span class='period'>.</span><span class='id identifier rubyid_get_pl_profile_stock'><span class='object_link'><a href="Support.html#get_pl_profile_stock-class_method" title="OptionLab::Support.get_pl_profile_stock (method)">get_pl_profile_stock</a></span></span><span class='lparen'>(</span>
1549
+ <span class='id identifier rubyid_stockpos'>stockpos</span><span class='comma'>,</span>
1550
+ <span class='id identifier rubyid_action'>action</span><span class='comma'>,</span>
1551
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_n'>n</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span><span class='comma'>,</span>
1552
+ <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_terminal_stock_prices'>terminal_stock_prices</span><span class='comma'>,</span>
1553
+ <span class='id identifier rubyid_inputs'>inputs</span><span class='period'>.</span><span class='id identifier rubyid_stock_commission'>stock_commission</span><span class='comma'>,</span>
1554
+ <span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
1555
+ <span class='kw'>end</span>
1556
+
1557
+ <span class='id identifier rubyid_data'>data</span>
1558
+ <span class='kw'>end</span></pre>
1559
+ </td>
1560
+ </tr>
1561
+ </table>
1562
+ </div>
1563
+
1564
+ <div class="method_details ">
1565
+ <h3 class="signature " id="run_strategy-class_method">
1566
+
1567
+ .<strong>run_strategy</strong>(inputs_data) &#x21d2; <tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+ </h3><div class="docstring">
1574
+ <div class="discussion">
1575
+ <p>Run strategy calculation</p>
1576
+
1577
+
1578
+ </div>
1579
+ </div>
1580
+ <div class="tags">
1581
+ <p class="tag_title">Parameters:</p>
1582
+ <ul class="param">
1583
+
1584
+ <li>
1585
+
1586
+ <span class='name'>inputs_data</span>
1587
+
1588
+
1589
+ <span class='type'>(<tt>Hash</tt>, <tt><span class='object_link'><a href="Models/Inputs.html" title="OptionLab::Models::Inputs (class)">Models::Inputs</a></span></tt>)</span>
1590
+
1591
+
1592
+
1593
+ &mdash;
1594
+ <div class='inline'><p>Input data for strategy calculation</p>
1595
+ </div>
1596
+
1597
+ </li>
1598
+
1599
+ </ul>
1600
+
1601
+ <p class="tag_title">Returns:</p>
1602
+ <ul class="return">
1603
+
1604
+ <li>
1605
+
1606
+
1607
+ <span class='type'>(<tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>)</span>
1608
+
1609
+
1610
+
1611
+ &mdash;
1612
+ <div class='inline'><p>Output data from strategy calculation</p>
1613
+ </div>
1614
+
1615
+ </li>
1616
+
1617
+ </ul>
1618
+
1619
+ </div><table class="source_code">
1620
+ <tr>
1621
+ <td>
1622
+ <pre class="lines">
1623
+
1624
+
1625
+ 13
1626
+ 14
1627
+ 15
1628
+ 16
1629
+ 17
1630
+ 18
1631
+ 19
1632
+ 20
1633
+ 21
1634
+ 22
1635
+ 23
1636
+ 24
1637
+ 25
1638
+ 26
1639
+ 27
1640
+ 28
1641
+ 29
1642
+ 30
1643
+ 31
1644
+ 32
1645
+ 33
1646
+ 34
1647
+ 35
1648
+ 36
1649
+ 37
1650
+ 38
1651
+ 39
1652
+ 40
1653
+ 41
1654
+ 42
1655
+ 43
1656
+ 44
1657
+ 45
1658
+ 46
1659
+ 47</pre>
1660
+ </td>
1661
+ <td>
1662
+ <pre class="code"><span class="info file"># File 'lib/option_lab/engine.rb', line 13</span>
1663
+
1664
+ <span class='kw'>def</span> <span class='id identifier rubyid_run_strategy'>run_strategy</span><span class='lparen'>(</span><span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='rparen'>)</span>
1665
+ <span class='comment'># Ensure inputs_data is not nil
1666
+ </span> <span class='id identifier rubyid_inputs_data'>inputs_data</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1667
+
1668
+ <span class='comment'># Ensure strategy is present
1669
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='lbracket'>[</span><span class='symbol'>:strategy</span><span class='rbracket'>]</span>
1670
+ <span class='comment'># Create a default call option
1671
+ </span> <span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='lbracket'>[</span><span class='symbol'>:strategy</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span>
1672
+ <span class='lbrace'>{</span>
1673
+ <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>call</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
1674
+ <span class='label'>strike:</span> <span class='float'>110.0</span><span class='comma'>,</span>
1675
+ <span class='label'>premium:</span> <span class='float'>5.0</span><span class='comma'>,</span>
1676
+ <span class='label'>n:</span> <span class='int'>1</span><span class='comma'>,</span>
1677
+ <span class='label'>action:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>buy</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
1678
+ <span class='label'>expiration:</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_today'>today</span> <span class='op'>+</span> <span class='int'>30</span>
1679
+ <span class='rbrace'>}</span>
1680
+ <span class='rbracket'>]</span>
1681
+ <span class='kw'>end</span>
1682
+
1683
+ <span class='comment'># Convert hash to Inputs if needed
1684
+ </span> <span class='id identifier rubyid_inputs'>inputs</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/Inputs.html" title="OptionLab::Models::Inputs (class)">Inputs</a></span></span><span class='rparen'>)</span>
1685
+ <span class='id identifier rubyid_inputs_data'>inputs_data</span>
1686
+ <span class='kw'>else</span>
1687
+ <span class='const'><span class='object_link'><a href="Models.html" title="OptionLab::Models (module)">Models</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Models/Inputs.html" title="OptionLab::Models::Inputs (class)">Inputs</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Models/Inputs.html#initialize-instance_method" title="OptionLab::Models::Inputs#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_inputs_data'>inputs_data</span><span class='rparen'>)</span>
1688
+ <span class='kw'>end</span>
1689
+
1690
+ <span class='comment'># Initialize data
1691
+ </span> <span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='id identifier rubyid__init_inputs'>_init_inputs</span><span class='lparen'>(</span><span class='id identifier rubyid_inputs'>inputs</span><span class='rparen'>)</span>
1692
+
1693
+ <span class='comment'># Run calculations
1694
+ </span> <span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='id identifier rubyid__run'>_run</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1695
+
1696
+ <span class='comment'># Generate outputs
1697
+ </span> <span class='id identifier rubyid__generate_outputs'>_generate_outputs</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1698
+ <span class='kw'>end</span></pre>
1699
+ </td>
1700
+ </tr>
1701
+ </table>
1702
+ </div>
1703
+
1704
+ </div>
1705
+
1706
+ </div>
1707
+
1708
+ <div id="footer">
1709
+ Generated on Sun Apr 27 16:09:34 2025 by
1710
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1711
+ 0.9.37 (ruby-3.3.3).
1712
+ </div>
1713
+
1714
+ </div>
1715
+ </body>
1716
+ </html>