Composite Trend Oscillator [ChartPrime] for ThinkOrSwim

samer800

Moderator - Expert
VIP
Lifetime
FV7GPF3.png


Author Message:
Composite Trend Oscillator operates as an oscillator based on the concept of a moving average ribbon. It utilizes up to 32 filters with progressively longer periods to assess trend direction and strength. Embedded within this indicator is an alternative view that utilizes the separation of the ribbon filaments to assess volatility. Both versions are excellent candidates for trend and momentum, both offering visualization of polarity, directional coloring, and filter crossings. Anyone who has former experience using RSI or stochastics may have ease of understanding applying this to their chart.

CODE - May face slowness when upload the indicator:

CSS:
# https://www.tradingview.com/v/oRG4yOuS/
#// This Source Code Form is subject to the terms of the Attribution-NonCommercial-ShareAlike
#// © ChartPrime
#indicator("Composite Trend Oscillator [ChartPrime]", precision=0, timeframe='', timeframe_gaps = true)
# Converted by Sam4Cok@Samer800    - 03/2024
declare lower;

script PhiSmoother {
    input Source = close;
    input length = 10;
    input Phase = 3.7;
    def pi = Double.Pi;
    def SQRT_PIx2  = Sqrt(2.0 * pi);
    def MULTIPLIER = -0.5 / 0.93;
    def sma2 = Average(Source, 2);
    def length_2 = length * 0.52353;
    def W = fold i = 0 to length with p do
            p + sma2[i] * if ((i + Phase - length_2) * MULTIPLIER) < 0.0 then
                       (1.0 - ((Exp(Power(((i + Phase - length_2) * MULTIPLIER), 2) * -0.5)
                       * -0.39894228) * (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 0.319381530  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-0.356563782  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 1.781477937  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-1.821255978  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0))
                       * 1.330274429)))) + 1.011)) / SQRT_PIx2 else
                       (((Exp(Power(((i + Phase - length_2) * MULTIPLIER), 2) * -0.5)
                       * -0.39894228) * (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 0.31938153   + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-0.356563782  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 1.781477937  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-1.821255978  + (1.0 / (0.2316419 * AbsValue(((i + Phase - length_2) * MULTIPLIER)) + 1.0))
                       * 1.330274429)))) + 1.011)) / SQRT_PIx2;
    def E = fold j = 0 to length with q do
            q + if ((j + Phase - length_2) * MULTIPLIER) < 0.0 then
                       (1.0 - ((Exp(Power(((j + Phase - length_2) * MULTIPLIER), 2) * -0.5)
                       * -0.39894228) * (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 0.31938153   + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-0.356563782  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 1.781477937  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-1.821255978  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0))
                       * 1.330274429)))) + 1.011)) / SQRT_PIx2 else
                       (((Exp(Power(((j + Phase - length_2) * MULTIPLIER), 2) * -0.5)
                       * -0.39894228) * (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 0.31938153   + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-0.356563782  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       ( 1.781477937  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0)) *
                       (-1.821255978  + (1.0 / (0.2316419 * AbsValue(((j + Phase - length_2) * MULTIPLIER)) + 1.0))
                       * 1.330274429)))) + 1.011)) / SQRT_PIx2;
    def PhiSmoother = W / E;
    plot out = PhiSmoother;
}
script filter {
    input source = close;
    input length = 10;
    input phase = 3.7;
    input filterType = "PhiSmoother";
    input rank = 0;
    input trimUp = 0;
    input trimDn = 0;
    def phiFilter = PhiSmoother(source, length, phase);
    def filter = if filterType== "EMA" then ExpAverage(source, length) else
                 if filterType== "DEMA" then DEMA(source, length) else
                 if filterType== "TEMA" then TEMA(source, length) else
                 if filterType== "WMA" then  WMA(source, length) else
                 if filterType== "SMA" then  Average(source, length) else phiFilter;
    def return = if length > 1 and !isNaN(filter) then filter else source;
    def cond =  (rank >= trimUp) and ((32 - rank) >= trimDn);
    plot out = if cond then return else 0;
}
#Hint CompositeClusterMode: Trend Strength visualizes the directionality of the filter cluster. Volatility weights the score to the bandwidth of the cluster.
#hint ClusterFilter: Choose a filter to build the moving average cluster with.
#Hint PhiSmootherPhase: This allows for subtle adjustment (tweaking) of the phase/lag for PhiSmoother.
#Hint ClusterDispersion: Choose the separation between the moving averages in the cluster.
#Hint upper_trim: Adjusts the shortest period of the moving averages. Increasing the upper value reduces sensitivity.
#Hint lower_trim: Adjusts the longest period of the moving averages. Increasing the lower value heightens sensitivity.
#Hint signal_length: Period of the momentum signal plot.
#Hint transition_easing: Adjust the sensitivity to ranging conditions.

input timeframe = {Default "Chart", "Custom"};
input customTimeframe = AggregationPeriod.FIFTEEN_MIN;
input price = FundamentalType.CLOSE;             # "Source"
input CompositeClusterMode = {default "Trend Strength", "Volatility"};              # "Composite Cluster Mode"
input ClusterFilter = {default "PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"}; # "Cluster Filter"
input PhiSmootherPhase = 3.7;     # "???PhiSmoother Phase"
input ClusterDispersion = 3;      # "Cluster Dispersion"
input upper_trim = 0;             # "Cluster Trim - Upper:"
input lower_trim = 0;             # "??Lower:"
input PostSmoothFilter = {default "PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"}; # "PostSmooth - Filter:"
input PostSmoothLength = 1; #,            "??Length:", group=output, inline="post",  minval=1, tooltip="Period of the clu
input signal_filter = {default "PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"}; #]"Signal - Filter:"
input signal_length = 20; #,        "??Length:"
input upperLevel = 75.00; #, "Levels - Upper:",
input lowerLevel = -75.00; #,        "??Lower:"
input candle_color       = no; #      "Candle Coloring"
input transition_easing  = 50.0; #,    "Transition Easing"

def source;
Switch (timeframe) {
Case "Custom" : source = Fundamental(FundamentalType = price, Period = customTimeframe);
Default : source = Fundamental(FundamentalType = price);
}
def na = Double.NaN;
def last = IsNaN(close);
def Phase = PhiSmootherPhase;
def spacing = Min(Max(ClusterDispersion, 1), 10);
def VOLATILITY_MODE_ON = CompositeClusterMode == CompositeClusterMode."Volatility";
def upper = Min(Max(upper_trim, 0), 31);
def lower = Min(Max(lower_trim, 0), 31);
def trimUp = if (upper + lower) > 31 then if upper > lower then upper - lower else upper else upper;
def trimDn = if (upper + lower) > 31 then if upper > lower then lower else lower - upper else lower;

#-- Colors
DefineGlobalColor("rising_bullish", CreateColor(255, 204, 0)); # "Bullish Color"
DefineGlobalColor("falling_bullish", CreateColor(253, 240, 185)); # "bull")
DefineGlobalColor("falling_bearish", CreateColor(85, 0, 204)); # "bear"
DefineGlobalColor("rising_bearish", CreateColor(181, 128, 255));  #"bear"

script z {
    input cluster = close;
    def pos = Double.POSITIVE_INFINITY;
    def cond = cluster <= 0;
    def z = if cond then pos else cluster;
    plot out = z;
}
script getScore {
    input vv = 0;
    input v0 = 0;
    input v1 = 0;
    input v2 = 0;
    input v3 = 0;
    input v4 = 0;
    input v5 = 0;
    input v6 = 0;
    input v7 = 0;
    input v8 = 0;
    input v9 = 0;
    input v10 = 0;
    input v11 = 0;
    input v12 = 0;
    input v13 = 0;
    input v14 = 0;
    input v15 = 0;
    input v16 = 0;
    input v17 = 0;
    input v18 = 0;
    input v19 = 0;
    input v20 = 0;
    input v21 = 0;
    input v22 = 0;
    input v23 = 0;
    input v24 = 0;
    input v25 = 0;
    input v26 = 0;
    input v27 = 0;
    input v28 = 0;
    input v29 = 0;
    input v30 = 0;
    input v31 = 0;
    input v32 = 0;
    input i = 0;
    def r0  =      (if i == 0 or v0 == 0 then 0 else (if vv > v0  then (if i < 0  then 1 else -1) else (if i < 0  then -1 else 1)));
    def r1  = r0 + (if i == 1 or v1 == 0 then 0 else (if vv > v1  then (if i < 1  then 1 else -1) else (if i < 1  then -1 else 1)));
    def r2  = r1 + (if i == 2 or v2 == 0 then 0 else (if vv > v2  then (if i < 2  then 1 else -1) else (if i < 2  then -1 else 1)));
    def r3  = r2 + (if i == 3 or v3 == 0 then 0 else (if vv > v3  then (if i < 3  then 1 else -1) else (if i < 3  then -1 else 1)));
    def r4  = r3 + (if i == 4 or v4 == 0 then 0 else (if vv > v4  then (if i < 4  then 1 else -1) else (if i < 4  then -1 else 1)));
    def r5  = r4 + (if i == 5 or v5 == 0 then 0 else (if vv > v5  then (if i < 5  then 1 else -1) else (if i < 5  then -1 else 1)));
    def r6  = r5 + (if i == 6 or v6 == 0 then 0 else (if vv > v6  then (if i < 6  then 1 else -1) else (if i < 6  then -1 else 1)));
    def r7  = r6 + (if i == 7 or v7 == 0 then 0 else (if vv > v7  then (if i < 7  then 1 else -1) else (if i < 7  then -1 else 1)));
    def r8  = r7 + (if i == 8 or v8 == 0 then 0 else (if vv > v8  then (if i < 8  then 1 else -1) else (if i < 8  then -1 else 1)));
    def r9  = r8 + (if i == 9 or v9 == 0 then 0 else (if vv > v9  then (if i < 9  then 1 else -1) else (if i < 9  then -1 else 1)));
    def r10 = r9 + (if i == 10 or v10 == 0 then 0 else (if vv > v10 then (if i < 10 then 1 else -1) else (if i < 10 then -1 else 1)));
    def r11 = r10+ (if i == 11 or v11 == 0 then 0 else (if vv > v11 then (if i < 11 then 1 else -1) else (if i < 11 then -1 else 1)));
    def r12 = r11+ (if i == 12 or v12 == 0 then 0 else (if vv > v12 then (if i < 12 then 1 else -1) else (if i < 12 then -1 else 1)));
    def r13 = r12+ (if i == 13 or v13 == 0 then 0 else (if vv > v13 then (if i < 13 then 1 else -1) else (if i < 13 then -1 else 1)));
    def r14 = r13+ (if i == 14 or v14 == 0 then 0 else (if vv > v14 then (if i < 14 then 1 else -1) else (if i < 14 then -1 else 1)));
    def r15 = r14+ (if i == 15 or v15 == 0 then 0 else (if vv > v15 then (if i < 15 then 1 else -1) else (if i < 15 then -1 else 1)));
    def r16 = r15+ (if i == 16 or v16 == 0 then 0 else (if vv > v16 then (if i < 16 then 1 else -1) else (if i < 16 then -1 else 1)));
    def r17 = r16+ (if i == 17 or v17 == 0 then 0 else (if vv > v17 then (if i < 17 then 1 else -1) else (if i < 17 then -1 else 1)));
    def r18 = r17+ (if i == 18 or v18 == 0 then 0 else (if vv > v18 then (if i < 18 then 1 else -1) else (if i < 18 then -1 else 1)));
    def r19 = r18+ (if i == 19 or v19 == 0 then 0 else (if vv > v19 then (if i < 19 then 1 else -1) else (if i < 19 then -1 else 1)));
    def r20 = r19+ (if i == 20 or v20 == 0 then 0 else (if vv > v20 then (if i < 20 then 1 else -1) else (if i < 20 then -1 else 1)));
    def r21 = r20+ (if i == 21 or v21 == 0 then 0 else (if vv > v21 then (if i < 21 then 1 else -1) else (if i < 21 then -1 else 1)));
    def r22 = r21+ (if i == 22 or v22 == 0 then 0 else (if vv > v22 then (if i < 22 then 1 else -1) else (if i < 22 then -1 else 1)));
    def r23 = r22+ (if i == 23 or v23 == 0 then 0 else (if vv > v23 then (if i < 23 then 1 else -1) else (if i < 23 then -1 else 1)));
    def r24 = r23+ (if i == 24 or v24 == 0 then 0 else (if vv > v24 then (if i < 24 then 1 else -1) else (if i < 24 then -1 else 1)));
    def r25 = r24+ (if i == 25 or v25 == 0 then 0 else (if vv > v25 then (if i < 25 then 1 else -1) else (if i < 25 then -1 else 1)));
    def r26 = r25+ (if i == 26 or v26 == 0 then 0 else (if vv > v26 then (if i < 26 then 1 else -1) else (if i < 26 then -1 else 1)));
    def r27 = r26+ (if i == 27 or v27 == 0 then 0 else (if vv > v27 then (if i < 27 then 1 else -1) else (if i < 27 then -1 else 1)));
    def r28 = r27+ (if i == 28 or v28 == 0 then 0 else (if vv > v28 then (if i < 28 then 1 else -1) else (if i < 28 then -1 else 1)));
    def r29 = r28+ (if i == 29 or v29 == 0 then 0 else (if vv > v29 then (if i < 29 then 1 else -1) else (if i < 29 then -1 else 1)));
    def r30 = r29+ (if i == 30 or v30 == 0 then 0 else (if vv > v30 then (if i < 30 then 1 else -1) else (if i < 30 then -1 else 1)));
    def r31 = r30+ (if i == 31 or v31 == 0 then 0 else (if vv > v31 then (if i < 31 then 1 else -1) else (if i < 31 then -1 else 1)));
    def r32 = r31+ (if i == 32 or v32 == 0 then 0 else (if vv > v32 then (if i < 32 then 1 else -1) else (if i < 32 then -1 else 1)));
    plot result = if IsNaN(r32) then 0 else if vv == 0 then 0 else r32;
}

def cluste0  = if trimUp > 0 then 0 else source;
def cluste1  = filter(source, 1  * spacing, phase, ClusterFilter, 1, trimUp, trimDn);
def cluste2  = filter(source, 2  * spacing, phase, ClusterFilter, 2, trimUp, trimDn);
def cluste3  = filter(source, 3  * spacing, phase, ClusterFilter, 3, trimUp, trimDn);
def cluste4  = filter(source, 4  * spacing, phase, ClusterFilter, 4, trimUp, trimDn);
def cluste5  = filter(source, 5  * spacing, phase, ClusterFilter, 5, trimUp, trimDn);
def cluste6  = filter(source, 6  * spacing, phase, ClusterFilter, 6, trimUp, trimDn);
def cluste7  = filter(source, 7  * spacing, phase, ClusterFilter, 7, trimUp, trimDn);
def cluste8  = filter(source, 8  * spacing, phase, ClusterFilter, 8, trimUp, trimDn);
def cluste9  = filter(source, 9  * spacing, phase, ClusterFilter, 9, trimUp, trimDn);
def cluste10 = filter(source, 10 * spacing, phase, ClusterFilter, 10, trimUp, trimDn);
def cluste11 = filter(source, 11 * spacing, phase, ClusterFilter, 11, trimUp, trimDn);
def cluste12 = filter(source, 12 * spacing, phase, ClusterFilter, 12, trimUp, trimDn);
def cluste13 = filter(source, 13 * spacing, phase, ClusterFilter, 13, trimUp, trimDn);
def cluste14 = filter(source, 14 * spacing, phase, ClusterFilter, 14, trimUp, trimDn);
def cluste15 = filter(source, 15 * spacing, phase, ClusterFilter, 15, trimUp, trimDn);
def cluste16 = filter(source, 16 * spacing, phase, ClusterFilter, 16, trimUp, trimDn);
def cluste17 = filter(source, 17 * spacing, phase, ClusterFilter, 17, trimUp, trimDn);
def cluste18 = filter(source, 18 * spacing, phase, ClusterFilter, 18, trimUp, trimDn);
def cluste19 = filter(source, 19 * spacing, phase, ClusterFilter, 19, trimUp, trimDn);
def cluste20 = filter(source, 20 * spacing, phase, ClusterFilter, 20, trimUp, trimDn);
def cluste21 = filter(source, 21 * spacing, phase, ClusterFilter, 21, trimUp, trimDn);
def cluste22 = filter(source, 22 * spacing, phase, ClusterFilter, 22, trimUp, trimDn);
def cluste23 = filter(source, 23 * spacing, phase, ClusterFilter, 23, trimUp, trimDn);
def cluste24 = filter(source, 24 * spacing, phase, ClusterFilter, 24, trimUp, trimDn);
def cluste25 = filter(source, 25 * spacing, phase, ClusterFilter, 25, trimUp, trimDn);
def cluste26 = filter(source, 26 * spacing, phase, ClusterFilter, 26, trimUp, trimDn);
def cluste27 = filter(source, 27 * spacing, phase, ClusterFilter, 27, trimUp, trimDn);
def cluste28 = filter(source, 28 * spacing, phase, ClusterFilter, 28, trimUp, trimDn);
def cluste29 = filter(source, 29 * spacing, phase, ClusterFilter, 29, trimUp, trimDn);
def cluste30 = filter(source, 30 * spacing, phase, ClusterFilter, 30, trimUp, trimDn);
def cluste31 = filter(source, 31 * spacing, phase, ClusterFilter, 31, trimUp, trimDn);
def cluste32 = filter(source, 32 * spacing, phase, ClusterFilter, 32, trimUp, trimDn);

def cluster0 = (cluste0);
def cluster1 = (cluste1);
def cluster2 = (cluste2);
def cluster3 = (cluste3);
def cluster4 = (cluste4);
def cluster5 = (cluste5);
def cluster6 = (cluste6);
def cluster7 = (cluste7);
def cluster8 = (cluste8);
def cluster9 = (cluste9);
def cluster10 = (cluste10);
def cluster11 = (cluste11);
def cluster12 = (cluste12);
def cluster13 = (cluste13);
def cluster14 = (cluste14);
def cluster15 = (cluste15);
def cluster16 = (cluste16);
def cluster17 = (cluste17);
def cluster18 = (cluste18);
def cluster19 = (cluste19);
def cluster20 = (cluste20);
def cluster21 = (cluste21);
def cluster22 = (cluste22);
def cluster23 = (cluste23);
def cluster24 = (cluste24);
def cluster25 = (cluste25);
def cluster26 = (cluste26);
def cluster27 = (cluste27);
def cluster28 = (cluste28);
def cluster29 = (cluste29);
def cluster30 = (cluste30);
def cluster31 = (cluste31);
def cluster32 = (cluste32);

def luster0 = z(cluster0);
def luster1 = z(cluster1);
def luster2 = z(cluster2);
def luster3 = z(cluster3);
def luster4 = z(cluster4);
def luster5 = z(cluster5);
def luster6 = z(cluster6);
def luster7 = z(cluster7);
def luster8 = z(cluster8);
def luster9 = z(cluster9);
def luster10 = z(cluster10);
def luster11 = z(cluster11);
def luster12 = z(cluster12);
def luster13 = z(cluster13);
def luster14 = z(cluster14);
def luster15 = z(cluster15);
def luster16 = z(cluster16);
def luster17 = z(cluster17);
def luster18 = z(cluster18);
def luster19 = z(cluster19);
def luster20 = z(cluster20);
def luster21 = z(cluster21);
def luster22 = z(cluster22);
def luster23 = z(cluster23);
def luster24 = z(cluster24);
def luster25 = z(cluster25);
def luster26 = z(cluster26);
def luster27 = z(cluster27);
def luster28 = z(cluster28);
def luster29 = z(cluster29);
def luster30 = z(cluster30);
def luster31 = z(cluster31);
def luster32 = z(cluster32);

def score0 = getScore(cluster0 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 0);
def score1 = getScore(cluster1 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 1);
def score2 = getScore(cluster2 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 2);
def score3 = getScore(cluster3 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 3);
def score4 = getScore(cluster4 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 4);
def score5 = getScore(cluster5 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 5);
def score6 = getScore(cluster6 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 6);
def score7 = getScore(cluster7 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 7);
def score8 = getScore(cluster8 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 8);
def score9 = getScore(cluster9 , cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 9);
def score10 = getScore(cluster10, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 10);
def score11 = getScore(cluster11, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 11);
def score12 = getScore(cluster12, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 12);
def score13 = getScore(cluster13, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 13);
def score14 = getScore(cluster14, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 14);
def score15 = getScore(cluster15, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 15);
def score16 = getScore(cluster16, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 16);
def score17 = getScore(cluster17, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 17);
def score18 = getScore(cluster18, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 18);
def score19 = getScore(cluster19, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 19);
def score20 = getScore(cluster20, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 20);
def score21 = getScore(cluster21, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 21);
def score22 = getScore(cluster22, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 22);
def score23 = getScore(cluster23, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 23);
def score24 = getScore(cluster24, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 24);
def score25 = getScore(cluster25, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 25);
def score26 = getScore(cluster26, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 26);
def score27 = getScore(cluster27, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 27);
def score28 = getScore(cluster28, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 28);
def score29 = getScore(cluster29, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 29);
def score30 = getScore(cluster30, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 30);
def score31 = getScore(cluster31, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 31);
def score32 = getScore(cluster32, cluster0 , cluster1 , cluster2 , cluster3 , cluster4 , cluster5 , cluster6 , cluster7 ,
                      cluster8 , cluster9 , cluster10, cluster11, cluster12, cluster13, cluster14, cluster15, cluster16,
                      cluster17, cluster18, cluster19, cluster20, cluster21, cluster22, cluster23, cluster24, cluster25,
                      cluster26, cluster27, cluster28, cluster29, cluster30, cluster31, cluster32, 32);

def max1 = Max(cluster0, Max(cluster1, Max(cluster2, Max(cluster3, Max(cluster4, Max(cluster5, Max(cluster6, cluster7)))))));
def max2 = Max(cluster8, Max(cluster9, Max(cluster10,Max(cluster11,Max(cluster12,Max(cluster13,Max(cluster14, cluster15)))))));
def max3 = Max(cluster16,Max(cluster17,Max(cluster18,Max(cluster19,Max(cluster20,Max(cluster21,Max(cluster22, cluster23)))))));
def max4 = Max(cluster24,Max(cluster25,Max(cluster26,Max(cluster27,Max(cluster28,Max(cluster29,Max(cluster30, cluster31)))))));
def max5 = Max(cluster32,Max(max1, Max(max2, Max(max3, max4))));

def min1 = Min(luster0, Min(luster1, Min(luster2, Min(luster3, Min(luster4, Min(luster5, Min(luster6, luster7)))))));
def min2 = Min(luster8, Min(luster9, Min(luster10,Min(luster11,Min(luster12,Min(luster13,Min(luster14, luster15)))))));
def min3 = Min(luster16,Min(luster17,Min(luster18,Min(luster19,Min(luster20,Min(luster21,Min(luster22, luster23)))))));
def min4 = Min(luster24,Min(luster25,Min(luster26,Min(luster27,Min(luster28,Min(luster29,Min(luster30, luster31)))))));
def min5 = Min(luster32,Min(min1, Min(min2, Min(min3, min4))));

def ribbon_max   = max5;
def ribbon_min   = min5;
def ribbon_width = ribbon_max - ribbon_min;
def avg = (ribbon_max + ribbon_min) / 2;
def ribbon_Avg = (ribbon_width / avg);
def rib_Avg = if IsNaN(ribbon_Avg) then 0 else ribbon_Avg;
def ribbon_rank  = if VOLATILITY_MODE_ON then rib_Avg else 1;
def avgNetScore1 = score0 + score1 + score2 + score3 + score4 + score5 + score6 + score7 + score8 + score9 + score10 + score11;
def avgNetScore2 = score12 + score13 + score14 + score15 + score16 + score17 + score18 + score19 + score20 + score21 + score22;
def avgNetScore3 = score23 + score24 + score25 + score26 + score27 + score28 + score29 + score30 + score31 + score32;
def score = avgNetScore1 + avgNetScore2 + avgNetScore3;
def NetSco1 = !cluster0 + !cluster1 + !cluster2 + !cluster3 + !cluster4 + !cluster5 + !cluster6 + !cluster7 + !cluster8 + !cluster9;
def NetSco2 = !cluster10+ !cluster11+ !cluster12+ !cluster13+ !cluster14+ !cluster15+ !cluster16+ !cluster17+ !cluster18+ !cluster19;
def NetSco3 = !cluster20+ !cluster21+ !cluster22+ !cluster23+ !cluster24+ !cluster25+ !cluster26+ !cluster27+ !cluster28+ !cluster29;
def value = 32 - (NetSco1 + NetSco2 + NetSco3 + !cluster30 + !cluster31 + !cluster32);

def avgNetScore = score / (value + 1);
def netScore = ((avgNetScore + value) / (value * 2.0) - 0.5) * 200.0;
def net_score = filter(netScore * ribbon_rank, PostSmoothLength, 3.7, PostSmoothFilter);
def avg_net_score = Average(net_score, 2);
def signal_value = if signal_length < 2 then na else filter(avg_net_score, signal_length, 3.7, signal_filter);

#-- Colors
def bar = AbsValue(BarNumber());
def delta = net_score - If(IsNaN(net_score[1]), net_score, net_score[1]);
def bullish = if delta >= 0.0 then  3 else  2;
def bearish = if delta >  0.0 then -2 else -3;
def transit = if net_score >  0.0 then (if delta >= 0.0 then 1 else -1)
                                  else (if delta >= 0.0 then -1 else 1);
def easing = 0.01 * transition_easing;
def absVal = if bar > 0 then absVal[1] + Sqr(AbsValue(net_score)) else 1;
def crm = AbsValue(net_score)*100 + easing * Sqrt(absVal / (bar + 1 ));
def crms = if IsNaN(crm) then 0 else if crm > 100 then 100 else if crm < 0 then 0 else crm;
def grad;
if VOLATILITY_MODE_ON {
    grad = if net_score > 0.0 then
               if transition_easing > 0.0 then  5 else bullish else
               if transition_easing > 0.0 then -5 else bearish;
} else {
    grad = if net_score > 0.0 then
               if transition_easing > 0.0 then  4 else bullish else
               if transition_easing > 0.0 then -4 else bearish;
}
def col = if IsNaN(net_score) then 0 else if net_score > 100 then 100 else if net_score < -100 then -100 else net_score;
def col1 = if col > upperLevel then 100 else if col < lowerLevel then 100 else absValue(col); #if col > 0 then col else -col;
def nCol = 100 - col1;
def eCol = col1 * 2.54 + nCol;
def nCrms = 100 - crms;
def eCrms = crms * 2.54 + nCrms;
#-- plots
plot SignalLine = if last then na else signal_value;
plot ScoreLine  = if last then na else net_score;
plot top    = if last or VOLATILITY_MODE_ON then na else      100.0;    # "Top"
plot upperLvl  = if last or VOLATILITY_MODE_ON then na else upperLevel; # "+Level",  rising_bullish, hline.style_dotted, 2)
plot Center = if last then na else 0;
plot lowerLvl  = if last or VOLATILITY_MODE_ON then na else lowerLevel; # "+Level", falling_bearish, hline.style_dotted, 2)
plot bottom = if last or VOLATILITY_MODE_ON then na else     -100.0;    # "Bottom"

ScoreLine.AssignValueColor(if grad == 5 then CreateColor(nCrms, eCrms, nCrms) else
                           if grad == 4 then CreateColor(nCol, eCol, eCol) else
                           if grad ==-5 then CreateColor(eCrms, nCrms, nCrms) else
                           if grad ==-4 then CreateColor(eCol, nCol, eCol) else
                           if grad == 3 then GlobalColor("rising_bullish") else
                           if grad == 2 then GlobalColor("falling_bullish") else
                           if grad ==-3 then GlobalColor("falling_bearish") else
                           if grad ==-2 then GlobalColor("rising_bearish") else Color.GRAY);
ScoreLine.SetLineWeight(2);
SignalLine.AssignValueColor(if transition_easing > 0 then Color.DARK_ORANGE else Color.DOWNTICK);
top.SetDefaultColor(Color.RED);
Center.SetDefaultColor(Color.GRAY);
bottom.SetDefaultColor(Color.GREEN);
upperLvl.SetStyle(Curve.SHORT_DASH);
upperLvl.SetDefaultColor(Color.RED);
lowerLvl.SetStyle(Curve.SHORT_DASH);
lowerLvl.SetDefaultColor(Color.GREEN);

AddCloud(top, top - (top - upperLvl)/2, Color.DARK_RED);
AddCloud(lowerLvl - (lowerLvl - bottom)/2, bottom, Color.DARK_GREEN);

DefineGlobalColor("rising_transition", CreateColor(149, 152, 161)); # "range"
DefineGlobalColor("falling_transition", CreateColor(204, 204, 204)); # "range"

AssignPriceColor(if !candle_color then Color.CURRENT else
                 if grad == 5 then CreateColor(nCrms, eCrms, nCrms) else
                 if grad == 4 then CreateColor(nCol, eCol, eCol) else
                 if grad ==-5 then CreateColor(eCrms, nCrms, nCrms) else
                 if grad ==-4 then CreateColor(eCol, nCol, eCol) else
                 if grad == 3 then GlobalColor("rising_bullish") else
                 if grad == 2 then GlobalColor("falling_bullish") else
                 if grad ==-3 then GlobalColor("falling_bearish") else
                 if grad ==-2 then GlobalColor("rising_bearish") else Color.GRAY);


#-- END of CODE
 

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

@samer800 Do you believe this code may be cleaned up so it isn't so laggy or it is what it has to be? This one is pretty good but dang, it is heavy. In regards to TOS and this type o lag, Is there a way to remove a lot of the lag by upgrading my PC? Just curious if it is a server issue and if a better PC would help.
 
Am not a big fan of lagging indicators..,but just put this on my 5min chart to see how it performs live with high volatile stocks like $TSLA and $AMD. To my pleasant surprise, it did a pretty decent job with short-term trends ,eliminating the noise well.

One big issue is the slowness with loading when switching tickers.

@samer800 , great job with the conversion..,any chance this can be tuned to make it faster? (like providing an option to limit the number of filters/variations or something else)?

Also whats the best way to make this more sensitive(increase lower trim? reduce signal length?, change filter type.. something else?) ..I tried adjusting lower trim, signal length ..not noticing significant changes.

Thanks

@samer800 Do you believe this code may be cleaned up so it isn't so laggy or it is what it has to be? This one is pretty good but dang, it is heavy. In regards to TOS and this type o lag, Is there a way to remove a lot of the lag by upgrading my PC? Just curious if it is a server issue and if a better PC would help.
Unfortunately , even with a powerful PC(Intel i9 12 cores(Each 3.5GHZ)/64GB memory/SSD + dedicated Graphics controller (NVDIA RTX 5000 w/5GB memory), doesnt help here. I looked at the performance metrics on the computer when reloading this study, barely consumes any resources...so the bottleneck is elsewhere, adding PC resources wont help here.

Like @MerryDay mentioned TOS a single threaded app, doesnt scale well.

@samer800 any chance, reducing the number of filters/iterations etc in the code?
 
Last edited:
This EXTREMELY complex code is not laggy as in "lagging indicator" laggy, but loading can be slower.
This heavy script is folding 15 instances of data exponentially AND THEN doing it again.
Could an expensive graphics card w/ built-in memory speed it up an iota? Perhaps.
But the main issue is that ToS is a single-threaded app. It cannot go much faster.

If you are experiencing lag to the point of un-usability then you need to look into whether you can clean up your libraries and your garbage dumping sequences.
https://usethinkscript.com/threads/transferring-thinkorswim-data-to-new-account.18002/#post-138268
https://usethinkscript.com/threads/ideal-memory-usage-settings-for-thinkorswim.10201/#post-128355
https://usethinkscript.com/threads/ideal-memory-usage-settings-for-thinkorswim.10201/#post-133610
https://usethinkscript.com/threads/computer-upgrade-for-thinkorswim.5356/page-2#post-102411
https://usethinkscript.com/threads/ideal-memory-usage-settings-for-thinkorswim.10201/#post-100823

for VIPers, how to fine tune ToS performance:
https://usethinkscript.com/threads/tos-performance.18166/

@METAL @rkwchu @veaceslav1952 @uTSusr07A
 
Last edited by a moderator:

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
305 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top