SimplerTrading Voodoo Lines for ThinkorSwim

maddy91

Member
I'm looking for the Voodoo Lines and Prediction Points type indicators for ThinkorSwim. Someone made a sample script but for a different platform below.

Some traders were interested in "voodoo lines" and "gravity points", and other hocchie-coochie lines. I came across the Voodoo Lines indicator from SimplerTrading but D. K. and J. C. failed to provide a tradable method. My idea would be to put eight equidistant and stationary lines across the chart. You would trade with the trend, or against the trend. If bullish stay with the trend until the candle crosses one level down.

Code:
once ELow = 666.4
once EHigh = 1220.1
// Number of levels 1-3
levels = 3

// Fire lines
if levels >= 1 then
once F1 = Elow
once F2 = Ehigh
once F3= (Ehigh-Elow)*0.618 + Ehigh
once F4 = (Ehigh-Elow)*1.618 + Ehigh
once F5 = (Ehigh-Elow)*3.236 + Ehigh
endif

//Three lines
if levels >= 2 then
once T1 = F1 + (F2-F1)*0.382
once T2 = F1 + (F2-F1)*0.618
once T3 = F2 + (F3-F2)*0.382
once T4 = F2 + (F3-F2)*0.618
once T5 = F3 + (F4-F3)*0.382
once T6 = F3 + (F4-F3)*0.618
once T7 = F4 + (F5-F4)*0.382
once T8 = F4 + (F5-F4)*0.618
endif

//Snow lines
if levels >= 3 then
once S1 = F1 + (T1-F1)*0.382
once S2 = F1 + (T1-F1)*0.618
once S3 = T1 + (T2-T1)*0.382
once S4 = T1 + (T2-T1)*0.618
once S5 = T2 + (F2-T2)*0.382
once S6 = T2 + (F2-T2)*0.618
once S7 = F2 + (T3-F2)*0.382
once S8 = F2 + (T3-F2)*0.618
once S9 = T3 + (T4-T3)*0.382
once S10 = T3 + (T4-T3)*0.618
once S11 = T4 + (F3-T4)*0.382
once S12 = T4 + (F3-T4)*0.618
once S13 = F3 + (T5-F3)*0.382
once S14 = F3 + (T5-F3)*0.618
once S15 = T5 + (T6-T5)*0.382
once S16 = T5 + (T6-T5)*0.618
once S17 = T6 + (F4-T6)*0.382
once S18 = T6 + (F4-T6)*0.618
once S19 = F4 + (T7-F4)*0.382
once S20 = F4 + (T7-F4)*0.618
once S21 = T7 + (T8-T7)*0.382
once S22 = T7 + (T8-T7)*0.618
once S23 = T8 + (F5-T8)*0.382
once S24 = T8 + (F5-T8)*0.618
endif

If anyone can convert to thinkscript that would be great.

Update: This is what I have from Syracuse voodoo.

Code:
#SyracusePro

declare upper;

input symbol_1 = "FB";
input symbol_5 = "NFLX";
input symbol_6 = "SPY";
input symbol_7 = "QQQ";
input symbol_8 = "/CL";

def Start;
def Finish;

if (GetUnderlyingSymbol() == symbol_1)
{

    Start = 17.55;
    Finish = 32.51;

}
else if (GetUnderlyingSymbol() == symbol_5)
{
    Start = 7.54;
    Finish = 28.23;

}
else if (GetUnderlyingSymbol() == symbol_6)
{
    Start = 77.07;
    Finish = 157.52;
}
else if (GetUnderlyingSymbol() == symbol_7)
{
    Start = 120.5;
    Finish = 72.5;
}
else if (GetUnderlyingSymbol() == symbol_8)
{
    Start = 9.75;
    Finish = 41.15;



}
else
{
    Start = Double.NaN;
    Finish = Double.NaN;

}

   #FireLine Calculations#


script MYFib1618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.618);
    plot d = Rng;
}


script MYFib2618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.618);
    plot d = Rng;
}


script MYFib4236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 4.236);
    plot d = Rng;
}


script MYFib6854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 6.854);
    plot d = Rng;
}

   #TreeLine Calculations#

        ###########
        ###########
        ###########

script MYFib382 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 0.382);
    plot d = Rng;
}

script MYFib618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 0.618);
    plot d = Rng;
}

        ###########
        ###########
        ###########

script MYFib1236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.236);
    plot d = Rng;
}

script MYFib1382 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.382);
    plot d = Rng;
}

        ############
        ############
        ############

script MYFib2 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2);
    plot d = Rng;
}

script MYFib2236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.236);
    plot d = Rng;
}

        ############
        ############
        ############

script MYFib3236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3.236);
    plot d = Rng;
}

script MYFib3618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3.618);
    plot d = Rng;
}

        ############
        ############
        ############

script MYFib5236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 5.236);
    plot d = Rng;
}

script MYFib5854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 5.854);
    plot d = Rng;
}

        ###########   
        ###########
        ###########

    #SnowLine Calculations#

        ###########
        ###########
        ###########

script MYFib146 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .146);
    plot d = Rng;
}

script MYFib236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .236);
    plot d = Rng;
}

        ###########
        ###########

script MYFib472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .472);
    plot d = Rng;
}

script MYFib528 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .528);
    plot d = Rng;
}

        ###########
        ###########

script MYFib764 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .764);
    plot d = Rng;
}

script MYFib854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * .854);
    plot d = Rng;
}

        ###########
        ###########
        ###########

script MYFib1090 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.090);
    plot d = Rng;
}


script MYFib1146 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.146);
    plot d = Rng;
}


        ##########
        ##########

script MYFib1236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.236);
    plot d = Rng;
}




        ###########
        ###########



        ###########
        ###########


script MYFib1472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.472);
    plot d = Rng;
}

script MYFib1528 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.528);
    plot d = Rng;
}


        ###########
        ###########
        ###########



script MYFib1326 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.326);
    plot d = Rng;
}
script MYFib1854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.854);
    plot d = Rng;
}

        ###########
        ###########

script MYFib2090 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.090);
    plot d = Rng;
}



script MYFib2146 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.146);
    plot d = Rng;
}

        ###########
        ###########

script MYFib2224 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.224);
    plot d = Rng;

}

script MYFib1292 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.292);
    plot d = Rng;
}

        ###########
        ###########

script MYFib2382 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.382);
    plot d = Rng;
}

script MYFib2472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.472);
    plot d = Rng;
}

        ###########
        ###########

script MYFib1764 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 1.764);
    plot d = Rng;
}



script MYFib2854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 2.854);
    plot d = Rng;
}


        ###########
        ###########
        ###########




script MYFib3 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3);
    plot d = Rng;
}






        #########
        #########

        #########
        #########

script MYFib3382 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3.382);
    plot d = Rng;
}


script MYFib3472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3.472);
    plot d = Rng;
}

        #########
        #########

script MYFib3854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 3.854);
    plot d = Rng;
}
script MYFib4 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 4);
    plot d = Rng;
}

        #########
        #########
        #########

script MYFib4618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 4.618);
    plot d = Rng;
}
script MYFib4854 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 4.854);
    plot d = Rng;
}

        #########
        #########

script MYFib5472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 5.472);
    plot d = Rng;
}

script MYFib5618 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 5.618);
    plot d = Rng;
}

        ##########
        ##########


script MYFib6236 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 6.236);
    plot d = Rng;
}



script MYFib6472 {
    input H = 1;
    input L = 1;
    def Rng = ((H - L)  * 6.472);
    plot d = Rng;
}



#Fib Ratio Plots#



    #FireLine Plots#

plot Begin = if IsNaN(close) then Double.NaN else Start;
plot End = if IsNaN(close) then Double.NaN else Finish;
plot FireLine_1 = if IsNaN(close) then Double.NaN else MYFib1618(Finish, Start) + Start;
plot FireLine_2 = if IsNaN(close) then Double.NaN else MYFib2618(Finish, Start) + Start;
plot FireLine_3 = if IsNaN(close) then Double.NaN else MYFib4236(Finish, Start) + Start;
plot FireLine_4 = if IsNaN(close) then Double.NaN else MYFib6854(Finish, Start) + Start;

    #TreeLine Plots#

plot TreeLine_1 = if IsNaN(close) then Double.NaN else MYFib382(Finish, Start) + Start;
plot TreeLine_2 = if IsNaN(close) then Double.NaN else MYFib618(Finish, Start) + Start;
plot TreeLine_3 = if IsNaN(close) then Double.NaN else MYFib1236(Finish, Start) + Start;
plot TreeLine_4 = if IsNaN(close) then Double.NaN else MYFib1382(Finish, Start) + Start;
plot TreeLine_5 = if IsNaN(close) then Double.NaN else MYFib2(Finish, Start) + Start;
plot TreeLine_6 = if IsNaN(close) then Double.NaN else MYFib2236(Finish, Start) + Start;
plot TreeLine_7 = if IsNaN(close) then Double.NaN else MYFib3236(Finish, Start) + Start;
plot TreeLine_8 = if IsNaN(close) then Double.NaN else MYFib3618(Finish, Start) + Start;
plot TreeLine_9 = if IsNaN(close) then Double.NaN else MYFib5236(Finish, Start) + Start;
plot TreeLine_10 = if IsNaN(close) then Double.NaN else MYFib5854(Finish, Start) + Start;

    #SnowLine Plots#

plot SnowLine_1 = if IsNaN(close) then Double.NaN else MYFib146(Finish, Start) + Start;
plot SnowLine_2 = if IsNaN(close) then Double.NaN else MYFib236(Finish, Start) + Start;
plot SnowLine_3 = if IsNaN(close) then Double.NaN else MYFib472(Finish, Start) + Start;
plot SnowLine_4 = if IsNaN(close) then Double.NaN else MYFib528(Finish, Start) + Start;
plot SnowLine_5 = if IsNaN(close) then Double.NaN else MYFib764(Finish, Start) + Start;
plot SnowLine_6 = if IsNaN(close) then Double.NaN else MYFib854(Finish, Start) + Start;
plot SnowLine_7 = if IsNaN(close) then Double.NaN else MYFib1090(Finish, Start) + Start;
plot SnowLine_8 = if IsNaN(close) then Double.NaN else MYFib1146(Finish, Start) + Start;
plot SnowLine_9 = if IsNaN(close) then Double.NaN else MYFib1146(Finish, Start) + Start;
plot SnowLine_10 = if IsNaN(close) then Double.NaN else MYFib1326(Finish, Start) + Start;
plot SnowLine_11 = if IsNaN(close) then Double.NaN else MYFib1236(Finish, Start) + Start;
plot SnowLine_12 = if IsNaN(close) then Double.NaN else MYFib1472(Finish, Start) + Start;
plot SnowLine_13 = if IsNaN(close) then Double.NaN else MYFib1764(Finish, Start) + Start;
plot SnowLine_14 = if IsNaN(close) then Double.NaN else MYFib1528(Finish, Start) + Start;
plot SnowLine_15 = if IsNaN(close) then Double.NaN else MYFib1854(Finish, Start) + Start;
plot SnowLine_16 = if IsNaN(close) then Double.NaN else MYFib2090(Finish, Start) + Start;
plot SnowLine_17 = if IsNaN(close) then Double.NaN else MYFib2146(Finish, Start) + Start;
plot SnowLine_18 = if IsNaN(close) then Double.NaN else MYFib1292(Finish, Start) + Start;
plot SnowLine_19 = if IsNaN(close) then Double.NaN else MYFib2382(Finish, Start) + Start;
plot SnowLine_20 = if IsNaN(close) then Double.NaN else MYFib2472(Finish, Start) + Start;
plot SnowLine_21 = if IsNaN(close) then Double.NaN else MYFib2854(Finish, Start) + Start;
plot SnowLine_22 = if IsNaN(close) then Double.NaN else MYFib3(Finish, Start) + Start;
plot SnowLine_23 = if IsNaN(close) then Double.NaN else MYFib3382(Finish, Start) + Start;
plot SnowLine_24 = if IsNaN(close) then Double.NaN else MYFib3472(Finish, Start) + Start;
plot SnowLine_25 = if IsNaN(close) then Double.NaN else MYFib3854(Finish, Start) + Start;
plot SnowLine_26 = if IsNaN(close) then Double.NaN else MYFib4(Finish, Start) + Start;
plot SnowLine_27 = if IsNaN(close) then Double.NaN else MYFib4618(Finish, Start) + Start;
plot SnowLine_28 = if IsNaN(close) then Double.NaN else MYFib4854(Finish, Start) + Start;
plot SnowLine_29 = if IsNaN(close) then Double.NaN else MYFib5472(Finish, Start) + Start;
plot SnowLine_30 = if IsNaN(close) then Double.NaN else MYFib5618(Finish, Start) + Start;
plot SnowLine_31 = if IsNaN(close) then Double.NaN else MYFib6236(Finish, Start) + Start;
plot SnowLine_32 = if IsNaN(close) then Double.NaN else MYFib6472(Finish, Start) + Start;



    #FireLine Colors#

Begin.SetDefaultColor(Color.RED);
Begin.SetLineWeight(3);

End.SetDefaultColor(Color.RED);
End.SetLineWeight(3);

FireLine_1.SetDefaultColor(Color.RED);
FireLine_1.SetLineWeight(3);

FireLine_2.SetDefaultColor(Color.RED);
FireLine_2.SetLineWeight(3);

FireLine_3.SetDefaultColor(Color.RED);
FireLine_3.SetLineWeight(3);

FireLine_4.SetDefaultColor(Color.RED);
FireLine_4.SetLineWeight(3);

    #TreeLine Colors#

TreeLine_1.SetDefaultColor(Color.UPTICK);
TreeLine_1.SetLineWeight(2);

TreeLine_2.SetDefaultColor(Color.UPTICK);
TreeLine_2.SetLineWeight(2);

TreeLine_3.SetDefaultColor(Color.UPTICK);
TreeLine_3.SetLineWeight(2);

TreeLine_4.SetDefaultColor(Color.UPTICK);
TreeLine_4.SetLineWeight(2);

TreeLine_5.SetDefaultColor(Color.UPTICK);
TreeLine_5.SetLineWeight(2);

TreeLine_6.SetDefaultColor(Color.UPTICK);
TreeLine_6.SetLineWeight(2);

TreeLine_7.SetDefaultColor(Color.UPTICK);
TreeLine_7.SetLineWeight(2);

TreeLine_8.SetDefaultColor(Color.UPTICK);
TreeLine_8.SetLineWeight(2);

TreeLine_9.SetDefaultColor(Color.UPTICK);
TreeLine_9.SetLineWeight(2);

TreeLine_10.SetDefaultColor(Color.UPTICK);
TreeLine_10.SetLineWeight(2);


    #SnowLine Colors#

SnowLine_1.SetDefaultColor(Color.WHITE);
SnowLine_1.SetLineWeight(1);

SnowLine_2.SetDefaultColor(Color.WHITE);
SnowLine_2.SetLineWeight(1);

SnowLine_3.SetDefaultColor(Color.WHITE);
SnowLine_3.SetLineWeight(1);

SnowLine_4.SetDefaultColor(Color.WHITE);
SnowLine_4.SetLineWeight(1);

SnowLine_5.SetDefaultColor(Color.WHITE);
SnowLine_5.SetLineWeight(1);

SnowLine_6.SetDefaultColor(Color.WHITE);
SnowLine_6.SetLineWeight(1);

SnowLine_7.SetDefaultColor(Color.WHITE);
SnowLine_7.SetLineWeight(1);


SnowLine_8.SetDefaultColor(Color.WHITE);
SnowLine_8.SetLineWeight(1);


SnowLine_10.SetDefaultColor(Color.WHITE);
SnowLine_10.SetLineWeight(1);

SnowLine_11.SetDefaultColor(Color.WHITE);
SnowLine_11.SetLineWeight(1);

SnowLine_12.SetDefaultColor(Color.WHITE);
SnowLine_12.SetLineWeight(1);

SnowLine_11.SetDefaultColor(Color.WHITE);
SnowLine_11.SetLineWeight(1);

SnowLine_12.SetDefaultColor(Color.WHITE);
SnowLine_12.SetLineWeight(1);

SnowLine_13.SetDefaultColor(Color.WHITE);
SnowLine_13.SetLineWeight(1);

SnowLine_14.SetDefaultColor(Color.WHITE);
SnowLine_14.SetLineWeight(1);

SnowLine_15.SetDefaultColor(Color.WHITE);
SnowLine_15.SetLineWeight(1);

SnowLine_16.SetDefaultColor(Color.WHITE);
SnowLine_16.SetLineWeight(1);

SnowLine_17.SetDefaultColor(Color.WHITE);
SnowLine_17.SetLineWeight(1);

SnowLine_18.SetDefaultColor(Color.WHITE);
SnowLine_18.SetLineWeight(1);

SnowLine_19.SetDefaultColor(Color.WHITE);
SnowLine_19.SetLineWeight(1);

SnowLine_20.SetDefaultColor(Color.WHITE);
SnowLine_20.SetLineWeight(1);

SnowLine_21.SetDefaultColor(Color.WHITE);
SnowLine_21.SetLineWeight(1);

SnowLine_22.SetDefaultColor(Color.WHITE);
SnowLine_22.SetLineWeight(1);

SnowLine_23.SetDefaultColor(Color.WHITE);
SnowLine_23.SetLineWeight(1);

SnowLine_24.SetDefaultColor(Color.WHITE);
SnowLine_24.SetLineWeight(1);

SnowLine_25.SetDefaultColor(Color.WHITE);
SnowLine_25.SetLineWeight(1);

SnowLine_26.SetDefaultColor(Color.WHITE);
SnowLine_26.SetLineWeight(1);

SnowLine_27.SetDefaultColor(Color.WHITE);
SnowLine_27.SetLineWeight(1);

SnowLine_28.SetDefaultColor(Color.WHITE);
SnowLine_28.SetLineWeight(1);

SnowLine_29.SetDefaultColor(Color.WHITE);
SnowLine_29.SetLineWeight(1);

SnowLine_30.SetDefaultColor(Color.WHITE);
SnowLine_30.SetLineWeight(1);

SnowLine_31.SetDefaultColor(Color.WHITE);
SnowLine_31.SetLineWeight(1);

SnowLine_32.SetDefaultColor(Color.WHITE);
SnowLine_32.SetLineWeight(1);
 
Last edited by a moderator:

New Indicator: Buy the Dip

Check out our Buy the Dip indicator and see how it can help you find profitable swing trading ideas. Scanner, watchlist columns, and add-ons are included.

Download the indicator

I'm not an expert at coding but if you or anyone can code the fibgrid Droid auto swing high swing lows, for TOS that would be really great The alternatives are extremely expensive so don't want that direction. Thanks

I have used those alternatives you mentioned and they're really good but just looking and if we can get something which I posted that would be great.
 
Do you know what the original platform was? Elliott Waves are VooDoo. I've never seen anyone successfully write that code in ThinkScript or any other language for that matter. To many subjective variables.
 
All voodoo lines are fib extensions, expansions and retracements. You can use any ol' trading platform to draw your own! The code gives you the math you need to programing it, it should be straight forward. You can use "get" or "fetch" commands to get high and lows for defined period. I hope this helps. Also, FYI simpler just repackages stuff already invented! FYI this isn't rocket science .

10:09 Paris: It's basically a bunch of fib relationships. If you run a search query "voodoo thinkscript", you'll get some leads. Enough said.
10:09 MTS1: It's just multiple fib levels of a manually determined 'EW wave 1' range that can be adjusted; hence the subscription. Thre have been alternative posted here where you can do your own homework to set that initial range.
 
@HSNerd Not rocket science doesn't account for the fact that it still may be a pain in the *** to program and you can't compare it against the original to make sure your translation is correct.
 
First post! Glad to have found you.

I’ve recently been intrigued with W.D. Gann theory. I’ve been scouring the internet for script similar to my idea, but can’t find anything close to what I want so I tried my hand at coding. Long story short, I’m awful. I also posted this on Reddit, but it's dead there, so hoping for some help.

What I want is simple, that is horizontal lines, aka “tunnels”, at specified price levels. OR, a 10% color overlay between levels, say $0-12, $24-36, $48-60, etc. Each way achieves the same desired outcome, they just look different.

In the end, it might be great to have all 12 sections of the zodiac: Aries, Taurus, Gemini, etc, selectable in the customizing window. But maybe having only one zodiac sign per study is best? Not sure yet.

Each sign has their own tunnels, but below is my script for Aries only. It seems extremely text heavy for something so simple. And, in the customizing window, you have to click each plot ON/OFF as to whether or not you want to see that specific level. It’s quite time consuming, hoping to avoid that. I can give the other zodiac levels in a future post, but they all follow the same formula, just add 12 to the previous one up to 360.

Also, color seems like it should be easier to script than what I have below. And, magnification is an issue when they're all turned on. Hopefully that can be fixed, too.

So, my question to the community is if a mathematical formula could somehow be used for the plot? Please have a look. And, thank you!

Code:
#ARIES
#Tunnels Through Time
#0-29° plot for W.D. Gann's Wheel of 12

plot theLine12 = 12;
plot theLine24 = 24;
plot theLine36 = 36;
plot theLine48 = 48;
plot theLine60 = 60;
plot theLine72 = 72;
plot theLine84 = 84;
plot theLine96 = 96;
plot theLine108 = 108;
plot theLine120 = 120;
plot theLine132 = 132;
plot theLine144 = 144;
plot theLine156 = 156;
plot theLine168 = 168;
plot theLine180 = 180;
plot theLine192 = 192;
plot theLine204 = 204;
plot theLine216 = 216;
plot theLine228 = 228;
plot theLine240 = 240;
plot theLine252 = 252;
plot theLine264 = 264;
plot theLine276 = 276;
plot theLine288 = 288;
plot theLine300 = 300;
plot theLine312 = 312;
plot theLine324 = 324;
plot theLine336 = 336;
plot theLine348 = 348;
plot theLine360 = 360;

theLine12.SetDefaultColor(CreateColor(204,0,51));
theLine24.SetDefaultColor(CreateColor(204,0,51));
theLine36.SetDefaultColor(CreateColor(204,0,51));
theLine48.SetDefaultColor(CreateColor(204,0,51));
theLine60.SetDefaultColor(CreateColor(204,0,51));
theLine72.SetDefaultColor(CreateColor(204,0,51));
theLine84.SetDefaultColor(CreateColor(204,0,51));
theLine96.SetDefaultColor(CreateColor(204,0,51));
theLine108.SetDefaultColor(CreateColor(204,0,51));
theLine120.SetDefaultColor(CreateColor(204,0,51));
theLine132.SetDefaultColor(CreateColor(204,0,51));
theLine144.SetDefaultColor(CreateColor(204,0,51));
theLine156.SetDefaultColor(CreateColor(204,0,51));
theLine168.SetDefaultColor(CreateColor(204,0,51));
theLine180.SetDefaultColor(CreateColor(204,0,51));
theLine192.SetDefaultColor(CreateColor(204,0,51));
theLine204.SetDefaultColor(CreateColor(204,0,51));
theLine216.SetDefaultColor(CreateColor(204,0,51));
theLine228.SetDefaultColor(CreateColor(204,0,51));
theLine240.SetDefaultColor(CreateColor(204,0,51));
theLine252.SetDefaultColor(CreateColor(204,0,51));
theLine264.SetDefaultColor(CreateColor(204,0,51));
theLine276.SetDefaultColor(CreateColor(204,0,51));
theLine288.SetDefaultColor(CreateColor(204,0,51));
theLine300.SetDefaultColor(CreateColor(204,0,51));
theLine312.SetDefaultColor(CreateColor(204,0,51));
theLine324.SetDefaultColor(CreateColor(204,0,51));
theLine336.SetDefaultColor(CreateColor(204,0,51));
theLine348.SetDefaultColor(CreateColor(204,0,51));
theLine360.SetDefaultColor(CreateColor(204,0,51));

#endCode
 
@d4dahl Since you're into the Gann stuff, I found the following in my files from the Yahoo TOS Thinkscript group several years ago. Just something for you to check out. I must say all those lines look purty especially on a daily /ES chart. Sort of reminds me of John Carter's Voodoo Lines. Have fun out there!

Code:
# Gann Sq Of 9Time
# Yahoo TOS ThinkScript
# 6.27.2016

def h = highestall(high);

plot sh = h;
sh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
sh.SetDefaultColor(Color.RED);

def data45 = Sqrt(sh) - (45 / 180);
def data1 = Power(data45, 2);
plot line45 = data1;
line45.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line45.SetDefaultColor(Color.GREEN);

def data90 = Sqrt(sh) - (90 / 180);
def data2 = Power(data90, 2);
plot line90 = data2;
line90.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line90.SetDefaultColor(Color.GREEN);

def data135 = Sqrt(sh) - (135 / 180);
def data3 = Power(data135, 2);
plot line135 = data3;
line135.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line135.SetDefaultColor(Color.GREEN);

def data180 = Sqrt(sh) - (180 / 180);
def data4 = Power(data180, 2);
plot line180 = data4;
line180.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line180.SetDefaultColor(Color.GREEN);

def data225 = Sqrt(sh) - (225/ 180);
def data5 = Power(data225, 2);
plot line225 = data5;
line225.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line225.SetDefaultColor(Color.GREEN);

def data270 = Sqrt(sh) - (270 / 180);
def data6 = Power(data270, 2);
plot line270 = data6;
line270.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line270.SetDefaultColor(Color.GREEN);

def data315 = Sqrt(sh) - (315 / 180);
def data7 = Power(data315, 2);
plot line315 = data7;
line315.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line315.SetDefaultColor(Color.GREEN);

def data360 = Sqrt(sh) - (360 / 180);
def data8 = Power(data360, 2);
plot line360 = data8;
line360.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line360.SetDefaultColor(Color.GREEN);

def data405 = Sqrt(sh) - (405 / 180);
def data9 = Power(data405, 2);
plot line405 = data9;
line405.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line405.SetDefaultColor(Color.GREEN);

def data450 = Sqrt(sh) - (450 / 180);
def data10 = Power(data450, 2);
plot line450 = data10;
line450.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line450.SetDefaultColor(Color.GREEN);

def data495 = Sqrt(sh) - (495 / 180);
def data11 = Power(data495, 2);
plot line495 = data11;
line495.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
line495.SetDefaultColor(Color.GREEN);
 
Last edited:
The math and code are already laid out in the thread, the issue is picking the swing low and swing high of the elliot wave 1 for each individual stock. This can be done by opening up a long term chart and identifying elliot wave 1
 
@azmaestro The break script doesn't determine the initial levels, it just deobfuscates the "cp" numbers which are the initial swing low and swing high numbers for the lines. If you look at the syracusepro code posted above, the swing low and swing high numbers are listed for each ticker and not obfuscated. If you want to make your own lines you simply have to determine these numbers on your own chart
 
The math and code are already laid out in the thread, the issue is picking the swing low and swing high of the elliot wave 1 for each individual stock. This can be done by opening up a long term chart and identifying elliot wave 1
I ran Wolf wave, the support, and resistance similar to the voodoo line, for the time being, it's an alternative as the voodoo line is not being scripted by anyone yet. https://postimg.cc/1nnwLz7D/767c0482
Note that the 591 level of TSLA was exactly the same as the voodoo line SO has.
 
Last edited:
I ran Wolf wave, the support, and resistance similar to the voodoo line, for the time being, it's an alternative as the voodoo line is not being scripted by anyone yet. https://postimg.cc/1nnwLz7D/767c0482
Note that the 591 level of TSLA was exactly the same as the voodoo line SO has.
It's unlikely that it will be scripted since the initial data points come from outside of the scripts. However, it's something that can easily be accomplished by a community effort here if everyone understands the underlying principles of script and the lines.

The voodoo lines are all generated from the bottom two firelines. These two lines come from Elliot Wave 1 (the bottom of wave 1 and the top of wave 2) on a long-term chart. Elliot Waves are pictured here:
7UOhiSQ.gif


For example let's look at TSLA. I opened up the 2Y1D chart and drew Elliot Wave 1 (and possibly 2) on it. The bottom fire lines ended up being 35.4 and 188.96, with 35.4 conveniently being the low of the chart. Here is the drawing of Elliot Wave 1:


uiIw7qG.png


I used the ThinkScript code posted by OP and just plugged in the numbers I measured for TSLA and the lines were drawn (I deleted Snowlines for clarity). Pretty simple once you understand the concept behind the Elliot Wave/Fibonacci tools used to create the lines. Maybe a group of people can start maintaining the start/end values for various tickers. Hope this helps!
 
It's unlikely that it will be scripted since the initial data points come from outside of the scripts. However, it's something that can easily be accomplished by a community effort here if everyone understands the underlying principles of script and the lines.

The voodoo lines are all generated from the bottom two firelines. These two lines come from Elliot Wave 1 (the bottom of wave 1 and the top of wave 2) on a long-term chart. Elliot Waves are pictured here:
7UOhiSQ.gif


For example let's look at TSLA. I opened up the 2Y1D chart and drew Elliot Wave 1 (and possibly 2) on it. The bottom fire lines ended up being 35.4 and 188.96, with 35.4 conveniently being the low of the chart. Here is the drawing of Elliot Wave 1:


uiIw7qG.png


I used the ThinkScript code posted by OP and just plugged in the numbers I measured for TSLA and the lines were drawn (I deleted Snowlines for clarity). Pretty simple once you understand the concept behind the Elliot Wave/Fibonacci tools used to create the lines. Maybe a group of people can start maintaining the start/end values for various tickers. Hope this helps!
I think I am understanding, but how far back would you look back to? For example, the current entry on QQQ is 120.5 and 72.5, which corresponds to the very start of the chart 20-year chart. However, that draws it far below where the QQQs are currently. So my question is, how do you know the next set of swings to use?
 
AgentDoubleOhh and RajB Let me know what you figure out. I have always been super interested in Voodoo lines. The problem is entering all the data for individual stocks would be crazy time-consuming. I bet there is a way to better codify Elliot wave theory where you wouldn't have to enter all that data manually.
So I have this but its old... and I know how to update it I just don't know what start and end numbers to use.

Code:
# Automatic Opening Range and Fibonacci Levels
# By Prospectus @ https://readtheprospectus.wordpress.com
# Inspired by Trader-X @ http://traderx.blogspot.com
#
# This Thinkscript is designed to plot the OR high, low,
# 50% fib retrace, and fib extensions for the current day.
# This will only work correctly on time-based charts,
# where the OR timeframe is divisible by the bar period
# e.g. 30 minute OR, 10 min bars. An extra fib extension
# may be used if desired to create a target zone.
#
def na=double.nan;
#
# Define time that OR begins (in hhmm format,
# 0930 is the default):
#
input ORBegin = 0930;
#
# Define time that OR is finished (in hhmm format,
# 10:00 is the default):
#
input OREnd = 1000;
#
# Input first and second fib extension levels
# (default 1.382, 1.621):
#
Input FibExt1=1.382;
Input FibExt2=1.621;
#
# Show Today only? (Default Yes)
#
input ShowTodayOnly={"No", default "Yes"};
def s=ShowTodayOnly;
#
# Show Second fib extension? (Default No)
#
input ShowFibExt2={default "No", "Yes"};
def sf2=ShowFibExt2;
#
# Create logic for OR definition:
#
Def ORActive = if secondstilltime(OREnd)>0 AND secondsfromtime(ORBegin)>=0 then 1 else 0;
#
# Create logic to paint only current day post-open:
#
def today=if s==0 OR getday()==getlastday() AND secondsfromtime(ORBegin)>=0 then 1 else 0;
#
# Track OR High:
#
Rec ORHigh = if ORHigh[1]==0 or ORActive[1]==0 AND ORActive==1 then high else if ORActive AND high>ORHigh[1] then high else ORHigh[1];
#
# Track OR Low:
#
Rec ORLow = if ORLow[1]==0 or ORActive[1]==0 AND ORActive==1 then low else if ORActive AND low<ORLow[1] then low else ORLow[1];
#
# Calculate OR width:
#
Def ORWidth = ORHigh - ORLow;
#
# Calculate fib levels:
#
Def fib_mid = (ORHigh+ORLow)/2;
Def fib_ext_up1 = ORHigh + ORWidth*(FibExt1 - 1);
Def fib_ext_down1 = ORLow - ORWidth*(FibExt1 - 1);
Def fib_ext_up2= ORHigh + ORWidth*(FibExt2 - 1);
Def fib_ext_down2 = ORLow - ORWidth*(FibExt2 - 1);
#
# Define all the plots:
#
Plot ORH=if ORActive OR today<1 then na else ORHigh;
Plot ORL=if ORActive OR today<1 then na else ORLow;
Plot FibMid=if ORActive OR today<1 then na else fib_mid;
Plot FibExtUp1=if ORActive OR today<1 then na else fib_ext_up1;
Plot FibExtDown1=if ORActive OR today<1 then na else fib_ext_down1;
Plot FibExtUp2=if ORActive OR today<1 OR sf2<1 then na else fib_ext_up2;
Plot FibExtDown2=if ORActive OR today<1 OR sf2<1 then na else fib_ext_down2;
#
# Formatting:
#
ORH.setdefaultcolor(color.green);
ORH.setStyle(curve.Long_DASH);
ORH.setlineweight(3);
ORL.setdefaultcolor(color.red);
ORL.setStyle(curve.Long_DASH);
ORL.setlineweight(3);
FibMid.setdefaultcolor(color.gray);
FibMid.setStyle(curve.SHORT_DASH);
FibMid.setlineweight(3);
FibExtUp1.setdefaultcolor(color.green);
FibExtUp1.setStyle(curve.SHORT_DASH);
FibExtUp1.setlineweight(2);
FibExtDown1.setdefaultcolor(color.red);
FibExtDown1.setStyle(curve.SHORT_DASH);
FibExtDown1.setlineweight(2);
FibExtUp2.setdefaultcolor(color.green);
FibExtUp2.setStyle(curve.SHORT_DASH);
FibExtUp2.setlineweight(1);
FibExtDown2.setdefaultcolor(color.red);
FibExtDown2.setStyle(curve.SHORT_DASH);
FibExtDown2.setlineweight(1);
 
So I have this but its old... and I know how to update it I just don't know what start and end numbers to use.

Code:
# Automatic Opening Range and Fibonacci Levels
# By Prospectus @ https://readtheprospectus.wordpress.com
# Inspired by Trader-X @ http://traderx.blogspot.com
#
# This Thinkscript is designed to plot the OR high, low,
# 50% fib retrace, and fib extensions for the current day.
# This will only work correctly on time-based charts,
# where the OR timeframe is divisible by the bar period
# e.g. 30 minute OR, 10 min bars. An extra fib extension
# may be used if desired to create a target zone.
#
def na=double.nan;
#
# Define time that OR begins (in hhmm format,
# 0930 is the default):
#
input ORBegin = 0930;
#
# Define time that OR is finished (in hhmm format,
# 10:00 is the default):
#
input OREnd = 1000;
#
# Input first and second fib extension levels
# (default 1.382, 1.621):
#
Input FibExt1=1.382;
Input FibExt2=1.621;
#
# Show Today only? (Default Yes)
#
input ShowTodayOnly={"No", default "Yes"};
def s=ShowTodayOnly;
#
# Show Second fib extension? (Default No)
#
input ShowFibExt2={default "No", "Yes"};
def sf2=ShowFibExt2;
#
# Create logic for OR definition:
#
Def ORActive = if secondstilltime(OREnd)>0 AND secondsfromtime(ORBegin)>=0 then 1 else 0;
#
# Create logic to paint only current day post-open:
#
def today=if s==0 OR getday()==getlastday() AND secondsfromtime(ORBegin)>=0 then 1 else 0;
#
# Track OR High:
#
Rec ORHigh = if ORHigh[1]==0 or ORActive[1]==0 AND ORActive==1 then high else if ORActive AND high>ORHigh[1] then high else ORHigh[1];
#
# Track OR Low:
#
Rec ORLow = if ORLow[1]==0 or ORActive[1]==0 AND ORActive==1 then low else if ORActive AND low<ORLow[1] then low else ORLow[1];
#
# Calculate OR width:
#
Def ORWidth = ORHigh - ORLow;
#
# Calculate fib levels:
#
Def fib_mid = (ORHigh+ORLow)/2;
Def fib_ext_up1 = ORHigh + ORWidth*(FibExt1 - 1);
Def fib_ext_down1 = ORLow - ORWidth*(FibExt1 - 1);
Def fib_ext_up2= ORHigh + ORWidth*(FibExt2 - 1);
Def fib_ext_down2 = ORLow - ORWidth*(FibExt2 - 1);
#
# Define all the plots:
#
Plot ORH=if ORActive OR today<1 then na else ORHigh;
Plot ORL=if ORActive OR today<1 then na else ORLow;
Plot FibMid=if ORActive OR today<1 then na else fib_mid;
Plot FibExtUp1=if ORActive OR today<1 then na else fib_ext_up1;
Plot FibExtDown1=if ORActive OR today<1 then na else fib_ext_down1;
Plot FibExtUp2=if ORActive OR today<1 OR sf2<1 then na else fib_ext_up2;
Plot FibExtDown2=if ORActive OR today<1 OR sf2<1 then na else fib_ext_down2;
#
# Formatting:
#
ORH.setdefaultcolor(color.green);
ORH.setStyle(curve.Long_DASH);
ORH.setlineweight(3);
ORL.setdefaultcolor(color.red);
ORL.setStyle(curve.Long_DASH);
ORL.setlineweight(3);
FibMid.setdefaultcolor(color.gray);
FibMid.setStyle(curve.SHORT_DASH);
FibMid.setlineweight(3);
FibExtUp1.setdefaultcolor(color.green);
FibExtUp1.setStyle(curve.SHORT_DASH);
FibExtUp1.setlineweight(2);
FibExtDown1.setdefaultcolor(color.red);
FibExtDown1.setStyle(curve.SHORT_DASH);
FibExtDown1.setlineweight(2);
FibExtUp2.setdefaultcolor(color.green);
FibExtUp2.setStyle(curve.SHORT_DASH);
FibExtUp2.setlineweight(1);
FibExtDown2.setdefaultcolor(color.red);
FibExtDown2.setStyle(curve.SHORT_DASH);
FibExtDown2.setlineweight(1);
Well, that isn't really an Elliot wave indicator. That's more of a standard opening range indicator. Looks like it works fine on an intraday chart, so not sure what you mean by changing the start and end inputs.
 
Oooooops!! Wrong one. Here you go
Ok so played around with it for a while, and found that basically, the numbers are formatted like 00000xxxx000xxxx. The first row of x's is the high of the Elliot wave to two decimal places and the second row is the low value. I am not sure why but sometimes that is reversed and the lower value is first. The only other thing that changes is the first string of 00000. It is either 10000, 11000, 10000, 00000, 12000, and it changes the spacing of the lines. You really just need some method of finding those two inputs.

@RajB and @AgentDoubleOhh if either of you has a discord I would be down to message more about it. It's kinda hard to get much progress in a thread.
 
Last edited:
Most likely, the reason the QQQ's extend much further than the voodoo lines is that waves can extend. Are you guys trying to locate the part of the Elliot Wave code that identifies the end of each wave cycle so voodoo lines can automatically locate the next wave 1-2?
I have an elliot wave code for TOS and have adapted it to project the end of wave 3 and 5 with pretty good success.
I know very little about voodoo lines, but I know plenty on Elliot Wave. The real challenge comes with the corrective waves.
 

Volatility Trading Range

VTR is a momentum indicator that shows if a stock is overbought or oversold based on its Weekly and Monthly average volatility trading range.

Download the indicator

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
464 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