xmd79

Volume based s/r

Jun 28th, 2022 (edited)
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.58 KB | None | 0 0
  1. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  2. // ©jasonmwilliamson79
  3.  
  4. //@version=5
  5. // my attempt at easy to use Support and Resistance Zones for multiple time frames, based on volume primarily
  6. // alerts have been added
  7.  
  8. indicator('Hamburger sauce volume based s/r', shorttitle='Hamburger s/r', max_bars_back=3000, max_labels_count=100, max_lines_count=100, overlay=true)
  9.  
  10.  
  11. ShowYesterdaysHLC = input(defval=true, title='Show - Yesterdays - High - Low - Close')
  12.  
  13. ShowLastWeeksHLC = input(defval=true, title='Show - Last Weeks - High - Low - Close')
  14.  
  15. ShowLastMonthsHLC = input(defval=true, title='Show - Last Months - High - Low - Close')
  16.  
  17.  
  18. // Inputs
  19. // Timeframe 1
  20.  
  21. ShowTF1SR = input(true, 'Show - S/R - Timeframe 1')
  22. TF1 = input.timeframe(title='Timeframe 1', defval='')
  23. TF1_Menu = input.string(title='Timeframe 1 - S/R Type', defval='S/R Zones', options=['S/R Dots', 'S/R Lines', 'S/R Zones'])
  24. TF1_VolMA1Input = input(title='Timeframe 1 - Volume MA - Threshold', defval=6)
  25.  
  26. // Timeframe 2
  27.  
  28. ShowTF2SR = input(true, 'Show - S/R - Timeframe 2')
  29. TF2 = input.timeframe(title='Timeframe 2', defval='360')
  30. TF2_Menu = input.string(title='Timeframe 2 - S/R Type', defval='S/R Zones', options=['S/R Dots', 'S/R Lines', 'S/R Zones'])
  31. TF2_VolMA1Input = input(title='Timeframe 2 - Volume MA - Threshold', defval=6)
  32.  
  33. // Timeframe 3
  34.  
  35. ShowTF3SR = input(true, 'Show - S/R - Timeframe 3')
  36. TF3 = input.timeframe(title='Timeframe 3', defval='1D')
  37. TF3_Menu = input.string(title='Timeframe 3 - S/R Type', defval='S/R Zones', options=['S/R Dots', 'S/R Lines', 'S/R Zones'])
  38. TF3_VolMA1Input = input(title='Timeframe 3 - Volume MA - Threshold', defval=6)
  39.  
  40. InvertColors = input(true, title='Invert Colors - Support / Resistance')
  41.  
  42.  
  43. // S/R - Timeframe 1 = TF1
  44.  
  45. TF1_Vol = request.security(syminfo.tickerid, TF1, volume)
  46. TF1_VolMA = ta.sma(TF1_Vol, TF1_VolMA1Input)
  47. TF1_High = request.security(syminfo.tickerid, TF1, high)
  48. TF1_Low = request.security(syminfo.tickerid, TF1, low)
  49. TF1_Open = request.security(syminfo.tickerid, TF1, open)
  50. TF1_Close = request.security(syminfo.tickerid, TF1, close)
  51.  
  52. TF1_Up = TF1_High[3] > TF1_High[4] and TF1_High[4] > TF1_High[5] and TF1_High[2] < TF1_High[3] and TF1_High[1] < TF1_High[2] and TF1_Vol[3] > TF1_VolMA[3] // or volume[3] > VolMA2Current[3])
  53. TF1_Down = TF1_Low[3] < TF1_Low[4] and TF1_Low[4] < TF1_Low[5] and TF1_Low[2] > TF1_Low[3] and TF1_Low[1] > TF1_Low[2] and TF1_Vol[3] > TF1_VolMA[3] // or volume[3] > VolMA2Current[3])
  54.  
  55.  
  56. TF1_CalcFractalUp() =>
  57. TF1_FractalUp = 0.0
  58. TF1_FractalUp := TF1_Up ? TF1_High[3] : TF1_FractalUp[1]
  59. TF1_FractalUp
  60.  
  61. TF1_CalcFractalDown() =>
  62. TF1_FractalDown = 0.0
  63. TF1_FractalDown := TF1_Down ? TF1_Low[3] : TF1_FractalDown[1]
  64. TF1_FractalDown
  65.  
  66.  
  67. TF1_FractalUp = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUp())
  68. TF1_FractalDown = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDown())
  69.  
  70.  
  71. // Zones - Timeframe 1 = TF1
  72.  
  73. // Fractal Up Zones
  74.  
  75. TF1_CalcFractalUpLowerZone() =>
  76. TF1_FractalUpLowerZone = 0.0
  77. TF1_FractalUpLowerZone := TF1_Up and TF1_Close[3] > TF1_Open[3] ? TF1_Close[3] : TF1_Up and TF1_Close[3] < TF1_Open[3] ? TF1_Open[3] : TF1_FractalUpLowerZone[1]
  78. TF1_FractalUpLowerZone
  79.  
  80. TF1_CalcFractalUpUpperZone() =>
  81. TF1_FractalUpUpperZone = 0.0
  82. TF1_FractalUpUpperZone := TF1_Up and TF1_Close[3] > TF1_Open[3] ? TF1_High[3] - TF1_Close[3] + TF1_High[3] : TF1_Up and TF1_Close[3] < TF1_Open[3] ? TF1_High[3] - TF1_Open[3] + TF1_High[3] : TF1_FractalUpUpperZone[1]
  83. TF1_FractalUpUpperZone
  84.  
  85.  
  86. TF1_FractalUpLowerZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUpLowerZone())
  87. TF1_FractalUpUpperZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalUpUpperZone())
  88.  
  89. TF1_ResistanceUpperZone = TF1_FractalUp
  90. TF1_ResistanceLowerZone = TF1_FractalUpLowerZone
  91.  
  92.  
  93. // Fractal Down Zones
  94.  
  95.  
  96. TF1_CalcFractalDownUpperZone() =>
  97. TF1_FractalDownUpperZone = 0.0
  98. TF1_FractalDownUpperZone := TF1_Down and TF1_Close[3] > TF1_Open[3] ? TF1_Open[3] : TF1_Down and TF1_Close[3] < TF1_Open[3] ? TF1_Close[3] : TF1_FractalDownUpperZone[1]
  99. TF1_FractalDownUpperZone
  100.  
  101.  
  102. TF1_CalcFractalDownLowerZone() =>
  103. TF1_FractalDownLowerZone = 0.0
  104. TF1_FractalDownLowerZone := TF1_Down and TF1_Close[3] > TF1_Open[3] ? TF1_Low[3] + TF1_Low[3] - TF1_Open[3] : TF1_Down and TF1_Close[3] < TF1_Open[3] ? TF1_Low[3] + TF1_Low[3] - TF1_Close[3] : TF1_FractalDownLowerZone[1]
  105. TF1_FractalDownLowerZone
  106.  
  107.  
  108. TF1_FractalDownLowerZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDownLowerZone())
  109. TF1_FractalDownUpperZone = request.security(syminfo.tickerid, TF1, TF1_CalcFractalDownUpperZone())
  110.  
  111.  
  112. TF1_SupportUpperZone = TF1_FractalDownUpperZone
  113. TF1_SupportLowerZone = TF1_FractalDown
  114.  
  115.  
  116. // Colors - Timeframe 1 = TF1
  117.  
  118.  
  119. TF1_ResistanceColor = not InvertColors ? #FF00008C : #00FF00E6 // blue : yellow
  120. TF1_SupportColor = not InvertColors ? #00FF00E6 : #FF00008C // yellow : blue
  121.  
  122.  
  123. TF1_ResZoneColor = TF1_FractalUp != TF1_FractalUp[1] ? na : color.blue
  124. TF1_ResZoneColorInverted = TF1_FractalUp != TF1_FractalUp[1] ? na : color.yellow
  125.  
  126.  
  127. TF1_SupZoneColor = TF1_FractalDown != TF1_FractalDown[1] ? na : color.yellow
  128. TF1_SupZoneColorInverted = TF1_FractalDown != TF1_FractalDown[1] ? na : color.blue
  129.  
  130.  
  131. TF1_ResistanceZonesColor = not InvertColors and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_ResZoneColor : InvertColors and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_ResZoneColorInverted : na // blue : yellow
  132. TF1_SupportZonesColor = not InvertColors and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_SupZoneColor : InvertColors and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_SupZoneColorInverted : na // yellow : blue
  133.  
  134.  
  135. // S/R & S/R Zone Plots - Current Time Frame = Time Frame 1 = TF1
  136.  
  137.  
  138. TF1_ResistanceUpZone = plot(ShowTF1SR and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_ResistanceUpperZone : na, 'Timeframe 1 - Resistance - Lines - Upper Zone', color=TF1_ResistanceZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=25) // offset=-2
  139. TF1_ResistanceDownZone = plot(ShowTF1SR and TF1_Menu == 'S/R Zones' ? TF1_ResistanceLowerZone : na, 'Timeframe 1 - Resistance - Lower Zone', color=TF1_ResistanceZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50) // offset=-2
  140. fill(TF1_ResistanceUpZone, TF1_ResistanceDownZone, color=TF1_ResistanceZonesColor, title='Timeframe 1 - Resistance Zone Shading', transp=93)
  141.  
  142.  
  143. plot(ShowTF1SR and TF1_Menu == 'S/R Dots' ? TF1_FractalUp : na, 'Timeframe 1 - Resistance - Dots', color=TF1_ResistanceColor, linewidth=1, style=plot.style_circles, offset=-3, join=false, transp=25)
  144. plot(ShowTF1SR and TF1_Menu == 'S/R Dots' ? TF1_FractalDown : na, 'Timeframe 1 - Support - Dots', color=TF1_SupportColor, linewidth=1, style=plot.style_circles, offset=-3, join=false, transp=25)
  145.  
  146.  
  147. TF1_SupportUpZone = plot(ShowTF1SR and TF1_Menu == 'S/R Zones' ? TF1_SupportUpperZone : na, 'Timeframe 1 - Support - Upper Zone', color=TF1_SupportZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50)
  148. TF1_SupportDownZone = plot(ShowTF1SR and (TF1_Menu == 'S/R Zones' or TF1_Menu == 'S/R Lines') ? TF1_SupportLowerZone : na, 'Timeframe 1 - Support - Lines - Lower Zone', color=TF1_SupportZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=25)
  149. fill(TF1_SupportUpZone, TF1_SupportDownZone, color=TF1_SupportZonesColor, title='Timeframe 1 - Support Zone Shading', transp=93)
  150.  
  151.  
  152. // TF1 S/R Alerts
  153.  
  154.  
  155. PriceInTF1ResistanceZone = close <= TF1_ResistanceUpperZone and close >= TF1_ResistanceLowerZone
  156. PriceInTF1SupportZone = close <= TF1_SupportUpperZone and close >= TF1_SupportLowerZone
  157. PriceEntersTF1SRZone = PriceInTF1ResistanceZone and not PriceInTF1ResistanceZone[1] or PriceInTF1SupportZone and not PriceInTF1SupportZone[1]
  158.  
  159. alertcondition(PriceEntersTF1SRZone, title='Alert - TF1 Price Enters S/R Zone', message='TF1 - Price Enters S/R Zone - Support/Resistance Zones x3')
  160.  
  161. PriceBreakingTF1Resistance = ta.crossover(close, TF1_FractalUp)
  162. PriceBreakingTF1Support = ta.crossunder(close, TF1_FractalDown)
  163.  
  164. alertcondition(PriceBreakingTF1Resistance, title='Alert - TF1 Price Crossing Over Resistance', message='TF1 - Price Crossing Over Resistance - Support/Resistance Zones x3')
  165. alertcondition(PriceBreakingTF1Support, title='Alert - TF1 Price Crossing Under Support', message='TF1 - Price Crossing Under Support - Support/Resistance Zones x3')
  166.  
  167.  
  168. // S/R - Timeframe 2 = TF2
  169.  
  170. TF2_Vol = request.security(syminfo.tickerid, TF2, volume)
  171. TF2_VolMA = ta.sma(TF2_Vol, TF2_VolMA1Input)
  172. TF2_High = request.security(syminfo.tickerid, TF2, high)
  173. TF2_Low = request.security(syminfo.tickerid, TF2, low)
  174. TF2_Open = request.security(syminfo.tickerid, TF2, open)
  175. TF2_Close = request.security(syminfo.tickerid, TF2, close)
  176.  
  177. TF2_Up = TF2_High[3] > TF2_High[4] and TF2_High[4] > TF2_High[5] and TF2_High[2] < TF2_High[3] and TF2_High[1] < TF2_High[2] and TF2_Vol[3] > TF2_VolMA[3] // or volume[3] > VolMA2Custom 1[3])
  178. TF2_Down = TF2_Low[3] < TF2_Low[4] and TF2_Low[4] < TF2_Low[5] and TF2_Low[2] > TF2_Low[3] and TF2_Low[1] > TF2_Low[2] and TF2_Vol[3] > TF2_VolMA[3] // or volume[3] > VolMA2Custom 1[3])
  179.  
  180.  
  181. TF2_CalcFractalUp() =>
  182. TF2_FractalUp = 0.0
  183. TF2_FractalUp := TF2_Up ? TF2_High[3] : TF2_FractalUp[1]
  184. TF2_FractalUp
  185.  
  186. TF2_CalcFractalDown() =>
  187. TF2_FractalDown = 0.0
  188. TF2_FractalDown := TF2_Down ? TF2_Low[3] : TF2_FractalDown[1]
  189. TF2_FractalDown
  190.  
  191.  
  192. TF2_FractalUp = request.security(syminfo.tickerid, TF2, TF2_CalcFractalUp())
  193. TF2_FractalDown = request.security(syminfo.tickerid, TF2, TF2_CalcFractalDown())
  194.  
  195.  
  196. // Zones - Timeframe 2 = TF2
  197.  
  198. // Fractal Up Zones
  199.  
  200. TF2_CalcFractalUpLowerZone() =>
  201. TF2_FractalUpLowerZone = 0.0
  202. TF2_FractalUpLowerZone := TF2_Up and TF2_Close[3] > TF2_Open[3] ? TF2_Close[3] : TF2_Up and TF2_Close[3] < TF2_Open[3] ? TF2_Open[3] : TF2_FractalUpLowerZone[1]
  203. TF2_FractalUpLowerZone
  204.  
  205. TF2_CalcFractalUpUpperZone() =>
  206. TF2_FractalUpUpperZone = 0.0
  207. TF2_FractalUpUpperZone := TF2_Up and TF2_Close[3] > TF2_Open[3] ? TF2_High[3] - TF2_Close[3] + TF2_High[3] : TF2_Up and TF2_Close[3] < TF2_Open[3] ? TF2_High[3] - TF2_Open[3] + TF2_High[3] : TF2_FractalUpUpperZone[1]
  208. TF2_FractalUpUpperZone
  209.  
  210.  
  211. TF2_FractalUpLowerZone = request.security(syminfo.tickerid, TF2, TF2_CalcFractalUpLowerZone())
  212. TF2_FractalUpUpperZone = request.security(syminfo.tickerid, TF2, TF2_CalcFractalUpUpperZone())
  213.  
  214. TF2_ResistanceUpperZone = TF2_FractalUp
  215. TF2_ResistanceLowerZone = TF2_FractalUpLowerZone
  216.  
  217.  
  218. // Fractal Down Zones
  219.  
  220.  
  221. TF2_CalcFractalDownUpperZone() =>
  222. TF2_FractalDownUpperZone = 0.0
  223. TF2_FractalDownUpperZone := TF2_Down and TF2_Close[3] > TF2_Open[3] ? TF2_Open[3] : TF2_Down and TF2_Close[3] < TF2_Open[3] ? TF2_Close[3] : TF2_FractalDownUpperZone[1]
  224. TF2_FractalDownUpperZone
  225.  
  226.  
  227. TF2_CalcFractalDownLowerZone() =>
  228. TF2_FractalDownLowerZone = 0.0
  229. TF2_FractalDownLowerZone := TF2_Down and TF2_Close[3] > TF2_Open[3] ? TF2_Low[3] + TF2_Low[3] - TF2_Open[3] : TF2_Down and TF2_Close[3] < TF2_Open[3] ? TF2_Low[3] + TF2_Low[3] - TF2_Close[3] : TF2_FractalDownLowerZone[1]
  230. TF2_FractalDownLowerZone
  231.  
  232.  
  233. TF2_FractalDownLowerZone = request.security(syminfo.tickerid, TF2, TF2_CalcFractalDownLowerZone())
  234. TF2_FractalDownUpperZone = request.security(syminfo.tickerid, TF2, TF2_CalcFractalDownUpperZone())
  235.  
  236.  
  237. TF2_SupportUpperZone = TF2_FractalDownUpperZone
  238. TF2_SupportLowerZone = TF2_FractalDown
  239.  
  240. // Colors - Timeframe 2 = TF2
  241.  
  242.  
  243. TF2_ResistanceColor = not InvertColors ? color.purple : color.orange
  244. TF2_SupportColor = not InvertColors ? color.orange : color.purple
  245.  
  246.  
  247. TF2_ResZoneColor = TF2_FractalUp != TF2_FractalUp[1] ? na : color.purple
  248. TF2_ResZoneColorInverted = TF2_FractalUp != TF2_FractalUp[1] ? na : color.orange
  249.  
  250.  
  251. TF2_SupZoneColor = TF2_FractalDown != TF2_FractalDown[1] ? na : color.orange
  252. TF2_SupZoneColorInverted = TF2_FractalDown != TF2_FractalDown[1] ? na : color.purple
  253.  
  254.  
  255. TF2_ResistanceZonesColor = not InvertColors and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_ResZoneColor : InvertColors and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_ResZoneColorInverted : na // purple : orange
  256. TF2_SupportZonesColor = not InvertColors and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_SupZoneColor : InvertColors and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_SupZoneColorInverted : na // orange : purple
  257.  
  258.  
  259. // S/R & S/R Zone Plots - Custom 1 Time Frame = Time Frame 2 = TF2
  260.  
  261.  
  262. TF2_ResistanceUpZone = plot(ShowTF2SR and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_ResistanceUpperZone : na, 'Timeframe 2 - Resistance - Lines - Upper Zone', color=TF2_ResistanceZonesColor, linewidth=2, style=plot.style_line, offset=-3, join=false, transp=50) // offset=-2
  263. TF2_ResistanceDownZone = plot(ShowTF2SR and TF2_Menu == 'S/R Zones' ? TF2_ResistanceLowerZone : na, 'Timeframe 2 - Resistance - Lower Zone', color=TF2_ResistanceZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50) // offset=-2
  264. fill(TF2_ResistanceUpZone, TF2_ResistanceDownZone, color=TF2_ResistanceZonesColor, title='Timeframe 2 - Resistance Zone Shading', transp=93)
  265.  
  266.  
  267. plot(ShowTF2SR and TF2_Menu == 'S/R Dots' ? TF2_FractalUp : na, 'Timeframe 2 - Resistance - Dots', color=TF2_ResistanceColor, linewidth=2, style=plot.style_circles, offset=-3, join=false, transp=50)
  268. plot(ShowTF2SR and TF2_Menu == 'S/R Dots' ? TF2_FractalDown : na, 'Timeframe 2 - Support - Dots', color=TF2_SupportColor, linewidth=2, style=plot.style_circles, offset=-3, join=false, transp=50)
  269.  
  270.  
  271. TF2_SupportUpZone = plot(ShowTF2SR and TF2_Menu == 'S/R Zones' ? TF2_SupportUpperZone : na, 'Timeframe 2 - Support - Upper Zone', color=TF2_SupportZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50)
  272. TF2_SupportDownZone = plot(ShowTF2SR and (TF2_Menu == 'S/R Zones' or TF2_Menu == 'S/R Lines') ? TF2_SupportLowerZone : na, 'Timeframe 2 - Support - Lines - Lower Zone', color=TF2_SupportZonesColor, linewidth=2, style=plot.style_line, offset=-3, join=false, transp=50)
  273. fill(TF2_SupportUpZone, TF2_SupportDownZone, color=TF2_SupportZonesColor, title='Timeframe 2 - Support Zone Shading', transp=93)
  274.  
  275.  
  276. // TF2 S/R Alerts
  277.  
  278.  
  279. PriceInTF2ResistanceZone = close <= TF2_ResistanceUpperZone and close >= TF2_ResistanceLowerZone
  280. PriceInTF2SupportZone = close <= TF2_SupportUpperZone and close >= TF2_SupportLowerZone
  281. PriceEntersTF2SRZone = PriceInTF2ResistanceZone and not PriceInTF2ResistanceZone[1] or PriceInTF2SupportZone and not PriceInTF2SupportZone[1]
  282.  
  283. alertcondition(PriceEntersTF2SRZone, title='Alert - TF2 Price Enters S/R Zone', message='TF2 - Price Enters S/R Zone - Support/Resistance Zones x3')
  284.  
  285. PriceBreakingTF2Resistance = ta.crossover(close, TF2_FractalUp)
  286. PriceBreakingTF2Support = ta.crossunder(close, TF2_FractalDown)
  287.  
  288. alertcondition(PriceBreakingTF2Resistance, title='Alert - TF2 Price Crossing Over Resistance', message='TF2 - Price Crossing Over Resistance - Support/Resistance Zones x3')
  289. alertcondition(PriceBreakingTF2Support, title='Alert - TF2 Price Crossing Under Support', message='TF2 - Price Crossing Under Support - Support/Resistance Zones x3')
  290.  
  291.  
  292. // S/R - Timeframe 3 = TF3
  293.  
  294. TF3_Vol = request.security(syminfo.tickerid, TF3, volume)
  295. TF3_VolMA = ta.sma(TF3_Vol, TF3_VolMA1Input)
  296. TF3_High = request.security(syminfo.tickerid, TF3, high)
  297. TF3_Low = request.security(syminfo.tickerid, TF3, low)
  298. TF3_Open = request.security(syminfo.tickerid, TF3, open)
  299. TF3_Close = request.security(syminfo.tickerid, TF3, close)
  300.  
  301. TF3_Up = TF3_High[3] > TF3_High[4] and TF3_High[4] > TF3_High[5] and TF3_High[2] < TF3_High[3] and TF3_High[1] < TF3_High[2] and TF3_Vol[3] > TF3_VolMA[3] // or volume[3] > VolMA2Custom 2[3])
  302. TF3_Down = TF3_Low[3] < TF3_Low[4] and TF3_Low[4] < TF3_Low[5] and TF3_Low[2] > TF3_Low[3] and TF3_Low[1] > TF3_Low[2] and TF3_Vol[3] > TF3_VolMA[3] // or volume[3] > VolMA2Custom 2[3])
  303.  
  304.  
  305. TF3_CalcFractalUp() =>
  306. TF3_FractalUp = 0.0
  307. TF3_FractalUp := TF3_Up ? TF3_High[3] : TF3_FractalUp[1]
  308. TF3_FractalUp
  309.  
  310. TF3_CalcFractalDown() =>
  311. TF3_FractalDown = 0.0
  312. TF3_FractalDown := TF3_Down ? TF3_Low[3] : TF3_FractalDown[1]
  313. TF3_FractalDown
  314.  
  315.  
  316. TF3_FractalUp = request.security(syminfo.tickerid, TF3, TF3_CalcFractalUp())
  317. TF3_FractalDown = request.security(syminfo.tickerid, TF3, TF3_CalcFractalDown())
  318.  
  319.  
  320. // Zones - Timeframe 3 = TF3
  321.  
  322. // Fractal Up Zones
  323.  
  324. TF3_CalcFractalUpLowerZone() =>
  325. TF3_FractalUpLowerZone = 0.0
  326. TF3_FractalUpLowerZone := TF3_Up and TF3_Close[3] > TF3_Open[3] ? TF3_Close[3] : TF3_Up and TF3_Close[3] < TF3_Open[3] ? TF3_Open[3] : TF3_FractalUpLowerZone[1]
  327. TF3_FractalUpLowerZone
  328.  
  329. TF3_CalcFractalUpUpperZone() =>
  330. TF3_FractalUpUpperZone = 0.0
  331. TF3_FractalUpUpperZone := TF3_Up and TF3_Close[3] > TF3_Open[3] ? TF3_High[3] - TF3_Close[3] + TF3_High[3] : TF3_Up and TF3_Close[3] < TF3_Open[3] ? TF3_High[3] - TF3_Open[3] + TF3_High[3] : TF3_FractalUpUpperZone[1]
  332. TF3_FractalUpUpperZone
  333.  
  334.  
  335. TF3_FractalUpLowerZone = request.security(syminfo.tickerid, TF3, TF3_CalcFractalUpLowerZone())
  336. TF3_FractalUpUpperZone = request.security(syminfo.tickerid, TF3, TF3_CalcFractalUpUpperZone())
  337.  
  338. TF3_ResistanceUpperZone = TF3_FractalUp
  339. TF3_ResistanceLowerZone = TF3_FractalUpLowerZone
  340.  
  341.  
  342. // Fractal Down Zones
  343.  
  344.  
  345. TF3_CalcFractalDownUpperZone() =>
  346. TF3_FractalDownUpperZone = 0.0
  347. TF3_FractalDownUpperZone := TF3_Down and TF3_Close[3] > TF3_Open[3] ? TF3_Open[3] : TF3_Down and TF3_Close[3] < TF3_Open[3] ? TF3_Close[3] : TF3_FractalDownUpperZone[1]
  348. TF3_FractalDownUpperZone
  349.  
  350.  
  351. TF3_CalcFractalDownLowerZone() =>
  352. TF3_FractalDownLowerZone = 0.0
  353. TF3_FractalDownLowerZone := TF3_Down and TF3_Close[3] > TF3_Open[3] ? TF3_Low[3] + TF3_Low[3] - TF3_Open[3] : TF3_Down and TF3_Close[3] < TF3_Open[3] ? TF3_Low[3] + TF3_Low[3] - TF3_Close[3] : TF3_FractalDownLowerZone[1]
  354. TF3_FractalDownLowerZone
  355.  
  356.  
  357. TF3_FractalDownLowerZone = request.security(syminfo.tickerid, TF3, TF3_CalcFractalDownLowerZone())
  358. TF3_FractalDownUpperZone = request.security(syminfo.tickerid, TF3, TF3_CalcFractalDownUpperZone())
  359.  
  360.  
  361. TF3_SupportUpperZone = TF3_FractalDownUpperZone
  362. TF3_SupportLowerZone = TF3_FractalDown
  363.  
  364. // Colors - Timeframe 3 = TF3
  365.  
  366.  
  367. TF3_ResistanceColor = not InvertColors ? color.red : color.green
  368. TF3_SupportColor = not InvertColors ? color.green : color.red
  369.  
  370.  
  371. TF3_ResZoneColor = TF3_FractalUp != TF3_FractalUp[1] ? na : color.green
  372. TF3_ResZoneColorInverted = TF3_FractalUp != TF3_FractalUp[1] ? na : color.red
  373.  
  374.  
  375. TF3_SupZoneColor = TF3_FractalDown != TF3_FractalDown[1] ? na : color.red
  376. TF3_SupZoneColorInverted = TF3_FractalDown != TF3_FractalDown[1] ? na : color.green
  377.  
  378.  
  379. TF3_ResistanceZonesColor = not InvertColors and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_ResZoneColor : InvertColors and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_ResZoneColorInverted : na // red : green
  380. TF3_SupportZonesColor = not InvertColors and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_SupZoneColor : InvertColors and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_SupZoneColorInverted : na // green : red
  381.  
  382.  
  383. // S/R & S/R Zone Plots - Timeframe 3 = TF3
  384.  
  385.  
  386. TF3_ResistanceUpZone = plot(ShowTF3SR and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_ResistanceUpperZone : na, 'Timeframe 3 - Resistance - Lines - Upper Zone', color=TF3_ResistanceZonesColor, linewidth=3, style=plot.style_line, offset=-3, join=false, transp=50) // offset=-2
  387. TF3_ResistanceDownZone = plot(ShowTF3SR and TF3_Menu == 'S/R Zones' ? TF3_ResistanceLowerZone : na, 'Timeframe 3 - Resistance - Lower Zone', color=TF3_ResistanceZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50) // offset=-2
  388. fill(TF3_ResistanceUpZone, TF3_ResistanceDownZone, color=TF3_ResistanceZonesColor, title='Timeframe 3 - Resistance Zone Shading', transp=93) // ResistanceColorCustom 2)
  389.  
  390.  
  391. plot(ShowTF3SR and TF3_Menu == 'S/R Dots' ? TF3_FractalUp : na, 'Timeframe 3 - Resistance - Dots', color=TF3_ResistanceColor, linewidth=3, style=plot.style_circles, offset=-3, join=false, transp=50)
  392. plot(ShowTF3SR and TF3_Menu == 'S/R Dots' ? TF3_FractalDown : na, 'Timeframe 3 - Support - Dots', color=TF3_SupportColor, linewidth=3, style=plot.style_circles, offset=-3, join=false, transp=50)
  393.  
  394.  
  395. TF3_SupportUpZone = plot(ShowTF3SR and TF3_Menu == 'S/R Zones' ? TF3_SupportUpperZone : na, 'Timeframe 3 - Support - Upper Zone', color=TF3_SupportZonesColor, linewidth=1, style=plot.style_line, offset=-3, join=false, transp=50)
  396. TF3_SupportDownZone = plot(ShowTF3SR and (TF3_Menu == 'S/R Zones' or TF3_Menu == 'S/R Lines') ? TF3_SupportLowerZone : na, 'Timeframe 3 - Support - Lines - Lower Zone', color=TF3_SupportZonesColor, linewidth=3, style=plot.style_line, offset=-3, join=false, transp=50)
  397. fill(TF3_SupportUpZone, TF3_SupportDownZone, color=TF3_SupportZonesColor, title='Timeframe 3 - Support Zone Shading', transp=93)
  398.  
  399.  
  400. // TF3 S/R Alerts
  401.  
  402.  
  403. PriceInTF3ResistanceZone = close <= TF3_ResistanceUpperZone and close >= TF3_ResistanceLowerZone
  404. PriceInTF3SupportZone = close <= TF3_SupportUpperZone and close >= TF3_SupportLowerZone
  405. PriceEntersTF3SRZone = PriceInTF3ResistanceZone and not PriceInTF3ResistanceZone[1] or PriceInTF3SupportZone and not PriceInTF3SupportZone[1]
  406.  
  407. alertcondition(PriceEntersTF3SRZone, title='Alert - TF3 Price Enters S/R Zone', message='TF3 - Price Enters TF3 S/R Zone - Support/Resistance Zones x3')
  408.  
  409. PriceBreakingTF3Resistance = ta.crossover(close, TF3_FractalUp)
  410. PriceBreakingTF3Support = ta.crossunder(close, TF3_FractalDown)
  411.  
  412. alertcondition(PriceBreakingTF3Resistance, title='Alert - TF3 Price Crossing Over Resistance', message='TF3 - Price Crossing Over Resistance - Support/Resistance Zones x3')
  413. alertcondition(PriceBreakingTF3Support, title='Alert - TF3 Price Crossing Under Support', message='TF3 - Price Crossing Under Support - Support/Resistance Zones x3')
  414.  
  415. // Any TF S/R Alerts
  416.  
  417. PriceCrossingAnyTFSR = ta.cross(close, TF1_FractalUp) or ta.cross(close, TF2_FractalUp) or ta.cross(close, TF3_FractalUp) or ta.cross(close, TF1_FractalDown) or ta.cross(close, TF2_FractalDown) or ta.cross(close, TF3_FractalDown)
  418.  
  419. alertcondition(PriceEntersTF1SRZone or PriceEntersTF2SRZone or PriceEntersTF3SRZone, title='Alert - Any TF Price Enters S/R Zone', message='Any TF - Price Enters S/R Zone - Support/Resistance Zones x3')
  420. alertcondition(PriceBreakingTF1Resistance or PriceBreakingTF2Resistance or PriceBreakingTF3Resistance, title='Alert - Any TF Price Crossing Over Resistance', message='Any TF - Price Crossing Over Resistance - Support/Resistance Zones x3')
  421. alertcondition(PriceBreakingTF3Support or PriceBreakingTF3Support or PriceBreakingTF3Support, title='Alert - Any TF Price Crossing Under Support', message='Any TF - Price Crossing Under Support - Support/Resistance Zones x3')
  422. alertcondition(PriceCrossingAnyTFSR, title='Alert - Any TF Price Crossing S/R', message='Any TF - Price Crossing S/R - Support/Resistance Zones x3')
  423.  
  424.  
  425. // Daily Weekly and Monthly High Low Close Extensions
  426.  
  427.  
  428. // Function outputs 1 when it's the first bar of the D/W/M/Y
  429. is_newbar(res) =>
  430. ch = 0
  431. if res == '12M'
  432. t = year(time('D'))
  433. ch := ta.change(t) != 0 ? 1 : 0
  434. ch
  435. else
  436. t = time(res)
  437. ch := ta.change(t) != 0 ? 1 : 0
  438. ch
  439. ch
  440.  
  441. // Rounding levels to min tick
  442. nround(x) =>
  443. n = math.round(x / syminfo.mintick) * syminfo.mintick
  444. n
  445.  
  446. ////////////
  447. // INPUTS //
  448. ////////////
  449.  
  450.  
  451. DailyAndWeeklyHLCCandleTypeInput = 'Adaptive - Automatically Adapts to Standard or HA Candles' // input(title = 'Calculate According To Candle Type - Daily and Weekly HLC', defval = "Standard", options = ["Standard", "Heikin Ashi", "Adaptive - Automatically Adapts to Standard or HA Candles"])
  452.  
  453.  
  454. // HA = heikinashi(syminfo.tickerid)
  455. // NonHA = tickerid(syminfo.prefix, syminfo.ticker)
  456.  
  457. DailyAndWeeklyHLCCandleType = syminfo.tickerid // DailyAndWeeklyHLCCandleTypeInput=="Heikin Ashi" ? HA : DailyAndWeeklyHLCCandleTypeInput=="Standard" ? NonHA : syminfo.tickerid
  458.  
  459.  
  460. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  461.  
  462. MajBarsSinseYHLC = 0
  463. MajBarsSinseYHLC := is_newbar('D') ? 0 : MajBarsSinseYHLC[1] + 1
  464.  
  465. DailyOrLess = timeframe.isseconds or timeframe.isintraday or timeframe.isdaily and timeframe.multiplier < 2 ? 1 : 0
  466.  
  467.  
  468. // Yesterdays High Low Close Calculations and Plots
  469.  
  470. //YHLCOpen = security(DailyAndWeeklyHLCCandleType, 'D', open, barmerge.gaps_off, barmerge.lookahead_on)
  471. YHLCClose = request.security(DailyAndWeeklyHLCCandleType, 'D', close, barmerge.gaps_off, barmerge.lookahead_on)
  472. YHLCHigh = request.security(DailyAndWeeklyHLCCandleType, 'D', high, barmerge.gaps_off, barmerge.lookahead_on)
  473. YHLCLow = request.security(DailyAndWeeklyHLCCandleType, 'D', low, barmerge.gaps_off, barmerge.lookahead_on)
  474.  
  475.  
  476. /////////////////////
  477. // Get HLC from HT //
  478.  
  479. // Calc Open
  480. // YHLCCurentOpen = 0.0
  481. // YHLCCurentOpen := is_newbar('D') ? YHLCOpen : YHLCCurentOpen[1]
  482.  
  483. // YHLCPreviousOpen = 0.0
  484. // YHLCPreviousOpen := is_newbar('D') ? YHLCCurentOpen[1] : YHLCPreviousOpen[1]
  485.  
  486. // Calc High
  487. YHLCCurrentHigh = 0.0
  488. YHLCCurrentHigh := is_newbar('D') ? YHLCHigh : math.max(YHLCCurrentHigh[1], YHLCHigh)
  489.  
  490. YHLCPreviousHigh = 0.0
  491. YHLCPreviousHigh := is_newbar('D') ? YHLCCurrentHigh[1] : YHLCPreviousHigh[1]
  492.  
  493. // Calc Low
  494. YHLCCurrentLow = 0.0
  495. YHLCCurrentLow := is_newbar('D') ? YHLCLow : math.min(YHLCCurrentLow[1], YHLCLow)
  496.  
  497. YHLCPreviousLow = 0.0
  498. YHLCPreviousLow := is_newbar('D') ? YHLCCurrentLow[1] : YHLCPreviousLow[1]
  499.  
  500. // Calc Close
  501. YHLCPreviousClose = 0.0
  502. YHLCPreviousClose := is_newbar('D') ? YHLCClose[1] : YHLCPreviousClose[1]
  503.  
  504.  
  505. // YCa = ShowYesterdaysHLC and DailyOrLess ? line.new(bar_index[min(MajBarsSinseYHLC, 300)], YHLCPreviousClose, bar_index, YHLCPreviousClose, color=color.blue, style = line.style_solid, extend = extend.right) : na
  506. // YHa = ShowYesterdaysHLC and DailyOrLess ? line.new(bar_index[min(MajBarsSinseYHLC, 300)], YHLCPreviousHigh, bar_index, YHLCPreviousHigh, color=color.green, style = line.style_solid, extend = extend.right) : na
  507. // YLa = ShowYesterdaysHLC and DailyOrLess ? line.new(bar_index[min(MajBarsSinseYHLC, 300)], YHLCPreviousLow, bar_index, YHLCPreviousLow, color=color.red, style = line.style_solid, extend = extend.right) : na
  508.  
  509.  
  510. // // delete previous lines in the same period
  511. // //if (not is_newbar(pp_res)// or not show_historical_levels)
  512. // line.delete(YCa[1])
  513. // line.delete(YHa[1])
  514. // line.delete(YLa[1])
  515.  
  516.  
  517. /////////////////////////////////////////////////////////////////////////////////
  518.  
  519. var int YHLCTimeFromCalcA = 0
  520. var int YHLCTimeToCalcA = 0
  521.  
  522. if ta.change(time('D'))
  523. YHLCTimeFromCalcA := bar_index[1]
  524. YHLCTimeToCalcA := bar_index
  525. YHLCTimeToCalcA
  526.  
  527. YHLCTimeFromCalcB = bar_index[math.min(MajBarsSinseYHLC, 300)]
  528. YHLCTimeToCalcB = bar_index
  529.  
  530. YHLCTimeFrom = timeframe.isintraday ? YHLCTimeFromCalcB : YHLCTimeFromCalcA
  531. YHLCTimeTo = timeframe.isintraday ? YHLCTimeToCalcB : YHLCTimeToCalcA
  532.  
  533. YHLCLineWidth = 2 // MajLineStyleIn=="Dotted" ? MajLineWidthIn : MajLineWidthIn + 1
  534.  
  535.  
  536. YCb = ShowYesterdaysHLC and DailyOrLess ? line.new(YHLCTimeFrom, YHLCPreviousClose, YHLCTimeTo, YHLCPreviousClose, color=color.blue, style=line.style_solid, extend=extend.right, width=YHLCLineWidth) : na
  537. YHb = ShowYesterdaysHLC and DailyOrLess ? line.new(YHLCTimeFrom, YHLCPreviousHigh, YHLCTimeTo, YHLCPreviousHigh, color=color.green, style=line.style_solid, extend=extend.right, width=YHLCLineWidth) : na
  538. YLb = ShowYesterdaysHLC and DailyOrLess ? line.new(YHLCTimeFrom, YHLCPreviousLow, YHLCTimeTo, YHLCPreviousLow, color=color.red, style=line.style_solid, extend=extend.right, width=YHLCLineWidth) : na
  539.  
  540.  
  541. // delete previous lines in the same period
  542. //if (not is_newbar(pp_res)// or not show_historical_levels)
  543. line.delete(YCb[1])
  544. line.delete(YHb[1])
  545. line.delete(YLb[1])
  546.  
  547.  
  548. alertcondition(not is_newbar('D') and ta.cross(close, YHLCPreviousClose), 'Crossing Y\'s Close', 'Crossing Yesterdays Close')
  549. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, YHLCPreviousClose), "Crossover Yesterdays Close", "Crossover Yesterdays Close")
  550. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, YHLCPreviousClose), "Crossunder Yesterdays Close", "Crossunder Yesterdays Close")
  551.  
  552. alertcondition(not is_newbar('D') and ta.cross(close, YHLCPreviousHigh), 'Crossing Y\'s High', 'Crossing Yesterdays High')
  553. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, YHLCPreviousHigh), "Crossover Yesterdays High", "Crossover Yesterdays High")
  554. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, YHLCPreviousHigh), "Crossunder Yesterdays High", "Crossunder Yesterdays High")
  555.  
  556. alertcondition(not is_newbar('D') and ta.cross(close, YHLCPreviousLow), 'Crossing Y\'s Low', 'Crossing Yesterdays Low')
  557. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, YHLCPreviousLow), "Crossover Yesterdays Low", "Crossover Yesterdays Low")
  558. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, YHLCPreviousLow), "Crossunder Yesterdays Low", "Crossunder Yesterdays Low")
  559.  
  560.  
  561. ////////////////////////////////////////////
  562.  
  563. MajBarsSinseLWHLC = 0
  564. MajBarsSinseLWHLC := is_newbar('W') ? 0 : MajBarsSinseLWHLC[1] + 1
  565.  
  566. WeeklyOrLess = timeframe.isseconds or timeframe.isintraday or timeframe.isdaily or timeframe.isweekly and timeframe.multiplier < 2 ? 1 : 0
  567.  
  568. // Last Weeks High Low Close Calculations and Plots
  569.  
  570. //LWHLCOpen = security(DailyAndWeeklyHLCCandleType, 'W', open, barmerge.gaps_off, barmerge.lookahead_on)
  571. LWHLCClose = request.security(DailyAndWeeklyHLCCandleType, 'W', close, barmerge.gaps_off, barmerge.lookahead_on)
  572. LWHLCHigh = request.security(DailyAndWeeklyHLCCandleType, 'W', high, barmerge.gaps_off, barmerge.lookahead_on)
  573. LWHLCLow = request.security(DailyAndWeeklyHLCCandleType, 'W', low, barmerge.gaps_off, barmerge.lookahead_on)
  574.  
  575.  
  576. /////////////////////
  577. // Get HLC from HT //
  578.  
  579. // Calc Open
  580. // LWHLCCurentOpen = 0.0
  581. // LWHLCCurentOpen := is_newbar('W') ? LWHLCOpen : LWHLCCurentOpen[1]
  582.  
  583. // LWHLCPreviousOpen = 0.0
  584. // LWHLCPreviousOpen := is_newbar('W') ? LWHLCCurentOpen[1] : LWHLCPreviousOpen[1]
  585.  
  586. // Calc High
  587. LWHLCCurrentHigh = 0.0
  588. LWHLCCurrentHigh := is_newbar('W') ? LWHLCHigh : math.max(LWHLCCurrentHigh[1], LWHLCHigh)
  589.  
  590. LWHLCPreviousHigh = 0.0
  591. LWHLCPreviousHigh := is_newbar('W') ? LWHLCCurrentHigh[1] : LWHLCPreviousHigh[1]
  592.  
  593. // Calc Low
  594. LWHLCCurrentLow = 0.0
  595. LWHLCCurrentLow := is_newbar('W') ? LWHLCLow : math.min(LWHLCCurrentLow[1], LWHLCLow)
  596.  
  597. LWHLCPreviousLow = 0.0
  598. LWHLCPreviousLow := is_newbar('W') ? LWHLCCurrentLow[1] : LWHLCPreviousLow[1]
  599.  
  600. // Calc Close
  601. LWHLCPreviousClose = 0.0
  602. LWHLCPreviousClose := is_newbar('W') ? LWHLCClose[1] : LWHLCPreviousClose[1]
  603.  
  604.  
  605. // LWCa = ShowLastWeeksHLC and WeeklyOrLess ? line.new(bar_index[min(MajBarsSinseLWHLC, 300)], LWHLCPreviousClose, bar_index, LWHLCPreviousClose, color=color.blue, style = line.style_solid, width = 2, extend = extend.right) : na
  606. // LWHa = ShowLastWeeksHLC and WeeklyOrLess ? line.new(bar_index[min(MajBarsSinseLWHLC, 300)], LWHLCPreviousHigh, bar_index, LWHLCPreviousHigh, color=color.green, style = line.style_solid, width = 2, extend = extend.right) : na
  607. // LWLa = ShowLastWeeksHLC and WeeklyOrLess ? line.new(bar_index[min(MajBarsSinseLWHLC, 300)], LWHLCPreviousLow, bar_index, LWHLCPreviousLow, color=color.red, style = line.style_solid, width = 2, extend = extend.right) : na
  608.  
  609.  
  610. // // delete previous lines in the same period
  611. // //if (not is_newbar(pp_res)// or not show_historical_levels)
  612. // line.delete(LWCa[1])
  613. // line.delete(LWHa[1])
  614. // line.delete(LWLa[1])
  615.  
  616. //////////////////////////////////////
  617.  
  618.  
  619. var int LWHLCTimeFromCalcA = 0
  620. var int LWHLCTimeToCalcA = 0
  621.  
  622. if ta.change(time('W'))
  623. LWHLCTimeFromCalcA := bar_index[1]
  624. LWHLCTimeToCalcA := bar_index
  625. LWHLCTimeToCalcA
  626.  
  627. LWHLCTimeFromCalcB = bar_index[math.min(MajBarsSinseLWHLC, 300)]
  628. LWHLCTimeToCalcB = bar_index
  629.  
  630. LWHLCTimeFrom = timeframe.isintraday ? LWHLCTimeFromCalcB : LWHLCTimeFromCalcA
  631. LWHLCTimeTo = timeframe.isintraday ? LWHLCTimeToCalcB : LWHLCTimeToCalcA
  632.  
  633. LWHLCLineWidth = 3 //MajLineStyleIn=="Dotted" ? MajLineWidthIn + 1 : MajLineWidthIn + 2
  634.  
  635.  
  636. LWCb = ShowLastWeeksHLC and WeeklyOrLess ? line.new(LWHLCTimeFrom, LWHLCPreviousClose, LWHLCTimeTo, LWHLCPreviousClose, color=color.blue, style=line.style_solid, extend=extend.right, width=LWHLCLineWidth) : na
  637. LWHb = ShowLastWeeksHLC and WeeklyOrLess ? line.new(LWHLCTimeFrom, LWHLCPreviousHigh, LWHLCTimeTo, LWHLCPreviousHigh, color=color.green, style=line.style_solid, extend=extend.right, width=LWHLCLineWidth) : na
  638. LWLb = ShowLastWeeksHLC and WeeklyOrLess ? line.new(LWHLCTimeFrom, LWHLCPreviousLow, LWHLCTimeTo, LWHLCPreviousLow, color=color.red, style=line.style_solid, extend=extend.right, width=LWHLCLineWidth) : na
  639.  
  640.  
  641. // delete previous lines in the same period
  642. //if (not is_newbar(pp_res)// or not show_historical_levels)
  643. line.delete(LWCb[1])
  644. line.delete(LWHb[1])
  645. line.delete(LWLb[1])
  646.  
  647.  
  648. alertcondition(not is_newbar('W') and ta.cross(close, LWHLCPreviousClose), 'Crossing LW\'s Close', 'Crossing Last Weeks Close')
  649. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LWHLCPreviousClose), "Crossover Yesterdays Close", "Crossover Last Weeks Close")
  650. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LWHLCPreviousClose), "Crossunder Yesterdays Close", "Crossunder Last Weeks Close")
  651.  
  652. alertcondition(not is_newbar('W') and ta.cross(close, LWHLCPreviousHigh), 'Crossing LW\'s High', 'Crossing Last Weeks High')
  653. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LWHLCPreviousHigh), "Crossover Yesterdays High", "Crossover Last Weeks High")
  654. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LWHLCPreviousHigh), "Crossunder Yesterdays High", "Crossunder Last Weeks High")
  655.  
  656. alertcondition(not is_newbar('W') and ta.cross(close, LWHLCPreviousLow), 'Crossing LW\'s Low', 'Crossing Last Weeks Low')
  657. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LWHLCPreviousLow), "Crossover Yesterdays Low", "Crossover Last Weeks Low")
  658. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LWHLCPreviousLow), "Crossunder Yesterdays Low", "Crossunder Last Weeks Low")
  659.  
  660. ////////////////////////////////////////////
  661.  
  662.  
  663. MajBarsSinseLMHLC = 0
  664. MajBarsSinseLMHLC := is_newbar('M') ? 0 : MajBarsSinseLMHLC[1] + 1
  665.  
  666.  
  667. LMHLCLineWidth = 5 // = MajLineStyleIn=="Dotted" ? MajLineWidthIn + 2 : MajLineWidthIn + 3
  668.  
  669. // Last Weeks High Low Close Calculations and Plots
  670.  
  671. LMHLCOpen = request.security(DailyAndWeeklyHLCCandleType, 'M', open, barmerge.gaps_off, barmerge.lookahead_on)
  672. LMHLCClose = request.security(DailyAndWeeklyHLCCandleType, 'M', close, barmerge.gaps_off, barmerge.lookahead_on)
  673. LMHLCHigh = request.security(DailyAndWeeklyHLCCandleType, 'M', high, barmerge.gaps_off, barmerge.lookahead_on)
  674. LMHLCLow = request.security(DailyAndWeeklyHLCCandleType, 'M', low, barmerge.gaps_off, barmerge.lookahead_on)
  675.  
  676.  
  677. /////////////////////
  678. // Get HLC from HT //
  679.  
  680. // Calc Open
  681. LMHLCCurentOpen = 0.0
  682. LMHLCCurentOpen := is_newbar('M') ? LMHLCOpen : LMHLCCurentOpen[1]
  683.  
  684. LMHLCPreviousOpen = 0.0
  685. LMHLCPreviousOpen := is_newbar('M') ? LMHLCCurentOpen[1] : LMHLCPreviousOpen[1]
  686.  
  687. // Calc High
  688. LMHLCCurrentHigh = 0.0
  689. LMHLCCurrentHigh := is_newbar('M') ? LMHLCHigh : math.max(LMHLCCurrentHigh[1], LMHLCHigh)
  690.  
  691. LMHLCPreviousHigh = 0.0
  692. LMHLCPreviousHigh := is_newbar('M') ? LMHLCCurrentHigh[1] : LMHLCPreviousHigh[1]
  693.  
  694. // Calc Low
  695. LMHLCCurrentLow = 0.0
  696. LMHLCCurrentLow := is_newbar('M') ? LMHLCLow : math.min(LMHLCCurrentLow[1], LMHLCLow)
  697.  
  698. LMHLCPreviousLow = 0.0
  699. LMHLCPreviousLow := is_newbar('M') ? LMHLCCurrentLow[1] : LMHLCPreviousLow[1]
  700.  
  701. // Calc Close
  702. LMHLCPreviousClose = 0.0
  703. LMHLCPreviousClose := is_newbar('M') ? LMHLCClose[1] : LMHLCPreviousClose[1]
  704.  
  705.  
  706.  
  707. var int LMCOTimeFromCalcA = 0
  708. var int LMHLCTimeToCalcA = 0
  709.  
  710. if ta.change(time('M'))
  711. LMCOTimeFromCalcA := bar_index[1]
  712. LMHLCTimeToCalcA := bar_index
  713. LMHLCTimeToCalcA
  714.  
  715. LMHLCTimeFromCalcB = bar_index[math.min(MajBarsSinseLMHLC, 300)]
  716. LMHLCTimeToCalcB = bar_index
  717.  
  718. LMHLCTimeFrom = timeframe.isintraday ? LMHLCTimeFromCalcB : LMCOTimeFromCalcA
  719. LMHLCTimeTo = timeframe.isintraday ? LMHLCTimeToCalcB : LMHLCTimeToCalcA
  720.  
  721.  
  722. // LMHLCb = ShowLastWeeksHLC and WeeklyOrLess ? line.new(LMHLCTimeFrom, LMHLCPreviousClose, LMHLCTimeTo, LMHLCPreviousClose, color=color.blue, style = line.style_solid, extend = extend.right, width=LWHLCLineWidth) : na
  723.  
  724. LMCb = ShowLastMonthsHLC ? line.new(LMHLCTimeFrom, LMHLCPreviousClose, LMHLCTimeTo, LMHLCPreviousClose, color=color.blue, style=line.style_solid, extend=extend.right, width=LMHLCLineWidth) : na
  725. LMHb = ShowLastMonthsHLC ? line.new(LMHLCTimeFrom, LMHLCPreviousHigh, LMHLCTimeTo, LMHLCPreviousHigh, color=color.green, style=line.style_solid, extend=extend.right, width=LMHLCLineWidth) : na
  726. LMLb = ShowLastMonthsHLC ? line.new(LMHLCTimeFrom, LMHLCPreviousLow, LMHLCTimeTo, LMHLCPreviousLow, color=color.red, style=line.style_solid, extend=extend.right, width=LMHLCLineWidth) : na
  727.  
  728.  
  729. // delete previous lines in the same period
  730. //if (not is_newbar(pp_res)// or not show_historical_levels)
  731. line.delete(LMCb[1])
  732. line.delete(LMHb[1])
  733. line.delete(LMLb[1])
  734.  
  735. alertcondition(not is_newbar('M') and ta.cross(close, LMHLCPreviousClose), 'Crossing LM\'s Close', 'Crossing Last Months Close')
  736. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LMHLCPreviousClose), "Crossover Last Months Close", "Crossover Last Months Close")
  737. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LMHLCPreviousClose), "Crossunder Last Months Close", "Crossunder Last Months Close")
  738.  
  739. alertcondition(not is_newbar('M') and ta.cross(close, LMHLCPreviousHigh), 'Crossing LM\'s High', 'Crossing Last Months High')
  740. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LMHLCPreviousHigh), "Crossover Last Months High", "Crossover Last Weeks High")
  741. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LMHLCPreviousHigh), "Crossunder Last Months High", "Crossunder Last Months High")
  742.  
  743. alertcondition(not is_newbar('M') and ta.cross(close, LMHLCPreviousLow), 'Crossing LM\'s Low', 'Crossing Last Months Low')
  744. // alertcondition(not is_newbar(MajPivotPointResolution) and crossover(close, LMHLCPreviousLow), "Crossover Last Months Low", "Crossover Last Weeks Low")
  745. // alertcondition(not is_newbar(MajPivotPointResolution) and crossunder(close, LMHLCPreviousLow), "Crossunder Last Months Low", "Crossunder Last Months Low")
  746.  
  747.  
Add Comment
Please, Sign In to add comment