Auto Fib (Fibonacci) Levels Indicator for ThinkorSwim

L

lindosskier

Member
@BenTen My bad, that would be helpful right? Here they are:

Code:
plot Hi = high(period = "MONTH")[1];
plot Lo = low(period = "MONTH")[1];
plot MonthlyMid = ((hi-lo)*0.5)+lo;

And for the scan, here is the error: "Secondary period not allowed: MONTH."
It shows this for every timeframe of scan, but the monthly.

Thanks again.
 
BenTen

BenTen

Administrative
Staff
VIP
@lindosskier That's because ThinkorSwim scanner does not support "secondary period" like they stated.
 
B

BusterMan83

New member
VIP
Has anyone come across an auto-drawing fibonacci study that allows you to draw levels from multiple different timeframes on one chart? Basically if you're in the 5 minute you would be able to see the levels from let's say the 5day/15 min and the 10day/30 minute and so on since each aggregated chart contain different minima and maxima. Thanks a lot.
I modified a script from WalkingBallista & BenTen to suit my trading style, but I think it might be what you want. All you would need to do is add the study multiple times to the chart, then set each study to a different time frame.
Note though I only use the 127%, 100%, 61.8%, 50%, and 0%. So you may need to add some lines depending upon your trading style.

To add extra Fib lines just copy the following code and paste it into the code further down below:
Code:
input fib127 = 1.272;
plot h127 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PH + range*(fib127-1);
h127.DefineColor("Color", Color.DARK_GREEN);
h127.AssignValueColor(h127.Color("Color"));
h127.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
Now just change every "127" to what ever Fib number you need.

On the code line
Code:
input fib127 = 1.272;
you'll have to put your Fib number in decimal form as well. To do that simply divide your Fib number by 100 to get the number in decimal form.

Also you can use this part of the code line from above to set the lines color:
Code:
h127.DefineColor("Color", Color.DARK_GREEN);
*Just click the word "Dark_Green" and a menu on the right will appear and you can choose from a list of colors.

Repeat all the above steps for each extra line you need, and thats it.



The code I borrowed from WalkingBallista & BenTen is as follows:
Code:
#
# WalkingBallista & BenTen
# https://usethinkscript.com/d/153-high-and-low-with-fibonacci-retracement-indicator-for-thinkorswim
#Edited by BusterMan83 11/15/20

input aggregationPeriod = AggregationPeriod.DAY;
input ShowTodayOnly = yes;

def PH = high(period = aggregationPeriod)[1];
def PL = low(period = aggregationPeriod)[1];
def PO = open(period = aggregationPeriod);
def DL = low(period = AggregationPeriod.DAY);
def Today = if GetDay() == GetLastDay() then 1 else 0;
def Week = if GetWeek() == GetLastWeek() then 1 else 0;
def Month = if GetMonth() == GetLastMonth() then 1 else 0;
def Year = if GetYear() == GetLastYear() then 1 else 0;
def range = PH - PL;

input fib127 = 1.272;
input fib100 = 1;
input fib618 = 0.618;
input fib50  = 0.5;

plot h127 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PH + range*(fib127-1);
h127.DefineColor("Color", Color.DARK_GREEN);
h127.AssignValueColor(h127.Color("Color"));
h127.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

plot h100 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PH + range*(fib100 - 1);
h100.DefineColor("Color", Color.DARK_GREEN);
h100.AssignValueColor(h100.Color("Color"));
h100.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

plot h618 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PH + range*(fib618 - 1);
h618.DefineColor("Color", Color.YELLOW);
h618.AssignValueColor(h618.Color("Color"));
h618.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

plot h50 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PH + range*(fib50 - 1);
h50.DefineColor("Color", Color.YELLOW);
h50.AssignValueColor(h50.Color("Color"));
h50.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

plot H0 = if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else PL;
H0.DefineColor("Color", Color.RED);
H0.AssignValueColor(H0.Color("Color"));
H0.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

plot HL =  if ShowTodayOnly and !Today and aggregationPeriod == AggregationPeriod.DAY then Double.NaN else if ShowTodayOnly and !Week and aggregationPeriod == AggregationPeriod.WEEK then Double.NaN else if ShowTodayOnly and !Month and aggregationPeriod == AggregationPeriod.Month then Double.NaN else if ShowTodayOnly and !Year and aggregationPeriod == AggregationPeriod.Year then Double.NaN else DL;
HL.DefineColor("Color", Color.WHITE);
HL.AssignValueColor(HL.Color("Color"));
HL.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
 
Last edited:
A

abram

New member
can any help moving the price clouds to the left just next to fib percentage? Or somewhere where it doesn't get over the bars



Code:
##Begin

#hint: <b>Fibonacci Retracements</b>\nFibonacci retracements use horizontal lines to indicate areas of support or resistance at the key Fibonacci levels before it continues in the original direction. These levels are created by drawing a trendline between two extreme points and then dividing the vertical distance by the key Fibonacci ratios of: 23.6%, 38.2%, 50%, 61.8%, 78.6%, and 100%.


#hint Price: Price used in the alerts on crossing retracement lines. <b>(Default is Close)</b>
#hint onExpansion: Determines if the retracement lines are projected past the current bar into the right side expansion <b>(Default is Yes)</b>
#hint Extend_to_left: Determines if the retracement lines are extended to the left side of the chart. <b>(Default is No)</b>

#hint Coefficient0: Retracement Line 0: Retracement from the highest high to the lowest low.\n <b>(Default is 0%)</b>
#hint Coefficient_1: Retracement Line 1: Retracement from the highest high to the lowest low.\n <b>(Default is 23.6%)</b>
#hint Coefficient_2: Retracement Line 2: Retracement from the highest high to the lowest low.\n <b>(Default is 38.2%)</b>
#hint Coefficient_3: Retracement Line 3: Retracement from the highest high to the lowest low.\n <b>(Default is 50%)</b>
#hint Coefficient_4: Retracement Line 4: Retracement from the highest high to the lowest low.\n <b>(Default is 61.8%)</b>
#hint Coefficient_5: Retracement Line 5: Retracement from the highest high to the lowest low.\n <b>(Default is 78.6%)</b>
#hint Coefficient_6: Retracement Line 6: Retracement from the highest high to the lowest low.\n <b>(Default is 100%)</b>

#wizard input: Price
#wizard text: Inputs: Price:
#wizard input: onExpansion
#wizard text: onExpansion:
#wizard input: Extend_to_left
#wizard text: Extend_to_left:
#wizard input: Coefficient0
#wizard text: Coefficient0:
#wizard input: Coefficient_1
#wizard text: Coefficient_1:
#wizard input: Coefficient_2
#wizard text: Coefficient_2:
#wizard input: Coefficient_3
#wizard text: Coefficient_3:
#wizard input: Coefficient_4
#wizard text: Coefficient_4:
#wizard input: Coefficient_5
#wizard text: Coefficient_5:
#wizard input: Coefficient_6
#wizard text: Coefficient_6:

input price = close;
input high = high;
input low = low;
input onExpansion = Yes;
input Extend_to_left = no;
input Coefficient0 = 0.000;
input coefficient_1 = .236;
input Coefficient_2 = .382;
input Coefficient_3 = .500;
input Coefficient_4 = .618;
Input Coefficient_5 = .786;
input Coefficient_6 = 1.000;

def a = HighestAll(high);
def b = LowestAll(low);
def barnumber = barNumber();
def c = if high == a then barnumber else double.nan;
def d = if low == b then barnumber else double.nan;
rec highnumber = compoundValue(1, if IsNaN(c) then highnumber[1] else c, c);
def highnumberall = HighestAll(highnumber);
rec lownumber = compoundValue(1, if IsNaN(d) then lownumber[1] else d, d);
def lownumberall = LowestAll(lownumber);

def upward = highnumberall > lownumberall;
def downward = highnumberall < lownumberall;

def x = AbsValue(lownumberall - highnumberall );

def slope = (a - b) / x;
def slopelow = (b - a) / x;

def day = getDay();
def month = getMonth();
def year = getYear();
def lastDay = getLastDay();
def lastmonth = getLastMonth();
def lastyear = getLastYear();
def isToday = if(day == lastDay and month == lastmonth and year == lastyear, 1, 0);
def istodaybarnumber = HighestAll(if isToday then barnumber else double.nan);

def line = b + (slope * (barnumber - lownumber));
def linelow = a + (slopelow * (barnumber - highnumber));

def currentlinelow = if barnumber <= lownumberall then linelow else double.nan;
def currentline = if barnumber <= highnumberall then line else double.nan;

Plot FibFan =  if  downward then currentlinelow else if upward then currentline else double.nan;
FibFan.SetStyle(Curve.SHORT_DASH);
FibFan.AssignValueColor(color.cyan);
fibfan.hidebubble();

def range =  a - b;

Plot Retracement0 = if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient0))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient0)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient0))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient0)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient0))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient0)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient0))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient0)) else double.nan;
Retracement0.assignvaluecolor(color.cyan);
retracement0.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement0, concat( "$", round(retracement0, 2)), color.cyan, yes);
AddChartBubble((downward and barnumber == highnumberall), retracement0, concat( (coefficient0 * 100), "%"), color.cyan, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement0, concat( (coefficient0 * 100), "%"), color.cyan, yes);


Plot Retracement1 =  if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_1))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_1)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_1))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_1)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_1))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_1)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_1))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_1)) else double.nan;
Retracement1.assignvaluecolor(color.cyan);
retracement1.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement1, concat( "$", round(retracement1, 2)), color.cyan, yes);
AddChartBubble((downward and barnumber == highnumberall), retracement1, concat( (coefficient_1 * 100), "%"), color.cyan, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement1, concat( (coefficient_1 * 100), "%"), color.cyan, yes);

Plot Retracement2 =if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_2))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_2)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_2))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_2)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_2))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_2)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_2))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_2)) else double.nan;
Retracement2.assignvaluecolor(color.cyan);
retracement2.hidebubble();
AddChartBubble("time condition" = (barnumber == istodaybarnumber), "price location" = retracement2, text = Concat( "$", Round(retracement2, 2)), color = Color.CYAN);
AddChartBubble((downward and barnumber == highnumberall), retracement2, concat( (coefficient_2 * 100), "%"), color.cyan, No);
AddChartBubble("time condition" = (upward and barnumber == lownumberall), "price location" = retracement2, text = Concat( (coefficient_2 * 100), "%"), color = Color.CYAN);


Plot Retracement3 = if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_3))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_3)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_3))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_3)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_3))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_3)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_3))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_3)) else double.nan;
Retracement3.assignvaluecolor(color.red);
retracement3.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement3, concat( "$", round(retracement3, 2)), color.white, yes);
AddChartBubble((downward and barnumber == highnumberall), retracement3, concat( (coefficient_3 * 100), "%"), Color.WHITE, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement3, concat( (coefficient_3 * 100), "%"), Color.WHITE, yes);


Plot Retracement4 = if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_4))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_4)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_4))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_4)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_4))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_4)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_4))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_4)) else double.nan;
Retracement4.assignvaluecolor(color.cyan);
retracement4.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement4, concat( "$", round(retracement4, 2)), color.cyan, yes);
AddChartBubble((downward and barnumber == highnumberall), retracement4, concat( (coefficient_4 * 100), "%"), color.cyan, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement4, concat( (coefficient_4 * 100), "%"), color.cyan, yes);

Plot Retracement5 = if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_5))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_5)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_5))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_5)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_5))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_5)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_5))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_5)) else double.nan;
Retracement5.assignvaluecolor(color.cyan);
retracement5.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement5, concat( "$", round(retracement5, 2)), color.cyan, yes);
AddChartBubble((downward and barnumber == highnumberall), retracement5, concat( (coefficient_5 * 100), "%"), color.cyan, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement5, concat( (coefficient_5 * 100), "%"), color.cyan, yes);


Plot Retracement6 = if downward and !onexpansion and !extend_to_left and barnumber >= highnumberall and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_6))) else if upward and !extend_to_left and !onexpansion and barnumber >= lownumberall and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_6)) else if downward and onexpansion and !extend_to_left and barnumber >= highnumberall then highestall((b + (range *  coefficient_6))) else if upward and onexpansion and barnumber >= lownumberall and !extend_to_left then highestall(a - (range * coefficient_6)) else if downward and !onexpansion and extend_to_left and barnumber <= istodaybarnumber then highestall((b + (range *  coefficient_6))) else if upward and extend_to_left and !onexpansion and barnumber <= istodaybarnumber then highestall(a - (range * coefficient_6)) else if downward and onexpansion and extend_to_left then highestall((b + (range *  coefficient_6))) else if upward and onexpansion and extend_to_left then highestall(a - (range * coefficient_6)) else double.nan;
Retracement6.assignvaluecolor(color.cyan);
retracement6.hidebubble();
AddChartBubble((barnumber == istodaybarnumber), retracement6, concat( "$", round(retracement6, 2)), color.cyan, yes);

AddChartBubble((downward and barnumber == highnumberall), retracement6, concat( (coefficient_6 * 100), "%"), color.cyan, yes);
AddChartBubble((upward and barnumber == lownumberall), retracement6, concat( (coefficient_6 * 100), "%"), color.cyan, yes);


alert((price crosses below Retracement0) , "Price crosses below Retracement Line 0");
alert((price crosses above Retracement0) , "Price crosses above Retracement Line 0");
alert((price crosses below Retracement1) , "Price crosses below Retracement Line 1");
alert((price crosses above Retracement1) , "Price crosses above Retracement Line 1");
alert((price crosses below Retracement2) , "Price crosses below Retracement Line 2");
alert((price crosses above Retracement2) , "Price crosses above Retracement Line 2");
alert((price crosses below Retracement3) , "Price crosses below Retracement Line 3");
alert((price crosses above Retracement3) , "Price crosses above Retracement Line 3");
alert((price crosses below Retracement4) , "Price crosses below Retracement Line 4");
alert((price crosses above Retracement4) , "Price crosses above Retracement Line 4");
alert((price crosses below Retracement5) , "Price crosses below Retracement Line 5");
alert((price crosses above Retracement5) , "Price crosses above Retracement Line 5");
alert((price crosses below Retracement6) , "Price crosses below Retracement Line 6");
alert((price crosses above Retracement6) , "Price crosses above Retracement Line 6");

@BenTen @horserider @tomsk
Have you found the solution to this?
 

Similar threads

Top