#choose_agg
#https://usethinkscript.com/threads/how-do-i-use-getaggregationperiod-as-a-default-input.21227/
#How do I use getAggregationPeriod() as a default input
def na = Double.NaN;
def bn = BarNumber();
def chartagg = GetAggregationPeriod();
def chartmin = chartagg / (1000 * 60);
# custom agg
input agg_cus = AggregationPeriod.HOUR;
# verify chosen agg is valid. if not then set it to chart agg
def agg2;
if agg_cus >= chartagg
then {
agg2 = agg_cus;
} else {
agg2 = chartagg;
}
input agg_type = { default chart, custom };
def aggx;
switch (agg_type) {
case chart:
aggx = chartagg;
case custom:
aggx = agg_cus;
}
def data = close(period = aggx);
input avg1_type = AverageType.exponential;
input avg1_length = 30;
def avg1 = MovingAverage(avg1_type, data, avg1_length );
plot z = avg1;
AddLabel(1,
(if avg1_type == AverageType.SIMPLE then "SMA"
else if avg1_type == AverageType.EXPONENTIAL then "EMA"
else if avg1_type == AverageType.HULL then "HULL"
else if avg1_type == AverageType.WEIGHTED then "WT"
else if avg1_type == AverageType.WILDERS then "WILD"
else "---") + avg1_length
, z.TakeValueColor());
def aggxmin = aggx / 60000;
AddLabel(yes, "AGG " + if aggxmin < 60 then (aggxmin + " m")
else if aggxmin < 1440 then ((aggxmin / 60) + " H")
else if aggxmin < 10080 then (aggxmin / (60 * 24) + " D")
else if aggx == AggregationPeriod.WEEK then "W"
else if aggx == AggregationPeriod.MONTH then "M"
else "", Color.CYAN);
#