sqa-tai 0.1.0 → 0.1.1
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 +4 -4
- data/CHANGELOG.md +30 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -2
- data/lib/sqa/tai/cycle_indicators.rb +72 -0
- data/lib/sqa/tai/momentum_indicators.rb +517 -0
- data/lib/sqa/tai/overlap_studies.rb +144 -0
- data/lib/sqa/tai/pattern_recognition.rb +684 -0
- data/lib/sqa/tai/price_transform.rb +64 -0
- data/lib/sqa/tai/statistical_functions.rb +122 -0
- data/lib/sqa/tai/version.rb +1 -1
- data/lib/sqa/tai/volatility_indicators.rb +179 -0
- data/lib/sqa/tai/volume_indicators.rb +54 -0
- data/lib/sqa/tai.rb +20 -1804
- data/mkdocs.yml +7 -10
- metadata +9 -1
|
@@ -0,0 +1,684 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SQA
|
|
4
|
+
module TAI
|
|
5
|
+
# Pattern Recognition (Candlestick Patterns)
|
|
6
|
+
module PatternRecognition
|
|
7
|
+
# Doji candlestick pattern
|
|
8
|
+
# @param open [Array<Float>] Open prices
|
|
9
|
+
# @param high [Array<Float>] High prices
|
|
10
|
+
# @param low [Array<Float>] Low prices
|
|
11
|
+
# @param close [Array<Float>] Close prices
|
|
12
|
+
# @return [Array<Integer>] Pattern signals (-100 to 100)
|
|
13
|
+
def cdl_doji(open, high, low, close)
|
|
14
|
+
check_available!
|
|
15
|
+
validate_prices!(open)
|
|
16
|
+
validate_prices!(high)
|
|
17
|
+
validate_prices!(low)
|
|
18
|
+
validate_prices!(close)
|
|
19
|
+
|
|
20
|
+
TALibFFI.cdldoji(open, high, low, close)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Hammer candlestick pattern
|
|
24
|
+
def cdl_hammer(open, high, low, close)
|
|
25
|
+
check_available!
|
|
26
|
+
validate_prices!(open)
|
|
27
|
+
validate_prices!(high)
|
|
28
|
+
validate_prices!(low)
|
|
29
|
+
validate_prices!(close)
|
|
30
|
+
|
|
31
|
+
TALibFFI.cdlhammer(open, high, low, close)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Engulfing pattern
|
|
35
|
+
def cdl_engulfing(open, high, low, close)
|
|
36
|
+
check_available!
|
|
37
|
+
validate_prices!(open)
|
|
38
|
+
validate_prices!(high)
|
|
39
|
+
validate_prices!(low)
|
|
40
|
+
validate_prices!(close)
|
|
41
|
+
|
|
42
|
+
TALibFFI.cdlengulfing(open, high, low, close)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Morning Star pattern
|
|
46
|
+
def cdl_morningstar(open, high, low, close, penetration: 0.3)
|
|
47
|
+
check_available!
|
|
48
|
+
validate_prices!(open)
|
|
49
|
+
validate_prices!(high)
|
|
50
|
+
validate_prices!(low)
|
|
51
|
+
validate_prices!(close)
|
|
52
|
+
|
|
53
|
+
TALibFFI.cdlmorningstar(open, high, low, close, penetration: penetration)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Evening Star pattern
|
|
57
|
+
def cdl_eveningstar(open, high, low, close, penetration: 0.3)
|
|
58
|
+
check_available!
|
|
59
|
+
validate_prices!(open)
|
|
60
|
+
validate_prices!(high)
|
|
61
|
+
validate_prices!(low)
|
|
62
|
+
validate_prices!(close)
|
|
63
|
+
|
|
64
|
+
TALibFFI.cdleveningstar(open, high, low, close, penetration: penetration)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Harami pattern
|
|
68
|
+
def cdl_harami(open, high, low, close)
|
|
69
|
+
check_available!
|
|
70
|
+
validate_prices!(open)
|
|
71
|
+
validate_prices!(high)
|
|
72
|
+
validate_prices!(low)
|
|
73
|
+
validate_prices!(close)
|
|
74
|
+
|
|
75
|
+
TALibFFI.cdlharami(open, high, low, close)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Piercing pattern
|
|
79
|
+
def cdl_piercing(open, high, low, close)
|
|
80
|
+
check_available!
|
|
81
|
+
validate_prices!(open)
|
|
82
|
+
validate_prices!(high)
|
|
83
|
+
validate_prices!(low)
|
|
84
|
+
validate_prices!(close)
|
|
85
|
+
|
|
86
|
+
TALibFFI.cdlpiercing(open, high, low, close)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Shooting Star pattern
|
|
90
|
+
def cdl_shootingstar(open, high, low, close)
|
|
91
|
+
check_available!
|
|
92
|
+
validate_prices!(open)
|
|
93
|
+
validate_prices!(high)
|
|
94
|
+
validate_prices!(low)
|
|
95
|
+
validate_prices!(close)
|
|
96
|
+
|
|
97
|
+
TALibFFI.cdlshootingstar(open, high, low, close)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Marubozu pattern
|
|
101
|
+
def cdl_marubozu(open, high, low, close)
|
|
102
|
+
check_available!
|
|
103
|
+
validate_prices!(open)
|
|
104
|
+
validate_prices!(high)
|
|
105
|
+
validate_prices!(low)
|
|
106
|
+
validate_prices!(close)
|
|
107
|
+
|
|
108
|
+
TALibFFI.cdlmarubozu(open, high, low, close)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Spinning Top pattern
|
|
112
|
+
def cdl_spinningtop(open, high, low, close)
|
|
113
|
+
check_available!
|
|
114
|
+
validate_prices!(open)
|
|
115
|
+
validate_prices!(high)
|
|
116
|
+
validate_prices!(low)
|
|
117
|
+
validate_prices!(close)
|
|
118
|
+
|
|
119
|
+
TALibFFI.cdlspinningtop(open, high, low, close)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Dragonfly Doji pattern
|
|
123
|
+
def cdl_dragonflydoji(open, high, low, close)
|
|
124
|
+
check_available!
|
|
125
|
+
validate_prices!(open)
|
|
126
|
+
validate_prices!(high)
|
|
127
|
+
validate_prices!(low)
|
|
128
|
+
validate_prices!(close)
|
|
129
|
+
|
|
130
|
+
TALibFFI.cdldragonflydoji(open, high, low, close)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Gravestone Doji pattern
|
|
134
|
+
def cdl_gravestonedoji(open, high, low, close)
|
|
135
|
+
check_available!
|
|
136
|
+
validate_prices!(open)
|
|
137
|
+
validate_prices!(high)
|
|
138
|
+
validate_prices!(low)
|
|
139
|
+
validate_prices!(close)
|
|
140
|
+
|
|
141
|
+
TALibFFI.cdlgravestonedoji(open, high, low, close)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Two Crows pattern
|
|
145
|
+
def cdl_2crows(open, high, low, close)
|
|
146
|
+
check_available!
|
|
147
|
+
validate_prices!(open)
|
|
148
|
+
validate_prices!(high)
|
|
149
|
+
validate_prices!(low)
|
|
150
|
+
validate_prices!(close)
|
|
151
|
+
|
|
152
|
+
TALibFFI.cdl2crows(open, high, low, close)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Three Black Crows pattern
|
|
156
|
+
def cdl_3blackcrows(open, high, low, close)
|
|
157
|
+
check_available!
|
|
158
|
+
validate_prices!(open)
|
|
159
|
+
validate_prices!(high)
|
|
160
|
+
validate_prices!(low)
|
|
161
|
+
validate_prices!(close)
|
|
162
|
+
|
|
163
|
+
TALibFFI.cdl3blackcrows(open, high, low, close)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Three Inside Up/Down pattern
|
|
167
|
+
def cdl_3inside(open, high, low, close)
|
|
168
|
+
check_available!
|
|
169
|
+
validate_prices!(open)
|
|
170
|
+
validate_prices!(high)
|
|
171
|
+
validate_prices!(low)
|
|
172
|
+
validate_prices!(close)
|
|
173
|
+
|
|
174
|
+
TALibFFI.cdl3inside(open, high, low, close)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Three Line Strike pattern
|
|
178
|
+
def cdl_3linestrike(open, high, low, close)
|
|
179
|
+
check_available!
|
|
180
|
+
validate_prices!(open)
|
|
181
|
+
validate_prices!(high)
|
|
182
|
+
validate_prices!(low)
|
|
183
|
+
validate_prices!(close)
|
|
184
|
+
|
|
185
|
+
TALibFFI.cdl3linestrike(open, high, low, close)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Three Outside Up/Down pattern
|
|
189
|
+
def cdl_3outside(open, high, low, close)
|
|
190
|
+
check_available!
|
|
191
|
+
validate_prices!(open)
|
|
192
|
+
validate_prices!(high)
|
|
193
|
+
validate_prices!(low)
|
|
194
|
+
validate_prices!(close)
|
|
195
|
+
|
|
196
|
+
TALibFFI.cdl3outside(open, high, low, close)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Three Stars In The South pattern
|
|
200
|
+
def cdl_3starsinsouth(open, high, low, close)
|
|
201
|
+
check_available!
|
|
202
|
+
validate_prices!(open)
|
|
203
|
+
validate_prices!(high)
|
|
204
|
+
validate_prices!(low)
|
|
205
|
+
validate_prices!(close)
|
|
206
|
+
|
|
207
|
+
TALibFFI.cdl3starsinsouth(open, high, low, close)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Three Advancing White Soldiers pattern
|
|
211
|
+
def cdl_3whitesoldiers(open, high, low, close)
|
|
212
|
+
check_available!
|
|
213
|
+
validate_prices!(open)
|
|
214
|
+
validate_prices!(high)
|
|
215
|
+
validate_prices!(low)
|
|
216
|
+
validate_prices!(close)
|
|
217
|
+
|
|
218
|
+
TALibFFI.cdl3whitesoldiers(open, high, low, close)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Abandoned Baby pattern
|
|
222
|
+
def cdl_abandonedbaby(open, high, low, close, penetration: 0.3)
|
|
223
|
+
check_available!
|
|
224
|
+
validate_prices!(open)
|
|
225
|
+
validate_prices!(high)
|
|
226
|
+
validate_prices!(low)
|
|
227
|
+
validate_prices!(close)
|
|
228
|
+
|
|
229
|
+
TALibFFI.cdlabandonedbaby(open, high, low, close, penetration: penetration)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Advance Block pattern
|
|
233
|
+
def cdl_advanceblock(open, high, low, close)
|
|
234
|
+
check_available!
|
|
235
|
+
validate_prices!(open)
|
|
236
|
+
validate_prices!(high)
|
|
237
|
+
validate_prices!(low)
|
|
238
|
+
validate_prices!(close)
|
|
239
|
+
|
|
240
|
+
TALibFFI.cdladvanceblock(open, high, low, close)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Belt-hold pattern
|
|
244
|
+
def cdl_belthold(open, high, low, close)
|
|
245
|
+
check_available!
|
|
246
|
+
validate_prices!(open)
|
|
247
|
+
validate_prices!(high)
|
|
248
|
+
validate_prices!(low)
|
|
249
|
+
validate_prices!(close)
|
|
250
|
+
|
|
251
|
+
TALibFFI.cdlbelthold(open, high, low, close)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Breakaway pattern
|
|
255
|
+
def cdl_breakaway(open, high, low, close)
|
|
256
|
+
check_available!
|
|
257
|
+
validate_prices!(open)
|
|
258
|
+
validate_prices!(high)
|
|
259
|
+
validate_prices!(low)
|
|
260
|
+
validate_prices!(close)
|
|
261
|
+
|
|
262
|
+
TALibFFI.cdlbreakaway(open, high, low, close)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# Closing Marubozu pattern
|
|
266
|
+
def cdl_closingmarubozu(open, high, low, close)
|
|
267
|
+
check_available!
|
|
268
|
+
validate_prices!(open)
|
|
269
|
+
validate_prices!(high)
|
|
270
|
+
validate_prices!(low)
|
|
271
|
+
validate_prices!(close)
|
|
272
|
+
|
|
273
|
+
TALibFFI.cdlclosingmarubozu(open, high, low, close)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# Concealing Baby Swallow pattern
|
|
277
|
+
def cdl_concealbabyswall(open, high, low, close)
|
|
278
|
+
check_available!
|
|
279
|
+
validate_prices!(open)
|
|
280
|
+
validate_prices!(high)
|
|
281
|
+
validate_prices!(low)
|
|
282
|
+
validate_prices!(close)
|
|
283
|
+
|
|
284
|
+
TALibFFI.cdlconcealbabyswall(open, high, low, close)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# Counterattack pattern
|
|
288
|
+
def cdl_counterattack(open, high, low, close)
|
|
289
|
+
check_available!
|
|
290
|
+
validate_prices!(open)
|
|
291
|
+
validate_prices!(high)
|
|
292
|
+
validate_prices!(low)
|
|
293
|
+
validate_prices!(close)
|
|
294
|
+
|
|
295
|
+
TALibFFI.cdlcounterattack(open, high, low, close)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Dark Cloud Cover pattern
|
|
299
|
+
def cdl_darkcloudcover(open, high, low, close, penetration: 0.5)
|
|
300
|
+
check_available!
|
|
301
|
+
validate_prices!(open)
|
|
302
|
+
validate_prices!(high)
|
|
303
|
+
validate_prices!(low)
|
|
304
|
+
validate_prices!(close)
|
|
305
|
+
|
|
306
|
+
TALibFFI.cdldarkcloudcover(open, high, low, close, penetration: penetration)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Doji Star pattern
|
|
310
|
+
def cdl_dojistar(open, high, low, close)
|
|
311
|
+
check_available!
|
|
312
|
+
validate_prices!(open)
|
|
313
|
+
validate_prices!(high)
|
|
314
|
+
validate_prices!(low)
|
|
315
|
+
validate_prices!(close)
|
|
316
|
+
|
|
317
|
+
TALibFFI.cdldojistar(open, high, low, close)
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# Evening Doji Star pattern
|
|
321
|
+
def cdl_eveningdojistar(open, high, low, close, penetration: 0.3)
|
|
322
|
+
check_available!
|
|
323
|
+
validate_prices!(open)
|
|
324
|
+
validate_prices!(high)
|
|
325
|
+
validate_prices!(low)
|
|
326
|
+
validate_prices!(close)
|
|
327
|
+
|
|
328
|
+
TALibFFI.cdleveningdojistar(open, high, low, close, penetration: penetration)
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
# Up/Down-gap side-by-side white lines pattern
|
|
332
|
+
def cdl_gapsidesidewhite(open, high, low, close)
|
|
333
|
+
check_available!
|
|
334
|
+
validate_prices!(open)
|
|
335
|
+
validate_prices!(high)
|
|
336
|
+
validate_prices!(low)
|
|
337
|
+
validate_prices!(close)
|
|
338
|
+
|
|
339
|
+
TALibFFI.cdlgapsidesidewhite(open, high, low, close)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# Hanging Man pattern
|
|
343
|
+
def cdl_hangingman(open, high, low, close)
|
|
344
|
+
check_available!
|
|
345
|
+
validate_prices!(open)
|
|
346
|
+
validate_prices!(high)
|
|
347
|
+
validate_prices!(low)
|
|
348
|
+
validate_prices!(close)
|
|
349
|
+
|
|
350
|
+
TALibFFI.cdlhangingman(open, high, low, close)
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# Harami Cross pattern
|
|
354
|
+
def cdl_haramicross(open, high, low, close)
|
|
355
|
+
check_available!
|
|
356
|
+
validate_prices!(open)
|
|
357
|
+
validate_prices!(high)
|
|
358
|
+
validate_prices!(low)
|
|
359
|
+
validate_prices!(close)
|
|
360
|
+
|
|
361
|
+
TALibFFI.cdlharamicross(open, high, low, close)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# High-Wave Candle pattern
|
|
365
|
+
def cdl_highwave(open, high, low, close)
|
|
366
|
+
check_available!
|
|
367
|
+
validate_prices!(open)
|
|
368
|
+
validate_prices!(high)
|
|
369
|
+
validate_prices!(low)
|
|
370
|
+
validate_prices!(close)
|
|
371
|
+
|
|
372
|
+
TALibFFI.cdlhighwave(open, high, low, close)
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# Hikkake pattern
|
|
376
|
+
def cdl_hikkake(open, high, low, close)
|
|
377
|
+
check_available!
|
|
378
|
+
validate_prices!(open)
|
|
379
|
+
validate_prices!(high)
|
|
380
|
+
validate_prices!(low)
|
|
381
|
+
validate_prices!(close)
|
|
382
|
+
|
|
383
|
+
TALibFFI.cdlhikkake(open, high, low, close)
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
# Modified Hikkake pattern
|
|
387
|
+
def cdl_hikkakemod(open, high, low, close)
|
|
388
|
+
check_available!
|
|
389
|
+
validate_prices!(open)
|
|
390
|
+
validate_prices!(high)
|
|
391
|
+
validate_prices!(low)
|
|
392
|
+
validate_prices!(close)
|
|
393
|
+
|
|
394
|
+
TALibFFI.cdlhikkakemod(open, high, low, close)
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
# Homing Pigeon pattern
|
|
398
|
+
def cdl_homingpigeon(open, high, low, close)
|
|
399
|
+
check_available!
|
|
400
|
+
validate_prices!(open)
|
|
401
|
+
validate_prices!(high)
|
|
402
|
+
validate_prices!(low)
|
|
403
|
+
validate_prices!(close)
|
|
404
|
+
|
|
405
|
+
TALibFFI.cdlhomingpigeon(open, high, low, close)
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
# Identical Three Crows pattern
|
|
409
|
+
def cdl_identical3crows(open, high, low, close)
|
|
410
|
+
check_available!
|
|
411
|
+
validate_prices!(open)
|
|
412
|
+
validate_prices!(high)
|
|
413
|
+
validate_prices!(low)
|
|
414
|
+
validate_prices!(close)
|
|
415
|
+
|
|
416
|
+
TALibFFI.cdlidentical3crows(open, high, low, close)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
# In-Neck pattern
|
|
420
|
+
def cdl_inneck(open, high, low, close)
|
|
421
|
+
check_available!
|
|
422
|
+
validate_prices!(open)
|
|
423
|
+
validate_prices!(high)
|
|
424
|
+
validate_prices!(low)
|
|
425
|
+
validate_prices!(close)
|
|
426
|
+
|
|
427
|
+
TALibFFI.cdlinneck(open, high, low, close)
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
# Inverted Hammer pattern
|
|
431
|
+
def cdl_invertedhammer(open, high, low, close)
|
|
432
|
+
check_available!
|
|
433
|
+
validate_prices!(open)
|
|
434
|
+
validate_prices!(high)
|
|
435
|
+
validate_prices!(low)
|
|
436
|
+
validate_prices!(close)
|
|
437
|
+
|
|
438
|
+
TALibFFI.cdlinvertedhammer(open, high, low, close)
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
# Kicking pattern
|
|
442
|
+
def cdl_kicking(open, high, low, close)
|
|
443
|
+
check_available!
|
|
444
|
+
validate_prices!(open)
|
|
445
|
+
validate_prices!(high)
|
|
446
|
+
validate_prices!(low)
|
|
447
|
+
validate_prices!(close)
|
|
448
|
+
|
|
449
|
+
TALibFFI.cdlkicking(open, high, low, close)
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# Kicking - bull/bear determined by the longer marubozu
|
|
453
|
+
def cdl_kickingbylength(open, high, low, close)
|
|
454
|
+
check_available!
|
|
455
|
+
validate_prices!(open)
|
|
456
|
+
validate_prices!(high)
|
|
457
|
+
validate_prices!(low)
|
|
458
|
+
validate_prices!(close)
|
|
459
|
+
|
|
460
|
+
TALibFFI.cdlkickingbylength(open, high, low, close)
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
# Ladder Bottom pattern
|
|
464
|
+
def cdl_ladderbottom(open, high, low, close)
|
|
465
|
+
check_available!
|
|
466
|
+
validate_prices!(open)
|
|
467
|
+
validate_prices!(high)
|
|
468
|
+
validate_prices!(low)
|
|
469
|
+
validate_prices!(close)
|
|
470
|
+
|
|
471
|
+
TALibFFI.cdlladderbottom(open, high, low, close)
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
# Long Legged Doji pattern
|
|
475
|
+
def cdl_longleggeddoji(open, high, low, close)
|
|
476
|
+
check_available!
|
|
477
|
+
validate_prices!(open)
|
|
478
|
+
validate_prices!(high)
|
|
479
|
+
validate_prices!(low)
|
|
480
|
+
validate_prices!(close)
|
|
481
|
+
|
|
482
|
+
TALibFFI.cdllongleggeddoji(open, high, low, close)
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
# Long Line Candle pattern
|
|
486
|
+
def cdl_longline(open, high, low, close)
|
|
487
|
+
check_available!
|
|
488
|
+
validate_prices!(open)
|
|
489
|
+
validate_prices!(high)
|
|
490
|
+
validate_prices!(low)
|
|
491
|
+
validate_prices!(close)
|
|
492
|
+
|
|
493
|
+
TALibFFI.cdllongline(open, high, low, close)
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
# Matching Low pattern
|
|
497
|
+
def cdl_matchinglow(open, high, low, close)
|
|
498
|
+
check_available!
|
|
499
|
+
validate_prices!(open)
|
|
500
|
+
validate_prices!(high)
|
|
501
|
+
validate_prices!(low)
|
|
502
|
+
validate_prices!(close)
|
|
503
|
+
|
|
504
|
+
TALibFFI.cdlmatchinglow(open, high, low, close)
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
# Mat Hold pattern
|
|
508
|
+
def cdl_mathold(open, high, low, close, penetration: 0.5)
|
|
509
|
+
check_available!
|
|
510
|
+
validate_prices!(open)
|
|
511
|
+
validate_prices!(high)
|
|
512
|
+
validate_prices!(low)
|
|
513
|
+
validate_prices!(close)
|
|
514
|
+
|
|
515
|
+
TALibFFI.cdlmathold(open, high, low, close, penetration: penetration)
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
# Morning Doji Star pattern
|
|
519
|
+
def cdl_morningdojistar(open, high, low, close, penetration: 0.3)
|
|
520
|
+
check_available!
|
|
521
|
+
validate_prices!(open)
|
|
522
|
+
validate_prices!(high)
|
|
523
|
+
validate_prices!(low)
|
|
524
|
+
validate_prices!(close)
|
|
525
|
+
|
|
526
|
+
TALibFFI.cdlmorningdojistar(open, high, low, close, penetration: penetration)
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
# On-Neck pattern
|
|
530
|
+
def cdl_onneck(open, high, low, close)
|
|
531
|
+
check_available!
|
|
532
|
+
validate_prices!(open)
|
|
533
|
+
validate_prices!(high)
|
|
534
|
+
validate_prices!(low)
|
|
535
|
+
validate_prices!(close)
|
|
536
|
+
|
|
537
|
+
TALibFFI.cdlonneck(open, high, low, close)
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
# Rickshaw Man pattern
|
|
541
|
+
def cdl_rickshawman(open, high, low, close)
|
|
542
|
+
check_available!
|
|
543
|
+
validate_prices!(open)
|
|
544
|
+
validate_prices!(high)
|
|
545
|
+
validate_prices!(low)
|
|
546
|
+
validate_prices!(close)
|
|
547
|
+
|
|
548
|
+
TALibFFI.cdlrickshawman(open, high, low, close)
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
# Rising/Falling Three Methods pattern
|
|
552
|
+
def cdl_risefall3methods(open, high, low, close)
|
|
553
|
+
check_available!
|
|
554
|
+
validate_prices!(open)
|
|
555
|
+
validate_prices!(high)
|
|
556
|
+
validate_prices!(low)
|
|
557
|
+
validate_prices!(close)
|
|
558
|
+
|
|
559
|
+
TALibFFI.cdlrisefall3methods(open, high, low, close)
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
# Separating Lines pattern
|
|
563
|
+
def cdl_separatinglines(open, high, low, close)
|
|
564
|
+
check_available!
|
|
565
|
+
validate_prices!(open)
|
|
566
|
+
validate_prices!(high)
|
|
567
|
+
validate_prices!(low)
|
|
568
|
+
validate_prices!(close)
|
|
569
|
+
|
|
570
|
+
TALibFFI.cdlseparatinglines(open, high, low, close)
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
# Short Line Candle pattern
|
|
574
|
+
def cdl_shortline(open, high, low, close)
|
|
575
|
+
check_available!
|
|
576
|
+
validate_prices!(open)
|
|
577
|
+
validate_prices!(high)
|
|
578
|
+
validate_prices!(low)
|
|
579
|
+
validate_prices!(close)
|
|
580
|
+
|
|
581
|
+
TALibFFI.cdlshortline(open, high, low, close)
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
# Stalled Pattern
|
|
585
|
+
def cdl_stalledpattern(open, high, low, close)
|
|
586
|
+
check_available!
|
|
587
|
+
validate_prices!(open)
|
|
588
|
+
validate_prices!(high)
|
|
589
|
+
validate_prices!(low)
|
|
590
|
+
validate_prices!(close)
|
|
591
|
+
|
|
592
|
+
TALibFFI.cdlstalledpattern(open, high, low, close)
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
# Stick Sandwich pattern
|
|
596
|
+
def cdl_sticksandwich(open, high, low, close)
|
|
597
|
+
check_available!
|
|
598
|
+
validate_prices!(open)
|
|
599
|
+
validate_prices!(high)
|
|
600
|
+
validate_prices!(low)
|
|
601
|
+
validate_prices!(close)
|
|
602
|
+
|
|
603
|
+
TALibFFI.cdlsticksandwich(open, high, low, close)
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
# Takuri (Dragonfly Doji with very long lower shadow) pattern
|
|
607
|
+
def cdl_takuri(open, high, low, close)
|
|
608
|
+
check_available!
|
|
609
|
+
validate_prices!(open)
|
|
610
|
+
validate_prices!(high)
|
|
611
|
+
validate_prices!(low)
|
|
612
|
+
validate_prices!(close)
|
|
613
|
+
|
|
614
|
+
TALibFFI.cdltakuri(open, high, low, close)
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
# Tasuki Gap pattern
|
|
618
|
+
def cdl_tasukigap(open, high, low, close)
|
|
619
|
+
check_available!
|
|
620
|
+
validate_prices!(open)
|
|
621
|
+
validate_prices!(high)
|
|
622
|
+
validate_prices!(low)
|
|
623
|
+
validate_prices!(close)
|
|
624
|
+
|
|
625
|
+
TALibFFI.cdltasukigap(open, high, low, close)
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
# Thrusting pattern
|
|
629
|
+
def cdl_thrusting(open, high, low, close)
|
|
630
|
+
check_available!
|
|
631
|
+
validate_prices!(open)
|
|
632
|
+
validate_prices!(high)
|
|
633
|
+
validate_prices!(low)
|
|
634
|
+
validate_prices!(close)
|
|
635
|
+
|
|
636
|
+
TALibFFI.cdlthrusting(open, high, low, close)
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
# Tristar pattern
|
|
640
|
+
def cdl_tristar(open, high, low, close)
|
|
641
|
+
check_available!
|
|
642
|
+
validate_prices!(open)
|
|
643
|
+
validate_prices!(high)
|
|
644
|
+
validate_prices!(low)
|
|
645
|
+
validate_prices!(close)
|
|
646
|
+
|
|
647
|
+
TALibFFI.cdltristar(open, high, low, close)
|
|
648
|
+
end
|
|
649
|
+
|
|
650
|
+
# Unique 3 River pattern
|
|
651
|
+
def cdl_unique3river(open, high, low, close)
|
|
652
|
+
check_available!
|
|
653
|
+
validate_prices!(open)
|
|
654
|
+
validate_prices!(high)
|
|
655
|
+
validate_prices!(low)
|
|
656
|
+
validate_prices!(close)
|
|
657
|
+
|
|
658
|
+
TALibFFI.cdlunique3river(open, high, low, close)
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
# Upside Gap Two Crows pattern
|
|
662
|
+
def cdl_upsidegap2crows(open, high, low, close)
|
|
663
|
+
check_available!
|
|
664
|
+
validate_prices!(open)
|
|
665
|
+
validate_prices!(high)
|
|
666
|
+
validate_prices!(low)
|
|
667
|
+
validate_prices!(close)
|
|
668
|
+
|
|
669
|
+
TALibFFI.cdlupsidegap2crows(open, high, low, close)
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
# Upside/Downside Gap Three Methods pattern
|
|
673
|
+
def cdl_xsidegap3methods(open, high, low, close)
|
|
674
|
+
check_available!
|
|
675
|
+
validate_prices!(open)
|
|
676
|
+
validate_prices!(high)
|
|
677
|
+
validate_prices!(low)
|
|
678
|
+
validate_prices!(close)
|
|
679
|
+
|
|
680
|
+
TALibFFI.cdlxsidegap3methods(open, high, low, close)
|
|
681
|
+
end
|
|
682
|
+
end
|
|
683
|
+
end
|
|
684
|
+
end
|