Advertisement
Guest User

QuickCheck - TradingView

a guest
Oct 8th, 2022
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 26.55 KB | Source Code | 0 0
  1. //@version=5
  2. //###########################################################################
  3. //#QuickCheck - Automatically Validate Basic Criteria For Stock Selection
  4. //#Creator: u/--SubZer0--
  5. //#Version: 1.0
  6. //#Last Updated: 09.28.22
  7.  
  8. //#Attributtion:
  9. //#RealRelativeStrength: u/WorkPiece
  10. //#RelativeVolume: u/HurlTeaInTheSea
  11. //#############################################################################
  12.  
  13.  
  14. indicator(title="QuickCheck", overlay=true)
  15.  
  16. //----------------------------------------------
  17. //User Configuration
  18. var string G1 = "Display"
  19. string  tableYposInput = input.string("bottom", "Indicator position...........", inline = "1", options = ["top", "middle", "bottom"], group = G1)
  20. string  tableXposInput = input.string("left", "", inline = "1", options = ["left", "center", "right"], group = G1)
  21.  
  22. string symbolUpString = input.string("▲", title="Symbol Prefix.............    ↑", inline = "2", group=G1)
  23. var symbolDownString = input.string("▼", title=" ↓", inline = "2", group=G1)
  24.  
  25. StockUpColor = input.color(#00ff00, title="Ticker Color............... ↑", inline = "3", group=G1)
  26. StockDownColor = input.color(color.red, title=" ↓", inline = "3", group=G1)
  27.  
  28. meetCriteriaStateColor  = input.color(#00feff, title="Meets Criteria?........... Y", inline = "4", group=G1)
  29. doesNotMeetCriteriaStateColor = input.color(#e6e6e6, title="N", inline = "4", group=G1)
  30. warningStateColor = input.color(#ffeb3b, title="Warn", inline = "4", group=G1)
  31.  
  32. TableBorderColor = input.color(#d1d4dc, title="Table Border Color.........", inline="6", group=G1)
  33. SeparatorRowColor = input.color(color.white, title="Separator Row Color.......", inline="5", group=G1)
  34.  
  35. string G2 = "Indicator Inputs"
  36. comparedWithSecurity = input.symbol(title="Compare With", defval="SPY", group=G2)
  37. var rrsLength = input.int(12, title="RRS Length", group=G2)
  38. var atrLength = input.int(14, title="ATR Length", group=G2)
  39. var desiredMinATR = input.float(2.5, title="Desired Min ATR", group=G2)
  40. var nDayAverageForRVOL = input.int(20, title="N Day Average (For RVOL)", group=G2)
  41. var nDayAverageForDailyVol = input.int(50, title="N Day Average (For Daily Volume)", group=G2)
  42. var desiredAvgVolume = input.int(5000000, title="Desired Min Daily Avg Vol", group=G2)
  43.  
  44.  
  45. //----------------------------------------------
  46. // defaults
  47. tableRows = 20
  48. tableColumns = 2
  49. tableCellWidth1 = 4
  50. tableCellWidth2 = 3
  51. nCurrentRow = 0
  52. symbolMark = ""
  53. cellBG = color.black
  54. textSize =  size.normal
  55.  
  56. //----------------------------------------------
  57. //Get relevant metrics for the ticker representing the Market
  58. tM = ticker.new(syminfo.prefix(symbol=comparedWithSecurity), syminfo.ticker(symbol=comparedWithSecurity))
  59. YCloseM = request.security(tM, 'D', close[1], lookahead = barmerge.lookahead_on)
  60. TCurrentPriceM = request.security(tM, 'D', close, lookahead = barmerge.lookahead_on)
  61.  
  62. dMarketDayChange = TCurrentPriceM - YCloseM
  63. isMarketUp = dMarketDayChange > 0
  64.  
  65.  
  66. //----------------------------------------------
  67. //Get relevant metrics for current stock
  68. tS = ticker.new(syminfo.prefix, syminfo.ticker)
  69. YCloseS = request.security(tS, 'D', close[1], lookahead = barmerge.lookahead_on)
  70. YHighS = request.security(tS, 'D', high[1], lookahead = barmerge.lookahead_on)
  71. YLowS = request.security(tS, 'D', low[1], lookahead = barmerge.lookahead_on)
  72. TOpenS = request.security(tS, 'D', open, lookahead = barmerge.lookahead_on)
  73. TVWAPS = request.security(tS, timeframe="", expression=ta.vwap(hlc3))
  74. TCurrentPriceS = request.security(tS, 'D', close, lookahead = barmerge.lookahead_on)
  75. DAvgVol = request.security(tS, 'D', ta.sma(volume, nDayAverageForDailyVol))
  76. TVolume = request.security(tS, 'D', volume, lookahead = barmerge.lookahead_on)
  77. TVolFill = TVolume / DAvgVol
  78. D50SMA = request.security(tS, 'D', ta.sma(close, 50))
  79. D100SMA = request.security(tS, 'D', ta.sma(close, 100))
  80. D200SMA = request.security(tS, 'D', ta.sma(close, 200))
  81. DCurrentATR = request.security(tS, 'D', ta.atr(atrLength))
  82.  
  83. dStockDayChange = TCurrentPriceS - YCloseS
  84. isStockUp = dStockDayChange > 0
  85.  
  86.  
  87. //----------------------------------------------
  88. // Calculate Relative Strength
  89. // © WorkPiece 12.28.21
  90.  
  91. //##########Rolling Price Change##########
  92. comparedClose = request.security(tM, timeframe="", expression=close)
  93. comparedRollingMove = comparedClose - comparedClose[rrsLength]
  94. sClose = request.security(tS, timeframe="", expression=close)
  95. symbolRollingMove = sClose - sClose[rrsLength]
  96.  
  97.  
  98. //##########Rolling ATR Change##########
  99. symbolRollingATR = request.security(tS, timeframe="", expression=ta.atr(rrsLength)[1])
  100. comparedRollingATR = request.security(tM, timeframe="", expression=ta.atr(rrsLength)[1])
  101.  
  102. //##########Calculations##########
  103. powerIndex = comparedRollingMove / comparedRollingATR
  104. TRRS = (symbolRollingMove - powerIndex * symbolRollingATR) / symbolRollingATR
  105.  
  106.  
  107.  
  108.  
  109. //----------------------------------------------
  110. // Calculate RVOL
  111. // /u/HurlTeaInTheSea v1.0
  112. // Intraday Relative Volume (RVol) indicator:
  113.  
  114. // still works on higher timeframe but it's not a "day" average anymore, so throw error to avoid confusion
  115. if not (timeframe.isintraday or timeframe.isdaily)
  116.    runtime.error("RVol is only valid for daily timeframe or lower")
  117.  
  118. var cVol = 0.0
  119. var newDayBars = array.new_int()
  120.  
  121. // detect new session of day
  122. isNewDay() =>
  123.    t = time('D') // by default, time() follows symbol's session
  124.     na(t[1]) and not na(t) or t[1] < t
  125.  
  126. if isNewDay()
  127.     // reset cumulative volume
  128.     cVol := 0
  129.    
  130.     // save new bars in circular array of length nDayAverageForRVOL + 1
  131.     array.push(newDayBars, bar_index)
  132.     if (array.size(newDayBars) > nDayAverageForRVOL + 1)
  133.         array.shift(newDayBars)
  134.    
  135. // cumulative volume
  136. cVol := cVol + volume
  137.  
  138. // calculate relative volume
  139. relativeVolume() =>
  140.     aVol = 0.0
  141.     // check enough nDayAverageForRVOL saved in history to run (current day also saved)
  142.     len = array.size(newDayBars)
  143.     if len >= nDayAverageForRVOL + 1
  144.         // SMA of historical cumulative volume up to but not including current time of day
  145.         for i = 0 to len - 2
  146.             b1 = array.get(newDayBars, i)
  147.             b2 = array.get(newDayBars, i + 1)
  148.            
  149.             // use historical date but carry over current hour, minutes, seconds (this method is exact and avoids DST bugs)
  150.             t1 = time[bar_index - b1]
  151.             tLookup = timestamp(year(t1), month(t1), dayofmonth(t1), hour(time), minute(time), second(time))
  152.            
  153.             // get latest bar clamped in range [b1, b2) that is equal to or precedes given time (binary search for speed)
  154.             int lo = math.max(0, b1) - 1
  155.             int hi = math.max(0, b2)
  156.             while 1 + lo < hi
  157.                 int mi = lo + math.floor((hi - lo) / 2)
  158.                 if (tLookup < time[bar_index - mi])
  159.                     hi := mi
  160.                 else
  161.                     lo := mi
  162.             lo := lo < b1 ? hi : lo
  163.             bClosest = b1 < b2 ? lo : -1
  164.            
  165.             // add cumulative volume to SMA calculation
  166.             tClosest = time[bar_index - bClosest]
  167.             aVol := aVol + (tLookup >= tClosest ? cVol[bar_index - bClosest] / nDayAverageForRVOL : 0)
  168.     rVol = aVol > 0 ? cVol / aVol : 0
  169.  
  170. TRVOL = relativeVolume()
  171.  
  172.  
  173.  
  174. //----------------------------------------------
  175. var dataTable = table.new(tableYposInput + "_" + tableXposInput, tableColumns, tableRows, bgcolor=color.white, frame_width=1, frame_color=TableBorderColor)
  176.  
  177.  
  178. //----------------------------------------------
  179. //Show Market Status
  180. deltaYCloseMPercentage = (dMarketDayChange / YCloseM) * 100
  181.  
  182. symbolMark := isMarketUp ? symbolUpString : symbolDownString
  183. cellBG := isMarketUp ? StockUpColor : StockDownColor
  184.  
  185. table.cell(dataTable, 0, nCurrentRow, symbolMark + " " + syminfo.ticker(symbol=comparedWithSecurity), text_halign=text.align_left, bgcolor = cellBG, text_color = isMarketUp ? color.black : color.white)
  186. table.cell(dataTable, 1, nCurrentRow, str.tostring(dMarketDayChange, "#.##") + " (" + str.tostring(deltaYCloseMPercentage, "#.##") + "%)", text_halign=text.align_left, bgcolor = cellBG, text_color = isMarketUp ? color.black : color.white)
  187. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  188. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  189.  
  190.  
  191. //----------------------------------------------
  192. //Show Stock Status
  193. deltaYCloseSPercentage = (dStockDayChange / YCloseS) * 100
  194.  
  195. symbolMark := isStockUp ? symbolUpString : symbolDownString
  196. cellBG := isStockUp ? StockUpColor : StockDownColor
  197.  
  198. if syminfo.ticker(symbol=comparedWithSecurity) != syminfo.ticker
  199.     nCurrentRow := nCurrentRow + 1
  200.     table.cell(dataTable, 0, nCurrentRow, symbolMark + " " + syminfo.ticker, text_halign=text.align_left, bgcolor = cellBG, text_color = isStockUp ? color.black : color.white)
  201.     table.cell(dataTable, 1, nCurrentRow, str.tostring(dStockDayChange, "#.##") + " (" + str.tostring(deltaYCloseSPercentage, "#.##") + "%)", text_halign=text.align_left, bgcolor = cellBG, text_color = isStockUp ? color.black : color.white)
  202.     table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  203.     table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  204.  
  205.  
  206. //----------------------------------------------
  207. //Show RRS Status
  208. symbolMark := TRRS > 0 ? symbolUpString : symbolDownString
  209.  
  210. if isMarketUp
  211.     if isStockUp
  212.         if TRRS > 0
  213.             cellBG := meetCriteriaStateColor
  214.         else
  215.             cellBG := doesNotMeetCriteriaStateColor
  216.     else
  217.         if TRRS > 0
  218.             cellBG := doesNotMeetCriteriaStateColor
  219.         else
  220.             cellBG := warningStateColor
  221. else
  222.     if isStockUp
  223.         if TRRS > 0
  224.             cellBG := warningStateColor
  225.         else
  226.             cellBG := doesNotMeetCriteriaStateColor
  227.     else
  228.         if TRRS > 0
  229.             cellBG := doesNotMeetCriteriaStateColor
  230.         else
  231.             cellBG := meetCriteriaStateColor
  232.  
  233. if syminfo.ticker(symbol=comparedWithSecurity) != syminfo.ticker
  234.     nCurrentRow := nCurrentRow + 1
  235.     table.cell(dataTable, 0, nCurrentRow, symbolMark + " RRS", text_halign=text.align_left, bgcolor=cellBG)
  236.     table.cell(dataTable, 1,nCurrentRow, str.tostring(TRRS, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  237.     table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  238.     table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)    
  239.  
  240.  
  241. //----------------------------------------------
  242. //Show YClose Status
  243. symbolMark := TCurrentPriceS > YCloseS ? symbolUpString : symbolDownString
  244.  
  245. if isMarketUp
  246.     if isStockUp
  247.         if TCurrentPriceS > YCloseS
  248.             cellBG := meetCriteriaStateColor
  249.         else
  250.             cellBG := doesNotMeetCriteriaStateColor
  251.     else
  252.         if TCurrentPriceS > YCloseS
  253.             cellBG := doesNotMeetCriteriaStateColor
  254.         else
  255.             cellBG := warningStateColor
  256. else
  257.     if isStockUp
  258.         if TCurrentPriceS > YCloseS
  259.             cellBG := warningStateColor
  260.         else
  261.             cellBG := doesNotMeetCriteriaStateColor
  262.     else
  263.         if TCurrentPriceS > YCloseS
  264.             cellBG := doesNotMeetCriteriaStateColor
  265.         else
  266.             cellBG := meetCriteriaStateColor
  267.  
  268. nCurrentRow := nCurrentRow + 1
  269. table.cell(dataTable, 0, nCurrentRow, symbolMark + " YCLOSE", text_halign=text.align_left, bgcolor=cellBG)
  270. table.cell(dataTable, 1, nCurrentRow, str.tostring(dStockDayChange, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  271. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  272. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  273.  
  274.  
  275. //----------------------------------------------
  276. //Show VWAP Status
  277. deltaVWAPS = TCurrentPriceS - TVWAPS
  278. symbolMark := TCurrentPriceS > TVWAPS ? symbolUpString : symbolDownString
  279.  
  280. if isMarketUp
  281.     if isStockUp
  282.         if TCurrentPriceS > TVWAPS
  283.             cellBG := meetCriteriaStateColor
  284.         else
  285.             cellBG := doesNotMeetCriteriaStateColor
  286.     else
  287.         if TCurrentPriceS > TVWAPS
  288.             cellBG := doesNotMeetCriteriaStateColor
  289.         else
  290.             cellBG := warningStateColor
  291. else
  292.     if isStockUp
  293.         if TCurrentPriceS > TVWAPS
  294.             cellBG := warningStateColor
  295.         else
  296.             cellBG := doesNotMeetCriteriaStateColor
  297.     else
  298.         if TCurrentPriceS > TVWAPS
  299.             cellBG := doesNotMeetCriteriaStateColor
  300.         else
  301.             cellBG := meetCriteriaStateColor
  302.  
  303. nCurrentRow := nCurrentRow + 1
  304. table.cell(dataTable, 0, nCurrentRow, symbolMark + " VWAP", text_halign=text.align_left, bgcolor=cellBG)
  305. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaVWAPS, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  306. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  307. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  308.  
  309.  
  310. //----------------------------------------------
  311. //Show Open Status
  312. deltaOpenS = TCurrentPriceS - TOpenS
  313. symbolMark := TCurrentPriceS > TOpenS ? symbolUpString : symbolDownString
  314.  
  315. if isMarketUp
  316.     if isStockUp
  317.         if TCurrentPriceS > TOpenS
  318.             cellBG := meetCriteriaStateColor
  319.         else
  320.             cellBG := doesNotMeetCriteriaStateColor
  321.     else
  322.         if TCurrentPriceS > TOpenS
  323.             cellBG := doesNotMeetCriteriaStateColor
  324.         else
  325.             cellBG := warningStateColor
  326. else
  327.     if isStockUp
  328.         if TCurrentPriceS > TOpenS
  329.             cellBG := warningStateColor
  330.         else
  331.             cellBG := doesNotMeetCriteriaStateColor
  332.     else
  333.         if TCurrentPriceS > TOpenS
  334.             cellBG := doesNotMeetCriteriaStateColor
  335.         else
  336.             cellBG := meetCriteriaStateColor
  337.  
  338. nCurrentRow := nCurrentRow + 1
  339. table.cell(dataTable, 0, nCurrentRow, symbolMark + " OPEN", text_halign=text.align_left, bgcolor=cellBG)
  340. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaOpenS, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  341. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  342. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  343.  
  344.  
  345. //----------------------------------------------
  346. //Show YHigh Status
  347. deltaYHighS = TCurrentPriceS - YHighS
  348. symbolMark := TCurrentPriceS > YHighS ? symbolUpString : symbolDownString
  349.  
  350. if isMarketUp
  351.     if isStockUp
  352.         if TCurrentPriceS > YHighS
  353.             cellBG := meetCriteriaStateColor
  354.         else
  355.             cellBG := doesNotMeetCriteriaStateColor
  356.     else
  357.         if TCurrentPriceS > YHighS
  358.             cellBG := doesNotMeetCriteriaStateColor
  359.         else
  360.             cellBG := warningStateColor
  361. else
  362.     if isStockUp
  363.         if TCurrentPriceS > YHighS
  364.             cellBG := warningStateColor
  365.         else
  366.             cellBG := doesNotMeetCriteriaStateColor
  367.     else
  368.         if TCurrentPriceS > YHighS
  369.             cellBG := doesNotMeetCriteriaStateColor
  370.         else
  371.             cellBG := meetCriteriaStateColor
  372.  
  373. nCurrentRow := nCurrentRow + 1
  374. table.cell(dataTable, 0, nCurrentRow, symbolMark + " YHIGH", text_halign=text.align_left, bgcolor=cellBG)
  375. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaYHighS, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  376. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  377. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  378.  
  379.  
  380. //----------------------------------------------
  381. //Show YLow Status
  382. deltaYLowS = TCurrentPriceS - YLowS
  383. symbolMark := TCurrentPriceS > YLowS ? symbolUpString : symbolDownString
  384.  
  385. if isMarketUp
  386.     if isStockUp
  387.         if TCurrentPriceS > YLowS
  388.             cellBG := meetCriteriaStateColor
  389.         else
  390.             cellBG := doesNotMeetCriteriaStateColor
  391.     else
  392.         if TCurrentPriceS > YLowS
  393.             cellBG := doesNotMeetCriteriaStateColor
  394.         else
  395.             cellBG := warningStateColor
  396. else
  397.     if isStockUp
  398.         if TCurrentPriceS > YLowS
  399.             cellBG := warningStateColor
  400.         else
  401.             cellBG := doesNotMeetCriteriaStateColor
  402.     else
  403.         if TCurrentPriceS > YLowS
  404.             cellBG := doesNotMeetCriteriaStateColor
  405.         else
  406.             cellBG := meetCriteriaStateColor
  407.  
  408. nCurrentRow := nCurrentRow + 1
  409. table.cell(dataTable, 0, nCurrentRow, symbolMark + " YLOW", text_halign=text.align_left, bgcolor=cellBG)
  410. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaYLowS, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  411. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  412. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  413.  
  414. //----------------------------------------------
  415. //Show 50SMA(D) Status
  416. //https://www.tradingview.com/script/NxVJbviK-Daily-Moving-Averages-on-Intraday-Chart/
  417.  
  418. deltaSMA50S = TCurrentPriceS - D50SMA
  419. symbolMark := TCurrentPriceS > D50SMA ? symbolUpString : symbolDownString
  420.  
  421. if isMarketUp
  422.     if isStockUp
  423.         if TCurrentPriceS > D50SMA
  424.             cellBG := meetCriteriaStateColor
  425.         else
  426.             cellBG := doesNotMeetCriteriaStateColor
  427.     else
  428.         if TCurrentPriceS > D50SMA
  429.             cellBG := doesNotMeetCriteriaStateColor
  430.         else
  431.             cellBG := warningStateColor
  432. else
  433.     if isStockUp
  434.         if TCurrentPriceS > D50SMA
  435.             cellBG := warningStateColor
  436.         else
  437.             cellBG := doesNotMeetCriteriaStateColor
  438.     else
  439.         if TCurrentPriceS > D50SMA
  440.             cellBG := doesNotMeetCriteriaStateColor
  441.         else
  442.             cellBG := meetCriteriaStateColor
  443.            
  444. nCurrentRow := nCurrentRow + 1
  445. table.cell(dataTable, 0, nCurrentRow, symbolMark + " 50SMA(D)", text_halign=text.align_left, bgcolor=cellBG)
  446. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaSMA50S, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  447. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  448. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  449.  
  450.  
  451. //----------------------------------------------
  452. //Show 100SMA(D) Status
  453.  
  454. deltaSMA100S = TCurrentPriceS - D100SMA
  455. symbolMark := TCurrentPriceS > D100SMA ? symbolUpString : symbolDownString
  456.  
  457. if isMarketUp
  458.     if isStockUp
  459.         if TCurrentPriceS > D100SMA
  460.             cellBG := meetCriteriaStateColor
  461.         else
  462.             cellBG := doesNotMeetCriteriaStateColor
  463.     else
  464.         if TCurrentPriceS > D100SMA
  465.             cellBG := doesNotMeetCriteriaStateColor
  466.         else
  467.             cellBG := warningStateColor
  468. else
  469.     if isStockUp
  470.         if TCurrentPriceS > D100SMA
  471.             cellBG := warningStateColor
  472.         else
  473.             cellBG := doesNotMeetCriteriaStateColor
  474.     else
  475.         if TCurrentPriceS > D100SMA
  476.             cellBG := doesNotMeetCriteriaStateColor
  477.         else
  478.             cellBG := meetCriteriaStateColor
  479.            
  480. nCurrentRow := nCurrentRow + 1            
  481. table.cell(dataTable, 0, nCurrentRow, symbolMark + " 100SMA(D)", text_halign=text.align_left, bgcolor=cellBG)
  482. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaSMA100S, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  483. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  484. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  485.  
  486.  
  487. //----------------------------------------------
  488. //Show 200SMA(D) Status
  489.  
  490. deltaSMA200S = TCurrentPriceS - D200SMA
  491. symbolMark := TCurrentPriceS > D200SMA ? symbolUpString : symbolDownString
  492.  
  493. if isMarketUp
  494.     if isStockUp
  495.         if TCurrentPriceS > D200SMA
  496.             cellBG := meetCriteriaStateColor
  497.         else
  498.             cellBG := doesNotMeetCriteriaStateColor
  499.     else
  500.         if TCurrentPriceS > D200SMA
  501.             cellBG := doesNotMeetCriteriaStateColor
  502.         else
  503.             cellBG := warningStateColor
  504. else
  505.     if isStockUp
  506.         if TCurrentPriceS > D200SMA
  507.             cellBG := warningStateColor
  508.         else
  509.             cellBG := doesNotMeetCriteriaStateColor
  510.     else
  511.         if TCurrentPriceS > D200SMA
  512.             cellBG := doesNotMeetCriteriaStateColor
  513.         else
  514.             cellBG := meetCriteriaStateColor
  515.            
  516. nCurrentRow := nCurrentRow + 1            
  517. table.cell(dataTable, 0, nCurrentRow, symbolMark + " 200SMA(D)", text_halign=text.align_left, bgcolor=cellBG)
  518. table.cell(dataTable, 1, nCurrentRow, str.tostring(deltaSMA200S, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  519. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  520. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  521.  
  522.  
  523.  
  524. //----------------------------------------------
  525. //Show Daily ATR Status
  526.  
  527. symbolMark := DCurrentATR > desiredMinATR ? symbolUpString : symbolDownString
  528.  
  529. if isMarketUp
  530.     if isStockUp
  531.         if DCurrentATR > desiredMinATR
  532.             cellBG := meetCriteriaStateColor
  533.         else
  534.             cellBG := doesNotMeetCriteriaStateColor
  535.     else
  536.         if DCurrentATR > desiredMinATR
  537.             cellBG := warningStateColor
  538.         else
  539.             cellBG := doesNotMeetCriteriaStateColor
  540. else
  541.     if isStockUp
  542.         if DCurrentATR > desiredMinATR
  543.             cellBG := warningStateColor
  544.         else
  545.             cellBG := doesNotMeetCriteriaStateColor
  546.     else
  547.         if DCurrentATR > desiredMinATR
  548.             cellBG := meetCriteriaStateColor
  549.         else
  550.             cellBG := doesNotMeetCriteriaStateColor
  551.            
  552. nCurrentRow := nCurrentRow + 1
  553. table.cell(dataTable, 0, nCurrentRow, symbolMark + " ATR(" + str.tostring(atrLength) + "D)", text_halign=text.align_left, bgcolor=cellBG)
  554. table.cell(dataTable, 1, nCurrentRow, str.tostring(DCurrentATR, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  555. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  556. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  557.  
  558.  
  559. //----------------------------------------------
  560. //Add empty row to separate from volume metrics
  561. nCurrentRow := nCurrentRow + 1
  562. table.cell(dataTable, 0, nCurrentRow, "                           ", text_halign=text.align_left, bgcolor=SeparatorRowColor)
  563. table.cell(dataTable, 1, nCurrentRow, "     ", text_halign=text.align_left, bgcolor=SeparatorRowColor)
  564. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  565. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  566.  
  567.  
  568. //----------------------------------------------
  569. //Show RVOL Status
  570.  
  571. symbolMark := TRVOL > 1 ? symbolUpString : symbolDownString
  572.  
  573. if isMarketUp
  574.     if isStockUp
  575.         if TRVOL > 1
  576.             cellBG := meetCriteriaStateColor
  577.         else
  578.             cellBG := doesNotMeetCriteriaStateColor
  579.     else
  580.         if TRVOL > 1
  581.             cellBG := warningStateColor
  582.         else
  583.             cellBG := doesNotMeetCriteriaStateColor
  584. else
  585.     if isStockUp
  586.         if TRVOL > 1
  587.             cellBG := warningStateColor
  588.         else
  589.             cellBG := doesNotMeetCriteriaStateColor
  590.     else
  591.         if TRVOL > 1
  592.             cellBG := meetCriteriaStateColor
  593.         else
  594.             cellBG := doesNotMeetCriteriaStateColor
  595.            
  596. nCurrentRow := nCurrentRow + 1
  597. table.cell(dataTable, 0, nCurrentRow, symbolMark + " RVOL(" + str.tostring(nDayAverageForRVOL) + "D)", text_halign=text.align_left, bgcolor=cellBG)
  598. table.cell(dataTable, 1, nCurrentRow, str.tostring(TRVOL, "#.##"), text_halign=text.align_left, bgcolor=cellBG)
  599. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  600. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  601.  
  602.  
  603.  
  604. //#################################################
  605. //Show Daily Average Volume
  606.  
  607. symbolMark := DAvgVol > desiredAvgVolume? symbolUpString : symbolDownString
  608.  
  609. if isMarketUp
  610.     if isStockUp
  611.         if DAvgVol > desiredAvgVolume
  612.             cellBG := meetCriteriaStateColor
  613.         else
  614.             cellBG := doesNotMeetCriteriaStateColor
  615.     else
  616.         if DAvgVol > desiredAvgVolume
  617.             cellBG := warningStateColor
  618.         else
  619.             cellBG := doesNotMeetCriteriaStateColor
  620. else
  621.     if isStockUp
  622.         if DAvgVol > desiredAvgVolume
  623.             cellBG := warningStateColor
  624.         else
  625.             cellBG := doesNotMeetCriteriaStateColor
  626.     else
  627.         if DAvgVol > desiredAvgVolume
  628.             cellBG := meetCriteriaStateColor
  629.         else
  630.             cellBG := doesNotMeetCriteriaStateColor
  631.            
  632.            
  633. nCurrentRow := nCurrentRow + 1
  634. table.cell(dataTable, 0, nCurrentRow, symbolMark + " AvVOL(" + str.tostring(nDayAverageForDailyVol) + "D)", text_halign=text.align_left, bgcolor=cellBG)
  635. table.cell(dataTable, 1, nCurrentRow, str.tostring(DAvgVol, format.volume), text_halign=text.align_left, bgcolor=cellBG)
  636. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  637. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  638.  
  639.  
  640. //----------------------------------------------
  641. //Show Current Volume
  642.  
  643. symbolMark := TVolume > DAvgVol? symbolUpString : symbolDownString
  644.  
  645. if isMarketUp
  646.     if isStockUp
  647.         if TVolume > DAvgVol
  648.             cellBG := meetCriteriaStateColor
  649.         else
  650.             cellBG := doesNotMeetCriteriaStateColor
  651.     else
  652.         if TVolume > DAvgVol
  653.             cellBG := warningStateColor
  654.         else
  655.             cellBG := doesNotMeetCriteriaStateColor
  656. else
  657.     if isStockUp
  658.         if TVolume > DAvgVol
  659.             cellBG := warningStateColor
  660.         else
  661.             cellBG := doesNotMeetCriteriaStateColor
  662.     else
  663.         if TVolume > DAvgVol
  664.             cellBG := meetCriteriaStateColor
  665.         else
  666.             cellBG := doesNotMeetCriteriaStateColor
  667.            
  668. nCurrentRow := nCurrentRow + 1
  669. table.cell(dataTable, 0, nCurrentRow, symbolMark + " VOLUME", text_halign=text.align_left, bgcolor=cellBG)
  670. table.cell(dataTable, 1, nCurrentRow, str.tostring(TVolume, format.volume), text_halign=text.align_left, bgcolor=cellBG)
  671. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  672. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  673.  
  674.  
  675. //----------------------------------------------
  676. //Show Volume Fill
  677. symbolMark := TVolFill > 1? symbolUpString : symbolDownString
  678.  
  679. if isMarketUp
  680.     if isStockUp
  681.         if TVolFill > 1
  682.             cellBG := meetCriteriaStateColor
  683.         else
  684.             cellBG := doesNotMeetCriteriaStateColor
  685.     else
  686.         if TVolFill > 1
  687.             cellBG := warningStateColor
  688.         else
  689.             cellBG := doesNotMeetCriteriaStateColor
  690. else
  691.     if isStockUp
  692.         if TVolFill > 1
  693.             cellBG := warningStateColor
  694.         else
  695.             cellBG := doesNotMeetCriteriaStateColor
  696.     else
  697.         if TVolFill > 1
  698.             cellBG := meetCriteriaStateColor
  699.         else
  700.             cellBG := doesNotMeetCriteriaStateColor
  701.            
  702. nCurrentRow := nCurrentRow + 1
  703. table.cell(dataTable, 0, nCurrentRow, symbolMark + " VOL FILL", text_halign=text.align_left, bgcolor=cellBG)
  704. table.cell(dataTable, 1, nCurrentRow, str.tostring(TVolFill*100, format.percent), text_halign=text.align_left, bgcolor=cellBG)
  705. table.cell_set_text_size(dataTable, 0, nCurrentRow, textSize)
  706. table.cell_set_text_size(dataTable, 1, nCurrentRow, textSize)
  707.  
  708.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement