sqa-tai 0.1.0 → 0.1.2

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.
@@ -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