xmd79

Gann Square of 144

May 30th, 2023
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 53.82 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. // © ThiagoSchmitz
  3.  
  4. //@version=5
  5. indicator("Gann Square of 144", overlay=true, max_lines_count=500, max_labels_count=500)
  6. // *****************************************************************************
  7. // ********************************* Constants *********************************
  8. // *****************************************************************************
  9. string groupInlineXYLabels = "X-Axis and Y-Axis Labels"
  10. string groupInlineExtraLines = "Extra Lines"
  11. string groupInlineColors = "colors"
  12. string groupInlineSquare = "squarecolors"
  13. int squares = 144
  14. int barIndex = bar_index
  15. float barHigh = high
  16. float barLow = low
  17. string lineDashed = line.style_dashed
  18. string lineDotted = line.style_dotted
  19. string lineSolid = line.style_solid
  20. string lineNone = label.style_none
  21. bool barstateIsNew = barstate.isnew
  22. bool barstateIsLast = barstate.islast
  23. color colorRed = color.red
  24. color colorWhite = color.white
  25.  
  26. // *****************************************************************************
  27. // ********************************* Inputs ************************************
  28. // *****************************************************************************
  29. var int startDate = input.time(timestamp("2022-11-01"), "Starting Date")
  30. var float maxPrice = input.float(69198.0, "Manual Max Price")
  31. var float minPrice = input.float(17595.0, "Manual Min Price")
  32. var bool autoPricesAndBar = input.bool(true, "Set Upper/Lower Prices and Start Bar Automatically")
  33. var bool updateNewBar = input.bool(true, "Update at new bar")
  34. var int candlesPerDivision = input.int(1, "Candles per division", minval=1)
  35. var bool showTopXAxis = input.bool(false, "Top X-Axis", inline=groupInlineXYLabels, group=groupInlineXYLabels)
  36. var bool showBottomXAxis = input.bool(true, "Bottom X-Axis", inline=groupInlineXYLabels, group=groupInlineXYLabels)
  37. var bool showLeftYAxis = input.bool(false, "Left Y-Axis", inline=groupInlineXYLabels, group=groupInlineXYLabels)
  38. var bool showRightYAxis = input.bool(true, "Right Y-Axis", inline=groupInlineXYLabels, group=groupInlineXYLabels)
  39. var bool showPrices = input.bool(true, "Show Prices on the Right Y-Axis", inline=groupInlineXYLabels, group=groupInlineXYLabels)
  40. var bool showDivisions = input.bool(true, "Show Vertical Divisions", inline=groupInlineExtraLines, group=groupInlineExtraLines)
  41. var bool showExtraLines = input.bool(true, "Show Extra Lines", inline=groupInlineExtraLines, group=groupInlineExtraLines)
  42. var bool showGrid = input.bool(true, "Show Grid", inline=groupInlineExtraLines, group=groupInlineExtraLines)
  43. var bool showBackground = input.bool(true, "Show Background", inline=groupInlineExtraLines, group=groupInlineExtraLines)
  44. var string patterns = input.string("None", "Line Patterns", options=["None", "Arrow", "Star", "36, 72, and 108", "Arrow Cross", "Corners and Cross", "Master"], group="patterns")
  45. var color labelColor = input.color(color.green, "Numbers Color", inline=groupInlineColors, group=groupInlineColors)
  46. var color divisionsColor = input.color(color.blue, "Vertical Lines Color", inline=groupInlineColors, group=groupInlineColors)
  47. var color gridColor = input.color(color.gray, "Grid Color", inline=groupInlineColors, group=groupInlineColors)
  48. var color TLSColor = input.color(color.new(color.green, 80), "Top Left Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  49. var color TMSColor = input.color(color.new(color.red, 80), "Top Middle Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  50. var color TRSColor = input.color(color.new(color.green, 80), "Top Right Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  51. var color CLSColor = input.color(color.new(color.green, 80), "Center Left Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  52. var color CMSColor = input.color(color.new(color.red, 80), "Center Middle Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  53. var color CRSColor = input.color(color.new(color.green, 80), "Center Right Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  54. var color BLSColor = input.color(color.new(color.green, 80), "Bottom Left Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  55. var color BMSColor = input.color(color.new(color.red, 80), "Bottom Middle Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  56. var color BRSColor = input.color(color.new(color.green, 80), "Bottom Right Square Color", inline=groupInlineSquare, group=groupInlineSquare)
  57. var int dateBarIndex = 0
  58.  
  59. if time == startDate
  60. dateBarIndex := barIndex
  61. // *****************************************************************************
  62. // ******************************** Variables **********************************
  63. // *****************************************************************************
  64. int startBarIndex = autoPricesAndBar ? barIndex - math.floor(squares * candlesPerDivision / 2) : dateBarIndex
  65. int endBarIndex = startBarIndex + squares * candlesPerDivision
  66. int middleBarIndex = startBarIndex + squares * candlesPerDivision / 2
  67. int onethirdPriceBar = (endBarIndex - startBarIndex) / 3
  68. int barDiff = squares - math.abs(endBarIndex - barIndex)
  69. int barIndexDiff = barDiff <= 0 ? 1 : barDiff
  70. float atr = ta.atr(5)
  71. float highest = ta.highest(math.floor(squares * candlesPerDivision / 2) + 1)
  72. float lowest = ta.lowest(math.floor(squares * candlesPerDivision/ 2) + 1)
  73. float lowerPrice = autoPricesAndBar ? lowest : minPrice
  74. float upperPrice = autoPricesAndBar ? highest : maxPrice
  75. float middlePrice = lowerPrice + (upperPrice - lowerPrice) / 2
  76. float onethirdPrice = (upperPrice - lowerPrice) / 3
  77.  
  78. // *****************************************************************************
  79. // *************************** One-Time Variables ******************************
  80. // *****************************************************************************
  81. var box squareLines = box.new(barIndex, barHigh, barIndex, barLow, color.new(colorWhite, 50), 2, bgcolor=na)
  82. var bool buildSquareDone = false
  83. var bool buildInputsDone = false
  84. var bool[] dashedLineStyles = array.new_bool()
  85. var bool[] extendLines = array.new_bool()
  86. var bool[] showGroup = array.new_bool()
  87. var color[] lineColors = array.new_color()
  88. var label[] bottomXAxisArray = array.new_label()
  89. var label[] leftYAxisArray = array.new_label()
  90. var label[] rightYAxisArray = array.new_label()
  91. var label[] topXAxisArray = array.new_label()
  92. var line[] BLRArray = array.new_line()
  93. var line[] BLTArray = array.new_line()
  94. var line[] BRLArray = array.new_line()
  95. var line[] BRTArray = array.new_line()
  96. var line[] TLBArray = array.new_line()
  97. var line[] TLRArray = array.new_line()
  98. var line[] TRBArray = array.new_line()
  99. var line[] TRLArray = array.new_line()
  100. var line[] divisionsArray = array.new_line()
  101. var line[] extraArray = array.new_line()
  102. var line[] gridArray = array.new_line()
  103. var box back1Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=TLSColor)
  104. var box back2Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=TMSColor)
  105. var box back3Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=TRSColor)
  106. var box back4Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=CLSColor)
  107. var box back5Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=CMSColor)
  108. var box back6Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=CRSColor)
  109. var box back7Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=BLSColor)
  110. var box back8Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=BMSColor)
  111. var box back9Square = box.new(barIndex, barHigh, barIndex, barLow, na, 0, bgcolor=BRSColor)
  112.  
  113. // *****************************************************************************
  114. // ******************************** Fucntions **********************************
  115. // *****************************************************************************
  116.  
  117. // =============================================================================
  118. // * This function will update the box that goes on the edge of the Gann's
  119. // * square
  120. // =============================================================================
  121. updateBox() =>
  122. box.set_left(squareLines, startBarIndex)
  123. box.set_top(squareLines, upperPrice)
  124. box.set_right(squareLines, endBarIndex)
  125. box.set_bottom(squareLines, lowerPrice)
  126.  
  127. // =============================================================================
  128. // * This function will update the background of the Gann's square
  129. // =============================================================================
  130. updateBackgrounds() =>
  131. s1 = startBarIndex
  132. s2 = startBarIndex + ((squares / 3) * candlesPerDivision)
  133. s3 = startBarIndex + ((squares / 3) * 2 * candlesPerDivision)
  134. s4 = endBarIndex
  135. t1 = upperPrice
  136. t2 = upperPrice - ((upperPrice - lowerPrice) / 3)
  137. t3 = upperPrice - ((upperPrice - lowerPrice) / 3) * 2
  138. t4 = lowerPrice
  139.  
  140. box.set_left(back1Square, s1)
  141. box.set_right(back1Square, s2)
  142. box.set_top(back1Square, t1)
  143. box.set_bottom(back1Square, t2)
  144.  
  145. box.set_left(back2Square, s2)
  146. box.set_right(back2Square, s3)
  147. box.set_top(back2Square, t1)
  148. box.set_bottom(back2Square, t2)
  149.  
  150. box.set_left(back3Square, s3)
  151. box.set_right(back3Square, s4)
  152. box.set_top(back3Square, t1)
  153. box.set_bottom(back3Square, t2)
  154.  
  155. box.set_left(back4Square, s1)
  156. box.set_right(back4Square, s2)
  157. box.set_top(back4Square, t2)
  158. box.set_bottom(back4Square, t3)
  159.  
  160. box.set_left(back5Square, s2)
  161. box.set_right(back5Square, s3)
  162. box.set_top(back5Square, t2)
  163. box.set_bottom(back5Square, t3)
  164.  
  165. box.set_left(back6Square, s3)
  166. box.set_right(back6Square, s4)
  167. box.set_top(back6Square, t2)
  168. box.set_bottom(back6Square, t3)
  169.  
  170. box.set_left(back7Square, s1)
  171. box.set_right(back7Square, s2)
  172. box.set_top(back7Square, t3)
  173. box.set_bottom(back7Square, t4)
  174.  
  175. box.set_left(back8Square, s2)
  176. box.set_right(back8Square, s3)
  177. box.set_top(back8Square, t3)
  178. box.set_bottom(back8Square, t4)
  179.  
  180. box.set_left(back9Square, s3)
  181. box.set_right(back9Square, s4)
  182. box.set_top(back9Square, t3)
  183. box.set_bottom(back9Square, t4)
  184.  
  185. // =============================================================================
  186. // * Build both X-Axis and y-Axis labels
  187. // * It will use the topXAxisArray, bottomXAxisArray, rightYAxisArray, and
  188. // * leftYAxisArray arrays to store each label, if they are enabled to be shown
  189. // =============================================================================
  190. buildAxis() =>
  191. for int j = 0 to squares by 6
  192. if showTopXAxis
  193. array.push(topXAxisArray, label.new(startBarIndex + j * candlesPerDivision, upperPrice + atr / 4, str.tostring(j), style=lineNone, textcolor=labelColor))
  194. if showBottomXAxis
  195. array.push(bottomXAxisArray, label.new(startBarIndex + j * candlesPerDivision, lowerPrice - atr / 2, str.tostring(j), style=lineNone, textcolor=labelColor))
  196. if showRightYAxis
  197. price = upperPrice - (upperPrice - lowerPrice) / squares * j
  198. t = str.tostring(j) + (showPrices ? " (" + str.tostring(math.round_to_mintick(price)) + ")" : "")
  199. array.push(rightYAxisArray, label.new(endBarIndex + 8 * candlesPerDivision, price, t, style=lineNone, textcolor=labelColor))
  200. if showLeftYAxis
  201. array.push(leftYAxisArray, label.new(startBarIndex - 3, upperPrice - (upperPrice - lowerPrice) / squares * j, str.tostring(j), style=lineNone, textcolor=labelColor))
  202.  
  203. // =============================================================================
  204. // * Update both X-Axis and y-Axis labels
  205. // =============================================================================
  206. updateAxis() =>
  207. for int j = 0 to squares - 1 by 6
  208. if showTopXAxis
  209. label.set_x(array.get(topXAxisArray, j / 6), startBarIndex + j * candlesPerDivision)
  210. label.set_y(array.get(topXAxisArray, j / 6), upperPrice + atr / 4)
  211. if showBottomXAxis
  212. label.set_x(array.get(bottomXAxisArray, j / 6), startBarIndex + j * candlesPerDivision)
  213. label.set_y(array.get(bottomXAxisArray, j / 6), lowerPrice - atr / 2)
  214. if showRightYAxis
  215. label.set_x(array.get(rightYAxisArray, j / 6), endBarIndex + 8 * candlesPerDivision)
  216. label.set_y(array.get(rightYAxisArray, j / 6), upperPrice - (upperPrice - lowerPrice) / squares * j)
  217. if showLeftYAxis
  218. label.set_x(array.get(rightYAxisArray, j / 6), startBarIndex - 3)
  219. label.set_y(array.get(rightYAxisArray, j / 6), upperPrice - (upperPrice - lowerPrice) / squares * j)
  220.  
  221. // =============================================================================
  222. // * Build the vertical divisions to divide the square in 9 smaller squares
  223. // =============================================================================
  224. buildDivisions() =>
  225. array.push(divisionsArray, line.new(startBarIndex, lowerPrice + onethirdPrice, endBarIndex, lowerPrice + onethirdPrice, color=divisionsColor, style=lineDashed))
  226. array.push(divisionsArray, line.new(startBarIndex, lowerPrice + onethirdPrice * 2, endBarIndex, lowerPrice + onethirdPrice * 2, color=divisionsColor, style=lineDashed))
  227. array.push(divisionsArray, line.new(startBarIndex + onethirdPriceBar, upperPrice, startBarIndex + onethirdPriceBar, lowerPrice, color=divisionsColor, style=lineDashed))
  228. array.push(divisionsArray, line.new(startBarIndex + onethirdPriceBar * 2, upperPrice, startBarIndex + onethirdPriceBar * 2, lowerPrice, color=divisionsColor, style=lineDashed))
  229.  
  230. // =============================================================================
  231. // * Update the vertical divisions
  232. // =============================================================================
  233. updateDivisions() =>
  234. line.set_xy1(array.get(divisionsArray, 0), startBarIndex, lowerPrice + onethirdPrice)
  235. line.set_xy2(array.get(divisionsArray, 0), endBarIndex, lowerPrice + onethirdPrice)
  236. line.set_xy1(array.get(divisionsArray, 1), startBarIndex, lowerPrice + onethirdPrice * 2)
  237. line.set_xy2(array.get(divisionsArray, 1), endBarIndex, lowerPrice + onethirdPrice * 2)
  238. line.set_xy1(array.get(divisionsArray, 2), startBarIndex + onethirdPriceBar, upperPrice)
  239. line.set_xy2(array.get(divisionsArray, 2), startBarIndex + onethirdPriceBar, lowerPrice)
  240. line.set_xy1(array.get(divisionsArray, 3), startBarIndex + onethirdPriceBar * 2, upperPrice)
  241. line.set_xy2(array.get(divisionsArray, 3), startBarIndex + onethirdPriceBar * 2, lowerPrice)
  242.  
  243. // =============================================================================
  244. // * Build the Gann's square. It will create lines based on the inputs and store
  245. // * them in some arrays. It will use the showGroup array to check if the line
  246. // * needs to be created or not. If showExtraLines is enabled, it will create
  247. // * specific lines to provide the original Gann's Square format
  248. // =============================================================================
  249. buildSquare() =>
  250. for int i = 0 to (squares / 6) - 1
  251. int endIndex = startBarIndex + 6 * (i + 1) * candlesPerDivision
  252. float endPrice = upperPrice - ((upperPrice - lowerPrice) / squares) * 6 * (i + 1)
  253. string style = array.get(dashedLineStyles, i) ? lineDashed : lineSolid
  254. string extend = array.get(extendLines, i) ? extend.both : extend.none
  255. if array.get(showGroup, i * 8)
  256. // Top Left Bottom
  257. array.push(TLBArray, line.new(startBarIndex, upperPrice, endIndex, lowerPrice, color=array.get(lineColors, i), style=style, extend=extend))
  258. if array.get(showGroup, i * 8 + 1)
  259. // Top Left Right
  260. array.push(TLRArray, line.new(startBarIndex, upperPrice, endBarIndex, endPrice, color=array.get(lineColors, i), style=style, extend=extend))
  261. if array.get(showGroup, i * 8 + 2)
  262. // Bottom Left Top
  263. array.push(BLTArray, line.new(startBarIndex, lowerPrice, endIndex, upperPrice, color=array.get(lineColors, i), style=style, extend=extend))
  264. if array.get(showGroup, i * 8 + 3)
  265. // Bottom Left Right
  266. array.push(BLRArray, line.new(startBarIndex, lowerPrice, endBarIndex, endPrice, color=array.get(lineColors, i), style=style, extend=extend))
  267. if array.get(showGroup, i * 8 + 4)
  268. // Top Right Bottom
  269. array.push(TRBArray, line.new(endBarIndex, upperPrice, endIndex, lowerPrice, color=array.get(lineColors, i), style=style, extend=extend))
  270. if array.get(showGroup, i * 8 + 5)
  271. // Top Right Left
  272. array.push(TRLArray, line.new(endBarIndex, upperPrice, startBarIndex, endPrice, color=array.get(lineColors, i), style=style, extend=extend))
  273. if array.get(showGroup, i * 8 + 6)
  274. // Bottom Right Top
  275. array.push(BRTArray, line.new(endBarIndex, lowerPrice, endIndex, upperPrice, color=array.get(lineColors, i), style=style, extend=extend))
  276. if array.get(showGroup, i * 8 + 7)
  277. // Bottom Right Left
  278. array.push(BRLArray, line.new(endBarIndex, lowerPrice, startBarIndex, endPrice, color=array.get(lineColors, i), style=style, extend=extend))
  279. if showExtraLines
  280. array.push(extraArray, line.new(middleBarIndex, upperPrice, startBarIndex, upperPrice - ((upperPrice - lowerPrice) / squares) * 36, color=colorRed, style=lineDashed))
  281. array.push(extraArray, line.new(middleBarIndex, upperPrice, endBarIndex, upperPrice - ((upperPrice - lowerPrice) / squares) * 36, color=colorRed, style=lineDashed))
  282. array.push(extraArray, line.new(middleBarIndex, lowerPrice, startBarIndex, upperPrice - ((upperPrice - lowerPrice) / squares) * 108, color=colorRed, style=lineDashed))
  283. array.push(extraArray, line.new(middleBarIndex, lowerPrice, endBarIndex, upperPrice - ((upperPrice - lowerPrice) / squares) * 108, color=colorRed, style=lineDashed))
  284.  
  285. // =============================================================================
  286. // * Update each line created for the Gann's square
  287. // =============================================================================
  288. updateSquare() =>
  289. if array.size(TLBArray) == (squares / 6) - 1 and
  290. array.size(TLRArray) == (squares / 6) - 1 and
  291. array.size(BLTArray) == (squares / 6) - 1
  292.  
  293. for int i = 0 to (squares / 6) - 1
  294. int endIndex = startBarIndex + 6 * i * candlesPerDivision
  295. float endPrice = upperPrice - ((upperPrice - lowerPrice) / squares) * 6 * i
  296. if array.get(showGroup, i * 8)
  297. // Top Left Bottom
  298. line.set_xy1(array.get(TLBArray, i), startBarIndex, upperPrice)
  299. line.set_xy2(array.get(TLBArray, i), endIndex, lowerPrice)
  300. if array.get(showGroup, i * 8 + 1)
  301. // Top Left Right
  302. line.set_xy1(array.get(TLRArray, i), startBarIndex, upperPrice)
  303. line.set_xy2(array.get(TLRArray, i), endBarIndex, endPrice)
  304. if array.get(showGroup, i * 8 + 2)
  305. // Bottom Left Top
  306. line.set_xy1(array.get(BLTArray, i), startBarIndex, lowerPrice)
  307. line.set_xy2(array.get(BLTArray, i), endIndex, upperPrice)
  308. if array.get(showGroup, i * 8 + 3)
  309. // Bottom Left Right
  310. line.set_xy1(array.get(BLRArray, i), startBarIndex, lowerPrice)
  311. line.set_xy2(array.get(BLRArray, i), endBarIndex, endPrice)
  312. if array.get(showGroup, i * 8 + 4)
  313. // Top Right Bottom
  314. line.set_xy1(array.get(TRBArray, i), endBarIndex, upperPrice)
  315. line.set_xy2(array.get(TRBArray, i), endIndex, lowerPrice)
  316. if array.get(showGroup, i * 8 + 5)
  317. // Top Right Left
  318. line.set_xy1(array.get(TRLArray, i), endBarIndex, upperPrice)
  319. line.set_xy2(array.get(TRLArray, i), startBarIndex, endPrice)
  320. if array.get(showGroup, i * 8 + 6)
  321. // Bottom Right Top
  322. line.set_xy1(array.get(BRTArray, i), endBarIndex, lowerPrice)
  323. line.set_xy2(array.get(BRTArray, i), endIndex, upperPrice)
  324. if array.get(showGroup, i * 8 + 7)
  325. // Bottom Right Left
  326. line.set_xy1(array.get(BRLArray, i), endBarIndex, lowerPrice)
  327. line.set_xy2(array.get(BRLArray, i), startBarIndex, endPrice)
  328.  
  329. // =============================================================================
  330. // * Create the grid lines for reference
  331. // =============================================================================
  332. buildGrid() =>
  333. for int i = 0 to 23
  334. index = startBarIndex + 6 * (i + 1) * candlesPerDivision
  335. price = upperPrice - ((upperPrice - lowerPrice) / squares) * 6 * (i + 1)
  336. array.push(gridArray, line.new(index, upperPrice, index, lowerPrice, color=gridColor, style=lineDotted))
  337. array.push(gridArray, line.new(startBarIndex, price, endBarIndex, price, color=gridColor, style=lineDotted))
  338.  
  339. // =============================================================================
  340. // * Update the grid lines
  341. // =============================================================================
  342. updateGrid() =>
  343. for int i = 0 to 23
  344. index = startBarIndex + 6 * (i + 1) * candlesPerDivision
  345. price = upperPrice - ((upperPrice - lowerPrice) / squares) * 6 * (i + 1)
  346. line.set_xy1(array.get(gridArray, i * 2), index, upperPrice)
  347. line.set_xy2(array.get(gridArray, i * 2), index, lowerPrice)
  348. line.set_xy1(array.get(gridArray, i * 2 + 1), startBarIndex, price)
  349. line.set_xy2(array.get(gridArray, i * 2 + 1), endBarIndex, price)
  350.  
  351. // =============================================================================
  352. // * Set lines pattern to override the parameters input of each division. When an
  353. // * option besides None is selected, it will ignore the selections of each line
  354. // =============================================================================
  355. setPattern() =>
  356. if patterns != "None"
  357. for int i = 0 to array.size(showGroup) - 1
  358. array.set(showGroup, i, false)
  359. if patterns == "Arrow"
  360. array.set(showGroup, 88, true) // Top Left to Bottom 72
  361. array.set(showGroup, 89, true) // Top Left to Right 72
  362. array.set(showGroup, 90, true) // Bottom Left to Top 72
  363. array.set(showGroup, 91, true) // Bottom Left to Right 72
  364. else if patterns == "Star"
  365. array.set(showGroup, 88, true) // Top Left to Bottom 72
  366. array.set(showGroup, 89, true) // Top Left to Right 72
  367. array.set(showGroup, 90, true) // Bottom Left to Top 72
  368. array.set(showGroup, 91, true) // Bottom Left to Right 72
  369. array.set(showGroup, 92, true) // Top Right to Bottom 72
  370. array.set(showGroup, 93, true) // Top Right to Left 72
  371. array.set(showGroup, 94, true) // Bottom Right to Top 72
  372. array.set(showGroup, 95, true) // Bottom Right to Left 72
  373. else if patterns == "36, 72, and 108"
  374. array.set(showGroup, 40, true) // Top Left to Bottom 36
  375. array.set(showGroup, 41, true) // Top Left to Right 36
  376. array.set(showGroup, 42, true) // Bottom Left to Top 36
  377. array.set(showGroup, 45, true) // Top Right to Left 36
  378. array.set(showGroup, 88, true) // Top Left to Bottom 72
  379. array.set(showGroup, 89, true) // Top Left to Right 72
  380. array.set(showGroup, 90, true) // Bottom Left to Top 72
  381. array.set(showGroup, 91, true) // Bottom Left to Right 72
  382. array.set(showGroup, 92, true) // Top Right to Bottom 72
  383. array.set(showGroup, 93, true) // Top Right to Left 72
  384. array.set(showGroup, 94, true) // Bottom Right to Top 72
  385. array.set(showGroup, 95, true) // Bottom Right to Left 72
  386. array.set(showGroup, 139, true) // Bottom Left to Right 108
  387. array.set(showGroup, 140, true) // Top Right to Bottom 108
  388. array.set(showGroup, 142, true) // Bottom Right to Top 108
  389. array.set(showGroup, 143, true) // Bottom Right to Left 108
  390. array.set(showGroup, 184, true) // Top Left to Corner 144
  391. array.set(showGroup, 186, true) // Top Right to Corner 144
  392. else if patterns == "Arrow Cross"
  393. array.set(showGroup, 88, true) // Top Left to Bottom 72
  394. array.set(showGroup, 89, true) // Top Left to Right 72
  395. array.set(showGroup, 90, true) // Bottom Left to Top 72
  396. array.set(showGroup, 91, true) // Bottom Left to Right 72
  397. array.set(showGroup, 184, true) // Top Left to Corner 144
  398. array.set(showGroup, 186, true) // Top Right to Corner 144
  399. else if patterns == "Corners and Cross"
  400. array.set(showGroup, 88, true) // Top Left to Bottom 72
  401. array.set(showGroup, 89, true) // Top Left to Right 72
  402. array.set(showGroup, 90, true) // Bottom Left to Top 72
  403. array.set(showGroup, 91, true) // Bottom Left to Right 72
  404. array.set(showGroup, 92, true) // Top Right to Bottom 72
  405. array.set(showGroup, 93, true) // Top Right to Left 72
  406. array.set(showGroup, 94, true) // Bottom Right to Top 72
  407. array.set(showGroup, 95, true) // Bottom Right to Left 72
  408. array.set(showGroup, 184, true) // Top Left to Corner 144
  409. array.set(showGroup, 186, true) // Top Right to Corner 144
  410. else if patterns == "Master"
  411. array.set(showGroup, 42, true) // Bottom Left to Top 36
  412. array.set(showGroup, 43, true) // Bottom Left to Right 36
  413. array.set(showGroup, 88, true) // Top Left to Bottom 72
  414. array.set(showGroup, 89, true) // Top Left to Right 72
  415. array.set(showGroup, 90, true) // Bottom Left to Top 72
  416. array.set(showGroup, 91, true) // Bottom Left to Right 72
  417. array.set(showGroup, 138, true) // Bottom Left to Top 108
  418. array.set(showGroup, 139, true) // Bottom Left to Right 108
  419. array.set(showGroup, 184, true) // Top Left to Corner 144
  420. array.set(showGroup, 186, true) // Top Right to Corner 144
  421.  
  422. // *****************************************************************************
  423. // ************************** Run On Every Tick ********************************
  424. // *****************************************************************************
  425. if updateNewBar and buildSquareDone and barstateIsNew and autoPricesAndBar
  426. updateSquare()
  427. updateAxis()
  428. updateBox()
  429. if showDivisions
  430. updateDivisions()
  431. if showGrid
  432. updateGrid()
  433. // if showBackground
  434. // updateBackgrounds()
  435.  
  436. // *****************************************************************************
  437. // ****************************** Run Once *************************************
  438. // *****************************************************************************
  439. if buildInputsDone
  440. if time == startDate
  441. startBarIndex := barIndex
  442. if barstateIsLast and not buildSquareDone
  443. setPattern()
  444. updateBox()
  445. buildSquare()
  446. buildAxis()
  447. if showDivisions
  448. buildDivisions()
  449. if showGrid
  450. buildGrid()
  451. if showBackground
  452. updateBackgrounds()
  453. buildSquareDone := true
  454.  
  455. // =============================================================================
  456. // * Create all the lines inputs, together with the color of each one, line style and
  457. // * extend type. The default values are those originally found in W.D. Gann's book.
  458. // * The order of each line matters for the comparison inside the functions
  459. // =============================================================================
  460. if not buildInputsDone
  461. buildInputsDone := true
  462. lineColors := array.concat(lineColors, array.from(
  463. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 6"),
  464. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 12"),
  465. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 18"),
  466. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 24"),
  467. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 30"),
  468. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 36"),
  469. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 42"),
  470. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 48"),
  471. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 54"),
  472. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 60"),
  473. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 66"),
  474. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 72"),
  475. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 78"),
  476. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 84"),
  477. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 90"),
  478. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 96"),
  479. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 102"),
  480. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 108"),
  481. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 114"),
  482. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 120"),
  483. input.color(color.red, "Line Color", inline="line", group="Connections from corners to 126"),
  484. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 132"),
  485. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 138"),
  486. input.color(color.green, "Line Color", inline="line", group="Connections from corners to 144")))
  487.  
  488. extendLines := array.concat(extendLines, array.from(
  489. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 6"),
  490. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 12"),
  491. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 18"),
  492. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 24"),
  493. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 30"),
  494. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 36"),
  495. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 42"),
  496. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 48"),
  497. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 54"),
  498. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 60"),
  499. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 66"),
  500. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 72"),
  501. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 78"),
  502. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 84"),
  503. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 90"),
  504. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 96"),
  505. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 102"),
  506. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 108"),
  507. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 114"),
  508. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 120"),
  509. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 126"),
  510. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 132"),
  511. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 138"),
  512. input.bool(false, "Extend Line", inline="line", group="Connections from corners to 144")))
  513.  
  514. dashedLineStyles := array.concat(dashedLineStyles, array.from(
  515. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 6"),
  516. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 12"),
  517. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 18"),
  518. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 24"),
  519. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 30"),
  520. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 36"),
  521. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 42"),
  522. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 48"),
  523. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 54"),
  524. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 60"),
  525. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 66"),
  526. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 72"),
  527. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 78"),
  528. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 84"),
  529. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 90"),
  530. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 96"),
  531. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 102"),
  532. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 108"),
  533. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 114"),
  534. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 120"),
  535. input.bool(true, "Dashed Line", inline="line", group="Connections from corners to 126"),
  536. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 132"),
  537. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 138"),
  538. input.bool(false, "Dashed Line", inline="line", group="Connections from corners to 144")))
  539.  
  540. showGroup := array.concat(showGroup, array.from(
  541. input.bool(false, "┏ ↓", inline="6", group="Connections from corners to 6"),
  542. input.bool(false, "┏ →", inline="6", group="Connections from corners to 6"),
  543. input.bool(false, "┗ ↑", inline="6", group="Connections from corners to 6"),
  544. input.bool(false, "┗ →", inline="6", group="Connections from corners to 6"),
  545. input.bool(false, "┓ ←", inline="6", group="Connections from corners to 6"),
  546. input.bool(false, "┓ ↓", inline="6", group="Connections from corners to 6"),
  547. input.bool(false, "┛ ←", inline="6", group="Connections from corners to 6"),
  548. input.bool(false, "┛ ↑", inline="6", group="Connections from corners to 6"),
  549. input.bool(false, "┏ ↓", inline="12", group="Connections from corners to 12"),
  550. input.bool(false, "┏ →", inline="12", group="Connections from corners to 12"),
  551. input.bool(false, "┗ ↑", inline="12", group="Connections from corners to 12"),
  552. input.bool(false, "┗ →", inline="12", group="Connections from corners to 12"),
  553. input.bool(false, "┓ ←", inline="12", group="Connections from corners to 12"),
  554. input.bool(false, "┓ ↓", inline="12", group="Connections from corners to 12"),
  555. input.bool(false, "┛ ←", inline="12", group="Connections from corners to 12"),
  556. input.bool(false, "┛ ↑", inline="12", group="Connections from corners to 12"),
  557. input.bool(true, "┏ ↓", inline="18", group="Connections from corners to 18"),
  558. input.bool(true, "┏ →", inline="18", group="Connections from corners to 18"),
  559. input.bool(true, "┗ ↑", inline="18", group="Connections from corners to 18"),
  560. input.bool(false, "┗ →", inline="18", group="Connections from corners to 18"),
  561. input.bool(false, "┓ ←", inline="18", group="Connections from corners to 18"),
  562. input.bool(false, "┓ ↓", inline="18", group="Connections from corners to 18"),
  563. input.bool(false, "┛ ←", inline="18", group="Connections from corners to 18"),
  564. input.bool(false, "┛ ↑", inline="18", group="Connections from corners to 18"),
  565. input.bool(false, "┏ ↓", inline="24", group="Connections from corners to 24"),
  566. input.bool(false, "┏ →", inline="24", group="Connections from corners to 24"),
  567. input.bool(false, "┗ ↑", inline="24", group="Connections from corners to 24"),
  568. input.bool(false, "┗ →", inline="24", group="Connections from corners to 24"),
  569. input.bool(false, "┓ ←", inline="24", group="Connections from corners to 24"),
  570. input.bool(false, "┓ ↓", inline="24", group="Connections from corners to 24"),
  571. input.bool(false, "┛ ←", inline="24", group="Connections from corners to 24"),
  572. input.bool(false, "┛ ↑", inline="24", group="Connections from corners to 24"),
  573. input.bool(false, "┏ ↓", inline="30", group="Connections from corners to 30"),
  574. input.bool(false, "┏ →", inline="30", group="Connections from corners to 30"),
  575. input.bool(false, "┗ ↑", inline="30", group="Connections from corners to 30"),
  576. input.bool(false, "┗ →", inline="30", group="Connections from corners to 30"),
  577. input.bool(false, "┓ ←", inline="30", group="Connections from corners to 30"),
  578. input.bool(false, "┓ ↓", inline="30", group="Connections from corners to 30"),
  579. input.bool(false, "┛ ←", inline="30", group="Connections from corners to 30"),
  580. input.bool(false, "┛ ↑", inline="30", group="Connections from corners to 30"),
  581. input.bool(true, "┏ ↓", inline="36", group="Connections from corners to 36"),
  582. input.bool(true, "┏ →", inline="36", group="Connections from corners to 36"),
  583. input.bool(true, "┗ ↑", inline="36", group="Connections from corners to 36"),
  584. input.bool(false, "┗ →", inline="36", group="Connections from corners to 36"),
  585. input.bool(false, "┓ ←", inline="36", group="Connections from corners to 36"),
  586. input.bool(false, "┓ ↓", inline="36", group="Connections from corners to 36"),
  587. input.bool(false, "┛ ←", inline="36", group="Connections from corners to 36"),
  588. input.bool(false, "┛ ↑", inline="36", group="Connections from corners to 36"),
  589. input.bool(false, "┏ ↓", inline="42", group="Connections from corners to 42"),
  590. input.bool(false, "┏ →", inline="42", group="Connections from corners to 42"),
  591. input.bool(false, "┗ ↑", inline="42", group="Connections from corners to 42"),
  592. input.bool(false, "┗ →", inline="42", group="Connections from corners to 42"),
  593. input.bool(false, "┓ ←", inline="42", group="Connections from corners to 42"),
  594. input.bool(false, "┓ ↓", inline="42", group="Connections from corners to 42"),
  595. input.bool(false, "┛ ←", inline="42", group="Connections from corners to 42"),
  596. input.bool(false, "┛ ↑", inline="42", group="Connections from corners to 42"),
  597. input.bool(true, "┏ ↓", inline="48", group="Connections from corners to 48"),
  598. input.bool(true, "┏ →", inline="48", group="Connections from corners to 48"),
  599. input.bool(true, "┗ ↑", inline="48", group="Connections from corners to 48"),
  600. input.bool(false, "┗ →", inline="48", group="Connections from corners to 48"),
  601. input.bool(false, "┓ ←", inline="48", group="Connections from corners to 48"),
  602. input.bool(false, "┓ ↓", inline="48", group="Connections from corners to 48"),
  603. input.bool(false, "┛ ←", inline="48", group="Connections from corners to 48"),
  604. input.bool(false, "┛ ↑", inline="48", group="Connections from corners to 48"),
  605. input.bool(false, "┏ ↓", inline="54", group="Connections from corners to 54"),
  606. input.bool(false, "┏ →", inline="54", group="Connections from corners to 54"),
  607. input.bool(false, "┗ ↑", inline="54", group="Connections from corners to 54"),
  608. input.bool(false, "┗ →", inline="54", group="Connections from corners to 54"),
  609. input.bool(false, "┓ ←", inline="54", group="Connections from corners to 54"),
  610. input.bool(false, "┓ ↓", inline="54", group="Connections from corners to 54"),
  611. input.bool(false, "┛ ←", inline="54", group="Connections from corners to 54"),
  612. input.bool(false, "┛ ↑", inline="54", group="Connections from corners to 54"),
  613. input.bool(false, "┏ ↓", inline="60", group="Connections from corners to 60"),
  614. input.bool(false, "┏ →", inline="60", group="Connections from corners to 60"),
  615. input.bool(false, "┗ ↑", inline="60", group="Connections from corners to 60"),
  616. input.bool(false, "┗ →", inline="60", group="Connections from corners to 60"),
  617. input.bool(false, "┓ ←", inline="60", group="Connections from corners to 60"),
  618. input.bool(false, "┓ ↓", inline="60", group="Connections from corners to 60"),
  619. input.bool(false, "┛ ←", inline="60", group="Connections from corners to 60"),
  620. input.bool(false, "┛ ↑", inline="60", group="Connections from corners to 60"),
  621. input.bool(false, "┏ ↓", inline="66", group="Connections from corners to 66"),
  622. input.bool(false, "┏ →", inline="66", group="Connections from corners to 66"),
  623. input.bool(false, "┗ ↑", inline="66", group="Connections from corners to 66"),
  624. input.bool(false, "┗ →", inline="66", group="Connections from corners to 66"),
  625. input.bool(false, "┓ ←", inline="66", group="Connections from corners to 66"),
  626. input.bool(false, "┓ ↓", inline="66", group="Connections from corners to 66"),
  627. input.bool(false, "┛ ←", inline="66", group="Connections from corners to 66"),
  628. input.bool(false, "┛ ↑", inline="66", group="Connections from corners to 66"),
  629. input.bool(true, "┏ ↓", inline="72", group="Connections from corners to 72"),
  630. input.bool(true, "┏ →", inline="72", group="Connections from corners to 72"),
  631. input.bool(true, "┗ ↑", inline="72", group="Connections from corners to 72"),
  632. input.bool(true, "┗ →", inline="72", group="Connections from corners to 72"),
  633. input.bool(true, "┓ ←", inline="72", group="Connections from corners to 72"),
  634. input.bool(true, "┓ ↓", inline="72", group="Connections from corners to 72"),
  635. input.bool(true, "┛ ←", inline="72", group="Connections from corners to 72"),
  636. input.bool(true, "┛ ↑", inline="72", group="Connections from corners to 72"),
  637. input.bool(false, "┏ ↓", inline="78", group="Connections from corners to 78"),
  638. input.bool(false, "┏ →", inline="78", group="Connections from corners to 78"),
  639. input.bool(false, "┗ ↑", inline="78", group="Connections from corners to 78"),
  640. input.bool(false, "┗ →", inline="78", group="Connections from corners to 78"),
  641. input.bool(false, "┓ ←", inline="78", group="Connections from corners to 78"),
  642. input.bool(false, "┓ ↓", inline="78", group="Connections from corners to 78"),
  643. input.bool(false, "┛ ←", inline="78", group="Connections from corners to 78"),
  644. input.bool(false, "┛ ↑", inline="78", group="Connections from corners to 78"),
  645. input.bool(false, "┏ ↓", inline="84", group="Connections from corners to 84"),
  646. input.bool(false, "┏ →", inline="84", group="Connections from corners to 84"),
  647. input.bool(false, "┗ ↑", inline="84", group="Connections from corners to 84"),
  648. input.bool(false, "┗ →", inline="84", group="Connections from corners to 84"),
  649. input.bool(false, "┓ ←", inline="84", group="Connections from corners to 84"),
  650. input.bool(false, "┓ ↓", inline="84", group="Connections from corners to 84"),
  651. input.bool(false, "┛ ←", inline="84", group="Connections from corners to 84"),
  652. input.bool(false, "┛ ↑", inline="84", group="Connections from corners to 84"),
  653. input.bool(false, "┏ ↓", inline="90", group="Connections from corners to 90"),
  654. input.bool(false, "┏ →", inline="90", group="Connections from corners to 90"),
  655. input.bool(false, "┗ ↑", inline="90", group="Connections from corners to 90"),
  656. input.bool(false, "┗ →", inline="90", group="Connections from corners to 90"),
  657. input.bool(false, "┓ ←", inline="90", group="Connections from corners to 90"),
  658. input.bool(false, "┓ ↓", inline="90", group="Connections from corners to 90"),
  659. input.bool(false, "┛ ←", inline="90", group="Connections from corners to 90"),
  660. input.bool(false, "┛ ↑", inline="90", group="Connections from corners to 90"),
  661. input.bool(false, "┏ ↓", inline="96", group="Connections from corners to 96"),
  662. input.bool(false, "┏ →", inline="96", group="Connections from corners to 96"),
  663. input.bool(false, "┗ ↑", inline="96", group="Connections from corners to 96"),
  664. input.bool(true, "┗ →", inline="96", group="Connections from corners to 96"),
  665. input.bool(false, "┓ ←", inline="96", group="Connections from corners to 96"),
  666. input.bool(false, "┓ ↓", inline="96", group="Connections from corners to 96"),
  667. input.bool(false, "┛ ←", inline="96", group="Connections from corners to 96"),
  668. input.bool(false, "┛ ↑", inline="96", group="Connections from corners to 96"),
  669. input.bool(false, "┏ ↓", inline="102", group="Connections from corners to 102"),
  670. input.bool(false, "┏ →", inline="102", group="Connections from corners to 102"),
  671. input.bool(false, "┗ ↑", inline="102", group="Connections from corners to 102"),
  672. input.bool(false, "┗ →", inline="102", group="Connections from corners to 102"),
  673. input.bool(false, "┓ ←", inline="102", group="Connections from corners to 102"),
  674. input.bool(false, "┓ ↓", inline="102", group="Connections from corners to 102"),
  675. input.bool(false, "┛ ←", inline="102", group="Connections from corners to 102"),
  676. input.bool(false, "┛ ↑", inline="102", group="Connections from corners to 102"),
  677. input.bool(false, "┏ ↓", inline="108", group="Connections from corners to 108"),
  678. input.bool(false, "┏ →", inline="108", group="Connections from corners to 108"),
  679. input.bool(false, "┗ ↑", inline="108", group="Connections from corners to 108"),
  680. input.bool(true, "┗ →", inline="108", group="Connections from corners to 108"),
  681. input.bool(false, "┓ ←", inline="108", group="Connections from corners to 108"),
  682. input.bool(false, "┓ ↓", inline="108", group="Connections from corners to 108"),
  683. input.bool(false, "┛ ←", inline="108", group="Connections from corners to 108"),
  684. input.bool(false, "┛ ↑", inline="108", group="Connections from corners to 108"),
  685. input.bool(false, "┏ ↓", inline="114", group="Connections from corners to 114"),
  686. input.bool(false, "┏ →", inline="114", group="Connections from corners to 114"),
  687. input.bool(false, "┗ ↑", inline="114", group="Connections from corners to 114"),
  688. input.bool(false, "┗ →", inline="114", group="Connections from corners to 114"),
  689. input.bool(false, "┓ ←", inline="114", group="Connections from corners to 114"),
  690. input.bool(false, "┓ ↓", inline="114", group="Connections from corners to 114"),
  691. input.bool(false, "┛ ←", inline="114", group="Connections from corners to 114"),
  692. input.bool(false, "┛ ↑", inline="114", group="Connections from corners to 114"),
  693. input.bool(false, "┏ ↓", inline="120", group="Connections from corners to 120"),
  694. input.bool(false, "┏ →", inline="120", group="Connections from corners to 120"),
  695. input.bool(false, "┗ ↑", inline="120", group="Connections from corners to 120"),
  696. input.bool(false, "┗ →", inline="120", group="Connections from corners to 120"),
  697. input.bool(false, "┓ ←", inline="120", group="Connections from corners to 120"),
  698. input.bool(false, "┓ ↓", inline="120", group="Connections from corners to 120"),
  699. input.bool(false, "┛ ←", inline="120", group="Connections from corners to 120"),
  700. input.bool(false, "┛ ↑", inline="120", group="Connections from corners to 120"),
  701. input.bool(false, "┏ ↓", inline="126", group="Connections from corners to 126"),
  702. input.bool(false, "┏ →", inline="126", group="Connections from corners to 126"),
  703. input.bool(false, "┗ ↑", inline="126", group="Connections from corners to 126"),
  704. input.bool(true, "┗ →", inline="126", group="Connections from corners to 126"),
  705. input.bool(false, "┓ ←", inline="126", group="Connections from corners to 126"),
  706. input.bool(false, "┓ ↓", inline="126", group="Connections from corners to 126"),
  707. input.bool(false, "┛ ←", inline="126", group="Connections from corners to 126"),
  708. input.bool(false, "┛ ↑", inline="126", group="Connections from corners to 126"),
  709. input.bool(false, "┏ ↓", inline="132", group="Connections from corners to 132"),
  710. input.bool(false, "┏ →", inline="132", group="Connections from corners to 132"),
  711. input.bool(false, "┗ ↑", inline="132", group="Connections from corners to 132"),
  712. input.bool(false, "┗ →", inline="132", group="Connections from corners to 132"),
  713. input.bool(false, "┓ ←", inline="132", group="Connections from corners to 132"),
  714. input.bool(false, "┓ ↓", inline="132", group="Connections from corners to 132"),
  715. input.bool(false, "┛ ←", inline="132", group="Connections from corners to 132"),
  716. input.bool(false, "┛ ↑", inline="132", group="Connections from corners to 132"),
  717. input.bool(false, "┏ ↓", inline="138", group="Connections from corners to 138"),
  718. input.bool(false, "┏ →", inline="138", group="Connections from corners to 138"),
  719. input.bool(false, "┗ ↑", inline="138", group="Connections from corners to 138"),
  720. input.bool(false, "┗ →", inline="138", group="Connections from corners to 138"),
  721. input.bool(false, "┓ ←", inline="138", group="Connections from corners to 138"),
  722. input.bool(false, "┓ ↓", inline="138", group="Connections from corners to 138"),
  723. input.bool(false, "┛ ←", inline="138", group="Connections from corners to 138"),
  724. input.bool(false, "┛ ↑", inline="138", group="Connections from corners to 138"),
  725. input.bool(true, "┏ ↓", inline="144", group="Connections from corners to 144"),
  726. input.bool(true, "┏ →", inline="144", group="Connections from corners to 144"),
  727. input.bool(true, "┗ ↑", inline="144", group="Connections from corners to 144"),
  728. input.bool(true, "┗ →", inline="144", group="Connections from corners to 144"),
  729. input.bool(false, "┓ ←", inline="144", group="Connections from corners to 144"),
  730. input.bool(false, "┓ ↓", inline="144", group="Connections from corners to 144"),
  731. input.bool(false, "┛ ←", inline="144", group="Connections from corners to 144"),
  732. input.bool(false, "┛ ↑", inline="144", group="Connections from corners to 144")))
Advertisement
Add Comment
Please, Sign In to add comment