getStickyRange convert to ThinkOrSwim

sam4cok

Member
@barbaros can you pls assist on converting below pine script to ThinkScript if possible. it is boundaries which will only change when source crosses above or below the boundary. it looks easy but very tricky :)

CSS:
getStickyRange(float highsource, float lowsource, float upper, float lower, simple bool sticky=false)=>
    newUpper = upper
    newLower = lower
    highBreakout = highsource[1] >= newUpper[1]
    lowBreakout = lowsource[1] <= newLower[1]
    newUpper := (highBreakout or lowBreakout or not sticky)? newUpper : nz(newUpper[1], newUpper)
    newLower := (highBreakout or lowBreakout or not sticky)? newLower : nz(newLower[1], newLower)
    [newUpper, newLower]
 

sam4cok

Member
@barbaros can you pls assist on converting below pine script to ThinkScript if possible. it is boundaries which will only change when source crosses above or below the boundary. it looks easy but very tricky :)

CSS:
getStickyRange(float highsource, float lowsource, float upper, float lower, simple bool sticky=false)=>
    newUpper = upper
    newLower = lower
    highBreakout = highsource[1] >= newUpper[1]
    lowBreakout = lowsource[1] <= newLower[1]
    newUpper := (highBreakout or lowBreakout or not sticky)? newUpper : nz(newUpper[1], newUpper)
    newLower := (highBreakout or lowBreakout or not sticky)? newLower : nz(newLower[1], newLower)
    [newUpper, newLower]
any chance to cod this?
 

barbaros

Administrator
Staff member
I think it's this but not sure. I didn't test it.

Code:
script nz {
    input val = close;
    input rep = close;
    plot result = if isNaN(val) then rep else val;
}

script getStickyRange {
    input highsource = high;
    input lowsource = low;
    input upper = high;
    input lower = low;
    input sticky = no;

    def _newUpper;
    def _newLower;

    _newUpper = if isNaN(_newUpper[1]) then upper
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then upper
                else nz(_newUpper[1], _newUpper[0]);

    _newLower = if isNaN(_newLower[1]) then lower
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then lower
                else nz(_newLower[1], _newLower);

    plot newUpper = _newUpper;
    plot newLower = _newLower;
}
 

sam4cok

Member
I think it's this but not sure. I didn't test it.

Code:
script nz {
    input val = close;
    input rep = close;
    plot result = if isNaN(val) then rep else val;
}

script getStickyRange {
    input highsource = high;
    input lowsource = low;
    input upper = high;
    input lower = low;
    input sticky = no;

    def _newUpper;
    def _newLower;

    _newUpper = if isNaN(_newUpper[1]) then upper
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then upper
                else nz(_newUpper[1], _newUpper[0]);

    _newLower = if isNaN(_newLower[1]) then lower
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then lower
                else nz(_newLower[1], _newLower);

    plot newUpper = _newUpper;
    plot newLower = _newLower;
}
thanks a lot. minor change to fix the code. appreciate your effort. the final code below.

CSS:
script getStickyRange {
    input highsource = high;
    input lowsource = low;
    input upper = high;
    input lower = low;
    input sticky = no;
    def _newUpper;
    def _newLower;
    _newUpper = if isNaN(_newUpper[1]) then upper
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then upper
                else nz(_newUpper[1], upper);

    _newLower = if isNaN(_newLower[1]) then lower
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then lower
                else nz(_newLower[1], lower);
    plot newUpper = _newUpper;
    plot newLower = _newLower;
}
 
Last edited:
thanks a lot. minor change to fix the code. appreciate your effort. the final code below.

CSS:
script getStickyRange {
    input highsource = high;
    input lowsource = low;
    input upper = high;
    input lower = low;
    input sticky = no;
    def _newUpper;
    def _newLower;
    _newUpper = if isNaN(_newUpper[1]) then upper
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then upper
                else nz(_newUpper[1], upper);

    _newLower = if isNaN(_newLower[1]) then lower
                else if highsource[1] >= _newUpper[1] or lowsource[1] <= _newLower[1] or !sticky then lower
                else nz(_newLower[1], lower);
    plot newUpper = _newUpper;
    plot newLower = _newLower;
}
hu, i am getting an error with the code. thanks in advance
 
Top