Candle % Close with Bullish/Bearish EvaluationI created the indicator to more quickly define the polarity of candles. For a large number of candles, it is straightforward to determine whether a candle is bullish or bearish. However, candles with long wicks often appear, making it uncertain whether the candle is bullish or bearish from a price action perspective. It is not a rule that a red candle is bearish and a green candle is bullish.
From a more advanced price action standpoint, how these candles close is important. Therefore, I created the 'Percent range' input. By default, it is set to 50% (high-low)/2. This way, the indicator precisely determines 50% of the candle's entire range. This allows us to determine whether a bearish candle truly closed below 50% of its range. If not, such a candle is considered bullish, even if it is a negative candle. The same applies to bullish candles, but conversely. If a positive candle closes below 50% of its range, from a price action perspective, it is considered a bearish candle.
Since in price action it is common for the price to return to 50% of the previous candle and, after filling, to continue in the established trend, I added the line extension option. Whatever high value you enter, the line extension follows the current candle. This option works only when the stop line checkbox is enabled. This way, you can plot 50% of the candle's range that the market has historically not returned to due to a strong trend. Often, this line is plotted on a candle where there is also an FVG, which can help you more easily find a point of interest.
Stop line extension : Ensures the interruption of line plotting when the candle is touched by the body or wick.
Evaluation
MathComplexEvaluateLibrary "MathComplexEvaluate"
TODO: add library description here
is_op(char) Check if char is a operator.
Parameters:
char : string, 1 character string.
Returns: bool.
operator(op, left, right) operation between left and right values.
Parameters:
op : string, operator string character.
left : float, left value of operation.
right : float, right value of operation.
operator_precedence(op) level of precedence of operator.
Parameters:
op : string, operator 1 char string.
Returns: int.
eval() evaluate a string with references to a array of arguments.
| @param tokens string, arithmetic operations with references to indices in arguments, ex:"0+1*0+2*2+3" arguments
| @param arguments float array, arguments.
| @returns float, solution.
StringEvaluationLibrary "StringEvaluation"
Methods to handle evaluation of strings.
is_comma(char) Check if char is a comma ".".
Parameters:
char : string, 1 character string.
Returns: bool.
is_op(char) Check if char is a operator.
Parameters:
char : string, 1 character string.
Returns: bool.
number(char) convert a single char string into valid number.
Parameters:
char : string, 1 character string.
Returns: float.
operator(op, left, right) operation between left and right values.
Parameters:
op : string, operator string character.
left : float, left value of operation.
right : float, right value of operation.
operator_precedence(op) level of precedence of operator.
Parameters:
op : string, operator 1 char string.
Returns: int.
cleanup(_str) Evaluate a string to clean up and retrieve only used chars
Parameters:
_str : string, arithmetic operations in a string.
Returns: string array, evaluated array.
generate_rpn(tokens) uses Shunting-Yard algorithm to generate a RPN (Reverse Polish notation)
array of strings from a array of strings containing arithmetic notation.
ex:.. ' ' --> ' '
Parameters:
tokens : string array, array with arithmetic notation.
Returns:
parse_rpn() evaluate a RPN (Reverse Polish notation) array of strings.
ex:.. 3 4 2 * 1 5 - 2 3 ^ ^ / +
| @param tokens string array, RPN ordered tokens, ex( ).
| @returns float, solution.
eval() evaluate a string with references to a array of arguments.
| @param tokens string, arithmetic operations with references to indices in arguments, ex:"0+1*0+2*2+3" arguments
| @param arguments float array, arguments.
| @returns float, solution.