Completed
Push — master ( a4e1bc...bca335 )
by Evgenii
03:52
created

CallsFunctions::stoch()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 21
nc 1
nop 8
dl 0
loc 25
ccs 12
cts 12
cp 1
crap 1
rs 8.8571
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace Laratrade\Trader\Concerns;
4
5
/**
6
 * Trait MagicCalls
7
 * @package Laratrade\Trader\Contracts
8
 *
9
 * phpcs:disable Generic.Files.LineLength
10
 * phpcs:disable PSR1.Methods.CamelCapsMethodName
11
 */
12
trait CallsFunctions
13
{
14
    /**
15
     * Vector Trigonometric ACos.
16
     *
17
     * Calculates the arc cosine for each value in real and returns the resulting array.
18
     *
19
     * @param array $real Array of real values.
20
     *
21
     * @return array Returns an array with calculated data.
22
     */
23 2
    public function acos(array $real): array
24
    {
25 2
        $result = trader_acos($real);
26
27 2
        $this->handleErrors();
28
29 2
        return $result;
30
    }
31
32
    /**
33
     * Chaikin A/D Line.
34
     *
35
     * @param array $high   High price, array of real values.
36
     * @param array $low    Low price, array of real values.
37
     * @param array $close  Closing price, array of real values.
38
     * @param array $volume Volume traded, array of real values.
39
     *
40
     * @return array Returns an array with calculated data.
41
     */
42 2
    public function ad(array $high, array $low, array $close, array $volume): array
43
    {
44 2
        $result = trader_ad($high, $low, $close, $volume);
45
46 2
        $this->handleErrors();
47
48 2
        return $result;
49
    }
50
51
    /**
52
     * Vector Arithmetic Add.
53
     *
54
     * Calculates the vector addition of real0 to real1 and returns the resulting vector.
55
     *
56
     * @param array $real0 Array of real values.
57
     * @param array $real1 Array of real values.
58
     *
59
     * @return array Returns an array with calculated data.
60
     */
61 2
    public function add(array $real0, array $real1): array
62
    {
63 2
        $result = trader_add($real0, $real1);
64
65 2
        $this->handleErrors();
66
67 2
        return $result;
68
    }
69
70
    /**
71
     * Chaikin A/D Oscillator.
72
     *
73
     * @param array $high       High price, array of real values.
74
     * @param array $low        Low price, array of real values.
75
     * @param array $close      Closing price, array of real values.
76
     * @param array $volume     Volume traded, array of real values.
77
     * @param int   $fastPeriod Number of period for the fast MA. Valid range from 2 to 100000.
78
     * @param int   $slowPeriod Number of period for the slow MA. Valid range from 2 to 100000.
79
     *
80
     * @return array Returns an array with calculated data.
81
     */
82 2
    public function adosc(
83
        array $high,
84
        array $low,
85
        array $close,
86
        array $volume,
87
        int $fastPeriod = 3,
88
        int $slowPeriod = 10
89
    ): array {
90 2
        $result = trader_adosc($high, $low, $close, $volume, $fastPeriod, $slowPeriod);
91
92 2
        $this->handleErrors();
93
94 2
        return $result;
95
    }
96
97
    /**
98
     * Average Directional Movement Index.
99
     *
100
     * @param array $high       High price, array of real values.
101
     * @param array $low        Low price, array of real values.
102
     * @param array $close      Closing price, array of real values.
103
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
104
     *
105
     * @return array Returns an array with calculated data.
106
     */
107 2
    public function adx(array $high, array $low, array $close, int $timePeriod = 14): array
108
    {
109 2
        $result = trader_adx($high, $low, $close, $timePeriod);
110
111 2
        $this->handleErrors();
112
113 2
        return $result;
114
    }
115
116
    /**
117
     * Average Directional Movement Index Rating.
118
     *
119
     * @param array $high       High price, array of real values.
120
     * @param array $low        Low price, array of real values.
121
     * @param array $close      Closing price, array of real values.
122
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
123
     *
124
     * @return array Returns an array with calculated data.
125
     */
126 2
    public function adxr(array $high, array $low, array $close, int $timePeriod = 14): array
127
    {
128 2
        $result = trader_adxr($high, $low, $close, $timePeriod);
129
130 2
        $this->handleErrors();
131
132 2
        return $result;
133
    }
134
135
    /**
136
     * Absolute Price Oscillator.
137
     *
138
     * @param array $real       Array of real values.
139
     * @param int   $fastPeriod Number of period for the fast MA. Valid range from 2 to 100000.
140
     * @param int   $slowPeriod Number of period for the slow MA. Valid range from 2 to 100000.
141
     * @param int   $mAType     Type of Moving Average. MA_TYPE_* series of constants should be used.
142
     *
143
     * @return array Returns an array with calculated data.
144
     */
145 2
    public function apo(array $real, int $fastPeriod = 12, int $slowPeriod = 26, int $mAType = 0): array
146
    {
147 2
        $result = trader_apo($real, $fastPeriod, $slowPeriod, $mAType);
148
149 2
        $this->handleErrors();
150
151 2
        return $result;
152
    }
153
154
    /**
155
     * Aroon.
156
     *
157
     * @param array $high       High price, array of real values.
158
     * @param array $low        Low price, array of real values.
159
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
160
     *
161
     * @return array Returns an array with calculated data.
162
     */
163 2
    public function aroon(array $high, array $low, int $timePeriod = 14): array
164
    {
165 2
        $result = trader_aroon($high, $low, $timePeriod);
166
167 2
        $this->handleErrors();
168
169 2
        return $result;
170
    }
171
172
    /**
173
     * Aroon Oscillator.
174
     *
175
     * @param array $high       High price, array of real values.
176
     * @param array $low        Low price, array of real values.
177
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
178
     *
179
     * @return array Returns an array with calculated data.
180
     */
181 2
    public function aroonosc(array $high, array $low, int $timePeriod = 14): array
182
    {
183 2
        $result = trader_aroonosc($high, $low, $timePeriod);
184
185 2
        $this->handleErrors();
186
187 2
        return $result;
188
    }
189
190
    /**
191
     * Vector Trigonometric ASin.
192
     *
193
     * @param array $real Array of real values.
194
     *
195
     * @return array Returns an array with calculated data.
196
     */
197 2
    public function asin(array $real): array
198
    {
199 2
        $result = trader_asin($real);
200
201 2
        $this->handleErrors();
202
203 2
        return $result;
204
    }
205
206
    /**
207
     * Vector Trigonometric ATan.
208
     *
209
     * @param array $real Array of real values.
210
     *
211
     * @return array Returns an array with calculated data.
212
     */
213 2
    public function atan(array $real): array
214
    {
215 2
        $result = trader_atan($real);
216
217 2
        $this->handleErrors();
218
219 2
        return $result;
220
    }
221
222
    /**
223
     * Average True Range.
224
     *
225
     * @param array $high       High price, array of real values.
226
     * @param array $low        Low price, array of real values.
227
     * @param array $close      Closing price, array of real values.
228
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
229
     *
230
     * @return array Returns an array with calculated data.
231
     */
232 2
    public function atr(array $high, array $low, array $close, int $timePeriod = 14): array
233
    {
234 2
        $result = trader_atr($high, $low, $close, $timePeriod);
235
236 2
        $this->handleErrors();
237
238 2
        return $result;
239
    }
240
241
    /**
242
     * Average Price.
243
     *
244
     * @param array $open  Opening price, array of real values.
245
     * @param array $high  High price, array of real values.
246
     * @param array $low   Low price, array of real values.
247
     * @param array $close Closing price, array of real values.
248
     *
249
     * @return array Returns an array with calculated data.
250
     */
251 2
    public function avgprice(array $open, array $high, array $low, array $close): array
252
    {
253 2
        $result = trader_avgprice($open, $high, $low, $close);
254
255 2
        $this->handleErrors();
256
257 2
        return $result;
258
    }
259
260
    /**
261
     * Bollinger Bands.
262
     *
263
     * @param array $real       Array of real values.
264
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
265
     * @param float $nbDevUp    Deviation multiplier for upper band. Valid range from REAL_MIN to REAL_MAX.
266
     * @param float $nbDevDn    Deviation multiplier for lower band. Valid range from REAL_MIN to REAL_MAX.
267
     * @param int   $mAType     Type of Moving Average. MA_TYPE_* series of constants should be used.
268
     *
269
     * @return array Returns an array with calculated data.
270
     */
271 2
    public function bbands(
272
        array $real,
273
        int $timePeriod = 5,
274
        float $nbDevUp = 2.0,
275
        float $nbDevDn = 2.0,
276
        int $mAType = 0
277
    ): array {
278 2
        $result = trader_bbands($real, $timePeriod, $nbDevUp, $nbDevDn, $mAType);
279
280 2
        $this->handleErrors();
281
282 2
        return $result;
283
    }
284
285
    /**
286
     * Beta.
287
     *
288
     * @param array $real0      Array of real values.
289
     * @param array $real1      Array of real values.
290
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
291
     *
292
     * @return array Returns an array with calculated data.
293
     */
294 2
    public function beta(array $real0, array $real1, int $timePeriod = 5): array
295
    {
296 2
        $result = trader_beta($real0, $real1, $timePeriod);
297
298 2
        $this->handleErrors();
299
300 2
        return $result;
301
    }
302
303
    /**
304
     * Balance Of Power.
305
     *
306
     * @param array $open  Opening price, array of real values.
307
     * @param array $high  High price, array of real values.
308
     * @param array $low   Low price, array of real values.
309
     * @param array $close Closing price, array of real values.
310
     *
311
     * @return array Returns an array with calculated data.
312
     */
313 2
    public function bop(array $open, array $high, array $low, array $close): array
314
    {
315 2
        $result = trader_bop($open, $high, $low, $close);
316
317 2
        $this->handleErrors();
318
319 2
        return $result;
320
    }
321
322
    /**
323
     * Commodity Channel Index.
324
     *
325
     * @param array $high       High price, array of real values.
326
     * @param array $low        Low price, array of real values.
327
     * @param array $close      Closing price, array of real values.
328
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
329
     *
330
     * @return array Returns an array with calculated data.
331
     */
332 2
    public function cci(array $high, array $low, array $close, int $timePeriod = null): array
333
    {
334 2
        $result = trader_cci($high, $low, $close, $timePeriod);
335
336 2
        $this->handleErrors();
337
338 2
        return $result;
339
    }
340
341
    /**
342
     * Two Crows.
343
     *
344
     * @param array $open  Opening price, array of real values.
345
     * @param array $high  High price, array of real values.
346
     * @param array $low   Low price, array of real values.
347
     * @param array $close Closing price, array of real values.
348
     *
349
     * @return array Returns an array with calculated data.
350
     */
351 2
    public function cdl2crows(array $open, array $high, array $low, array $close): array
352
    {
353 2
        $result = trader_cdl2crows($open, $high, $low, $close);
354
355 2
        $this->handleErrors();
356
357 2
        return $result;
358
    }
359
360
    /**
361
     * Three Black Crows.
362
     *
363
     * @param array $open  Opening price, array of real values.
364
     * @param array $high  High price, array of real values.
365
     * @param array $low   Low price, array of real values.
366
     * @param array $close Closing price, array of real values.
367
     *
368
     * @return array Returns an array with calculated data.
369
     */
370 2
    public function cdl3blackcrows(array $open, array $high, array $low, array $close): array
371
    {
372 2
        $result = trader_cdl3blackcrows($open, $high, $low, $close);
373
374 2
        $this->handleErrors();
375
376 2
        return $result;
377
    }
378
379
    /**
380
     * Three Inside Up/Down.
381
     *
382
     * @param array $open  Opening price, array of real values.
383
     * @param array $high  High price, array of real values.
384
     * @param array $low   Low price, array of real values.
385
     * @param array $close Closing price, array of real values.
386
     *
387
     * @return array Returns an array with calculated data.
388
     */
389 2
    public function cdl3inside(array $open, array $high, array $low, array $close): array
390
    {
391 2
        $result = trader_cdl3inside($open, $high, $low, $close);
392
393 2
        $this->handleErrors();
394
395 2
        return $result;
396
    }
397
398
    /**
399
     * Three-Line Strike
400
     *
401
     * @param array $open  Opening price, array of real values.
402
     * @param array $high  High price, array of real values.
403
     * @param array $low   Low price, array of real values.
404
     * @param array $close Closing price, array of real values.
405
     *
406
     * @return array Returns an array with calculated data.
407
     */
408 2
    public function cdl3linestrike(array $open, array $high, array $low, array $close): array
409
    {
410 2
        $result = trader_cdl3linestrike($open, $high, $low, $close);
411
412 2
        $this->handleErrors();
413
414 2
        return $result;
415
    }
416
417
    /**
418
     * Three Outside Up/Down.
419
     *
420
     * @param array $open  Opening price, array of real values.
421
     * @param array $high  High price, array of real values.
422
     * @param array $low   Low price, array of real values.
423
     * @param array $close Closing price, array of real values.
424
     *
425
     * @return array Returns an array with calculated data.
426
     */
427 2
    public function cdl3outside(array $open, array $high, array $low, array $close): array
428
    {
429 2
        $result = trader_cdl3outside($open, $high, $low, $close);
430
431 2
        $this->handleErrors();
432
433 2
        return $result;
434
    }
435
436
    /**
437
     * Three Stars In The South.
438
     *
439
     * @param array $open  Opening price, array of real values.
440
     * @param array $high  High price, array of real values.
441
     * @param array $low   Low price, array of real values.
442
     * @param array $close Closing price, array of real values.
443
     *
444
     * @return array Returns an array with calculated data.
445
     */
446 2
    public function cdl3starsinsouth(array $open, array $high, array $low, array $close): array
447
    {
448 2
        $result = trader_cdl3starsinsouth($open, $high, $low, $close);
449
450 2
        $this->handleErrors();
451
452 2
        return $result;
453
    }
454
455
    /**
456
     * Three Advancing White Soldiers.
457
     *
458
     * @param array $open  Opening price, array of real values.
459
     * @param array $high  High price, array of real values.
460
     * @param array $low   Low price, array of real values.
461
     * @param array $close Closing price, array of real values.
462
     *
463
     * @return array Returns an array with calculated data.
464
     */
465 2
    public function cdl3whitesoldiers(array $open, array $high, array $low, array $close): array
466
    {
467 2
        $result = trader_cdl3whitesoldiers($open, $high, $low, $close);
468
469 2
        $this->handleErrors();
470
471 2
        return $result;
472
    }
473
474
    /**
475
     * Abandoned Baby.
476
     *
477
     * @param array $open        Opening price, array of real values.
478
     * @param array $high        High price, array of real values.
479
     * @param array $low         Low price, array of real values.
480
     * @param array $close       Closing price, array of real values.
481
     * @param float $penetration Percentage of penetration of a candle within another candle.
482
     *
483
     * @return array Returns an array with calculated data.
484
     */
485 2
    public function cdlabandonedbaby(
486
        array $open,
487
        array $high,
488
        array $low,
489
        array $close,
490
        float $penetration = 0.3
491
    ): array {
492 2
        $result = trader_cdlabandonedbaby($open, $high, $low, $close, $penetration);
493
494 2
        $this->handleErrors();
495
496 2
        return $result;
497
    }
498
499
    /**
500
     * Advance Block.
501
     *
502
     * @param array $open  Opening price, array of real values.
503
     * @param array $high  High price, array of real values.
504
     * @param array $low   Low price, array of real values.
505
     * @param array $close Closing price, array of real values.
506
     *
507
     * @return array Returns an array with calculated data.
508
     */
509 2
    public function cdladvanceblock(array $open, array $high, array $low, array $close): array
510
    {
511 2
        $result = trader_cdladvanceblock($open, $high, $low, $close);
512
513 2
        $this->handleErrors();
514
515 2
        return $result;
516
    }
517
518
    /**
519
     * Belt-hold.
520
     *
521
     * @param array $open  Opening price, array of real values.
522
     * @param array $high  High price, array of real values.
523
     * @param array $low   Low price, array of real values.
524
     * @param array $close Closing price, array of real values.
525
     *
526
     * @return array Returns an array with calculated data.
527
     */
528 2
    public function cdlbelthold(array $open, array $high, array $low, array $close): array
529
    {
530 2
        $result = trader_cdlbelthold($open, $high, $low, $close);
531
532 2
        $this->handleErrors();
533
534 2
        return $result;
535
    }
536
537
    /**
538
     * Breakaway.
539
     *
540
     * @param array $open  Opening price, array of real values.
541
     * @param array $high  High price, array of real values.
542
     * @param array $low   Low price, array of real values.
543
     * @param array $close Closing price, array of real values.
544
     *
545
     * @return array Returns an array with calculated data.
546
     */
547 2
    public function cdlbreakaway(array $open, array $high, array $low, array $close): array
548
    {
549 2
        $result = trader_cdlbreakaway($open, $high, $low, $close);
550
551 2
        $this->handleErrors();
552
553 2
        return $result;
554
    }
555
556
    /**
557
     * Closing Marubozu.
558
     *
559
     * @param array $open  Opening price, array of real values.
560
     * @param array $high  High price, array of real values.
561
     * @param array $low   Low price, array of real values.
562
     * @param array $close Closing price, array of real values.
563
     *
564
     * @return array Returns an array with calculated data.
565
     */
566 2
    public function cdlclosingmarubozu(array $open, array $high, array $low, array $close): array
567
    {
568 2
        $result = trader_cdlclosingmarubozu($open, $high, $low, $close);
569
570 2
        $this->handleErrors();
571
572 2
        return $result;
573
    }
574
575
    /**
576
     * Concealing Baby Swallow.
577
     *
578
     * @param array $open  Opening price, array of real values.
579
     * @param array $high  High price, array of real values.
580
     * @param array $low   Low price, array of real values.
581
     * @param array $close Closing price, array of real values.
582
     *
583
     * @return array Returns an array with calculated data.
584
     */
585 2
    public function cdlconcealbabyswall(array $open, array $high, array $low, array $close): array
586
    {
587 2
        $result = trader_cdlconcealbabyswall($open, $high, $low, $close);
588
589 2
        $this->handleErrors();
590
591 2
        return $result;
592
    }
593
594
    /**
595
     * Counterattack.
596
     *
597
     * @param array $open  Opening price, array of real values.
598
     * @param array $high  High price, array of real values.
599
     * @param array $low   Low price, array of real values.
600
     * @param array $close Closing price, array of real values.
601
     *
602
     * @return array Returns an array with calculated data.
603
     */
604 2
    public function cdlcounterattack(array $open, array $high, array $low, array $close): array
605
    {
606 2
        $result = trader_cdlcounterattack($open, $high, $low, $close);
607
608 2
        $this->handleErrors();
609
610 2
        return $result;
611
    }
612
613
    /**
614
     * Dark Cloud Cover.
615
     *
616
     * @param array $open        Opening price, array of real values.
617
     * @param array $high        High price, array of real values.
618
     * @param array $low         Low price, array of real values.
619
     * @param array $close       Closing price, array of real values.
620
     * @param float $penetration Percentage of penetration of a candle within another candle.
621
     *
622
     * @return array Returns an array with calculated data.
623
     */
624 2
    public function cdldarkcloudcover(
625
        array $open,
626
        array $high,
627
        array $low,
628
        array $close,
629
        float $penetration = 0.5
630
    ): array {
631 2
        $result = trader_cdldarkcloudcover($open, $high, $low, $close, $penetration);
632
633 2
        $this->handleErrors();
634
635 2
        return $result;
636
    }
637
638
    /**
639
     * Doji.
640
     *
641
     * @param array $open  Opening price, array of real values.
642
     * @param array $high  High price, array of real values.
643
     * @param array $low   Low price, array of real values.
644
     * @param array $close Closing price, array of real values.
645
     *
646
     * @return array Returns an array with calculated data.
647
     */
648 2
    public function cdldoji(array $open, array $high, array $low, array $close): array
649
    {
650 2
        $result = trader_cdldoji($open, $high, $low, $close);
651
652 2
        $this->handleErrors();
653
654 2
        return $result;
655
    }
656
657
    /**
658
     * Doji Star.
659
     *
660
     * @param array $open  Opening price, array of real values.
661
     * @param array $high  High price, array of real values.
662
     * @param array $low   Low price, array of real values.
663
     * @param array $close Closing price, array of real values.
664
     *
665
     * @return array Returns an array with calculated data.
666
     */
667 2
    public function cdldojistar(array $open, array $high, array $low, array $close): array
668
    {
669 2
        $result = trader_cdldojistar($open, $high, $low, $close);
670
671 2
        $this->handleErrors();
672
673 2
        return $result;
674
    }
675
676
    /**
677
     * Dragonfly Doji.
678
     *
679
     * @param array $open  Opening price, array of real values.
680
     * @param array $high  High price, array of real values.
681
     * @param array $low   Low price, array of real values.
682
     * @param array $close Closing price, array of real values.
683
     *
684
     * @return array Returns an array with calculated data.
685
     */
686 2
    public function cdldragonflydoji(array $open, array $high, array $low, array $close): array
687
    {
688 2
        $result = trader_cdldragonflydoji($open, $high, $low, $close);
689
690 2
        $this->handleErrors();
691
692 2
        return $result;
693
    }
694
695
    /**
696
     * Engulfing Pattern.
697
     *
698
     * @param array $open  Opening price, array of real values.
699
     * @param array $high  High price, array of real values.
700
     * @param array $low   Low price, array of real values.
701
     * @param array $close Closing price, array of real values.
702
     *
703
     * @return array Returns an array with calculated data.
704
     */
705 2
    public function cdlengulfing(array $open, array $high, array $low, array $close): array
706
    {
707 2
        $result = trader_cdlengulfing($open, $high, $low, $close);
708
709 2
        $this->handleErrors();
710
711 2
        return $result;
712
    }
713
714
    /**
715
     * Evening Doji Star.
716
     *
717
     * @param array $open        Opening price, array of real values.
718
     * @param array $high        High price, array of real values.
719
     * @param array $low         Low price, array of real values.
720
     * @param array $close       Closing price, array of real values.
721
     * @param float $penetration Percentage of penetration of a candle within another candle.
722
     *
723
     * @return array Returns an array with calculated data.
724
     */
725 2
    public function cdleveningdojistar(
726
        array $open,
727
        array $high,
728
        array $low,
729
        array $close,
730
        float $penetration = 0.3
731
    ): array {
732 2
        $result = trader_cdleveningdojistar($open, $high, $low, $close, $penetration);
733
734 2
        $this->handleErrors();
735
736 2
        return $result;
737
    }
738
739
    /**
740
     * Evening Star.
741
     *
742
     * @param array $open        Opening price, array of real values.
743
     * @param array $high        High price, array of real values.
744
     * @param array $low         Low price, array of real values.
745
     * @param array $close       Closing price, array of real values.
746
     * @param float $penetration [OPTIONAL] [DEFAULT 0.3] Percentage of penetration of a candle within another candle.
747
     *
748
     * @return array Returns an array with calculated data.
749
     */
750 2
    public function cdleveningstar(
751
        array $open,
752
        array $high,
753
        array $low,
754
        array $close,
755
        float $penetration = 0.3
756
    ): array {
757 2
        $result = trader_cdleveningstar($open, $high, $low, $close, $penetration);
758
759 2
        $this->handleErrors();
760
761 2
        return $result;
762
    }
763
764
    /**
765
     * Up/Down-gap side-by-side white lines.
766
     *
767
     * @param array $open  Opening price, array of real values.
768
     * @param array $high  High price, array of real values.
769
     * @param array $low   Low price, array of real values.
770
     * @param array $close Closing price, array of real values.
771
     *
772
     * @return array Returns an array with calculated data.
773
     */
774 2
    public function cdlgapsidesidewhite(array $open, array $high, array $low, array $close): array
775
    {
776 2
        $result = trader_cdlgapsidesidewhite($open, $high, $low, $close);
777
778 2
        $this->handleErrors();
779
780 2
        return $result;
781
    }
782
783
    /**
784
     * Gravestone Doji.
785
     *
786
     * @param array $open  Opening price, array of real values.
787
     * @param array $high  High price, array of real values.
788
     * @param array $low   Low price, array of real values.
789
     * @param array $close Closing price, array of real values.
790
     *
791
     * @return array Returns an array with calculated data.
792
     */
793 2
    public function cdlgravestonedoji(array $open, array $high, array $low, array $close): array
794
    {
795 2
        $result = trader_cdlgravestonedoji($open, $high, $low, $close);
796
797 2
        $this->handleErrors();
798
799 2
        return $result;
800
    }
801
802
    /**
803
     * Hammer.
804
     *
805
     * @param array $open  Opening price, array of real values.
806
     * @param array $high  High price, array of real values.
807
     * @param array $low   Low price, array of real values.
808
     * @param array $close Closing price, array of real values.
809
     *
810
     * @return array Returns an array with calculated data.
811
     */
812 2
    public function cdlhammer(array $open, array $high, array $low, array $close): array
813
    {
814 2
        $result = trader_cdlhammer($open, $high, $low, $close);
815
816 2
        $this->handleErrors();
817
818 2
        return $result;
819
    }
820
821
    /**
822
     * Hanging Man.
823
     *
824
     * @param array $open  Opening price, array of real values.
825
     * @param array $high  High price, array of real values.
826
     * @param array $low   Low price, array of real values.
827
     * @param array $close Closing price, array of real values.
828
     *
829
     * @return array Returns an array with calculated data.
830
     */
831 2
    public function cdlhangingman(array $open, array $high, array $low, array $close): array
832
    {
833 2
        $result = trader_cdlhangingman($open, $high, $low, $close);
834
835 2
        $this->handleErrors();
836
837 2
        return $result;
838
    }
839
840
    /**
841
     * Harami Pattern.
842
     *
843
     * @param array $open  Opening price, array of real values.
844
     * @param array $high  High price, array of real values.
845
     * @param array $low   Low price, array of real values.
846
     * @param array $close Closing price, array of real values.
847
     *
848
     * @return array Returns an array with calculated data.
849
     */
850 2
    public function cdlharami(array $open, array $high, array $low, array $close): array
851
    {
852 2
        $result = trader_cdlharami($open, $high, $low, $close);
853
854 2
        $this->handleErrors();
855
856 2
        return $result;
857
    }
858
859
    /**
860
     * Harami Cross Pattern.
861
     *
862
     * @param array $open  Opening price, array of real values.
863
     * @param array $high  High price, array of real values.
864
     * @param array $low   Low price, array of real values.
865
     * @param array $close Closing price, array of real values.
866
     *
867
     * @return array Returns an array with calculated data.
868
     */
869 2
    public function cdlharamicross(array $open, array $high, array $low, array $close): array
870
    {
871 2
        $result = trader_cdlharamicross($open, $high, $low, $close);
872
873 2
        $this->handleErrors();
874
875 2
        return $result;
876
    }
877
878
    /**
879
     * High-Wave Candle.
880
     *
881
     * @param array $open  Opening price, array of real values.
882
     * @param array $high  High price, array of real values.
883
     * @param array $low   Low price, array of real values.
884
     * @param array $close Closing price, array of real values.
885
     *
886
     * @return array Returns an array with calculated data.
887
     */
888 2
    public function cdlhighwave(array $open, array $high, array $low, array $close): array
889
    {
890 2
        $result = trader_cdlhighwave($open, $high, $low, $close);
891
892 2
        $this->handleErrors();
893
894 2
        return $result;
895
    }
896
897
    /**
898
     * Hikkake Pattern.
899
     *
900
     * @param array $open  Opening price, array of real values.
901
     * @param array $high  High price, array of real values.
902
     * @param array $low   Low price, array of real values.
903
     * @param array $close Closing price, array of real values.
904
     *
905
     * @return array Returns an array with calculated data.
906
     */
907 2
    public function cdlhikkake(array $open, array $high, array $low, array $close): array
908
    {
909 2
        $result = trader_cdlhikkake($open, $high, $low, $close);
910
911 2
        $this->handleErrors();
912
913 2
        return $result;
914
    }
915
916
    /**
917
     * Modified Hikkake Pattern.
918
     *
919
     * @param array $open  Opening price, array of real values.
920
     * @param array $high  High price, array of real values.
921
     * @param array $low   Low price, array of real values.
922
     * @param array $close Closing price, array of real values.
923
     *
924
     * @return array Returns an array with calculated data.
925
     */
926 2
    public function cdlhikkakemod(array $open, array $high, array $low, array $close): array
927
    {
928 2
        $result = trader_cdlhikkakemod($open, $high, $low, $close);
929
930 2
        $this->handleErrors();
931
932 2
        return $result;
933
    }
934
935
    /**
936
     * Homing Pigeon.
937
     *
938
     * @param array $open  Opening price, array of real values.
939
     * @param array $high  High price, array of real values.
940
     * @param array $low   Low price, array of real values.
941
     * @param array $close Closing price, array of real values.
942
     *
943
     * @return array Returns an array with calculated data.
944
     */
945 2
    public function cdlhomingpigeon(array $open, array $high, array $low, array $close): array
946
    {
947 2
        $result = trader_cdlhomingpigeon($open, $high, $low, $close);
948
949 2
        $this->handleErrors();
950
951 2
        return $result;
952
    }
953
954
    /**
955
     * Identical Three Crows.
956
     *
957
     * @param array $open  Opening price, array of real values.
958
     * @param array $high  High price, array of real values.
959
     * @param array $low   Low price, array of real values.
960
     * @param array $close Closing price, array of real values.
961
     *
962
     * @return array Returns an array with calculated data.
963
     */
964 2
    public function cdlidentical3crows(array $open, array $high, array $low, array $close): array
965
    {
966 2
        $result = trader_cdlidentical3crows($open, $high, $low, $close);
967
968 2
        $this->handleErrors();
969
970 2
        return $result;
971
    }
972
973
    /**
974
     * In-Neck Pattern.
975
     *
976
     * @param array $open  Opening price, array of real values.
977
     * @param array $high  High price, array of real values.
978
     * @param array $low   Low price, array of real values.
979
     * @param array $close Closing price, array of real values.
980
     *
981
     * @return array Returns an array with calculated data.
982
     */
983 2
    public function cdlinneck(array $open, array $high, array $low, array $close): array
984
    {
985 2
        $result = trader_cdlinneck($open, $high, $low, $close);
986
987 2
        $this->handleErrors();
988
989 2
        return $result;
990
    }
991
992
    /**
993
     * Inverted Hammer.
994
     *
995
     * @param array $open  Opening price, array of real values.
996
     * @param array $high  High price, array of real values.
997
     * @param array $low   Low price, array of real values.
998
     * @param array $close Closing price, array of real values.
999
     *
1000
     * @return array Returns an array with calculated data.
1001
     */
1002 2
    public function cdlinvertedhammer(array $open, array $high, array $low, array $close): array
1003
    {
1004 2
        $result = trader_cdlinvertedhammer($open, $high, $low, $close);
1005
1006 2
        $this->handleErrors();
1007
1008 2
        return $result;
1009
    }
1010
1011
    /**
1012
     * Kicking.
1013
     *
1014
     * @param array $open  Opening price, array of real values.
1015
     * @param array $high  High price, array of real values.
1016
     * @param array $low   Low price, array of real values.
1017
     * @param array $close Closing price, array of real values.
1018
     *
1019
     * @return array Returns an array with calculated data.
1020
     */
1021 2
    public function cdlkicking(array $open, array $high, array $low, array $close): array
1022
    {
1023 2
        $result = trader_cdlkicking($open, $high, $low, $close);
1024
1025 2
        $this->handleErrors();
1026
1027 2
        return $result;
1028
    }
1029
1030
    /**
1031
     * Kicking - bull/bear determined by the longer marubozu.
1032
     *
1033
     * @param array $open  Opening price, array of real values.
1034
     * @param array $high  High price, array of real values.
1035
     * @param array $low   Low price, array of real values.
1036
     * @param array $close Closing price, array of real values.
1037
     *
1038
     * @return array Returns an array with calculated data.
1039
     */
1040 2
    public function cdlkickingbylength(array $open, array $high, array $low, array $close): array
1041
    {
1042 2
        $result = trader_cdlkickingbylength($open, $high, $low, $close);
1043
1044 2
        $this->handleErrors();
1045
1046 2
        return $result;
1047
    }
1048
1049
    /**
1050
     * Ladder Bottom.
1051
     *
1052
     * @param array $open  Opening price, array of real values.
1053
     * @param array $high  High price, array of real values.
1054
     * @param array $low   Low price, array of real values.
1055
     * @param array $close Closing price, array of real values.
1056
     *
1057
     * @return array Returns an array with calculated data.
1058
     */
1059 2
    public function cdlladderbottom(array $open, array $high, array $low, array $close): array
1060
    {
1061 2
        $result = trader_cdlladderbottom($open, $high, $low, $close);
1062
1063 2
        $this->handleErrors();
1064
1065 2
        return $result;
1066
    }
1067
1068
    /**
1069
     * Long Legged Doji.
1070
     *
1071
     * @param array $open  Opening price, array of real values.
1072
     * @param array $high  High price, array of real values.
1073
     * @param array $low   Low price, array of real values.
1074
     * @param array $close Closing price, array of real values.
1075
     *
1076
     * @return array Returns an array with calculated data.
1077
     */
1078 2
    public function cdllongleggeddoji(array $open, array $high, array $low, array $close): array
1079
    {
1080 2
        $result = trader_cdllongleggeddoji($open, $high, $low, $close);
1081
1082 2
        $this->handleErrors();
1083
1084 2
        return $result;
1085
    }
1086
1087
    /**
1088
     * Long Line Candle.
1089
     *
1090
     * @param array $open  Opening price, array of real values.
1091
     * @param array $high  High price, array of real values.
1092
     * @param array $low   Low price, array of real values.
1093
     * @param array $close Closing price, array of real values.
1094
     *
1095
     * @return array Returns an array with calculated data.
1096
     */
1097 2
    public function cdllongline(array $open, array $high, array $low, array $close): array
1098
    {
1099 2
        $result = trader_cdllongline($open, $high, $low, $close);
1100
1101 2
        $this->handleErrors();
1102
1103 2
        return $result;
1104
    }
1105
1106
    /**
1107
     * Marubozu.
1108
     *
1109
     * @param array $open  Opening price, array of real values.
1110
     * @param array $high  High price, array of real values.
1111
     * @param array $low   Low price, array of real values.
1112
     * @param array $close Closing price, array of real values.
1113
     *
1114
     * @return array Returns an array with calculated data.
1115
     */
1116 2
    public function cdlmarubozu(array $open, array $high, array $low, array $close): array
1117
    {
1118 2
        $result = trader_cdlmarubozu($open, $high, $low, $close);
1119
1120 2
        $this->handleErrors();
1121
1122 2
        return $result;
1123
    }
1124
1125
    /**
1126
     * Matching Low.
1127
     *
1128
     * @param array $open  Opening price, array of real values.
1129
     * @param array $high  High price, array of real values.
1130
     * @param array $low   Low price, array of real values.
1131
     * @param array $close Closing price, array of real values.
1132
     *
1133
     * @return array Returns an array with calculated data.
1134
     */
1135 2
    public function cdlmatchinglow(array $open, array $high, array $low, array $close): array
1136
    {
1137 2
        $result = trader_cdlmatchinglow($open, $high, $low, $close);
1138
1139 2
        $this->handleErrors();
1140
1141 2
        return $result;
1142
    }
1143
1144
    /**
1145
     * Mat Hold.
1146
     *
1147
     * @param array $open        Opening price, array of real values.
1148
     * @param array $high        High price, array of real values.
1149
     * @param array $low         Low price, array of real values.
1150
     * @param array $close       Closing price, array of real values.
1151
     * @param float $penetration Percentage of penetration of a candle within another candle.
1152
     *
1153
     * @return array Returns an array with calculated data.
1154
     */
1155 2
    public function cdlmathold(
1156
        array $open,
1157
        array $high,
1158
        array $low,
1159
        array $close,
1160
        float $penetration = 0.5
1161
    ): array {
1162 2
        $result = trader_cdlmathold($open, $high, $low, $close, $penetration);
1163
1164 2
        $this->handleErrors();
1165
1166 2
        return $result;
1167
    }
1168
1169
    /**
1170
     * Morning Doji Star.
1171
     *
1172
     * @param array $open        Opening price, array of real values.
1173
     * @param array $high        High price, array of real values.
1174
     * @param array $low         Low price, array of real values.
1175
     * @param array $close       Closing price, array of real values.
1176
     * @param float $penetration [OPTIONAL] [DEFAULT 0.3] Percentage of penetration of a candle within another candle.
1177
     *
1178
     * @return array Returns an array with calculated data.
1179
     */
1180 2
    public function cdlmorningdojistar(
1181
        array $open,
1182
        array $high,
1183
        array $low,
1184
        array $close,
1185
        float $penetration = 0.3
1186
    ): array {
1187 2
        $result = trader_cdlmorningdojistar($open, $high, $low, $close, $penetration);
1188
1189 2
        $this->handleErrors();
1190
1191 2
        return $result;
1192
    }
1193
1194
    /**
1195
     * Morning Star.
1196
     *
1197
     * @param array $open        Opening price, array of real values.
1198
     * @param array $high        High price, array of real values.
1199
     * @param array $low         Low price, array of real values.
1200
     * @param array $close       Closing price, array of real values.
1201
     * @param float $penetration Percentage of penetration of a candle within another candle.
1202
     *
1203
     * @return array Returns an array with calculated data.
1204
     */
1205 2
    public function cdlmorningstar(
1206
        array $open,
1207
        array $high,
1208
        array $low,
1209
        array $close,
1210
        float $penetration = 0.3
1211
    ): array {
1212 2
        $result = trader_cdlmorningstar($open, $high, $low, $close, $penetration);
1213
1214 2
        $this->handleErrors();
1215
1216 2
        return $result;
1217
    }
1218
1219
    /**
1220
     * On-Neck Pattern.
1221
     *
1222
     * @param array $open  Opening price, array of real values.
1223
     * @param array $high  High price, array of real values.
1224
     * @param array $low   Low price, array of real values.
1225
     * @param array $close Closing price, array of real values.
1226
     *
1227
     * @return array Returns an array with calculated data.
1228
     */
1229 2
    public function cdlonneck(array $open, array $high, array $low, array $close): array
1230
    {
1231 2
        $result = trader_cdlonneck($open, $high, $low, $close);
1232
1233 2
        $this->handleErrors();
1234
1235 2
        return $result;
1236
    }
1237
1238
    /**
1239
     * Piercing Pattern.
1240
     *
1241
     * @param array $open  Opening price, array of real values.
1242
     * @param array $high  High price, array of real values.
1243
     * @param array $low   Low price, array of real values.
1244
     * @param array $close Closing price, array of real values.
1245
     *
1246
     * @return array Returns an array with calculated data.
1247
     */
1248 2
    public function cdlpiercing(array $open, array $high, array $low, array $close): array
1249
    {
1250 2
        $result = trader_cdlpiercing($open, $high, $low, $close);
1251
1252 2
        $this->handleErrors();
1253
1254 2
        return $result;
1255
    }
1256
1257
    /**
1258
     * Rickshaw Man.
1259
     *
1260
     * @param array $open  Opening price, array of real values.
1261
     * @param array $high  High price, array of real values.
1262
     * @param array $low   Low price, array of real values.
1263
     * @param array $close Closing price, array of real values.
1264
     *
1265
     * @return array Returns an array with calculated data.
1266
     */
1267 2
    public function cdlrickshawman(array $open, array $high, array $low, array $close): array
1268
    {
1269 2
        $result = trader_cdlrickshawman($open, $high, $low, $close);
1270
1271 2
        $this->handleErrors();
1272
1273 2
        return $result;
1274
    }
1275
1276
    /**
1277
     * Rising/Falling Three Methods.
1278
     *
1279
     * @param array $open  Opening price, array of real values.
1280
     * @param array $high  High price, array of real values.
1281
     * @param array $low   Low price, array of real values.
1282
     * @param array $close Closing price, array of real values.
1283
     *
1284
     * @return array Returns an array with calculated data.
1285
     */
1286 2
    public function cdlrisefall3methods(array $open, array $high, array $low, array $close): array
1287
    {
1288 2
        $result = trader_cdlrisefall3methods($open, $high, $low, $close);
1289
1290 2
        $this->handleErrors();
1291
1292 2
        return $result;
1293
    }
1294
1295
    /**
1296
     * Separating Lines.
1297
     *
1298
     * @param array $open  Opening price, array of real values.
1299
     * @param array $high  High price, array of real values.
1300
     * @param array $low   Low price, array of real values.
1301
     * @param array $close Closing price, array of real values.
1302
     *
1303
     * @return array Returns an array with calculated data.
1304
     */
1305 2
    public function cdlseparatinglines(array $open, array $high, array $low, array $close): array
1306
    {
1307 2
        $result = trader_cdlseparatinglines($open, $high, $low, $close);
1308
1309 2
        $this->handleErrors();
1310
1311 2
        return $result;
1312
    }
1313
1314
    /**
1315
     * Shooting Star.
1316
     *
1317
     * @param array $open  Opening price, array of real values.
1318
     * @param array $high  High price, array of real values.
1319
     * @param array $low   Low price, array of real values.
1320
     * @param array $close Closing price, array of real values.
1321
     *
1322
     * @return array Returns an array with calculated data.
1323
     */
1324 2
    public function cdlshootingstar(array $open, array $high, array $low, array $close): array
1325
    {
1326 2
        $result = trader_cdlshootingstar($open, $high, $low, $close);
1327
1328 2
        $this->handleErrors();
1329
1330 2
        return $result;
1331
    }
1332
1333
    /**
1334
     * Short Line Candle.
1335
     *
1336
     * @param array $open  Opening price, array of real values.
1337
     * @param array $high  High price, array of real values.
1338
     * @param array $low   Low price, array of real values.
1339
     * @param array $close Closing price, array of real values.
1340
     *
1341
     * @return array Returns an array with calculated data.
1342
     */
1343 2
    public function cdlshortline(array $open, array $high, array $low, array $close): array
1344
    {
1345 2
        $result = trader_cdlshortline($open, $high, $low, $close);
1346
1347 2
        $this->handleErrors();
1348
1349 2
        return $result;
1350
    }
1351
1352
    /**
1353
     * Spinning Top.
1354
     *
1355
     * @param array $open  Opening price, array of real values.
1356
     * @param array $high  High price, array of real values.
1357
     * @param array $low   Low price, array of real values.
1358
     * @param array $close Closing price, array of real values.
1359
     *
1360
     * @return array Returns an array with calculated data.
1361
     */
1362 2
    public function cdlspinningtop(array $open, array $high, array $low, array $close): array
1363
    {
1364 2
        $result = trader_cdlspinningtop($open, $high, $low, $close);
1365
1366 2
        $this->handleErrors();
1367
1368 2
        return $result;
1369
    }
1370
1371
    /**
1372
     * Stalled Pattern.
1373
     *
1374
     * @param array $open  Opening price, array of real values.
1375
     * @param array $high  High price, array of real values.
1376
     * @param array $low   Low price, array of real values.
1377
     * @param array $close Closing price, array of real values.
1378
     *
1379
     * @return array Returns an array with calculated data.
1380
     */
1381 2
    public function cdlstalledpattern(array $open, array $high, array $low, array $close): array
1382
    {
1383 2
        $result = trader_cdlstalledpattern($open, $high, $low, $close);
1384
1385 2
        $this->handleErrors();
1386
1387 2
        return $result;
1388
    }
1389
1390
    /**
1391
     * Stick Sandwich.
1392
     *
1393
     * @param array $open  Opening price, array of real values.
1394
     * @param array $high  High price, array of real values.
1395
     * @param array $low   Low price, array of real values.
1396
     * @param array $close Closing price, array of real values.
1397
     *
1398
     * @return array Returns an array with calculated data.
1399
     */
1400 2
    public function cdlsticksandwich(array $open, array $high, array $low, array $close): array
1401
    {
1402 2
        $result = trader_cdlsticksandwich($open, $high, $low, $close);
1403
1404 2
        $this->handleErrors();
1405
1406 2
        return $result;
1407
    }
1408
1409
    /**
1410
     * Takuri (Dragonfly Doji with very long lower shadow).
1411
     *
1412
     * @param array $open  Opening price, array of real values.
1413
     * @param array $high  High price, array of real values.
1414
     * @param array $low   Low price, array of real values.
1415
     * @param array $close Closing price, array of real values.
1416
     *
1417
     * @return array Returns an array with calculated data.
1418
     */
1419 2
    public function cdltakuri(array $open, array $high, array $low, array $close): array
1420
    {
1421 2
        $result = trader_cdltakuri($open, $high, $low, $close);
1422
1423 2
        $this->handleErrors();
1424
1425 2
        return $result;
1426
    }
1427
1428
    /**
1429
     * Tasuki Gap.
1430
     *
1431
     * @param array $open  Opening price, array of real values.
1432
     * @param array $high  High price, array of real values.
1433
     * @param array $low   Low price, array of real values.
1434
     * @param array $close Closing price, array of real values.
1435
     *
1436
     * @return array Returns an array with calculated data.
1437
     */
1438 2
    public function cdltasukigap(array $open, array $high, array $low, array $close): array
1439
    {
1440 2
        $result = trader_cdltasukigap($open, $high, $low, $close);
1441
1442 2
        $this->handleErrors();
1443
1444 2
        return $result;
1445
    }
1446
1447
    /**
1448
     * Thrusting Pattern.
1449
     *
1450
     * @param array $open  Opening price, array of real values.
1451
     * @param array $high  High price, array of real values.
1452
     * @param array $low   Low price, array of real values.
1453
     * @param array $close Closing price, array of real values.
1454
     *
1455
     * @return array Returns an array with calculated data.
1456
     */
1457 2
    public function cdlthrusting(array $open, array $high, array $low, array $close): array
1458
    {
1459 2
        $result = trader_cdlthrusting($open, $high, $low, $close);
1460
1461 2
        $this->handleErrors();
1462
1463 2
        return $result;
1464
    }
1465
1466
    /**
1467
     * Tristar Pattern.
1468
     *
1469
     * @param array $open  Opening price, array of real values.
1470
     * @param array $high  High price, array of real values.
1471
     * @param array $low   Low price, array of real values.
1472
     * @param array $close Closing price, array of real values.
1473
     *
1474
     * @return array Returns an array with calculated data.
1475
     */
1476 2
    public function cdltristar(array $open, array $high, array $low, array $close): array
1477
    {
1478 2
        $result = trader_cdltristar($open, $high, $low, $close);
1479
1480 2
        $this->handleErrors();
1481
1482 2
        return $result;
1483
    }
1484
1485
    /**
1486
     * Unique 3 River.
1487
     *
1488
     * @param array $open  Opening price, array of real values.
1489
     * @param array $high  High price, array of real values.
1490
     * @param array $low   Low price, array of real values.
1491
     * @param array $close Closing price, array of real values.
1492
     *
1493
     * @return array Returns an array with calculated data.
1494
     */
1495 2
    public function cdlunique3river(array $open, array $high, array $low, array $close): array
1496
    {
1497 2
        $result = trader_cdlunique3river($open, $high, $low, $close);
1498
1499 2
        $this->handleErrors();
1500
1501 2
        return $result;
1502
    }
1503
1504
    /**
1505
     * Upside Gap Two Crows.
1506
     *
1507
     * @param array $open  Opening price, array of real values.
1508
     * @param array $high  High price, array of real values.
1509
     * @param array $low   Low price, array of real values.
1510
     * @param array $close Closing price, array of real values.
1511
     *
1512
     * @return array Returns an array with calculated data.
1513
     */
1514 2
    public function cdlupsidegap2crows(array $open, array $high, array $low, array $close): array
1515
    {
1516 2
        $result = trader_cdlupsidegap2crows($open, $high, $low, $close);
1517
1518 2
        $this->handleErrors();
1519
1520 2
        return $result;
1521
    }
1522
1523
    /**
1524
     * Upside/Downside Gap Three Methods.
1525
     *
1526
     * @param array $open  Opening price, array of real values.
1527
     * @param array $high  High price, array of real values.
1528
     * @param array $low   Low price, array of real values.
1529
     * @param array $close Closing price, array of real values.
1530
     *
1531
     * @return array Returns an array with calculated data.
1532
     */
1533 2
    public function cdlxsidegap3methods(array $open, array $high, array $low, array $close): array
1534
    {
1535 2
        $result = trader_cdlxsidegap3methods($open, $high, $low, $close);
1536
1537 2
        $this->handleErrors();
1538
1539 2
        return $result;
1540
    }
1541
1542
    /**
1543
     * Vector Ceil.
1544
     *
1545
     * Calculates the next highest integer for each value in real and returns the resulting array.
1546
     *
1547
     * @param array $real Array of real values.
1548
     *
1549
     * @return array Returns an array with calculated data.
1550
     */
1551 2
    public function ceil(array $real): array
1552
    {
1553 2
        $result = trader_ceil($real);
1554
1555 2
        $this->handleErrors();
1556
1557 2
        return $result;
1558
    }
1559
1560
    /**
1561
     * Chande Momentum Oscillator.
1562
     *
1563
     * @param array $real       Array of real values.
1564
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1565
     *
1566
     * @return array Returns an array with calculated data.
1567
     */
1568 2
    public function cmo(array $real, int $timePeriod = 14): array
1569
    {
1570 2
        $result = trader_cmo($real, $timePeriod);
1571
1572 2
        $this->handleErrors();
1573
1574 2
        return $result;
1575
    }
1576
1577
    /**
1578
     * Pearson's Correlation Coefficient (r).
1579
     *
1580
     * @param array $real0      Array of real values.
1581
     * @param array $real1      Array of real values.
1582
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1583
     *
1584
     * @return array Returns an array with calculated data.
1585
     */
1586 2
    public function correl(array $real0, array $real1, int $timePeriod = 30): array
1587
    {
1588 2
        $result = trader_correl($real0, $real1, $timePeriod);
1589
1590 2
        $this->handleErrors();
1591
1592 2
        return $result;
1593
    }
1594
1595
    /**
1596
     * Vector Trigonometric Cos.
1597
     *
1598
     * Calculates the cosine for each value in real and returns the resulting array.
1599
     *
1600
     * @param array $real Array of real values.
1601
     *
1602
     * @return array Returns an array with calculated data.
1603
     */
1604 2
    public function cos(array $real): array
1605
    {
1606 2
        $result = trader_cos($real);
1607
1608 2
        $this->handleErrors();
1609
1610 2
        return $result;
1611
    }
1612
1613
    /**
1614
     * Vector Trigonometric Cosh.
1615
     *
1616
     * Calculates the hyperbolic cosine for each value in real and returns the resulting array.
1617
     *
1618
     * @param array $real Array of real values.
1619
     *
1620
     * @return array Returns an array with calculated data.
1621
     */
1622 2
    public function cosh(array $real): array
1623
    {
1624 2
        $result = trader_cosh($real);
1625
1626 2
        $this->handleErrors();
1627
1628 2
        return $result;
1629
    }
1630
1631
    /**
1632
     * Double Exponential Moving Average.
1633
     *
1634
     * @param array $real       Array of real values.
1635
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1636
     *
1637
     * @return array Returns an array with calculated data.
1638
     */
1639 2
    public function dema(array $real, int $timePeriod = 30): array
1640
    {
1641 2
        $result = trader_dema($real, $timePeriod);
1642
1643 2
        $this->handleErrors();
1644
1645 2
        return $result;
1646
    }
1647
1648
    /**
1649
     * Vector Arithmetic Div.
1650
     *
1651
     * Divides each value from real0 by the corresponding value from real1 and returns the resulting array.
1652
     *
1653
     * @param array $real0 Array of real values.
1654
     * @param array $real1 Array of real values.
1655
     *
1656
     * @return array Returns an array with calculated data.
1657
     */
1658 2
    public function div(array $real0, array $real1): array
1659
    {
1660 2
        $result = trader_div($real0, $real1);
1661
1662 2
        $this->handleErrors();
1663
1664 2
        return $result;
1665
    }
1666
1667
    /**
1668
     * Directional Movement Index.
1669
     *
1670
     * @param array $high       High price, array of real values.
1671
     * @param array $low        Low price, array of real values.
1672
     * @param array $close      Closing price, array of real values.
1673
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1674
     *
1675
     * @return array  Returns an array with calculated data.
1676
     */
1677 2
    public function dx(array $high, array $low, array $close, int $timePeriod = 14): array
1678
    {
1679 2
        $result = trader_dx($high, $low, $close, $timePeriod);
1680
1681 2
        $this->handleErrors();
1682
1683 2
        return $result;
1684
    }
1685
1686
    /**
1687
     * Exponential Moving Average.
1688
     *
1689
     * @param array $real       Array of real values.
1690
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1691
     *
1692
     * @return array Returns an array with calculated data.
1693
     */
1694 2
    public function ema(array $real, int $timePeriod = 30): array
1695
    {
1696 2
        $result = trader_ema($real, $timePeriod);
1697
1698 2
        $this->handleErrors();
1699
1700 2
        return $result;
1701
    }
1702
1703
    /**
1704
     * Get error code.
1705
     *
1706
     * Get error code of the last operation.
1707
     *
1708
     * @return int Returns the error code identified by one of the ERR_* constants.
1709
     */
1710 2
    public function errno(): int
1711
    {
1712 2
        return trader_errno();
1713
    }
1714
1715
    /**
1716
     * Vector Arithmetic Exp.
1717
     *
1718
     * Calculates e raised to the power of each value in real. Returns an array with the calculated data.
1719
     *
1720
     * @param array $real Array of real values.
1721
     *
1722
     * @return array Returns an array with calculated data.
1723
     */
1724 2
    public function exp(array $real): array
1725
    {
1726 2
        $result = trader_exp($real);
1727
1728 2
        $this->handleErrors();
1729
1730 2
        return $result;
1731
    }
1732
1733
    /**
1734
     * Vector Floor.
1735
     *
1736
     * Calculates the next lowest integer for each value in real and returns the resulting array.
1737
     *
1738
     * @param array $real Array of real values.
1739
     *
1740
     * @return array Returns an array with calculated data.
1741
     */
1742 2
    public function floor(array $real): array
1743
    {
1744 2
        $result = trader_floor($real);
1745
1746 2
        $this->handleErrors();
1747
1748 2
        return $result;
1749
    }
1750
1751
    /**
1752
     * Get compatibility mode.
1753
     *
1754
     * Get compatibility mode which affects the way calculations are done by all the extension functions.
1755
     *
1756
     * @return int Returns the compatibility mode id which can be identified by COMPATIBILITY_* series of constants.
1757
     */
1758 2
    public function get_compat(): int
1759
    {
1760 2
        return trader_get_compat();
1761
    }
1762
1763
    /**
1764
     * Get unstable period.
1765
     *
1766
     * Get unstable period factor for a particular function.
1767
     *
1768
     * @param int $functionId Function ID the factor to be read for. FUNC_UNST_* series of constants should be used.
1769
     *
1770
     * @return int Returns the unstable period factor for the corresponding function.
1771
     */
1772 2
    public function get_unstable_period(int $functionId): int
1773
    {
1774 2
        return trader_get_unstable_period($functionId);
1775
    }
1776
1777
    /**
1778
     * Hilbert Transform - Dominant Cycle Period.
1779
     *
1780
     * @param array $real Array of real values.
1781
     *
1782
     * @return array Returns an array with calculated data.
1783
     */
1784 2
    public function ht_dcperiod(array $real): array
1785
    {
1786 2
        $result = trader_ht_dcperiod($real);
1787
1788 2
        $this->handleErrors();
1789
1790 2
        return $result;
1791
    }
1792
1793
    /**
1794
     * Hilbert Transform - Dominant Cycle Phase.
1795
     *
1796
     * @param array $real Array of real values.
1797
     *
1798
     * @return array Returns an array with calculated data.
1799
     */
1800 2
    public function ht_dcphase(array $real): array
1801
    {
1802 2
        $result = trader_ht_dcphase($real);
1803
1804 2
        $this->handleErrors();
1805
1806 2
        return $result;
1807
    }
1808
1809
    /**
1810
     * Hilbert Transform - Phasor Components.
1811
     *
1812
     * @param array $open  Opening price, array of real values.
1813
     * @param array $close Closing price, array of real values.
1814
     *
1815
     * @return array Returns an array with calculated data.
1816
     */
1817 2
    public function ht_phasor(array $open, array $close): array
1818
    {
1819 2
        $result = trader_ht_phasor($open, $close);
1820
1821 2
        $this->handleErrors();
1822
1823 2
        return $result;
1824
    }
1825
1826
    /**
1827
     * Hilbert Transform - Phasor Components.
1828
     *
1829
     * @param array $open  Opening price, array of real values.
1830
     * @param array $close Closing price, array of real values.
1831
     *
1832
     * @return array Returns an array with calculated data.
1833
     */
1834 2
    public function ht_sine(array $open, array $close): array
1835
    {
1836 2
        $result = trader_ht_sine($open, $close);
1837
1838 2
        $this->handleErrors();
1839
1840 2
        return $result;
1841
    }
1842
1843
    /**
1844
     * Hilbert Transform - Instantaneous Trendline.
1845
     *
1846
     * @param array $real Array of real values.
1847
     *
1848
     * @return array Returns an array with calculated data.
1849
     */
1850 2
    public function ht_trendline(array $real): array
1851
    {
1852 2
        $result = trader_ht_trendline($real);
1853
1854 2
        $this->handleErrors();
1855
1856 2
        return $result;
1857
    }
1858
1859
    /**
1860
     * Hilbert Transform - Trend vs Cycle Mode.
1861
     *
1862
     * @param array $real Array of real values.
1863
     *
1864
     * @return array Returns an array with calculated data.
1865
     */
1866 2
    public function ht_trendmode(array $real): array
1867
    {
1868 2
        $result = trader_ht_trendmode($real);
1869
1870 2
        $this->handleErrors();
1871
1872 2
        return $result;
1873
    }
1874
1875
    /**
1876
     * Kaufman Adaptive Moving Average.
1877
     *
1878
     * @param array $real       Array of real values.
1879
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1880
     *
1881
     * @return array Returns an array with calculated data.
1882
     */
1883 2
    public function kama(array $real, int $timePeriod = 30): array
1884
    {
1885 2
        $result = trader_kama($real, $timePeriod);
1886
1887 2
        $this->handleErrors();
1888
1889 2
        return $result;
1890
    }
1891
1892
    /**
1893
     * Linear Regression Angle.
1894
     *
1895
     * @param array $real       Array of real values.
1896
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1897
     *
1898
     * @return array Returns an array with calculated data.
1899
     */
1900 2
    public function linearreg_angle(array $real, int $timePeriod = 14): array
1901
    {
1902 2
        $result = trader_linearreg_angle($real, $timePeriod);
1903
1904 2
        $this->handleErrors();
1905
1906 2
        return $result;
1907
    }
1908
1909
    /**
1910
     * Linear Regression Angle.
1911
     *
1912
     * @param array $real       Array of real values.
1913
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1914
     *
1915
     * @return array Returns an array with calculated data.
1916
     */
1917 2
    public function linearreg_intercept(array $real, int $timePeriod = 14): array
1918
    {
1919 2
        $result = trader_linearreg_intercept($real, $timePeriod);
1920
1921 2
        $this->handleErrors();
1922
1923 2
        return $result;
1924
    }
1925
1926
    /**
1927
     * Linear Regression Slope.
1928
     *
1929
     * @param array $real       Array of real values.
1930
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1931
     *
1932
     * @return array Returns an array with calculated data.
1933
     */
1934 2
    public function linearreg_slope(array $real, int $timePeriod = 14): array
1935
    {
1936 2
        $result = trader_linearreg_slope($real, $timePeriod);
1937
1938 2
        $this->handleErrors();
1939
1940 2
        return $result;
1941
    }
1942
1943
    /**
1944
     * Linear Regression.
1945
     *
1946
     * @param array $real       Array of real values.
1947
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
1948
     *
1949
     * @return array Returns an array with calculated data.
1950
     */
1951 2
    public function linearreg(array $real, int $timePeriod = 14): array
1952
    {
1953 2
        $result = trader_linearreg($real, $timePeriod);
1954
1955 2
        $this->handleErrors();
1956
1957 2
        return $result;
1958
    }
1959
1960
    /**
1961
     * Vector Log Natural.
1962
     *
1963
     * Calculates the natural logarithm for each value in real and returns the resulting array.
1964
     *
1965
     * @param array $real Array of real values.
1966
     *
1967
     * @return array Returns an array with calculated data.
1968
     */
1969 2
    public function ln(array $real): array
1970
    {
1971 2
        $result = trader_ln($real);
1972
1973 2
        $this->handleErrors();
1974
1975 2
        return $result;
1976
    }
1977
1978
    /**
1979
     * Vector Log10.
1980
     *
1981
     * Calculates the base-10 logarithm for each value in real and returns the resulting array.
1982
     *
1983
     * @param array $real Array of real values.
1984
     *
1985
     * @return array Returns an array with calculated data.
1986
     */
1987 2
    public function log10(array $real): array
1988
    {
1989 2
        $result = trader_log10($real);
1990
1991 2
        $this->handleErrors();
1992
1993 2
        return $result;
1994
    }
1995
1996
    /**
1997
     * Moving average.
1998
     *
1999
     * @param array $real       Array of real values.
2000
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2001
     * @param int   $mAType     Type of Moving Average. MA_TYPE_* series of constants should be used.
2002
     *
2003
     * @return array Returns an array with calculated data.
2004
     */
2005 2
    public function ma(array $real, int $timePeriod = 30, int $mAType = 0): array
2006
    {
2007 2
        $result = trader_ma($real, $timePeriod, $mAType);
2008
2009 2
        $this->handleErrors();
2010
2011 2
        return $result;
2012
    }
2013
2014
    /**
2015
     * Moving Average Convergence/Divergence.
2016
     *
2017
     * @param array $real         Array of real values.
2018
     * @param int   $fastPeriod   Number of period for the fast MA. Valid range from 2 to 100000.
2019
     * @param int   $slowPeriod   Number of period for the slow MA. Valid range from 2 to 100000.
2020
     * @param int   $signalPeriod Smoothing for the signal line (nb of period). Valid range from 1 to 100000.
2021
     *
2022
     * @return array Returns an array with calculated data.
2023
     */
2024 2
    public function macd(
2025
        array $real,
2026
        int $fastPeriod = 12,
2027
        int $slowPeriod = 26,
2028
        int $signalPeriod = 9
2029
    ): array {
2030 2
        $result = trader_macd($real, $fastPeriod, $slowPeriod, $signalPeriod);
2031
2032 2
        $this->handleErrors();
2033
2034 2
        return $result;
2035
    }
2036
2037
    /**
2038
     * Moving Average Convergence/Divergence with controllable Moving Average type.
2039
     *
2040
     * @param array $real         Array of real values.
2041
     * @param int   $fastPeriod   Number of period for the fast MA. Valid range from 2 to 100000.
2042
     * @param int   $fastMAType   Type of Moving Average for fast MA. MA_TYPE_* series of constants should be used.
2043
     * @param int   $slowPeriod   Number of period for the slow MA. Valid range from 2 to 100000.
2044
     * @param int   $slowMAType   Type of Moving Average for fast MA. MA_TYPE_* series of constants should be used.
2045
     * @param int   $signalPeriod Smoothing for the signal line (nb of period). Valid range from 1 to 100000.
2046
     *
2047
     * @return array Returns an array with calculated data.
2048
     */
2049 2
    public function macdext(
2050
        array $real,
2051
        int $fastPeriod = 12,
2052
        int $fastMAType = 0,
2053
        int $slowPeriod = 26,
2054
        int $slowMAType = 0,
2055
        int $signalPeriod = 9
2056
    ): array {
2057 2
        $result = trader_macdext($real, $fastPeriod, $fastMAType, $slowPeriod, $slowMAType, $signalPeriod);
2058
2059 2
        $this->handleErrors();
2060
2061 2
        return $result;
2062
    }
2063
2064
    /**
2065
     * Moving Average Convergence/Divergence Fix 12/26.
2066
     *
2067
     * @param array $real         Array of real values.
2068
     * @param int   $signalPeriod Smoothing for the signal line (nb of period). Valid range from 1 to 100000.
2069
     *
2070
     * @return array Returns an array with calculated data.
2071
     */
2072 2
    public function macdfix(array $real, int $signalPeriod = 9): array
2073
    {
2074 2
        $result = trader_macdfix($real, $signalPeriod);
2075
2076 2
        $this->handleErrors();
2077
2078 2
        return $result;
2079
    }
2080
2081
    /**
2082
     * MESA Adaptive Moving Average.
2083
     *
2084
     * @param array $real      Array of real values.
2085
     * @param float $fastLimit Upper limit use in the adaptive algorithm. Valid range from 0.01 to 0.99.
2086
     * @param float $slowLimit Lower limit use in the adaptive algorithm. Valid range from 0.01 to 0.99.
2087
     *
2088
     * @return array Returns an array with calculated data.
2089
     */
2090 2
    public function mama(array $real, float $fastLimit = 0.5, float $slowLimit = 0.05): array
2091
    {
2092 2
        $result = trader_mama($real, $fastLimit, $slowLimit);
2093
2094 2
        $this->handleErrors();
2095
2096 2
        return $result;
2097
    }
2098
2099
    /**
2100
     * Moving average with variable period
2101
     *
2102
     * @param array $real      Array of real values.
2103
     * @param array $periods   Array of real values.
2104
     * @param int   $minPeriod Value less than minimum will be changed to Minimum period. Valid range from 2 to 100000
2105
     * @param int   $maxPeriod Value higher than maximum will be changed to Maximum period. Valid range from 2 to 100000
2106
     * @param int   $mAType    Type of Moving Average. MA_TYPE_* series of constants should be used.
2107
     *
2108
     * @return array Returns an array with calculated data.
2109
     */
2110 2
    public function mavp(
2111
        array $real,
2112
        array $periods,
2113
        int $minPeriod = 2,
2114
        int $maxPeriod = 30,
2115
        int $mAType = 0
2116
    ): array {
2117 2
        $result = trader_mavp($real, $periods, $minPeriod, $maxPeriod, $mAType);
2118
2119 2
        $this->handleErrors();
2120
2121 2
        return $result;
2122
    }
2123
2124
    /**
2125
     * Highest value over a specified period.
2126
     *
2127
     * @param array $real       Array of real values.
2128
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2129
     *
2130
     * @return array Returns an array with calculated data.
2131
     */
2132 2
    public function max(array $real, int $timePeriod = 30): array
2133
    {
2134 2
        $result = trader_max($real, $timePeriod);
2135
2136 2
        $this->handleErrors();
2137
2138 2
        return $result;
2139
    }
2140
2141
    /**
2142
     * Index of highest value over a specified period
2143
     *
2144
     * @param array $real       Array of real values.
2145
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2146
     *
2147
     * @return array Returns an array with calculated data.
2148
     */
2149 2
    public function maxindex(array $real, int $timePeriod = 30): array
2150
    {
2151 2
        $result = trader_maxindex($real, $timePeriod);
2152
2153 2
        $this->handleErrors();
2154
2155 2
        return $result;
2156
    }
2157
2158
    /**
2159
     * Median Price.
2160
     *
2161
     * @param array $high High price, array of real values.
2162
     * @param array $low  Low price, array of real values.
2163
     *
2164
     * @return array Returns an array with calculated data.
2165
     */
2166 2
    public function medprice(array $high, array $low): array
2167
    {
2168 2
        $result = trader_medprice($high, $low);
2169
2170 2
        $this->handleErrors();
2171
2172 2
        return $result;
2173
    }
2174
2175
    /**
2176
     * Money Flow Index.
2177
     *
2178
     * @param array $high       High price, array of real values.
2179
     * @param array $low        Low price, array of real values.
2180
     * @param array $close      Closing price, array of real values.
2181
     * @param array $volume     Volume traded, array of real values.
2182
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2183
     *
2184
     * @return array Returns an array with calculated data.
2185
     */
2186 2
    public function mfi(array $high, array $low, array $close, array $volume, int $timePeriod = 14): array
2187
    {
2188 2
        $result = trader_mfi($high, $low, $close, $volume, $timePeriod);
2189
2190 2
        $this->handleErrors();
2191
2192 2
        return $result;
2193
    }
2194
2195
    /**
2196
     * MidPoint over period.
2197
     *
2198
     * @param array $real       Array of real values.
2199
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2200
     *
2201
     * @return array Returns an array with calculated data.
2202
     */
2203 2
    public function midpoint(array $real, int $timePeriod = 14): array
2204
    {
2205 2
        $result = trader_midpoint($real, $timePeriod);
2206
2207 2
        $this->handleErrors();
2208
2209 2
        return $result;
2210
    }
2211
2212
    /**
2213
     * Midpoint Price over period.
2214
     *
2215
     * @param array $high       High price, array of real values.
2216
     * @param array $low        Low price, array of real values.
2217
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2218
     *
2219
     * @return array Returns an array with calculated data.
2220
     */
2221 2
    public function midprice(array $high, array $low, int $timePeriod = 14)
2222
    {
2223 2
        $result = trader_midprice($high, $low, $timePeriod);
2224
2225 2
        $this->handleErrors();
2226
2227 2
        return $result;
2228
    }
2229
2230
    /**
2231
     * Lowest value over a specified period.
2232
     *
2233
     * @param array $real       Array of real values.
2234
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2235
     *
2236
     * @return array Returns an array with calculated data.
2237
     */
2238 2
    public function min(array $real, int $timePeriod = 30): array
2239
    {
2240 2
        $result = trader_min($real, $timePeriod);
2241
2242 2
        $this->handleErrors();
2243
2244 2
        return $result;
2245
    }
2246
2247
    /**
2248
     * Index of lowest value over a specified period.
2249
     *
2250
     * @param array $real       Array of real values.
2251
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2252
     *
2253
     * @return array Returns an array with calculated data.
2254
     */
2255 2
    public function minindex(array $real, int $timePeriod = 30): array
2256
    {
2257 2
        $result = trader_minindex($real, $timePeriod);
2258
2259 2
        $this->handleErrors();
2260
2261 2
        return $result;
2262
    }
2263
2264
    /**
2265
     * Lowest and highest values over a specified period.
2266
     *
2267
     * @param array $real       Array of real values.
2268
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2269
     *
2270
     * @return array Returns an array with calculated data.
2271
     */
2272 2
    public function minmax(array $real, int $timePeriod = 30): array
2273
    {
2274 2
        $result = trader_minmax($real, $timePeriod);
2275
2276 2
        $this->handleErrors();
2277
2278 2
        return $result;
2279
    }
2280
2281
    /**
2282
     * Indexes of lowest and highest values over a specified period.
2283
     *
2284
     * @param array $real       Array of real values.
2285
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2286
     *
2287
     * @return array Returns an array with calculated data.
2288
     */
2289 2
    public function minmaxindex(array $real, int $timePeriod = 30): array
2290
    {
2291 2
        $result = trader_minmaxindex($real, $timePeriod);
2292
2293 2
        $this->handleErrors();
2294
2295 2
        return $result;
2296
    }
2297
2298
    /**
2299
     * Minus Directional Indicator.
2300
     *
2301
     * @param array $high       High price, array of real values.
2302
     * @param array $low        Low price, array of real values.
2303
     * @param array $close      Closing price, array of real values.
2304
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2305
     *
2306
     * @return array Returns an array with calculated data.
2307
     */
2308 2
    public function minus_di(array $high, array $low, array $close, int $timePeriod = 14): array
2309
    {
2310 2
        $result = trader_minus_di($high, $low, $close, $timePeriod);
2311
2312 2
        $this->handleErrors();
2313
2314 2
        return $result;
2315
    }
2316
2317
    /**
2318
     * Minus Directional Movement.
2319
     *
2320
     * @param array $high       High price, array of real values.
2321
     * @param array $low        Low price, array of real values.
2322
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2323
     *
2324
     * @return array Returns an array with calculated data.
2325
     */
2326 2
    public function minus_dm(array $high, array $low, int $timePeriod = 14): array
2327
    {
2328 2
        $result = trader_minus_dm($high, $low, $timePeriod);
2329
2330 2
        $this->handleErrors();
2331
2332 2
        return $result;
2333
    }
2334
2335
    /**
2336
     * Momentum.
2337
     *
2338
     * @param array $real       Array of real values.
2339
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2340
     *
2341
     * @return array Returns an array with calculated data.
2342
     */
2343 2
    public function mom(array $real, int $timePeriod = 10): array
2344
    {
2345 2
        $result = trader_mom($real, $timePeriod);
2346
2347 2
        $this->handleErrors();
2348
2349 2
        return $result;
2350
    }
2351
2352
    /**
2353
     * Vector Arithmetic Mult.
2354
     *
2355
     * Calculates the vector dot product of real0 with real1 and returns the resulting vector.
2356
     *
2357
     * @param array $real0 Array of real values.
2358
     * @param array $real1 Array of real values.
2359
     *
2360
     * @return array Returns an array with calculated data.
2361
     */
2362 2
    public function mult(array $real0, array $real1): array
2363
    {
2364 2
        $result = trader_mult($real0, $real1);
2365
2366 2
        $this->handleErrors();
2367
2368 2
        return $result;
2369
    }
2370
2371
    /**
2372
     * Normalized Average True Range.
2373
     *
2374
     * @param array $high       High price, array of real values.
2375
     * @param array $low        Low price, array of real values.
2376
     * @param array $close      Closing price, array of real values.
2377
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2378
     *
2379
     * @return array Returns an array with calculated data.
2380
     */
2381 2
    public function natr(array $high, array $low, array $close, int $timePeriod = 14): array
2382
    {
2383 2
        $result = trader_natr($high, $low, $close, $timePeriod);
2384
2385 2
        $this->handleErrors();
2386
2387 2
        return $result;
2388
    }
2389
2390
    /**
2391
     * On Balance Volume.
2392
     *
2393
     * @param array $real   Array of real values.
2394
     * @param array $volume Volume traded, array of real values.
2395
     *
2396
     * @return array Returns an array with calculated data.
2397
     */
2398 2
    public function obv(array $real, array $volume): array
2399
    {
2400 2
        $result = trader_obv($real, $volume);
2401
2402 2
        $this->handleErrors();
2403
2404 2
        return $result;
2405
    }
2406
2407
    /**
2408
     * Plus Directional Indicator.
2409
     *
2410
     * @param array $high       High price, array of real values.
2411
     * @param array $low        Low price, array of real values.
2412
     * @param array $close      Closing price, array of real values.
2413
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2414
     *
2415
     * @return array Returns an array with calculated data.
2416
     */
2417 2
    public function plus_di(array $high, array $low, array $close, int $timePeriod = 14): array
2418
    {
2419 2
        $result = trader_plus_di($high, $low, $close, $timePeriod);
2420
2421 2
        $this->handleErrors();
2422
2423 2
        return $result;
2424
    }
2425
2426
    /**
2427
     * Plus Directional Movement.
2428
     *
2429
     * @param array $high       High price, array of real values.
2430
     * @param array $low        Low price, array of real values.
2431
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2432
     *
2433
     * @return array Returns an array with calculated data.
2434
     */
2435 2
    public function plus_dm(array $high, array $low, int $timePeriod = 14): array
2436
    {
2437 2
        $result = trader_plus_dm($high, $low, $timePeriod);
2438
2439 2
        $this->handleErrors();
2440
2441 2
        return $result;
2442
    }
2443
2444
    /**
2445
     * Percentage Price Oscillator.
2446
     *
2447
     * @param array $real       Array of real values.
2448
     * @param int   $fastPeriod Number of period for the fast MA. Valid range from 2 to 100000.
2449
     * @param int   $slowPeriod Number of period for the slow MA. Valid range from 2 to 100000.
2450
     * @param int   $mAType     Type of Moving Average. MA_TYPE_* series of constants should be used.
2451
     *
2452
     * @return array Returns an array with calculated data.
2453
     */
2454 2
    public function ppo(array $real, int $fastPeriod = 12, int $slowPeriod = 26, int $mAType = 0): array
2455
    {
2456 2
        $result = trader_ppo($real, $fastPeriod, $slowPeriod, $mAType);
2457
2458 2
        $this->handleErrors();
2459
2460 2
        return $result;
2461
    }
2462
2463
    /**
2464
     * Rate of change : ((price/prevPrice)-1)*100.
2465
     *
2466
     * @param array $real       Array of real values.
2467
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2468
     *
2469
     * @return array Returns an array with calculated data.
2470
     */
2471 2
    public function roc(array $real, int $timePeriod = 10): array
2472
    {
2473 2
        $result = trader_roc($real, $timePeriod);
2474
2475 2
        $this->handleErrors();
2476
2477 2
        return $result;
2478
    }
2479
2480
    /**
2481
     * Rate of change Percentage: (price-prevPrice)/prevPrice.
2482
     *
2483
     * @param array $real       Array of real values.
2484
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2485
     *
2486
     * @return array Returns an array with calculated data.
2487
     */
2488 2
    public function rocp(array $real, int $timePeriod = 10): array
2489
    {
2490 2
        $result = trader_rocp($real, $timePeriod);
2491
2492 2
        $this->handleErrors();
2493
2494 2
        return $result;
2495
    }
2496
2497
    /**
2498
     * Rate of change ratio 100 scale: (price/prevPrice)*100.
2499
     *
2500
     * @param array $real       Array of real values.
2501
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2502
     *
2503
     * @return array Returns an array with calculated data.
2504
     */
2505 2
    public function rocr100(array $real, int $timePeriod = 10): array
2506
    {
2507 2
        $result = trader_rocr100($real, $timePeriod);
2508
2509 2
        $this->handleErrors();
2510
2511 2
        return $result;
2512
    }
2513
2514
    /**
2515
     * Rate of change ratio: (price/prevPrice).
2516
     *
2517
     * @param array $real       Array of real values.
2518
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2519
     *
2520
     * @return array Returns an array with calculated data.
2521
     */
2522 2
    public function rocr(array $real, int $timePeriod = 10): array
2523
    {
2524 2
        $result = trader_rocr($real, $timePeriod);
2525
2526 2
        $this->handleErrors();
2527
2528 2
        return $result;
2529
    }
2530
2531
    /**
2532
     * Relative Strength Index.
2533
     *
2534
     * @param array $real       Array of real values.
2535
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2536
     *
2537
     * @return array Returns an array with calculated data.
2538
     */
2539 2
    public function rsi(array $real, int $timePeriod = 14): array
2540
    {
2541 2
        $result = trader_rsi($real, $timePeriod);
2542
2543 2
        $this->handleErrors();
2544
2545 2
        return $result;
2546
    }
2547
2548
    /**
2549
     * Parabolic SAR.
2550
     *
2551
     * @param array $high         High price, array of real values.
2552
     * @param array $low          Low price, array of real values.
2553
     * @param float $acceleration Acceleration Factor used up to the Maximum value. Valid range from 0 to REAL_MAX.
2554
     * @param float $maximum      Acceleration Factor Maximum value. Valid range from 0 to REAL_MAX.
2555
     *
2556
     * @return array Returns an array with calculated data.
2557
     */
2558 2
    public function sar(array $high, array $low, float $acceleration = 0.02, float $maximum = 0.2): array
2559
    {
2560 2
        $result = trader_sar($high, $low, $acceleration, $maximum);
2561
2562 2
        $this->handleErrors();
2563
2564 2
        return $result;
2565
    }
2566
2567
    /**
2568
     * Parabolic SAR - Extended.
2569
     *
2570
     * @param array $high                  High price, array of real values.
2571
     * @param array $low                   Low price, array of real values.
2572
     * @param float $startValue            Start value and direction. 0 for Auto, >0 for Long, <0 for Short. Valid range from REAL_MIN to REAL_MAX.
2573
     * @param float $offsetOnReverse       Percent offset added/removed to initial stop on short/long reversal. Valid range from 0 to REAL_MAX.
2574
     * @param float $accelerationInitLong  Acceleration Factor initial value for the Long direction. Valid range from 0 to REAL_MAX.
2575
     * @param float $accelerationLong      Acceleration Factor for the Long direction. Valid range from 0 to REAL_MAX.
2576
     * @param float $accelerationMaxLong   Acceleration Factor maximum value for the Long direction. Valid range from 0 to REAL_MAX.
2577
     * @param float $accelerationInitShort Acceleration Factor initial value for the Short direction. Valid range from 0 to REAL_MAX.
2578
     * @param float $accelerationShort     Acceleration Factor for the Short direction. Valid range from 0 to REAL_MAX.
2579
     * @param float $accelerationMaxShort  Acceleration Factor maximum value for the Short direction. Valid range from 0 to REAL_MAX.
2580
     *
2581
     * @return array Returns an array with calculated data.
2582
     */
2583 2
    public function sarext(
2584
        array $high,
2585
        array $low,
2586
        float $startValue = 0.0,
2587
        float $offsetOnReverse = 0.0,
2588
        float $accelerationInitLong = 0.02,
2589
        float $accelerationLong = 0.02,
2590
        float $accelerationMaxLong = 0.2,
2591
        float $accelerationInitShort = 0.02,
2592
        float $accelerationShort = 0.02,
2593
        float $accelerationMaxShort = 0.2
2594
    ): array {
2595 2
        $result = trader_sarext(
2596 2
            $high,
2597 2
            $low,
2598 2
            $startValue,
2599 2
            $offsetOnReverse,
2600 2
            $accelerationInitLong,
2601 2
            $accelerationLong,
2602 2
            $accelerationMaxLong,
2603 2
            $accelerationInitShort,
2604 2
            $accelerationShort,
2605 2
            $accelerationMaxShort
2606
        );
2607
2608 2
        $this->handleErrors();
2609
2610 2
        return $result;
2611
    }
2612
2613
    /**
2614
     * Set compatibility mode.
2615
     *
2616
     * Set compatibility mode which will affect the way calculations are done by all the extension functions.
2617
     *
2618
     * @param int $compatId Compatibility Id. COMPATIBILITY_* series of constants should be used.
2619
     */
2620 2
    public function set_compat(int $compatId)
2621
    {
2622 2
        trader_set_compat($compatId);
2623 2
    }
2624
2625
    /**
2626
     * Set unstable period.
2627
     *
2628
     * Influences unstable period factor for functions, which are sensible to it. More information about unstable periods can be found on the » TA-Lib API documentation page.
2629
     *
2630
     * @param int $functionId Function ID the factor should be set for. FUNC_UNST_* constant series can be used to affect the corresponding function.
2631
     * @param int $timePeriod Unstable period value.
2632
     */
2633 2
    public function set_unstable_period(int $functionId, int $timePeriod)
2634
    {
2635 2
        trader_set_unstable_period($functionId, $timePeriod);
2636 2
    }
2637
2638
    /**
2639
     * Vector Trigonometric Sin.
2640
     *
2641
     * Calculates the sine for each value in real and returns the resulting array.
2642
     *
2643
     * @param array $real Array of real values.
2644
     *
2645
     * @return array Returns an array with calculated data.
2646
     */
2647 2
    public function sin(array $real): array
2648
    {
2649 2
        $result = trader_sin($real);
2650
2651 2
        $this->handleErrors();
2652
2653 2
        return $result;
2654
    }
2655
2656
    /**
2657
     * Vector Trigonometric Sinh.
2658
     *
2659
     * Calculates the hyperbolic sine for each value in real and returns the resulting array.
2660
     *
2661
     * @param array $real Array of real values.
2662
     *
2663
     * @return array Returns an array with calculated data.
2664
     */
2665 2
    public function sinh(array $real): array
2666
    {
2667 2
        $result = trader_sinh($real);
2668
2669 2
        $this->handleErrors();
2670
2671 2
        return $result;
2672
    }
2673
2674
    /**
2675
     * Simple Moving Average.
2676
     *
2677
     * @param array $real       Array of real values.
2678
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2679
     *
2680
     * @return array Returns an array with calculated data.
2681
     */
2682 2
    public function sma(array $real, int $timePeriod = 30): array
2683
    {
2684 2
        $result = trader_sma($real, $timePeriod);
2685
2686 2
        $this->handleErrors();
2687
2688 2
        return $result;
2689
    }
2690
2691
    /**
2692
     * Vector Square Root.
2693
     *
2694
     * Calculates the square root of each value in real and returns the resulting array.
2695
     *
2696
     * @param array $real Array of real values.
2697
     *
2698
     * @return array Returns an array with calculated data.
2699
     */
2700 2
    public function sqrt(array $real): array
2701
    {
2702 2
        $result = trader_sqrt($real);
2703
2704 2
        $this->handleErrors();
2705
2706 2
        return $result;
2707
    }
2708
2709
    /**
2710
     * Standard Deviation.
2711
     *
2712
     * @param array $real       Array of real values.
2713
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2714
     * @param float $nbDev      Number of deviations
2715
     *
2716
     * @return array Returns an array with calculated data.
2717
     */
2718 2
    public function stddev(array $real, int $timePeriod = 5, float $nbDev = 1.0): array
2719
    {
2720 2
        $result = trader_stddev($real, $timePeriod, $nbDev);
2721
2722 2
        $this->handleErrors();
2723
2724 2
        return $result;
2725
    }
2726
2727
    /**
2728
     * Stochastic.
2729
     *
2730
     * @param array $high         High price, array of real values.
2731
     * @param array $low          Low price, array of real values.
2732
     * @param array $close        Time period for building the Fast-K line. Valid range from 1 to 100000.
2733
     * @param int   $fastK_Period Time period for building the Fast-K line. Valid range from 1 to 100000.
2734
     * @param int   $slowK_Period Smoothing for making the Slow-K line. Valid range from 1 to 100000, usually set to 3.
2735
     * @param int   $slowK_MAType Type of Moving Average for Slow-K. MA_TYPE_* series of constants should be used.
2736
     * @param int   $slowD_Period Smoothing for making the Slow-D line. Valid range from 1 to 100000.
2737
     * @param int   $slowD_MAType Type of Moving Average for Slow-D. MA_TYPE_* series of constants should be used.
2738
     *
2739
     * @return array Returns an array with calculated data.
2740
     */
2741 2
    public function stoch(
2742
        array $high,
2743
        array $low,
2744
        array $close,
2745
        int $fastK_Period = 5,
2746
        int $slowK_Period = 3,
2747
        int $slowK_MAType = 0,
2748
        int $slowD_Period = 3,
2749
        int $slowD_MAType = 0
2750
    ): array {
2751 2
        $result = trader_stoch(
2752 2
            $high,
2753 2
            $low,
2754 2
            $close,
2755 2
            $fastK_Period,
2756 2
            $slowK_Period,
2757 2
            $slowK_MAType,
2758 2
            $slowD_Period,
2759 2
            $slowD_MAType
2760
        );
2761
2762 2
        $this->handleErrors();
2763
2764 2
        return $result;
2765
    }
2766
2767
    /**
2768
     * Stochastic Fast.
2769
     *
2770
     * @param array $high         High price, array of real values.
2771
     * @param array $low          Low price, array of real values.
2772
     * @param array $close        Time period for building the Fast-K line. Valid range from 1 to 100000.
2773
     * @param int   $fastK_Period Time period for building the Fast-K line. Valid range from 1 to 100000.
2774
     * @param int   $fastD_Period Smoothing for making the Fast-D line. Valid range from 1 to 100000, usually set to 3.
2775
     * @param int   $fastD_MAType Type of Moving Average for Fast-D. MA_TYPE_* series of constants should be used.
2776
     *
2777
     * @return array Returns an array with calculated data.
2778
     */
2779 2
    public function stochf(
2780
        array $high,
2781
        array $low,
2782
        array $close,
2783
        int $fastK_Period = 5,
2784
        int $fastD_Period = 3,
2785
        int $fastD_MAType = 0
2786
    ): array {
2787 2
        $result = trader_stochf(
2788 2
            $high,
2789 2
            $low,
2790 2
            $close,
2791 2
            $fastK_Period,
2792 2
            $fastD_Period,
2793 2
            $fastD_MAType
2794
        );
2795
2796 2
        $this->handleErrors();
2797
2798 2
        return $result;
2799
    }
2800
2801
    /**
2802
     * Stochastic Relative Strength Index.
2803
     *
2804
     * @param array $real         Array of real values.
2805
     * @param int   $timePeriod   Number of period. Valid range from 2 to 100000.
2806
     * @param int   $fastK_Period Time period for building the Fast-K line. Valid range from 1 to 100000.
2807
     * @param int   $fastD_Period Smoothing for making the Fast-D line. Valid range from 1 to 100000, usually set to 3.
2808
     * @param int   $fastD_MAType Type of Moving Average for Fast-D. MA_TYPE_* series of constants should be used.
2809
     *
2810
     * @return array Returns an array with calculated data.
2811
     */
2812 2
    public function stochrsi(
2813
        array $real,
2814
        int $timePeriod = 14,
2815
        int $fastK_Period = 5,
2816
        int $fastD_Period = 3,
2817
        int $fastD_MAType = 0
2818
    ): array {
2819 2
        $result = trader_stochrsi(
2820 2
            $real,
2821 2
            $timePeriod,
2822 2
            $fastK_Period,
2823 2
            $fastD_Period,
2824 2
            $fastD_MAType
2825
        );
2826
2827 2
        $this->handleErrors();
2828
2829 2
        return $result;
2830
    }
2831
2832
    /**
2833
     * Vector Arithmetic Subtraction.
2834
     *
2835
     * Calculates the vector subtraction of real1 from real0 and returns the resulting vector.
2836
     *
2837
     * @param array $real0 Array of real values.
2838
     * @param array $real1 Array of real values.
2839
     *
2840
     * @return array Returns an array with calculated data.
2841
     */
2842 2
    public function sub(array $real0, array $real1): array
2843
    {
2844 2
        $result = trader_sub($real0, $real1);
2845
2846 2
        $this->handleErrors();
2847
2848 2
        return $result;
2849
    }
2850
2851
    /**
2852
     * Summation.
2853
     *
2854
     * @param array $real       Array of real values.
2855
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2856
     *
2857
     * @return array Returns an array with calculated data.
2858
     */
2859 2
    public function sum(array $real, int $timePeriod = 30): array
2860
    {
2861 2
        $result = trader_sum($real, $timePeriod);
2862
2863 2
        $this->handleErrors();
2864
2865 2
        return $result;
2866
    }
2867
2868
    /**
2869
     * Triple Exponential Moving Average (T3).
2870
     *
2871
     * @param array $real       Array of real values.
2872
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2873
     * @param float $vFactor    Volume Factor. Valid range from 1 to 0.
2874
     *
2875
     * @return array Returns an array with calculated data.
2876
     */
2877 2
    public function t3(array $real, int $timePeriod = 5, float $vFactor = 0.7): array
2878
    {
2879 2
        $result = trader_t3($real, $timePeriod, $vFactor);
2880
2881 2
        $this->handleErrors();
2882
2883 2
        return $result;
2884
    }
2885
2886
    /**
2887
     * Vector Trigonometric Tan.
2888
     *
2889
     * Calculates the tangent for each value in real and returns the resulting array.
2890
     *
2891
     * @param array $real Array of real values.
2892
     *
2893
     * @return array Returns an array with calculated data.
2894
     */
2895 2
    public function tan(array $real): array
2896
    {
2897 2
        $result = trader_tan($real);
2898
2899 2
        $this->handleErrors();
2900
2901 2
        return $result;
2902
    }
2903
2904
    /**
2905
     * Vector Trigonometric Tanh.
2906
     *
2907
     * Calculates the hyperbolic tangent for each value in real and returns the resulting array.
2908
     *
2909
     * @param array $real Array of real values.
2910
     *
2911
     * @return array Returns an array with calculated data.
2912
     */
2913 2
    public function tanh(array $real): array
2914
    {
2915 2
        $result = trader_tanh($real);
2916
2917 2
        $this->handleErrors();
2918
2919 2
        return $result;
2920
    }
2921
2922
    /**
2923
     * Triple Exponential Moving Average.
2924
     *
2925
     * @param array $real       Array of real values.
2926
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2927
     *
2928
     * @return array Returns an array with calculated data.
2929
     */
2930 2
    public function tema(array $real, int $timePeriod = 30): array
2931
    {
2932 2
        $result = trader_tema($real, $timePeriod);
2933
2934 2
        $this->handleErrors();
2935
2936 2
        return $result;
2937
    }
2938
2939
    /**
2940
     * True Range.
2941
     *
2942
     * @param array $high  High price, array of real values.
2943
     * @param array $low   Low price, array of real values.
2944
     * @param array $close Closing price, array of real values.
2945
     *
2946
     * @return array Returns an array with calculated data.
2947
     */
2948 2
    public function trange(array $high, array $low, array $close): array
2949
    {
2950 2
        $result = trader_trange($high, $low, $close);
2951
2952 2
        $this->handleErrors();
2953
2954 2
        return $result;
2955
    }
2956
2957
    /**
2958
     * Triangular Moving Average.
2959
     *
2960
     * @param array $real       Array of real values.
2961
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2962
     *
2963
     * @return array Returns an array with calculated data.
2964
     */
2965 2
    public function trima(array $real, int $timePeriod = 30): array
2966
    {
2967 2
        $result = trader_trima($real, $timePeriod);
2968
2969 2
        $this->handleErrors();
2970
2971 2
        return $result;
2972
    }
2973
2974
    /**
2975
     * 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA.
2976
     *
2977
     * @param array $real       Array of real values.
2978
     * @param int   $timePeriod [OPTIONAL] [DEFAULT 30] Number of period. Valid range from 2 to 100000.
2979
     *
2980
     * @return array Returns an array with calculated data.
2981
     */
2982 2
    public function trix(array $real, int $timePeriod = 30): array
2983
    {
2984 2
        $result = trader_trix($real, $timePeriod);
2985
2986 2
        $this->handleErrors();
2987
2988 2
        return $result;
2989
    }
2990
2991
    /**
2992
     * Time Series Forecast.
2993
     *
2994
     * @param array $real       Array of real values.
2995
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
2996
     *
2997
     * @return array Returns an array with calculated data.
2998
     */
2999 2
    public function tsf(array $real, int $timePeriod = 14): array
3000
    {
3001 2
        $result = trader_tsf($real, $timePeriod);
3002
3003 2
        $this->handleErrors();
3004
3005 2
        return $result;
3006
    }
3007
3008
    /**
3009
     * Typical Price.
3010
     *
3011
     * @param array $high  High price, array of real values.
3012
     * @param array $low   Low price, array of real values.
3013
     * @param array $close Closing price, array of real values.
3014
     *
3015
     * @return array Returns an array with calculated data.
3016
     */
3017 2
    public function typprice(array $high, array $low, array $close): array
3018
    {
3019 2
        $result = trader_typprice($high, $low, $close);
3020
3021 2
        $this->handleErrors();
3022
3023 2
        return $result;
3024
    }
3025
3026
    /**
3027
     * Ultimate Oscillator.
3028
     *
3029
     * @param array $high        High price, array of real values.
3030
     * @param array $low         Low price, array of real values.
3031
     * @param array $close       Closing price, array of real values.
3032
     * @param int   $timePeriod1 Number of bars for 1st period. Valid range from 1 to 100000.
3033
     * @param int   $timePeriod2 Number of bars for 2nd period. Valid range from 1 to 100000.
3034
     * @param int   $timePeriod3 Number of bars for 3rd period. Valid range from 1 to 100000.
3035
     *
3036
     * @return array Returns an array with calculated data.
3037
     */
3038 2
    public function ultosc(
3039
        array $high,
3040
        array $low,
3041
        array $close,
3042
        int $timePeriod1 = 7,
3043
        int $timePeriod2 = 14,
3044
        int $timePeriod3 = 28
3045
    ): array {
3046 2
        $result = trader_ultosc($high, $low, $close, $timePeriod1, $timePeriod2, $timePeriod3);
3047
3048 2
        $this->handleErrors();
3049
3050 2
        return $result;
3051
    }
3052
3053
    /**
3054
     * Variance.
3055
     *
3056
     * @param array $real       Array of real values.
3057
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
3058
     * @param float $nbDev      Number of deviations
3059
     *
3060
     * @return array Returns an array with calculated data.
3061
     */
3062 2
    public function var(array $real, int $timePeriod = 5, float $nbDev = 1.0): array
3063
    {
3064 2
        $result = trader_var($real, $timePeriod, $nbDev);
3065
3066 2
        $this->handleErrors();
3067
3068 2
        return $result;
3069
    }
3070
3071
    /**
3072
     * Weighted Close Price.
3073
     *
3074
     * @param array $high  High price, array of real values.
3075
     * @param array $low   Low price, array of real values.
3076
     * @param array $close Closing price, array of real values.
3077
     *
3078
     * @return array Returns an array with calculated data.
3079
     */
3080 2
    public function wclprice(array $high, array $low, array $close): array
3081
    {
3082 2
        $result = trader_wclprice($high, $low, $close);
3083
3084 2
        $this->handleErrors();
3085
3086 2
        return $result;
3087
    }
3088
3089
    /**
3090
     * Williams' %R.
3091
     *
3092
     * @param array $high       High price, array of real values.
3093
     * @param array $low        Low price, array of real values.
3094
     * @param array $close      Closing price, array of real values.
3095
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
3096
     *
3097
     * @return array Returns an array with calculated data.
3098
     */
3099 2
    public function willr(array $high, array $low, array $close, int $timePeriod = 14): array
3100
    {
3101 2
        $result = trader_willr($high, $low, $close, $timePeriod);
3102
3103 2
        $this->handleErrors();
3104
3105 2
        return $result;
3106
    }
3107
3108
    /**
3109
     * Weighted Moving Average.
3110
     *
3111
     * @param array $real       Array of real values.
3112
     * @param int   $timePeriod Number of period. Valid range from 2 to 100000.
3113
     *
3114
     * @return array Returns an array with calculated data.
3115
     */
3116 4
    public function wma(array $real, int $timePeriod = 30): array
3117
    {
3118 4
        $result = trader_wma($real, $timePeriod);
3119
3120 4
        $this->handleErrors();
3121
3122 2
        return $result;
3123
    }
3124
3125
    /**
3126
     * Handle errors.
3127
     *
3128
     * @throws \BadFunctionCallException
3129
     */
3130
    abstract protected function handleErrors();
3131
}
3132