For the non VIP people here is a possible alternative. Make sure to set the time agg to your chart time.
https://tos.mx/mfbFUp
Cannot see the exhaustion code so no good idea how it compares.
Horserider,
1. Thanks for the share link - interesting code.
2. Where did get this Ema Cloud script?
3. Why did you say for non VIP members - try this -
https://tos.mx/mfb. Is there something similar in the VIP section?
4. Did you intend for this cloud script to somehow replace the exhaustion code?
4. I took your code and made what I hope are some improvements.
# Found code at,
#
https://usethinkscript.com/threads/trend-exhaustion-indicator-for-thinkorswim.333/
# Post #8, by Horserider.
# Original share link found was by Horserider =
https://tos.mx/mfbFUp
# ===============================
# Notes.
# Suggested name = UTS_HorseRider_EmaCloud_1
# Rearraged code to flow better.
# Renamed vPeriod to be AggPeriod.
# Updated "Agg Period Choice Routine" - code by CG.
# Added chioce to turn off labels.
# Nice little code - TY horserider.
# ===============================
# Begin.
#MUST ADJUST TIME FRAME OF THIS FORMULA TO MATCH CHART;# Oiginal note.
declare upper;
# -------------------------------------------
input Force_Study_To_Use_Chart_Agg = yes; # code by CG.
def fstuca = Force_Study_To_Use_Chart_Agg;
input SeectedAggPeriod = AggregationPeriod.DAY;
def AggPeriod = if fstuca then GetAggregationPeriod() else SeectedAggPeriod;
# -------------------------------------------
input EMALength1 = 9; # default = 9.
input EMALength2 = 21; # default = 21.
input Display_Labels = yes;
input price = close;
input displace = 0;
def O = open (period = AggPeriod);
def H = high (period = AggPeriod);
def C = close (period = AggPeriod);
def L = low (period = AggPeriod);
def V = volume(period = AggPeriod);
# ===========================================
# It was nagging at me where I've seen this code routine that uses, V & HLC.
# It may be other placed too.
#
www.floatchecker.com/blog/better-volume-indicators-for-thinkorswim
def SV = V * (H - C) / (H - L);
def BV = V * (C - L) / (H - L);
# ===========================================
def DL = if Display_Labels then 1 else 0;
AddLabel(yes * DL, "Buyer Vol Strong ", if high > high[1] and low > low[1] and BV*1.05 > SV then Color.GREEN else color.GRAY);
AddLabel(yes * DL, "Seller Vol Strong", if high < high[1] and low < low[1] and SV*1.05 > BV then Color.MAGENTA else color.GRAY);
AddLabel(yes * DL, "Price Strong ", if high > high[1] and high [1] > high[2] and low > low[1] and low[1] > low[2] then Color.GREEN else color.GRAY);
AddLabel(yes * DL, "Price Weak", if high < high[1] and high[1] < high[2] and low < low[1] and low[1] < low[2] then Color.MAGENTA else color.GRAY);
plot upper = ExpAverage(data = price[-displace], length = EMALength1);
upper.SetDefaultColor(Color.RED);
plot lower = ExpAverage(data = price[-displace], length = EMALength2);
lower.SetDefaultColor(Color.BLUE);
AddCloud(upper, lower);
def iscolormeBuy = upper >= lower;
def iscolormeSell = upper <= lower;
AddLabel(iscolormeBuy * DL, " EMA9 IS STILL GREATER THAN EMA21 :" , if UPPER >= LOWER + .1 then Color.GREEN else Color.BLACK);
AddLabel(iscolormeSell * DL, " SELL SIGNAL EMA9 LESS THAN EMA21: ", if UPPER <= LOWER - .1 then Color.MAGENTA else Color.BLACK);
# Unused left over code in original -
https://tos.mx/mfbFUp
#def iscolormeWaiting = high<=high[1] and low >= low[1];
#AddLabel(yes, Concat (if iscolormeBuy then " EMA9 > EMA21: " else "", COLOR.BLACK));
#AddLabel(yes, Concat (if iscolormeSell then " EMA9 < EMA21: " else"", COLOR.BLACK));
#AddLabel (iscolormeWaiting, " WAITING FOR BEST TIMING: ", if high <= high[1] OR low >= low[1] then Color.YELLOW else Color.BLUE);
#AddLabel (iscolormeWaiting, " WAITING FOR BEST TIMING: ", IF high <=high[1] and low >= low[1]then Color.GRAY else Color.YELLOW);
#def agg = getAggregationPeriod(); # Unused in original horserider code.
#input AggPeriod = AggregationPeriod.day; # original was hour;now unsed.
# END.