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,619 @@
|
|
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::Utils
|
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::Utils";
|
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 (U)</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">Utils</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::Utils
|
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/utils.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="#get_nonbusiness_days-class_method" title="get_nonbusiness_days (class method)">.<strong>get_nonbusiness_days</strong>(start_date, end_date, country = "US") ⇒ Integer </a>
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
</span>
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
<span class="summary_desc"><div class='inline'><p>Get number of non-business days between dates.</p>
|
119
|
+
</div></span>
|
120
|
+
|
121
|
+
</li>
|
122
|
+
|
123
|
+
|
124
|
+
<li class="public ">
|
125
|
+
<span class="summary_signature">
|
126
|
+
|
127
|
+
<a href="#get_pl-class_method" title="get_pl (class method)">.<strong>get_pl</strong>(outputs, leg = nil) ⇒ Array<Numo::DFloat, Numo::DFloat> </a>
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
</span>
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
<span class="summary_desc"><div class='inline'><p>Get profit/loss data.</p>
|
142
|
+
</div></span>
|
143
|
+
|
144
|
+
</li>
|
145
|
+
|
146
|
+
|
147
|
+
<li class="public ">
|
148
|
+
<span class="summary_signature">
|
149
|
+
|
150
|
+
<a href="#pl_to_csv-class_method" title="pl_to_csv (class method)">.<strong>pl_to_csv</strong>(outputs, filename = "pl.csv", leg = nil) ⇒ void </a>
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
</span>
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
<span class="summary_desc"><div class='inline'><p>Save profit/loss data to CSV.</p>
|
165
|
+
</div></span>
|
166
|
+
|
167
|
+
</li>
|
168
|
+
|
169
|
+
|
170
|
+
</ul>
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
<div id="class_method_details" class="method_details_list">
|
176
|
+
<h2>Class Method Details</h2>
|
177
|
+
|
178
|
+
|
179
|
+
<div class="method_details first">
|
180
|
+
<h3 class="signature first" id="get_nonbusiness_days-class_method">
|
181
|
+
|
182
|
+
.<strong>get_nonbusiness_days</strong>(start_date, end_date, country = "US") ⇒ <tt>Integer</tt>
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
</h3><div class="docstring">
|
189
|
+
<div class="discussion">
|
190
|
+
<p>Get number of non-business days between dates</p>
|
191
|
+
|
192
|
+
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="tags">
|
196
|
+
<p class="tag_title">Parameters:</p>
|
197
|
+
<ul class="param">
|
198
|
+
|
199
|
+
<li>
|
200
|
+
|
201
|
+
<span class='name'>start_date</span>
|
202
|
+
|
203
|
+
|
204
|
+
<span class='type'>(<tt>Date</tt>)</span>
|
205
|
+
|
206
|
+
|
207
|
+
|
208
|
+
—
|
209
|
+
<div class='inline'><p>Start date</p>
|
210
|
+
</div>
|
211
|
+
|
212
|
+
</li>
|
213
|
+
|
214
|
+
<li>
|
215
|
+
|
216
|
+
<span class='name'>end_date</span>
|
217
|
+
|
218
|
+
|
219
|
+
<span class='type'>(<tt>Date</tt>)</span>
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
—
|
224
|
+
<div class='inline'><p>End date</p>
|
225
|
+
</div>
|
226
|
+
|
227
|
+
</li>
|
228
|
+
|
229
|
+
<li>
|
230
|
+
|
231
|
+
<span class='name'>country</span>
|
232
|
+
|
233
|
+
|
234
|
+
<span class='type'>(<tt>String</tt>)</span>
|
235
|
+
|
236
|
+
|
237
|
+
<em class="default">(defaults to: <tt>"US"</tt>)</em>
|
238
|
+
|
239
|
+
|
240
|
+
—
|
241
|
+
<div class='inline'><p>Country code</p>
|
242
|
+
</div>
|
243
|
+
|
244
|
+
</li>
|
245
|
+
|
246
|
+
</ul>
|
247
|
+
|
248
|
+
<p class="tag_title">Returns:</p>
|
249
|
+
<ul class="return">
|
250
|
+
|
251
|
+
<li>
|
252
|
+
|
253
|
+
|
254
|
+
<span class='type'>(<tt>Integer</tt>)</span>
|
255
|
+
|
256
|
+
|
257
|
+
|
258
|
+
—
|
259
|
+
<div class='inline'><p>Number of non-business days</p>
|
260
|
+
</div>
|
261
|
+
|
262
|
+
</li>
|
263
|
+
|
264
|
+
</ul>
|
265
|
+
|
266
|
+
</div><table class="source_code">
|
267
|
+
<tr>
|
268
|
+
<td>
|
269
|
+
<pre class="lines">
|
270
|
+
|
271
|
+
|
272
|
+
18
|
273
|
+
19
|
274
|
+
20
|
275
|
+
21
|
276
|
+
22
|
277
|
+
23
|
278
|
+
24
|
279
|
+
25
|
280
|
+
26
|
281
|
+
27
|
282
|
+
28
|
283
|
+
29
|
284
|
+
30
|
285
|
+
31
|
286
|
+
32
|
287
|
+
33
|
288
|
+
34
|
289
|
+
35
|
290
|
+
36
|
291
|
+
37
|
292
|
+
38
|
293
|
+
39
|
294
|
+
40
|
295
|
+
41
|
296
|
+
42
|
297
|
+
43
|
298
|
+
44
|
299
|
+
45
|
300
|
+
46
|
301
|
+
47
|
302
|
+
48
|
303
|
+
49
|
304
|
+
50
|
305
|
+
51
|
306
|
+
52
|
307
|
+
53
|
308
|
+
54
|
309
|
+
55
|
310
|
+
56
|
311
|
+
57</pre>
|
312
|
+
</td>
|
313
|
+
<td>
|
314
|
+
<pre class="code"><span class="info file"># File 'lib/option_lab/utils.rb', line 18</span>
|
315
|
+
|
316
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_get_nonbusiness_days'>get_nonbusiness_days</span><span class='lparen'>(</span><span class='id identifier rubyid_start_date'>start_date</span><span class='comma'>,</span> <span class='id identifier rubyid_end_date'>end_date</span><span class='comma'>,</span> <span class='id identifier rubyid_country'>country</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>US</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
317
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_end_date'>end_date</span> <span class='op'><=</span> <span class='id identifier rubyid_start_date'>start_date</span>
|
318
|
+
<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'>End date must be after start date!</span><span class='tstring_end'>"</span></span>
|
319
|
+
<span class='kw'>end</span>
|
320
|
+
|
321
|
+
<span class='comment'># Create cache key
|
322
|
+
</span> <span class='id identifier rubyid_cache_key'>cache_key</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_country'>country</span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_start_date'>start_date</span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_end_date'>end_date</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
323
|
+
|
324
|
+
<span class='comment'># Return cached result if available
|
325
|
+
</span> <span class='kw'>return</span> <span class='ivar'>@holiday_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_cache_key'>cache_key</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='ivar'>@holiday_cache</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_cache_key'>cache_key</span><span class='rparen'>)</span>
|
326
|
+
|
327
|
+
<span class='comment'># Calculate number of days
|
328
|
+
</span> <span class='id identifier rubyid_n_days'>n_days</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_end_date'>end_date</span> <span class='op'>-</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>
|
329
|
+
|
330
|
+
<span class='comment'># Get holidays for the country (default to :us if there's an issue)
|
331
|
+
</span> <span class='kw'>begin</span>
|
332
|
+
<span class='id identifier rubyid_holidays'>holidays</span> <span class='op'>=</span> <span class='const'>Holidays</span><span class='period'>.</span><span class='id identifier rubyid_between'>between</span><span class='lparen'>(</span><span class='id identifier rubyid_start_date'>start_date</span><span class='comma'>,</span> <span class='id identifier rubyid_end_date'>end_date</span><span class='comma'>,</span> <span class='id identifier rubyid_country'>country</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rparen'>)</span>
|
333
|
+
<span class='kw'>rescue</span> <span class='const'>Holidays</span><span class='op'>::</span><span class='const'>InvalidRegion</span>
|
334
|
+
<span class='id identifier rubyid_holidays'>holidays</span> <span class='op'>=</span> <span class='const'>Holidays</span><span class='period'>.</span><span class='id identifier rubyid_between'>between</span><span class='lparen'>(</span><span class='id identifier rubyid_start_date'>start_date</span><span class='comma'>,</span> <span class='id identifier rubyid_end_date'>end_date</span><span class='comma'>,</span> <span class='symbol'>:us</span><span class='rparen'>)</span>
|
335
|
+
<span class='kw'>end</span>
|
336
|
+
<span class='id identifier rubyid_holiday_dates'>holiday_dates</span> <span class='op'>=</span> <span class='id identifier rubyid_holidays'>holidays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_h'>h</span><span class='op'>|</span> <span class='id identifier rubyid_h'>h</span><span class='lbracket'>[</span><span class='symbol'>:date</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_strftime'>strftime</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%Y-%m-%d</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
337
|
+
|
338
|
+
<span class='comment'># Count non-business days
|
339
|
+
</span> <span class='id identifier rubyid_nonbusiness_days'>nonbusiness_days</span> <span class='op'>=</span> <span class='int'>0</span>
|
340
|
+
|
341
|
+
<span class='id identifier rubyid_n_days'>n_days</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
342
|
+
<span class='id identifier rubyid_current_date'>current_date</span> <span class='op'>=</span> <span class='id identifier rubyid_start_date'>start_date</span> <span class='op'>+</span> <span class='id identifier rubyid_i'>i</span>
|
343
|
+
|
344
|
+
<span class='comment'># Check if weekend or holiday
|
345
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_date'>current_date</span><span class='period'>.</span><span class='id identifier rubyid_saturday?'>saturday?</span> <span class='op'>||</span> <span class='id identifier rubyid_current_date'>current_date</span><span class='period'>.</span><span class='id identifier rubyid_sunday?'>sunday?</span> <span class='op'>||</span>
|
346
|
+
<span class='id identifier rubyid_holiday_dates'>holiday_dates</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_current_date'>current_date</span><span class='period'>.</span><span class='id identifier rubyid_strftime'>strftime</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%Y-%m-%d</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
|
347
|
+
<span class='id identifier rubyid_nonbusiness_days'>nonbusiness_days</span> <span class='op'>+=</span> <span class='int'>1</span>
|
348
|
+
<span class='kw'>end</span>
|
349
|
+
<span class='kw'>end</span>
|
350
|
+
|
351
|
+
<span class='comment'># Cache the result
|
352
|
+
</span> <span class='ivar'>@holiday_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_cache_key'>cache_key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_nonbusiness_days'>nonbusiness_days</span>
|
353
|
+
|
354
|
+
<span class='id identifier rubyid_nonbusiness_days'>nonbusiness_days</span>
|
355
|
+
<span class='kw'>end</span></pre>
|
356
|
+
</td>
|
357
|
+
</tr>
|
358
|
+
</table>
|
359
|
+
</div>
|
360
|
+
|
361
|
+
<div class="method_details ">
|
362
|
+
<h3 class="signature " id="get_pl-class_method">
|
363
|
+
|
364
|
+
.<strong>get_pl</strong>(outputs, leg = nil) ⇒ <tt>Array<Numo::DFloat, Numo::DFloat></tt>
|
365
|
+
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
</h3><div class="docstring">
|
371
|
+
<div class="discussion">
|
372
|
+
<p>Get profit/loss data</p>
|
373
|
+
|
374
|
+
|
375
|
+
</div>
|
376
|
+
</div>
|
377
|
+
<div class="tags">
|
378
|
+
<p class="tag_title">Parameters:</p>
|
379
|
+
<ul class="param">
|
380
|
+
|
381
|
+
<li>
|
382
|
+
|
383
|
+
<span class='name'>outputs</span>
|
384
|
+
|
385
|
+
|
386
|
+
<span class='type'>(<tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>)</span>
|
387
|
+
|
388
|
+
|
389
|
+
|
390
|
+
—
|
391
|
+
<div class='inline'><p>Strategy outputs</p>
|
392
|
+
</div>
|
393
|
+
|
394
|
+
</li>
|
395
|
+
|
396
|
+
<li>
|
397
|
+
|
398
|
+
<span class='name'>leg</span>
|
399
|
+
|
400
|
+
|
401
|
+
<span class='type'>(<tt>Integer</tt>, <tt>nil</tt>)</span>
|
402
|
+
|
403
|
+
|
404
|
+
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
405
|
+
|
406
|
+
|
407
|
+
—
|
408
|
+
<div class='inline'><p>Strategy leg index</p>
|
409
|
+
</div>
|
410
|
+
|
411
|
+
</li>
|
412
|
+
|
413
|
+
</ul>
|
414
|
+
|
415
|
+
<p class="tag_title">Returns:</p>
|
416
|
+
<ul class="return">
|
417
|
+
|
418
|
+
<li>
|
419
|
+
|
420
|
+
|
421
|
+
<span class='type'>(<tt>Array<Numo::DFloat, Numo::DFloat></tt>)</span>
|
422
|
+
|
423
|
+
|
424
|
+
|
425
|
+
—
|
426
|
+
<div class='inline'><p>Stock prices and profits/losses</p>
|
427
|
+
</div>
|
428
|
+
|
429
|
+
</li>
|
430
|
+
|
431
|
+
</ul>
|
432
|
+
|
433
|
+
</div><table class="source_code">
|
434
|
+
<tr>
|
435
|
+
<td>
|
436
|
+
<pre class="lines">
|
437
|
+
|
438
|
+
|
439
|
+
63
|
440
|
+
64
|
441
|
+
65
|
442
|
+
66
|
443
|
+
67
|
444
|
+
68
|
445
|
+
69</pre>
|
446
|
+
</td>
|
447
|
+
<td>
|
448
|
+
<pre class="code"><span class="info file"># File 'lib/option_lab/utils.rb', line 63</span>
|
449
|
+
|
450
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_get_pl'>get_pl</span><span class='lparen'>(</span><span class='id identifier rubyid_outputs'>outputs</span><span class='comma'>,</span> <span class='id identifier rubyid_leg'>leg</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
451
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_outputs'>outputs</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>0</span> <span class='op'>&&</span> <span class='id identifier rubyid_leg'>leg</span> <span class='op'>&&</span> <span class='id identifier rubyid_leg'>leg</span> <span class='op'><</span> <span class='id identifier rubyid_outputs'>outputs</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_profit'>profit</span><span class='period'>.</span><span class='id identifier rubyid_shape'>shape</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
|
452
|
+
<span class='lbracket'>[</span><span class='id identifier rubyid_outputs'>outputs</span><span class='period'>.</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_outputs'>outputs</span><span class='period'>.</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_leg'>leg</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
|
453
|
+
<span class='kw'>else</span>
|
454
|
+
<span class='lbracket'>[</span><span class='id identifier rubyid_outputs'>outputs</span><span class='period'>.</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_outputs'>outputs</span><span class='period'>.</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='rbracket'>]</span>
|
455
|
+
<span class='kw'>end</span>
|
456
|
+
<span class='kw'>end</span></pre>
|
457
|
+
</td>
|
458
|
+
</tr>
|
459
|
+
</table>
|
460
|
+
</div>
|
461
|
+
|
462
|
+
<div class="method_details ">
|
463
|
+
<h3 class="signature " id="pl_to_csv-class_method">
|
464
|
+
|
465
|
+
.<strong>pl_to_csv</strong>(outputs, filename = "pl.csv", leg = nil) ⇒ <tt>void</tt>
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
|
470
|
+
|
471
|
+
</h3><div class="docstring">
|
472
|
+
<div class="discussion">
|
473
|
+
<p class="note returns_void">This method returns an undefined value.</p><p>Save profit/loss data to CSV</p>
|
474
|
+
|
475
|
+
|
476
|
+
</div>
|
477
|
+
</div>
|
478
|
+
<div class="tags">
|
479
|
+
<p class="tag_title">Parameters:</p>
|
480
|
+
<ul class="param">
|
481
|
+
|
482
|
+
<li>
|
483
|
+
|
484
|
+
<span class='name'>outputs</span>
|
485
|
+
|
486
|
+
|
487
|
+
<span class='type'>(<tt><span class='object_link'><a href="Models/Outputs.html" title="OptionLab::Models::Outputs (class)">Models::Outputs</a></span></tt>)</span>
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
—
|
492
|
+
<div class='inline'><p>Strategy outputs</p>
|
493
|
+
</div>
|
494
|
+
|
495
|
+
</li>
|
496
|
+
|
497
|
+
<li>
|
498
|
+
|
499
|
+
<span class='name'>filename</span>
|
500
|
+
|
501
|
+
|
502
|
+
<span class='type'>(<tt>String</tt>, <tt>IO</tt>)</span>
|
503
|
+
|
504
|
+
|
505
|
+
<em class="default">(defaults to: <tt>"pl.csv"</tt>)</em>
|
506
|
+
|
507
|
+
|
508
|
+
—
|
509
|
+
<div class='inline'><p>CSV filename or IO object</p>
|
510
|
+
</div>
|
511
|
+
|
512
|
+
</li>
|
513
|
+
|
514
|
+
<li>
|
515
|
+
|
516
|
+
<span class='name'>leg</span>
|
517
|
+
|
518
|
+
|
519
|
+
<span class='type'>(<tt>Integer</tt>, <tt>nil</tt>)</span>
|
520
|
+
|
521
|
+
|
522
|
+
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
523
|
+
|
524
|
+
|
525
|
+
—
|
526
|
+
<div class='inline'><p>Strategy leg index</p>
|
527
|
+
</div>
|
528
|
+
|
529
|
+
</li>
|
530
|
+
|
531
|
+
</ul>
|
532
|
+
|
533
|
+
|
534
|
+
</div><table class="source_code">
|
535
|
+
<tr>
|
536
|
+
<td>
|
537
|
+
<pre class="lines">
|
538
|
+
|
539
|
+
|
540
|
+
76
|
541
|
+
77
|
542
|
+
78
|
543
|
+
79
|
544
|
+
80
|
545
|
+
81
|
546
|
+
82
|
547
|
+
83
|
548
|
+
84
|
549
|
+
85
|
550
|
+
86
|
551
|
+
87
|
552
|
+
88
|
553
|
+
89
|
554
|
+
90
|
555
|
+
91
|
556
|
+
92
|
557
|
+
93
|
558
|
+
94
|
559
|
+
95
|
560
|
+
96
|
561
|
+
97
|
562
|
+
98
|
563
|
+
99
|
564
|
+
100
|
565
|
+
101
|
566
|
+
102
|
567
|
+
103
|
568
|
+
104</pre>
|
569
|
+
</td>
|
570
|
+
<td>
|
571
|
+
<pre class="code"><span class="info file"># File 'lib/option_lab/utils.rb', line 76</span>
|
572
|
+
|
573
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_pl_to_csv'>pl_to_csv</span><span class='lparen'>(</span><span class='id identifier rubyid_outputs'>outputs</span><span class='comma'>,</span> <span class='id identifier rubyid_filename'>filename</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>pl.csv</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_leg'>leg</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
574
|
+
<span class='id identifier rubyid_stock_prices'>stock_prices</span><span class='comma'>,</span> <span class='id identifier rubyid_profits'>profits</span> <span class='op'>=</span> <span class='id identifier rubyid_get_pl'>get_pl</span><span class='lparen'>(</span><span class='id identifier rubyid_outputs'>outputs</span><span class='comma'>,</span> <span class='id identifier rubyid_leg'>leg</span><span class='rparen'>)</span>
|
575
|
+
|
576
|
+
<span class='comment'># Create matrix with stock prices and profits
|
577
|
+
</span> <span class='id identifier rubyid_data'>data</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_stock_prices'>stock_prices</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span> <span class='int'>2</span><span class='rparen'>)</span>
|
578
|
+
<span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_stock_prices'>stock_prices</span>
|
579
|
+
<span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_profits'>profits</span>
|
580
|
+
|
581
|
+
<span class='comment'># Handle filename as string or IO object
|
582
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_filename'>filename</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span>
|
583
|
+
<span class='comment'># Save to CSV file
|
584
|
+
</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>w</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_file'>file</span><span class='op'>|</span>
|
585
|
+
<span class='id identifier rubyid_file'>file</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>StockPrice,Profit/Loss</span><span class='tstring_end'>"</span></span>
|
586
|
+
|
587
|
+
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_shape'>shape</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
588
|
+
<span class='id identifier rubyid_file'>file</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='int'>0</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>,</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='int'>1</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
589
|
+
<span class='kw'>end</span>
|
590
|
+
<span class='kw'>end</span>
|
591
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_filename'>filename</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:puts</span><span class='rparen'>)</span>
|
592
|
+
<span class='comment'># Write to IO object
|
593
|
+
</span> <span class='id identifier rubyid_filename'>filename</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>StockPrice,Profit/Loss</span><span class='tstring_end'>"</span></span>
|
594
|
+
|
595
|
+
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_shape'>shape</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
596
|
+
<span class='id identifier rubyid_filename'>filename</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='int'>0</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>,</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='int'>1</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
597
|
+
<span class='kw'>end</span>
|
598
|
+
<span class='kw'>else</span>
|
599
|
+
<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'>Filename must be a String or an IO object</span><span class='tstring_end'>"</span></span>
|
600
|
+
<span class='kw'>end</span>
|
601
|
+
<span class='kw'>end</span></pre>
|
602
|
+
</td>
|
603
|
+
</tr>
|
604
|
+
</table>
|
605
|
+
</div>
|
606
|
+
|
607
|
+
</div>
|
608
|
+
|
609
|
+
</div>
|
610
|
+
|
611
|
+
<div id="footer">
|
612
|
+
Generated on Sun Apr 27 16:09:34 2025 by
|
613
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
614
|
+
0.9.37 (ruby-3.3.3).
|
615
|
+
</div>
|
616
|
+
|
617
|
+
</div>
|
618
|
+
</body>
|
619
|
+
</html>
|