is it possible to add ' slow weekly stockastics' to daily chart?

J007RMC

J007RMC

Well-known member
2019 Donor
VIP
might can use the full stochastics mtf just change the settings? And there are many good stochastic studies on site.

19:00 Paris: JQ, per your request, here's V3 of BLT's Stochastic Full MTF, posted quite a while back. Most folks here should already have it. This c/w notes/discussion points/guidance when this was discussed
Code:
# Stochastic Full MTF
# blt
# 7.15.2016

# 07.15.2016 blt v0, initial release
# 07.15.2016 blt v1, added on/off input for bubbles

# Here is a Stochastic Full_MTF indicator coded with a similar look
# as the RSI_Laguerre_Time_MTF uses. On the 1min chart image of DAL,
# I have the Stochastic set to a fast seting of 10,3,1, using higher
# agg period of 2min for the Stochastic.
#
# I used TOS Stochastic Full because with it you can do all three
# flavors (full 10,10,3; fast 10,3,1; slow 10,10,1) just changing
# the inputs
#
# This is an enhanced version with inputs to show bubbles or not.  
# If you want to see it in expansion to the right, then you need to
# increase your right expansion to approx 35. The bubbles were
# already moveable at the inputs m and z

declare lower;

input usehigheraggperiod = {default "Current", "Higher"};

# Current uses the current chart agg. So if you are on a 1min chart
# the indicator is based on 1min. If you select higher, then whatever
# agg you enter at the input will be what is used for the RSI. So
# if you are on a 1min chart and higher is set to 2min, then a 2min
# RSI and the entries and targets are 2min based.

input agg                = AggregationPeriod.TWO_MIN;
input atrlength          = 14;
input atrfactor          = 3;

# Variables:
def o;
def h;
def l;
def c;
def error = usehigheraggperiod == usehigheraggperiod."Higher" and GetAggregationPeriod() > agg;
switch (usehigheraggperiod) {
case Current:
    o = (open + close[1]) / 2;
    h = Max(high, close[1]);
    l = Min(low, close[1]);
    c = (o + h + l + close) / 4;
case Higher:
    if error {
        o = Double.NaN;
        h = Double.NaN;
        l = Double.NaN;
        c = Double.NaN;
    } else {
        o = (open(period = agg)     + close(period = agg)[1]) / 2;
        h = Max(high(period = agg)  , close(period = agg)[1]);
        l = Min(low(period = agg)   , close(period = agg)[1]);
        c = ((open(period = agg)    + close(period = agg)[1]) / 2
            + Max(high(period = agg), close(period = agg)[1])
            + Min(low(period = agg) , close(period = agg)[1])
            + close(period = agg)) / 4;
    }
}
AddLabel(error, "Chart Aggregation Period is greater than RSI aggregation period. Need to Change input to a higher agg than current chart aggregation or choose 'Current' at input usehigheraggperiod", Color.WHITE);

#TOS StochasticFull
#used TOS StochasticFull because with it you can do all 3 (full 10,10,3; fast 10,3,1; slow 10,10,1) with it by just changing the inputs for kperiod
input over_bought = 80;
input over_sold   = 20;
input KPeriod = 10;
input DPeriod = 10;
input slowing_period = 3;
input averageType = AverageType.SIMPLE;
def priceH = h;
def priceL = l;
def priceC = c;

def lowest_k = Lowest(priceL, KPeriod);
def c1       = priceC - lowest_k;
def c2       = Highest(priceH, KPeriod) - lowest_k;
def FastK    = if c2 != 0
               then c1 / c2 * 100
               else 0;

plot FullK =  if isnan(close) then double.nan else MovingAverage(averageType, FastK, slowing_period);
plot FullD =  if isnan(close) then double.nan else MovingAverage(averageType, FullK, DPeriod);

plot OverBought = if isnan(close) then double.nan else over_bought;
plot OverSold   = if isnan(close) then double.nan else over_sold;

FullK.SetDefaultColor(GetColor(5));
FullD.SetDefaultColor(GetColor(0));
OverBought.SetDefaultColor(GetColor(1));
OverSold.SetDefaultColor(GetColor(1));

def ob = over_bought;
def os = over_sold;
def stou = if FullK crosses above ob or
              FullK crosses above os
           then 1
           else if stou[1] == 1 and !(FullK crosses below ob) and FullK > os
           then 1
           else 0;
FullK.AssignValueColor(if stou
                       then Color.GREEN
                       else Color.RED);
input usealerts = no;
Alert(usealerts and FullK crosses below OverBought, "", Alert.BAR, Sound.Bell);
Alert(usealerts and FullK crosses above OverSold, "", Alert.BAR, Sound.Bell);

AddCloud(if FullK >= OverBought
         then FullK
         else Double.NaN,
         OverBought,
         Color.GREEN, Color.GREEN);
AddCloud(if FullK <= OverSold
         then OverSold
         else Double.NaN,
         FullK,
         Color.RED, Color.RED);

plot mid   = if isnan(close) then double.nan else 50;
plot lineh = if isnan(close) then double.nan else 110;
plot linel = if isnan(close) then double.nan else -10;
lineh.setdefaultColor(color.gray);
linel.setdefaultColor(color.gray);
lineh.hidebubble();
linel.hidebubble();

AddLabel(yes, "STO (" + agg / 60000 + "min): " + Round(FullK, 0),
               if FullK > 0
               then if FullK[1] > FullK
                    then Color.DARK_GREEN
                    else Color.GREEN
               else if FullK[1] < FullK
               then Color.DARK_RED
               else  Color.RED);

def atr    = Average(TrueRange(h, c, l), atrlength);
def entry  = if FullK crosses above OverSold or stou[1] == 0 and FullK crosses above OverBought
             then close
             else if FullK crosses below OverBought or stou[1] and FullK crosses below OverSold
             then close
             else entry[1];
def ebar   = if FullK crosses above OverSold or stou[1] == 0 and FullK crosses above OverBought
             then BarNumber()
             else if FullK crosses below OverBought or stou[1] and FullK crosses below OverSold
             then BarNumber()
             else Double.NaN;
def target = if FullK crosses above OverSold or stou[1] == 0 and FullK crosses above OverBought
             then Round((close + (atrfactor * atr)) / TickSize(), 0) * TickSize()
             else if FullK crosses below OverBought or stou[1] and FullK crosses below OverSold
             then Round((close - (atrfactor * atr)) / TickSize(), 0) * TickSize()
             else target[1];
def u_d    = if FullK crosses above OverSold or stou[1] == 0 and FullK crosses above OverBought
             then 1
             else if FullK crosses below OverBought or stou[1] and FullK crosses below OverSold
             then -1
             else u_d[1];
def goalu  = if u_d > 0  and  high >= target
 
Last edited:
J007RMC

J007RMC

Well-known member
2019 Donor
VIP
Can you possibly share your chart?
 

Similar threads

Top