Your screenshot does not appear to show all three of these conditions taking place on the same candle. The close is not less than or equal to the lower KeltnerChannel band. And the MACD is below zero. Only one of your stated conditions is true for any of the bars in your screenshot. Which means your screenshot does not tell us anything.
When I copy/paste your code into a watchlist column the code cannot be applied unless I add a plot statement. So if your watchlist column is displaying "loading" this means you have applied some other code to your watchlist column, something different than what you have provided in your request. Otherwise you would never be able to apply it to the column in the first place.
So to your code, I had to add the following plot statement:
plot data = value1 == 1 and value2 == 1;
The code can then be applied to the column and it works just fine. But it's wrong. It does not include all three conditions specified in your code. You are only including "value1" and "value2" in your AssignBackgroundColor() statement. You have completely omitted the the variable named "value" from that statement, which means your code is not picking up the Keltner channel condition.
If you name each variable using terms that are clear and concise, you can avoid a great many problems such as this. Take a look at the following solution and notice the changes:
def conditionKeltner = close is less than or equal to KeltnerChannels().”Lower_Band”;
def conditionStochastic = StochasticFull().”FullK” is greater than StochasticFull().”FullD” ;
def conditionMACD = MACD().”Diff” is greater than MACD().”ZeroLine”;
plot data = conditionKeltner and conditionStochastic and conditionMACD;
AssignBackgroundColor( if data then Color.GREEN else Color.CURRENT);
Instead of using meaningless variable names such "value#", I have created variable names that actually describe what each one contains. So when it comes time to assemble them all into the plot statement I can clearly see that I have applied all three conditions. Better yet, if I need to split things out to troubleshoot an issue I have variable names that tell me exactly what each one is doing. I can very quickly check each of those three conditions individually so see what each one is doing.
Notice that for any true/false variable there is never a need to check if it is equal to 1 . You do not need to check if "value1 == 1".
plot scan = value1 == 1;
is the same exact thing as plot scan = value1;
...and you can chain them together...
plot scan = value1 == 1 and value2 == 1;
is the same as plot scan = value1 and value2;
And the plot statement is required anyway, so why not use that to contain the true/false value of your combined conditions:
plot data = conditionKeltner and conditionStochastic and conditionMACD;
Then you can use just that one variable in your AssignBackgroundColor() statement:
AssignBackgroundColor( if data then Color.GREEN else Color.CURRENT);