#chat399_fix_ema_prehilo
#https://usethinkscript.com/threads/chatgpt-bard-other-ai-scripts-which-cant-be-used-in-thinkorswim.13822/page-20#post-152957
#MrCrude
#399
#I want to create an indicator that
#1-Plots EMA13 (yellow, EMA 48 (purple), and EMA 200 (Red).
#2-Displays Previous Day High, low, open and close level
#3-Plots pre-market high and low
#4-Adds label indicating whether price is above or below these key level
#5-Suggest trade bias (call/puts) based on EMA positioning.
#What I'm missing it is not plotting on TOS. THX
declare upper;
declare once_per_bar;
def na = double.nan;
def bn = barnumber();
# Define EMA values
input EMA1 = 13;
input EMA2 = 48;
input EMA3 = 200;
def EMA_13 = ExpAverage(close, EMA1);
def EMA_48 = ExpAverage(close, EMA2);
def EMA_200 = ExpAverage(close, EMA3);
# Previous Day Levels
def prevHigh = high(period = "DAY" )[1];
def prevLow = low(period = "DAY" )[1];
def prevClose = close(period = "DAY" )[1];
def prevOpen = open(period = "DAY" )[1];
# Pre-Market High and Low (assumes extended hours enabled)
#def preMarketHigh = high(period = AggregationPeriod.DAY, priceType = PriceType.LAST, extended = yes);
#def preMarketLow = low(period = AggregationPeriod.DAY, priceType = PriceType.LAST, extended = yes);
input prestart = 0400;
input preend = 0930;
def pre = if secondsfromTime(prestart) >= 0 and secondstillTime(preend) > 0 then 1 else 0;
def n = 400;
def big = 99999;
def preMarketHigh;
def preMarketlow;
if bn == 1 then {
preMarketHigh = na;
preMarketlow = na;
} else if (!pre[1] and pre) then {
# on the first bar of pre, look for hi/lo
preMarketHigh = fold a = 0 to n
with b
while getvalue(pre, -a)
do max(b, getvalue(high,-a));
preMarketlow = fold c = 0 to n
with d = big
while getvalue(pre, -c)
do min(d, getvalue(low,-c));
} else {
preMarketHigh = preMarketHigh[1];
preMarketlow = preMarketlow[1];
}
# Define Colors
AssignPriceColor(if close > EMA_13 then Color.GREEN else Color.RED);
# Plot EMAs
plot pEMA_13 = EMA_13;
pEMA_13.SetDefaultColor(Color.YELLOW);
pEMA_13.SetLineWeight(2);
plot pEMA_48 = EMA_48;
#pEMA_48.SetDefaultColor(Color.PURPLE);
pEMA_48.SetDefaultColor(Color.magenta);
pEMA_48.SetLineWeight(2);
plot pEMA_200 = EMA_200;
pEMA_200.SetDefaultColor(Color.RED);
pEMA_200.SetLineWeight(2);
# Plot previous day levels
plot pdHigh = prevHigh;
pdHigh.SetDefaultColor(Color.DARK_ORANGE);
pdHigh.SetStyle(Curve.SHORT_DASH);
plot pdLow = prevLow;
pdLow.SetDefaultColor(Color.DARK_ORANGE);
pdLow.SetStyle(Curve.SHORT_DASH);
plot pdOpen = prevOpen;
pdOpen.SetDefaultColor(Color.DARK_ORANGE);
pdOpen.SetStyle(Curve.SHORT_DASH);
plot pdClose = prevClose;
pdClose.SetDefaultColor(Color.DARK_ORANGE);
pdClose.SetStyle(Curve.SHORT_DASH);
# Plot pre-market levels
plot pmHigh = preMarketHigh;
pmHigh.SetDefaultColor(Color.LIGHT_RED);
pmHigh.SetStyle(Curve.SHORT_DASH);
plot pmLow = preMarketLow;
pmLow.SetDefaultColor(Color.LIGHT_RED);
pmLow.SetStyle(Curve.SHORT_DASH);
addchartbubble(0,low,
preMarketHigh + "\n" +
preMarketlow + "\n" +
#pema_13 + "\n" +
#pema_48 + "\n" +
#pema_200 + "\n" +
#pdhigh + "\n" +
#pdlow + "\n" +
#pdopen + "\n" +
#pdclose + "\n" +
pmhigh + "\n" +
pmlow + "\n"
, color.yellow, no);
# Define signal conditions
def aboveEMA_13 = close > EMA_13;
def aboveEMA_48 = close > EMA_48;
def aboveEMA_200 = close > EMA_200;
def abovePDH = close > prevHigh;
def abovePDL = close > prevLow;
def abovePMH = close > preMarketHigh;
def abovePML = close > preMarketLow;
# Labels for Trade Direction
AddLabel(yes, "EMA 13: " + EMA_13, if aboveEMA_13 then Color.GREEN else Color.RED);
AddLabel(yes, "EMA 48: " + EMA_48, if aboveEMA_48 then Color.GREEN else Color.RED);
AddLabel(yes, "EMA 200: " + EMA_200, if aboveEMA_200 then Color.GREEN else Color.RED);
AddLabel(yes, "Prev High: " + prevHigh, if abovePDH then Color.GREEN else Color.RED);
AddLabel(yes, "Prev Low: " + prevLow, if abovePDL then Color.GREEN else Color.RED);
AddLabel(yes, "Pre-Mkt High: " + preMarketHigh, if abovePMH then Color.GREEN else Color.RED);
AddLabel(yes, "Pre-Mkt Low: " + preMarketLow, if abovePML then Color.GREEN else Color.RED);
# Trade Bias
AddLabel(yes, if aboveEMA_13 then "Focus on Calls" else "Focus on Puts", if aboveEMA_13 then Color.GREEN else Color.RED);
#