# signals_0or5
# find when signal data goes from one limit to the other (0,5)
# create experimantal data , 0 to 5, for testing
# -------------------------------------------
declare lower;
def bn = barnumber();
input lowest_number = 0;
input highest_number = 5;
# ===========================================
# test data \/ \/ \/ \/
# ===========================================
input avg1_len = 5;
input avg1_type = AverageType.exponential;
def ma1 = MovingAverage(avg1_type, close, avg1_len);
# -------------------------------------------
# normalize_std_00
#https://usethinkscript.com/threads/how-to-compare-stock-charts-in-thinkorswim.1249/page-2#post-53385
#post 35
script normalizePlot {
input data = close;
input newRngMin = 0;
input newRngMax = 100;
def HHData = HighestAll( data );
def LLData = LowestAll( data );
plot nr = ((( newRngMax - newRngMin ) * ( data - LLData )) / ( HHData - LLData )) + newRngMin;
}
# test factor, is a number to extend values to go outside of 0 to 5 range.
input factor = 2.5;
def norm = normalizePlot(ma1, lowest_number-factor, highest_number+factor);
# -------------------------------------------
# round normalized test data, to be integers
def rnd_norm = round(norm, 0);
plot u = rnd_norm;
u.SetDefaultColor(Color.yellow);
u.setlineweight(1);
u.hidebubble();
def signal = rnd_norm;
# ===========================================
# test data /\ /\ /\ /\
# ===========================================
# signal = .... 0 to 5
def state;
if bn == 1 then {
# init value#
state = lowest_number - 1;
} else if signal == lowest_number then {
# current is low# , did it change from highest or from init# ?
state = if ( state[1] == highest_number or state[1] < lowest_number ) then lowest_number else state[1];
} else if signal == highest_number then {
# current is high# , did it change from lowest or from init# ?
state = if ( state[1] == lowest_number or state[1] < lowest_number ) then highest_number else state[1];
} else {
state = state[1];
}
# -------------------------------------------
# first time on different state value, lowest or highest
def new_extreme_signal = if bn == 1 then 0 else if ( state[1] <> state[0] ) then 1 else 0;
# ===========================================
# test data \/ \/ \/ \/
# ===========================================
addchartbubble(new_extreme_signal, state ,
bn + " BN\n" +
state + " State\n"
, color.yellow ,
( if state == lowest_number then 0 else 1) );
# -------------------------------------------
plot w1 = lowest_number;
plot w2 = highest_number;
w1.SetDefaultColor(Color.gray);
#w1.hidebubble();
w2.SetDefaultColor(Color.gray);
#w2.hidebubble();
#