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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +139 -0
- data/.yard/hooks/before_generate.rb +7 -0
- data/.yardopts +11 -0
- data/Gemfile +26 -0
- data/LICENSE.txt +21 -0
- data/README.md +180 -0
- data/Rakefile +44 -0
- data/docs/OptionLab/BinomialTree.html +1271 -0
- data/docs/OptionLab/BjerksundStensland.html +2022 -0
- data/docs/OptionLab/BlackScholes.html +2388 -0
- data/docs/OptionLab/Engine.html +1716 -0
- data/docs/OptionLab/Models/AmericanModelInputs.html +937 -0
- data/docs/OptionLab/Models/ArrayInputs.html +463 -0
- data/docs/OptionLab/Models/BaseModel.html +223 -0
- data/docs/OptionLab/Models/BinomialModelInputs.html +1161 -0
- data/docs/OptionLab/Models/BlackScholesInfo.html +967 -0
- data/docs/OptionLab/Models/BlackScholesModelInputs.html +851 -0
- data/docs/OptionLab/Models/ClosedPosition.html +445 -0
- data/docs/OptionLab/Models/EngineData.html +2523 -0
- data/docs/OptionLab/Models/EngineDataResults.html +435 -0
- data/docs/OptionLab/Models/Inputs.html +2241 -0
- data/docs/OptionLab/Models/LaplaceInputs.html +777 -0
- data/docs/OptionLab/Models/Option.html +736 -0
- data/docs/OptionLab/Models/Outputs.html +1753 -0
- data/docs/OptionLab/Models/PoPOutputs.html +645 -0
- data/docs/OptionLab/Models/PricingResult.html +848 -0
- data/docs/OptionLab/Models/Stock.html +583 -0
- data/docs/OptionLab/Models/TreeVisualization.html +688 -0
- data/docs/OptionLab/Models.html +251 -0
- data/docs/OptionLab/Plotting.html +548 -0
- data/docs/OptionLab/Support.html +2884 -0
- data/docs/OptionLab/Utils.html +619 -0
- data/docs/OptionLab.html +133 -0
- data/docs/_index.html +376 -0
- data/docs/class_list.html +54 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +503 -0
- data/docs/file.LICENSE.html +70 -0
- data/docs/file.README.html +263 -0
- data/docs/file_list.html +64 -0
- data/docs/frames.html +22 -0
- data/docs/index.html +263 -0
- data/docs/js/app.js +344 -0
- data/docs/js/full_list.js +242 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +1974 -0
- data/docs/top-level-namespace.html +110 -0
- data/examples/american_options.rb +163 -0
- data/examples/covered_call.rb +76 -0
- data/lib/option_lab/binomial_tree.rb +238 -0
- data/lib/option_lab/bjerksund_stensland.rb +276 -0
- data/lib/option_lab/black_scholes.rb +323 -0
- data/lib/option_lab/engine.rb +492 -0
- data/lib/option_lab/models.rb +768 -0
- data/lib/option_lab/plotting.rb +182 -0
- data/lib/option_lab/support.rb +471 -0
- data/lib/option_lab/utils.rb +107 -0
- data/lib/option_lab/version.rb +5 -0
- data/lib/option_lab.rb +134 -0
- data/option_lab.gemspec +43 -0
- 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
|
+
— 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> »
|
40
|
+
<span class='title'><span class='object_link'><a href="../OptionLab.html" title="OptionLab (module)">OptionLab</a></span></span>
|
41
|
+
»
|
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) ⇒ 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) ⇒ 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) ⇒ 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) ⇒ 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) ⇒ 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) ⇒ 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) ⇒ 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) ⇒ <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
|
+
—
|
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
|
+
—
|
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) ⇒ <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
|
+
—
|
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
|
+
—
|
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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>&&</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'>&&</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'><<</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'><<</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'>>=</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'><<</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'><<</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'>'</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'>'</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'>'</span><span class='tstring_content'>Expiration must be a date, an int, or nil.</span><span class='tstring_end'>'</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>n/a</span><span class='tstring_end'>'</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'><<</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'><<</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'>"</span><span class='tstring_content'>Type must be 'call', 'put', 'stock' or 'closed'!</span><span class='tstring_end'>"</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>call</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>put</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>stock</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>closed</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>&&</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'>></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'>&&</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'><</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'>&&</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='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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'>'</span><span class='tstring_content'>buy</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'><<</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'><<</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'><<</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'>'</span><span class='tstring_content'>buy</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>call</span><span class='tstring_end'>'</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'>&&</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='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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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
|
+
—
|
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'><<</span> <span class='lparen'>(</span><span class='id identifier rubyid_action'>action</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>buy</span><span class='tstring_end'>'</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'><<</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'><<</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'><<</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'><<</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'><<</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'><<</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'>&&</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='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'>'</span><span class='tstring_content'>buy</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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'>&&</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='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'>'</span><span class='tstring_content'>array</span><span class='tstring_end'>'</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) ⇒ <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
|
+
—
|
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
|
+
—
|
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'>&&</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'>'</span><span class='tstring_content'>call</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>buy</span><span class='tstring_end'>'</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>
|