**"TA"**

General technical analysis functions

**div_bull(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, no_broken, pW , iW , hidW, regW)**

Test for bullish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot low to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot low to be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot low to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot low (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

**div_bear(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, no_broken, pW , iW , hidW, regW)**

Test for bearish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot high to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot highto be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot high (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

Release Notes:
v2

Return absolute value of degree to handle series with negative values.

Return absolute value of degree to handle series with negative values.

- Added support for lookback # of pivots for div_bull() and div_bear()

- Fixed divergence degree calculation when indicator series has negative values

- Changed default pivot lengths for div_bull() and div_bear()

Updated:

**div_bull(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bullish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot low to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot low to be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot low to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot low (optional int)

**lookback_pivs**: Pivots back to search for prior pivot low (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

**div_bear(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bearish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot high to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot highto be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot high (optional int)

**lookback_pivs**: Pivots back to search for prior pivot high (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

Changed divergence strength/degree calculation to use the angle of the divergence line divided by 90 degrees (as opposed to the % change in the indicator value). This will keep the unweighted strength value between 0 and 1 for the indicator portion of the calculation, which is desirable because different indicator series can have wildly different ranges.

Added chk_prev_bar flag as an argument to the divergence checks, which will check for divergence using the indicator value from the prior bar. This is necessary in some cases where the indicator is using a different price source than the one passed into the divergence function.

Updated:

**div_bull(pS, iS, chk_prev_bar, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bullish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**chk_prev_bar**: Flag to check for divergence using the indicator value from the prior bar. This is necessary in some cases where the indicator is using a different price source than the one passed in pS.

**cp_length_after**: Bars after current (divergent) pivot low to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot low to be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot low to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot low (optional int)

**lookback_pivs**: Pivots back to search for prior pivot low (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

**div_bear(pS, iS, chk_prev_bar, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bearish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**chk_prev_bar**: Flag to check for divergence using the indicator value from the prior bar. This is necessary in some cases where the indicator is using a different price source than the one passed in pS.

**cp_length_after**: Bars after current (divergent) pivot high to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot highto be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot high (optional int)

**lookback_pivs**: Pivots back to search for prior pivot high (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

When calculating the divergence strength on an indicator, Scale the X coordinates to a range similar to the Y scale (X and Y scales should be on the same order of magnitude for the angle value to be meaningful. e.g. if ΔY is 10,000,000 and ΔX is 12, the angle will always be very nearly 90 degrees, which makes for a meaningless value)

Adjusted multiplier in iDelta() to use the average Y value rather than the difference of the two Y values.

Now calculating divergence strength in terms of the standard deviation.

= Δ price/StDev + Δ indicator/stDev (multiplied by specified weights)

Release Notes:
v9

Changes to check more thoroughly for pivots on indicator series.

Updated:

**div_bull(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bullish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot low to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot low to be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot low to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot low (optional int)

**lookback_pivs**: Pivots back to search for prior pivot low (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

**div_bear(pS, iS, cp_length_after, cp_length_before, pivot_length, lookback, lookback_pivs, no_broken, pW, iW, hidW, regW)**

Test for bearish divergence

Parameters:

**pS**: Price series (float)

**iS**: Indicator series (float)

**cp_length_after**: Bars after current (divergent) pivot high to be considered a valid pivot (optional int)

**cp_length_before**: Bars before current (divergent) pivot highto be considered a valid pivot (optional int)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**lookback**: Bars back to search for prior pivot high (optional int)

**lookback_pivs**: Pivots back to search for prior pivot high (optional int)

**no_broken**: Flag to only consider divergence valid if the pivot-to-pivot trendline is unbroken (optional bool)

**pW**: Weight of change in price, used in degree of divergence calculation (optional float)

**iW**: Weight of change in indicator, used in degree of divergence calculation (optional float)

**hidW**: Weight of hidden divergence, used in degree of divergence calculation (optional float)

**regW**: Weight of regular divergence, used in degree of divergence calculation (optional float)

Returns:

flag = true if divergence exists (bool)

degree = degree (strength) of divergence (float)

type = 1 = regular, 2 = hidden (int)

lx1 = x coordinate 1 (int)

ly1 = y coordinate 1 (float)

lx2 = x coordinate 2 (int)

ly2 = y coordinate 2 (float)

div_bull() and div_bear() - adjusted indicator pivot checking to be more inclusive.

Added function for validating harmonic XABCD patterns: harmonic_validate_xabcd()

Added:

**harmonic_validate_xabcd(xX, xY, aX, aY, bX, bY, cX, cY, dX, dY, pErr, pAsym, pivot_length, gart, bat, bfly, crab)**

Validate harmonic XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**dX**: X coordinate of point D (int)

**dY**: Y coordinate of point D (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**gart**: Flag to validate Gartley pattern (bool)

**bat**: Flag to validate Bat pattern (bool)

**bfly**: Flag to validate Butterfly pattern (bool)

**crab**: Flag to validate Crab pattern (bool)

Returns:

flag = true if valid harmonic

t1 = true if valid gartley

t2 = true if valid bat

t3 = true if valid butterfly

t4 = true if valid crab

Added pattern_xabcd() - determine if an XABCD pattern has just completed.

Added:

**pattern_xabcd(x_is_low, pivot_length, source)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Added:

**pat_xabcd(x_is_low, pivot_length, source)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Removed:

**pattern_xabcd(x_is_low, pivot_length, source)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Release Notes:
v15

Fixed point D validation for harmonic XABCD pattern

Fixed point D validation for harmonic XABCD pattern

Release Notes:
v16

Fixed harmonic XABCD ΔX symmetry validation

Fixed harmonic XABCD ΔX symmetry validation

Added:

**harmonic_xabcd_validate(xX, xY, aX, aY, bX, bY, cX, cY, dX, dY, pErr, pAsym, pivot_length, gart, bat, bfly, crab)**

Validate harmonic XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**dX**: X coordinate of point D (int)

**dY**: Y coordinate of point D (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**gart**: Flag to validate Gartley pattern (bool)

**bat**: Flag to validate Bat pattern (bool)

**bfly**: Flag to validate Butterfly pattern (bool)

**crab**: Flag to validate Crab pattern (bool)

Returns:

flag = true if valid harmonic

t1 = true if valid gartley

t2 = true if valid bat

t3 = true if valid butterfly

t4 = true if valid crab

**harmonic_xabcd_prz(type, xY, aY, bY, cY)**

Get the potential reversal zone (PRZ) levels of a harmonic XABCD pattern

Parameters:

**type**: Harmonic pattern type (int - 1 = Gartley, 2 = Bat, 3 = Butterfly, 4 = Crab)

**xY**: Y coordinate of point X (float)

**aY**: Y coordinate of point A (float)

**bY**: Y coordinate of point B (float)

**cY**: Y coordinate of point C (float)

Returns:

bc_u = nearest BC retracement/extension level (nearest to point C)

bc_l = farthest BC retracement/extension level (nearest to point C)

xa_u = nearest XA retracement/extension level (or the only XA level, if applicable)

xa_l = farthest XA retracement/extension level (or na if not applicable)

Removed:

**harmonic_validate_xabcd(xX, xY, aX, aY, bX, bY, cX, cY, dX, dY, pErr, pAsym, pivot_length, gart, bat, bfly, crab)**

Validate harmonic XABCD pattern

Release Notes:
v18

Fixed harmonic retracement validation

Fixed harmonic retracement validation

Added:

**harmonic_xabcd_validateIncomplete(xX, xY, aX, aY, bX, bY, cX, cY, pErr, pAsym, pivot_length, gart, bat, bfly, crab)**

Validate the first 3 legs of a harmonic XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**gart**: Flag to validate Gartley pattern (bool)

**bat**: Flag to validate Bat pattern (bool)

**bfly**: Flag to validate Butterfly pattern (bool)

**crab**: Flag to validate Crab pattern (bool)

Returns:

flag = true if valid harmonic

t1 = true if valid gartley

t2 = true if valid bat

t3 = true if valid butterfly

t4 = true if valid crab

Fixed bug with pat_axbcd() algorithm, checking wrong pivot looking for point C in bearish patterns.

Fixed bug in pat_xabcd() where intermediate low wasn't being detected between points C and D

Added:

**harmonic_xabcd_przClosest(l1, l2, l3, l4)**

Get the confluent PRZ levels (i.e. the two closest PRZ levels)

Order of arguments does not matter

Parameters:

**l1**: level 1 (float)

**l2**: level 2 (float)

**l3**: level 3 (float)

**l4**: level 4 (optional, float)

Returns:

lL = lower confluent PRZ level

lH = higher confluent PRZ level

Added:

**success(entry, stop, t1, t2)**

Determine if trade is successful

Parameters:

**entry**: Entry bar index (int)

**stop**: Stop level (float)

**t1**: Target 1 level (float)

**t2**: Target 2 level (float)

Returns:

Added:

**harmonic_xabcd_rAndE(type, l, l1, l2)**

Get the ratio of two pattern legs, and the percent error from the theoretical harmonic ratio

Order of arguments does not matter

Parameters:

**type**: Harmonic pattern type (int - 1 = Gartley, 2 = Bat, 3 = Butterfly, 4 = Crab)

**l**: Leg ID ("xab", "abc", "bcd", or "xad") (string)

**l1**: Line 1 height (float)

**l2**: Line 2 height (float)

Returns:

Added:

**harmonic_xabcd_przRange()**

Get upper and lower PRZ levels

**harmonic_xabcd_eD()**

Measure closeness of D to either of the two closest PRZ levels, relative to height of the XA leg

**przScore()**

Measure the closeness of the two closest PRZ levels, relative to the height of the XA leg

**harmonic_xabcd_eAvg()**

Get the avg retracement ratio % error

**harmonic_xabcd_targets()**

Get target level

**pat_xabcd_asym()**

Get the avg asymmetry %

Added:

**harmonic_xabcd_przScore()**

Measure the closeness of the two closest PRZ levels, relative to the height of the XA leg

Removed:

**przScore()**

Measure the closeness of the two closest PRZ levels, relative to the height of the XA leg

Updated:

**pat_xabcd(x_is_low, pivot_length, source, conf_length)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

**conf_length**: Number of trailing bars after pivot point D to confirm a valid pattern (int, dft = 1)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Release Notes:
v28

Release Notes:
v29

Release Notes:
v30

Added:

Get score values for a pattern

Added:

**harmonic_xabcd_score()**Get score values for a pattern

Added Shark and Cypher XABCD patterns

Updated:

**harmonic_xabcd_validate(xX, xY, aX, aY, bX, bY, cX, cY, dX, dY, pErr, pAsym, pivot_length, gart, bat, bfly, crab, shark, cyph)**

Validate harmonic XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**dX**: X coordinate of point D (int)

**dY**: Y coordinate of point D (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**gart**: Flag to validate Gartley pattern (bool)

**bat**: Flag to validate Bat pattern (bool)

**bfly**: Flag to validate Butterfly pattern (bool)

**crab**: Flag to validate Crab pattern (bool)

**shark**: Flag to validate Shark pattern (bool)

**cyph**: Flag to validate Cypher pattern (bool)

Returns:

flag = true if valid harmonic

t1 = true if valid gartley

t2 = true if valid bat

t3 = true if valid butterfly

t4 = true if valid crab

t5 = true if valid shark

t6 = true if valid cypher

**harmonic_xabcd_validateIncomplete(xX, xY, aX, aY, bX, bY, cX, cY, pErr, pAsym, pivot_length, gart, bat, bfly, crab, shark, cyph)**

Validate the first 3 legs of a harmonic XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

**pivot_length**: Bars before and after prior pivot high to be considered valid pivot (optional int)

**gart**: Flag to validate Gartley pattern (bool)

**bat**: Flag to validate Bat pattern (bool)

**bfly**: Flag to validate Butterfly pattern (bool)

**crab**: Flag to validate Crab pattern (bool)

**shark**: Flag to validate Shark pattern (bool)

**cyph**: Flag to validate Cypher pattern (bool)

Returns:

flag = true if valid harmonic

t1 = true if valid gartley

t2 = true if valid bat

t3 = true if valid butterfly

t4 = true if valid crab

t5 = true if valid shark

t6 = true if valid cypher

Updated:

**harmonic_xabcd_przScore()**

Measure the closeness of the two closest PRZ levels, relative to the height of the XA leg

Release Notes:
v33

Added:

Get fib ratio display text

Added:

**harmonic_xabcd_fibDispTxt()**Get fib ratio display text

Release Notes:
v34

Added:

Get pattern symbol

Added:

**harmonic_xabcd_symbol()**Get pattern symbol

Release Notes:
v35

Added:

Get total weighted score value for a pattern

Added:

**harmonic_xabcd_scoreTot()**Get total weighted score value for a pattern

Removed:

**harmonic_xabcd_scoreTot()**

Get total weighted score value for a pattern

**harmonic_xabcd_fibDispTxt()**

Get fib ratio display text

**harmonic_xabcd_symbol()**

Get pattern symbol

Release Notes:
v37

Added:

Get pattern's total weighted score

Added:

**harmonic_xabcd_scoreTot()**Get pattern's total weighted score

Added:

**harmonic_xabcd_fibDispTxt()**

Get fib ratio display text

**harmonic_xabcd_symbol()**

Get pattern symbol

Release Notes:
v39

Release Notes:
v40

Release Notes:
v41

Release Notes:
v42

Added:

Get stop level

Added:

**harmonic_xabcd_stop()**Get stop level

Release Notes:
v43

Fixed bug with cypher validation of point D (retracement of XC, not XA)

Fixed bug with cypher validation of point D (retracement of XC, not XA)

Release Notes:
v44

Release Notes:
v45

Removed redundant "==true" comparisons

Removed redundant "==true" comparisons

Release Notes:
v46

Fixed bug with cypher PRZ level

Fixed bug with cypher PRZ level

Release Notes:
v47

Added:

Get the average % deviation of an XABCD pattern

Added:

**pat_xabcd_avgDev()**Get the average % deviation of an XABCD pattern

Release Notes:
v48

Release Notes:
v49

Testing

Testing

Release Notes:
v50

Testing

Testing

Added:

**pat_xabcd_validate(xX, xY, aX, aY, bX, bY, cX, cY, dX, dY, pErr, pAsym)**

Validate custom XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**dX**: X coordinate of point D (int)

**dY**: Y coordinate of point D (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

Returns: TRUE if pattern is valid

**pat_xabcd_validateIncomplete(xX, xY, aX, aY, bX, bY, cX, cY, pErr, pAsym)**

Validate the first 3 legs of a custom XABCD pattern

Parameters:

**xX**: X coordinate of point X (int)

**xY**: Y coordinate of point X (float)

**aX**: X coordinate of point A (int)

**aY**: Y coordinate of point A (float)

**bX**: X coordinate of point B (int)

**bY**: Y coordinate of point B (float)

**cX**: X coordinate of point C (int)

**cY**: Y coordinate of point C (float)

**pErr**: Acceptable percent error of leg ratios (does not apply to legs defined within a range) (float)

**pAsym**: Acceptable percent asymmetry of leg ΔX (each leg tested against average ΔX of prior legs) (float)

Returns: TRUE if first 3 legs are valid

**pat_xabcd_prz(xY, aY, bY, cY)**

Get the potential reversal zone (PRZ) levels of a custom XABCD pattern

Parameters:

**xY**: Y coordinate of point X (float)

**aY**: Y coordinate of point A (float)

**bY**: Y coordinate of point B (float)

**cY**: Y coordinate of point C (float)

Returns:

Release Notes:
v52

Updated:

Get the avg retracement ratio % error

Updated:

**harmonic_xabcd_eAvg()**Get the avg retracement ratio % error

Release Notes:
v53

Fixed bug with success(), extra checks on entry bar

Fixed bug with success(), extra checks on entry bar

Release Notes:
v54

Added:

Determine if Target or Stop was hit on the current bar

Added:

**tradeClosed()**Determine if Target or Stop was hit on the current bar

Release Notes:
v55

Bug fix for closed trade check

Bug fix for closed trade check

Release Notes:
v56

Bug fix for closed trade check

Bug fix for closed trade check

Updated:

**pat_xabcd(x_is_low, pivot_length, source, conf_length, incomplete)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

**conf_length**: Number of trailing bars after pivot point D to confirm a valid pattern (int, dft = 1)

**incomplete**: Flag to return an incomplete XABC pattern (bool, dft = false)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Release Notes:
v58

Short circuit incomplete XABCD pattern search

Short circuit incomplete XABCD pattern search

Release Notes:
v59

Updated:

Get upper and lower PRZ levels

Updated:

**harmonic_xabcd_przRange()**Get upper and lower PRZ levels

Release Notes:
v60

Added:

Added:

**harmonic_xabcd_entry()**Added:

**xabcd_entryHit()**

Determine if entry level was reached. Assumes pattern is active/not timed out.

Updated przClosest check to exclude values of 0 (only used when actual retracement value < 0)

Release Notes:
v63

backed out last change

backed out last change

Release Notes:
v64

test

test

Release Notes:
v65

dont allow entry value < 0

dont allow entry value < 0

Updated to use latest version of Fib script (improved efficiency for precise fibs)

test

Updated:

**pat_xabcd(x_is_low, pivot_length, source, conf_length, incomplete)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

**conf_length**: Number of trailing bars after pivot point D to confirm a valid pattern (int, dft = 1)

**incomplete**: Flag to return an incomplete XABC pattern (bool, dft = false)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Reverted test changes

Updated:

**pat_xabcd(x_is_low, pivot_length, source, conf_length, incomplete)**

Determine if an XABCD pattern has just completed (i.e. point D is on the previous bar)

Parameters:

**x_is_low**: Flag to determine if point X is a low pivot, i.e. bullish pattern (bool, dft = true)

**pivot_length**: Number of bars before and after a valid pivot (int, dft = 5)

**source**: Source series (float, dft = na, will use high and low series)

**conf_length**: Number of trailing bars after pivot point D to confirm a valid pattern (int, dft = 1)

**incomplete**: Flag to return an incomplete XABC pattern (bool, dft = false)

Returns:

flag = true if valid XABCD pattern completed on previous bar

xx = X coordinate of point X (int)

xy = Y coordinate of point X (float)

ax = X coordinate of point A (int)

ay = Y coordinate of point A (float)

bx = X coordinate of point B (int)

by = Y coordinate of point B (float)

cx = X coordinate of point C (int)

cy = Y coordinate of point C (float)

dx = X coordinate of point D (int)

dy = Y coordinate of point D (float)

Release Notes:
v69

Test allowing divergence checks with pivot length of 0

Test allowing divergence checks with pivot length of 0