# Fuzzy logic functions

Fuzzy logic is a form of many-valued logic. In contrast with traditional binary logic that deals only with true or false, fuzzy logic functions have a truth value that ranges in degree between 1 and 0, from 'completely true' over 'almost true' to 'completely false'. Trade signals derived with fuzzy logic are often less susceptible to random noise in the price data, especially with complex logic expressions.

The following functions return a fuzzy truth value:

## belowF (var val, var border): var

Fuzzy comparison, equivalent to the binary ==, > and < operators.

## betweenF (var val, var lower, var upper): var

Fuzzy between function.

## valleyF (vars Data): var

Fuzzy peak and valley functions.

## fallingF (vars Data): var

Fuzzy rising and falling functions.

## crossUnderF (vars Data, var border): var

Fuzzy crossOver and crossUnder functions.

## notF (var a, var b): var

Fuzzy logic functions, equivalent to the &&, ||, and ! operators.

### Parameters:

 a, b Fuzzy truth values, 0.0 .. 1.0 Data, Data1, Data2 Data series. val, v1, v2 Values to compare. lower, upper, border Comparison borders.

### Returns

Fuzzy truth, from 0.0 (completely false) to 1.0 (completely true)

## fuzzy (var a): bool

Defuzzyfication, converts a fuzzy truth value to binary true or false. Use this function to convert the result of a fuzzy logic expression back to binary logic.

## eq (var v1, var v2): bool

Fuzzy comparison, returns true when the parameters differ less than FuzzyRange, otherwise false.

### Parameters:

 a Fuzzy truth value, 0.0 .. 1.0

### Returns

Boolean true or false

The following system variables affect the fuzzy logic calculation:

## FuzzyRange

Determines the 'fuzziness' range of the input data (default: 0 = no fuzziness). When comparing two variables, the truth value goes from 0 to 1 within that range. Set this to a small fraction of the price volatility, or f.i. to 0.1*PIP for comparing moving averages, or to 0.1 for comparing percentage values. The smaller this value, the 'less fuzzy' is the logic. At the default value 0 the logic is binary. The FuzzyRange variable is also used for classifying signal patterns for price action trading.

## FuzzyLevel

Determines the level above which fuzzy true becomes binary true (default: 0.5); used by the fuzzy function.

### Remarks:

• All fuzzy logic functions work just like their binary counterparts, with the difference that the output value depends on the 'closeness' of the result. For instance, equalF already returns a nonzero value when the two compared values are close, and crossOverF will already return nonzero when two lines are so close that they almost touch. The functions use the same number of bars as their binary counterparts.
• The FuzzyRange variable is critical for the result of fuzzy logic expressions, and can be subject to an optimize process.

### Example:

```// Fuzzy version of a Workshop 4 variant ///////////////////
function run()
{
vars Price = series(price());
vars Trend = series(LowPass(Price,1000));
vars Signals = series(0);

Stop = 4*ATR(100);
FuzzyRange = 0.001*ATR(100);

var Valley = valleyF(Trend),
Peak = peakF(Trend);
Signals = orF(Valley,Peak); // store the signal
if(fuzzy(Valley))
exitShort();
if(fuzzy(andF(Valley,notF(Sum(Signals+1,3)))))
enterLong();
if(fuzzy(Peak))
exitLong();
if(fuzzy(andF(Peak,notF(Sum(Signals+1,3)))))
enterShort();
}

// Binary version for comparison
function run()
{
vars Price = series(price());
vars Trend = series(LowPass(Price,1000));
vars Signals = series(0);

Stop = 4*ATR(100);
bool Valley = valley(Trend),
Peak = peak(Trend);
if(Valley or Peak)
Signals = 1; // store the signal
if(Valley)
exitShort();
if(Valley and Sum(Signals+1,3) == 0)
enterLong();
if(Peak)
exitLong();
if(Peak and Sum(Signals+1,3) == 0)
enterShort();
}```