# START
input paintBars = yes;
input length1 = 35;
def HAopen;
def HAhigh;
def HAlow;
def HAclose;
HAopen = CompoundValue(1, (haopen[1] + haclose[1]) / 2, (open[1] + close) / 2);
HAhigh = Max(high, close[1]);
HAlow = Min(low, close[1]);
HAclose = (HAopen + HAclose[1] + HAlow + close) / 4;
plot HAMA = Average(HAclose, length1);
HAMA.DefineColor("Up", GetColor(1));
HAMA.DefineColor("Down", GetColor(0));
HAMA.AssignValueColor(if HAMA > HAMA[1] then HAMA.color("Up") else HAMA.color("Down"));
# END
# START
input length2 = 70;
plot HAMA1 = Average(HAclose, length2);
HAMA1.DefineColor("Up", GetColor(1));
HAMA1.DefineColor("Down", GetColor(0));
HAMA1.AssignValueColor(if HAMA1 > HAMA1[1] then HAMA1.color("Up") else HAMA1.color("Down"));
# END
# START
input length3 = 100;
plot HAMA3 = Average(HAclose, length2);
HAMA3.DefineColor("Up", GetColor(1));
HAMA3.DefineColor("Down", GetColor(0));
HAMA3.AssignValueColor(if HAMA3 > HAMA3[1] then HAMA3.color("Up") else HAMA3.color("Down"));
# END
def GreenPrice = HAMA > HAMA[1] and HAMA1 > HAMA1[1] and HAMA3 > HAMA3[1];
def RedPrice = HAMA < HAMA[1] and HAMA1 < HAMA1[1] and HAMA3 < HAMA3[1];
plot Bullish = GreenPrice;
plot Neutral = !GreenPrice and !RedPrice;
plot Bearish = RedPrice;
Bullish.SetDefaultColor(Color.UPTICK);
Bullish.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Bullish.SetLineWeight(3);
Bullish.hide();
Neutral.SetDefaultColor(Color.BLUE);
Neutral.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Neutral.SetLineWeight(3);
Neutral.hide();
Bearish.SetDefaultColor(Color.DOWNTICK);
Bearish.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
Bearish.SetLineWeight(3);
Bearish.hide();
DefineGlobalColor("Bullish", Color.UPTICK);
DefineGlobalColor("Neutral", Color.GRAY);
DefineGlobalColor("Bearish", Color.DOWNTICK);
AssignPriceColor(if !paintBars then Color.CURRENT else if GreenPrice then globalColor("Bullish") else if RedPrice then globalColor("Bearish") else globalColor("Neutral"));
addOrder(OrderType.BUY_AUTO, Bullish);
addOrder(OrderType.SELL_TO_CLOSE, Neutral);
addOrder(OrderType.SELL_AUTO, Bearish);
addOrder(OrderType.BUY_TO_CLOSE, Neutral);