SHOW:
|
|
- or go back to the newest paste.
| 1 | - | # IV_Rank - IMPLIED VOLATILITY RANK - Adds a colored label to the chart showing IV Rank |
| 1 | + | # IV_with_ivRank - IMPLIED VOLATILITY WITH IV RANK - Plots IV over the chart period with IV rank at right |
| 2 | # | |
| 3 | - | # This study simply places a label on the chart showing the current IV |
| 3 | + | # This combined study shows implied volatility graphically over time, as |
| 4 | - | # Rank, otherwise known as IV Percentile. In addition, the label is |
| 4 | + | # well as the current IV rank (a.k.a IV percentile) at the right of the |
| 5 | - | # color-coded to hint at the IV Rank, where lower values appear red and |
| 5 | + | # chart. In addition, the chart and its labels are color-coded to hint at |
| 6 | - | # higher values are green, suggesting greater premium available to be |
| 6 | + | # the IV rank, where lower values appear red and higher values are green, |
| 7 | - | # sold at a higher IV Rank. |
| 7 | + | # suggesting greater premium available to be sold at a higher IV rank. |
| 8 | # | |
| 9 | - | # For a more complex presentation of IV Rank in the context of past implied |
| 9 | + | # For a simpler study which only places an IV Rank label on the primary |
| 10 | - | # volatility, see my other thinkScript: http://pastebin.com/0Vumd8Gt |
| 10 | + | # chart, see my other thinkScript: http://pastebin.com/jRDkHvXE |
| 11 | # | |
| 12 | # By: Chris Baker <[email protected]> @ChrisBaker97 | |
| 13 | - | # Latest version maintained at: http://pastebin.com/jRDkHvXE |
| 13 | + | # Latest version maintained at: http://pastebin.com/0Vumd8Gt |
| 14 | # More thinkScripts at: http://pastebin.com/u/ChrisBaker97 | |
| 15 | # | |
| 16 | # Credit goes to Allen Everhart (http://www.smalldoginvestor.com) for the | |
| 17 | - | # original idea and implementation of IV Percentile as a chart label. |
| 17 | + | # original idea and implementation of IV percentile as a chart label. |
| 18 | # | |
| 19 | # Portions of this code are derived from the IV_percentile Scan tab | |
| 20 | # thinkScript included with the thinkorswim platform by TD Ameritrade. | |
| 21 | # | |
| 22 | # This thinkScript is designed for use in the Charts tab. | |
| 23 | # | |
| 24 | # This work is licensed under the Creative Commons Attribution-ShareAlike | |
| 25 | # 3.0 Unported License. To view a copy of this license, visit: | |
| 26 | # http://creativecommons.org/licenses/by-sa/3.0/deed.en_US | |
| 27 | # | |
| 28 | - | # This version of the IV Rank study adds dynamic color-coding, for quick |
| 28 | + | # I created this study to provide more context around the current IV rank |
| 29 | - | # identification of high- or low-IV Rank. The code has also been |
| 29 | + | # numerical value. While useful, the IV rank simply shows the percentile |
| 30 | - | # streamlined for faster execution and ease of interpretation. There is |
| 30 | + | # level of implied volatility over the aggregation period, and this can |
| 31 | - | # also no need to specify a period for the study - the entire aggregation |
| 31 | + | # be skewed by outliers — high or low IV for a brief period of time. This |
| 32 | - | # period on the chart is used. |
| 32 | + | # visual depiction shows IV cycles over time, and allows one to get a |
| 33 | # better feel for how the current IV level compares to historical trends. | |
| 34 | # | |
| 35 | # The user input brightness can range from 0 to 100 and controls the | |
| 36 | # intensity of the plot's red-green color scheme. A lower brightness will | |
| 37 | # show up better on a light background, and vice versa. | |
| 38 | ||
| 39 | input brightness = 80 ; # overall brightness of IV display | |
| 40 | - | declare upper ; |
| 40 | + | |
| 41 | - | declare hide_on_intraday ; # IV shows N/A for intraday aggregations, so we hide it |
| 41 | + | declare lower ; |
| 42 | declare hide_on_intraday ; | |
| 43 | - | def ivClean = if isNaN(impVolatility()) # if IV data doesn't exist for a particular period ... |
| 43 | + | |
| 44 | - | then ivClean[1] # ... set it to the previous value so it won't taint the hi/lo |
| 44 | + | def ivClean = if isNaN(impVolatility()) # if IV data doesn't exist for a particular period... |
| 45 | then ivClean[1] # ...set it to the previous value so it won't taint the hi/low | |
| 46 | else impVolatility() * 100 ; | |
| 47 | ||
| 48 | def ivHi = HighestAll(ivClean) ; # highest IV over range | |
| 49 | def ivLo = LowestAll(ivClean) ; # lowest IV over range | |
| 50 | ||
| 51 | def ivRange = ivHi - ivLo ; # IV range from low to high | |
| 52 | ||
| 53 | def ivRank = Round( 100 * (ivClean - ivLo) / ivRange, 1) ; # IV rank | |
| 54 | ||
| 55 | # Define a color level from 0 to 255 based on current IV% | |
| 56 | def level = ivRank * 2.55; | |
| 57 | ||
| 58 | # Check bounds and convert brightness input to an intensity factor between 0.2 and 1.0 | |
| 59 | def intensity = if brightness < 0 then 0.2 | |
| 60 | else if brightness > 100 then 1.0 | |
| 61 | else 0.2 + (brightness * 0.008) ; | |
| 62 | ||
| 63 | # Calculate red and green color levels (modified by intensity) for the color function | |
| 64 | def rLvl = intensity * (255 - level) ; | |
| 65 | def gLvl = intensity * (level) ; | |
| 66 | - | # Add label, colored according to current IV Rank. |
| 66 | + | |
| 67 | - | AddLabel(yes, "IV Rank: " + ivRank + "%", CreateColor(rLvl, gLvl, 0)) ; |
| 67 | + | # Plot raw implied volatility, colored according to IV Rank at each point. |
| 68 | plot iv = if isNaN(impVolatility()) # check to make sure we're not out of data ... | |
| 69 | then double.NaN # ... and if we are, plot nothing ... | |
| 70 | else Round( ivClean, 1) ; # ... else plot the raw IV | |
| 71 | iv.AssignValueColor(CreateColor(rLvl, gLvl, 0)) ; # color according to IV Rank | |
| 72 | iv.SetLineWeight(2) ; | |
| 73 | ||
| 74 | # Plot high and low raw IV bubbles. | |
| 75 | AddChartBubble(ivClean == ivHi and ! isNaN(impVolatility()), | |
| 76 | ivHi,"IV Hi: " + round(ivHi,1) + "%",Color.LIGHT_GRAY,up = yes) ; | |
| 77 | AddChartBubble(ivClean == ivLo and ! isNaN(impVolatility()), | |
| 78 | ivLo,"IV Lo: " + round(ivLo,1) + "%",Color.LIGHT_GRAY,up = no) ; | |
| 79 | ||
| 80 | # If the chart is set to extend to the right, we need to count how many bars | |
| 81 | # there are before we run out of data, in order to properly position the | |
| 82 | # IV Rank bubble horizontally. | |
| 83 | def maxBars = HighestAll(if isNan(imp_volatility()) then 0 else BarNumber()); | |
| 84 | ||
| 85 | # Plot a bubble at the last data point, showing the present IV Rank. | |
| 86 | AddChartBubble(BarNumber() == maxBars,iv,"IV Rank: " + Round(ivRank,1) + "%",iv.TakeValueColor(),up = yes) ; |