SHARE
TWEET

strategy of RSI with trendlines and S/R with HiLoPositions

aaahopper Dec 23rd, 2019 95 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //@version=4
  2. //
  3. study("V01. RSI American Line with trendlines  with HiLoPositions", shorttitle = "V01. strategy of RSI with trendlines and S/R with HiLoPositions", overlay = false)
  4.  
  5. // Chart Display Criteria ════════════════════════════════════════════════════════
  6. // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  7.  
  8. display1=input(true, title="RSI display format section ══════════════════")
  9. Trd_All = input("Both", title ="+++ Show trade locations", options = ["Both", "S/R", "Ob/Os"])
  10. ShowTrendCandles  = input("Yes",title = "+++ Highlight Trend Candles", options = ["No", "Yes"])
  11. std_bar = input("bar", title = "+++ Show RSI in Line or Bar format", options = ["bar", "std"])
  12.  
  13. log_chart = input("No",title = "+++ Use Log Chart", options = ["No", "Yes"])
  14. inner = input("dynamic", title = "+++ Inside form", options = ["dynamic", "fixed", "disabled"])
  15. inner_type = input("standard deviation", title = "+++ dynamic inner calculation method", options = ["standard deviation", "smooth moving average"])
  16. a_Color_Type = input(defval="Colored", title = "+++ Trendlines color Scheme", options=["Colored", "Monochrome"])
  17.  
  18. // RSI Input Criteria ════════════════════════════════════════════════════════
  19. // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  20.  
  21. display02=input(true, title="RSI Data Entry section ════════════════════")
  22. len = input( 9, title = "+++ RSI length parameter", minval = 2, maxval = 100)
  23. src = input(close, title = "+++ RSI source")
  24. Hline= input(60,title='+++ Overbought RSI Line')
  25. Lline= input(40,title='+++ Oversold RSI Line')
  26. inner_mult = input(1.0, title = "+++ RSI inner Channel width", minval = 0.0, maxval = 4.0, step = 0.1)
  27.  
  28. //==calculation ==//
  29. norm = if std_bar=="std"
  30.     1
  31. else
  32.     avg(src, src[1])
  33.    
  34. gain_loss = change(src) / norm
  35.  
  36. RSI = 50 + 50 * rma(gain_loss, len) / rma(abs(gain_loss), len)
  37.  
  38. RSI_ch = if inner != "disabled"
  39.     if inner_type == "standard deviation"
  40.         stdev(abs(change(RSI)), len)
  41.     else
  42.         rma(abs(change(RSI)), len)
  43.  
  44. //==Draw RSIB==//
  45. o = std_bar=="bar" ? RSI[1] : RSI
  46. h = std_bar=="bar" ? RSI : RSI
  47. l = std_bar=="bar" ? RSI[1] : RSI
  48. c = std_bar=="bar" ? RSI : RSI
  49.  
  50. plotbar(o, h, l, c, title = "RSIB", color = src[1] < src ? color.blue : color.red)
  51.  
  52. //==Draw RSI==//
  53. plot(std_bar=="bar" ? na : RSI, color = #A64D79FF, title = "RSI")
  54.  
  55. //==Draw a channel==//
  56. b1 = hline(Lline,color = color.red,linestyle = hline.style_dotted,linewidth = 1,title = "oversold")
  57. b2 = hline(Hline,color = color.blue,linestyle = hline.style_dotted,linewidth = 1,title = "overbought")
  58. fill(b1, b2, color = #AB47BC, title = "band background")
  59.  
  60. //Inner Lines
  61. Inner_hi = inner == "disabled" ? na : 50 + inner_mult * (inner == "dynamic" ? RSI_ch : 5.0)
  62. Inner_lo = inner == "disabled" ? na : 50 - inner_mult * (inner == "dynamic" ? RSI_ch : 5.0)
  63.  
  64. inner_h = plot(Inner_hi,color = #A64D7933, title = "with inner edge")
  65. inner_l = plot(Inner_lo,color = #A64D7933, title = "inside lower edge")
  66. fill(inner_h, inner_l, color = #A64D7922, title = "with inner background")
  67.  
  68. Long_rsi01 = crossover(RSI, Lline) and src[1] < src
  69. Short_rsi01= crossunder(RSI, Hline) and src[1] > src
  70. plotshape(Trd_All=="Both" or Trd_All=="Ob/Os" ? Short_rsi01: na, text="Dn", title="Condition Short-Trade", style=shape.triangledown, size=size.tiny, location=location.top, color=color.fuchsia, transp=0)
  71. plotshape(Trd_All=="Both" or Trd_All=="Ob/Os" ? Long_rsi01: na, text="Up", title="Condition Long-Trade", style=shape.triangleup, size=size.tiny, location=location.bottom, color=color.aqua, transp=0)
  72.  
  73. // Bollinger Bands S/R ════════════════════════════════════════════════════════
  74. // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  75. show_dbbl = input(true, title='Display Bollinger Bands S/R ═════════════════')
  76. length10 = input(title="+++ Bollinger Length", type=input.integer, defval=38, minval=1)
  77. multiplier = input(title="+++ Bollinger Deviation", type=input.float, defval=2, step=0.1, minval=1)
  78. overbought = 1  //input(title="=> Overbought", type=input.integer, defval=1, minval=1)
  79. oversold = 0  //input(title="=> Oversold", type=input.integer, defval=0, minval=0)
  80.  
  81.  
  82. smabasis = sma(c, length10)
  83. stdev = stdev(c, length10)
  84. cierre = c
  85. alta = h
  86. baja = l
  87. basis1 = smabasis
  88. stdevb = stdev
  89. dev5 = multiplier * stdevb
  90. upper = basis1 + dev5
  91. lower5 = basis1 - dev5
  92.  
  93. bbr = (cierre - lower5) / (upper - lower5)
  94.  
  95. plot(bbr)
  96.  
  97. // // Top Resistance Band
  98. pintarojo = 0.0
  99. pintarojo := nz(pintarojo[1])
  100. pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] : nz(pintarojo[1])
  101. p = plot(show_dbbl ? pintarojo : na, color=#d904c4, style=plot.style_circles, linewidth=2, transp=0)
  102.  
  103. // // Bottom Support Band
  104. pintaverde = 0.0
  105. pintaverde := nz(pintaverde[1])
  106. pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] : nz(pintaverde[1])
  107. g = plot(show_dbbl ? pintaverde : na, color=#0959e3, style=plot.style_circles, linewidth=2, transp=0)
  108. //
  109. Long_bb = cross(RSI, pintaverde)  
  110. Short_bb = cross(RSI, pintarojo)  
  111.  
  112. plotshape(Trd_All=="Both" or Trd_All=="S/R"  ? Short_bb and src[1] > src: na, text="Dn", title="Condition Short-Trade", style=shape.triangledown, size=size.tiny, location=location.top, color=color.fuchsia, transp=0)
  113. plotshape(Trd_All=="Both" or Trd_All=="S/R"  ? Long_bb and src[1] < src: na, text="Up", title="Condition Long-Trade", style=shape.triangleup, size=size.tiny, location=location.bottom, color=color.aqua, transp=0)
  114.  
  115. //Trendlines 2 lots ════════════════════════════════════════════════════════
  116. // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  117.  
  118. // Input variables
  119. show_text= input(true, title='══════════════════════════════════')
  120.  
  121. a_Show_Primary    = input(true, title = "1 ═> Display Primary Trendlines ═════════════")
  122. a_len             = input(20,   title = "+++ Primary Lookback Length")
  123. a_Extensions      = input(      title = "+++ Primary Trendline Extensions", defval="  50",    options=["Infinate", "  25", "  50", "  75", " 100", " 150", " 200", " 300", " 400", " 500", " 750", "1000"])
  124. a_width           = input(2,    title = "+++ Primary Line Width", minval = 0, maxval = 10)
  125. a_Show_Breaks     = "n/a"
  126. a_trendline_nr    = 0
  127. a_Rising_Upper_Falling_Lower = false
  128.  
  129.  
  130. b_Show_Secondary  = input(true, title = "2 ═> Display Secondary Trendlines ════════════")
  131. b_len             = input(10,    title = "+++ Secondary Lookback Length")
  132. b_Extensions      = input(      title = "+++ Secondary Trendline Extensions", defval="  25",    options=["Infinate", "  25", "  50", "  75", " 100", " 150", " 200", " 300", " 400", " 500", " 750", "1000"])
  133. b_width           = input(1,    title = "+++ Secondary Line Width", minval = 0, maxval = 10)
  134. b_Show_Breaks     = "n/a"
  135. b_trendline_nr    = 0
  136. b_Rising_Upper_Falling_Lower =  false
  137.  
  138. a_bar_time = time - time[1]
  139. b_bar_time = time - time[1]
  140.  
  141.  
  142. ///// Primary Trendlines /////
  143. // Trendline Extensions
  144.  
  145. a_Extension_Multiplier=
  146.  a_Extensions=="  25"?  1 :
  147.  a_Extensions=="  50"?  2 :
  148.  a_Extensions=="  75"?  3 :
  149.  a_Extensions==" 100"?  4 :
  150.  a_Extensions==" 150"?  6 :
  151.  a_Extensions==" 200"?  8 :
  152.  a_Extensions==" 300"? 12 :
  153.  a_Extensions==" 400"? 16 :
  154.  a_Extensions==" 500"? 20 :
  155.  a_Extensions==" 750"? 30 :
  156.  a_Extensions=="1000"? 40 :
  157.  a_Extensions=="Infinate"? 0 : na
  158.  
  159.  
  160. // Declaration of trendline function
  161. a_f_trendline(a__input_function, a__delay, a__only_up, a__extend) =>
  162.     // Calculate line coordinates (Ax,Ay) - (Bx,By)
  163.     var int   a_Ax    = 1
  164.     var int   a_Bx    = 1
  165.     var float a_By    = 0
  166.     var float a_slope = 0
  167.     a_Ay = fixnan(a__input_function)
  168.     if change(a_Ay)!=0
  169.         a_Ax := time[a__delay]
  170.         a_By := a_Ay[1]
  171.         a_Bx := a_Ax[1]
  172.         a_slope:= log_chart=="Yes"? ((log(a_Ay) - log(a_By)) / (a_Ax - a_Bx)) : ((a_Ay - a_By) / (a_Ax - a_Bx))
  173.     else
  174.         a_Ax := a_Ax[1]
  175.         a_Bx := a_Bx[1]
  176.         a_By := a_By[1]
  177.     // Draw trendlines
  178.     var line  a_trendline = na
  179.     var int   a_Axbis  = 0
  180.     var float a_Aybis  = 0
  181.     var bool  a__xtend = true
  182.     a_extension_time   = a_Extension_Multiplier * a_bar_time * 25
  183.     a_Axbis := a_Ax + a_extension_time
  184.     a_Aybis := log_chart=="Yes"? (a_Ay * exp(a_extension_time * a_slope)) : (a_Ay + a_extension_time * a_slope)
  185.     if a_Extension_Multiplier != 0
  186.         a__xtend := false
  187.     if change(a_Ay) != 0
  188.        
  189.         a_line_color_Rising_Falling      = a_slope * time < 0? (a__only_up ? a_Rising_Upper_Falling_Lower ? (a_Color_Type=="Colored" ? color.gray : color.teal) : na : (a_Color_Type=="Colored" ? #cf0a83 : color.teal)) : (a__only_up? (a_Color_Type=="Colored"? #027521 : color.teal) : a_Rising_Upper_Falling_Lower ? (a_Color_Type=="Colored"? color.gray : color.teal) : na)
  190.         a_line_color_Not_Rising_Falling  = a_slope * time < 0? (a__only_up ? na :(a_Color_Type=="Colored" ? #cf0a83 : color.teal)) : (a__only_up? (a_Color_Type=="Colored"? #027521 : color.teal) : na)
  191.        
  192.         a_line_color = a_Show_Primary and not a_Rising_Upper_Falling_Lower ? a_line_color_Not_Rising_Falling : a_Show_Primary and a_Rising_Upper_Falling_Lower ? a_line_color_Rising_Falling : na
  193.        
  194.         if not na(a_line_color)
  195.             a_trendline = line.new(a_Bx, a_By, a_Axbis, a_Aybis, xloc.bar_time, extend = a__xtend? extend.right : extend.none, color = a_line_color, style = line.style_solid, width = a_width)
  196.     [a_Bx, a_By, a_Axbis, a_Aybis, a_slope]
  197.  
  198. // Calculate pivot points    
  199. a_high_point = pivothigh((c > o? c : o),  a_len, a_len / 2)
  200. a_low_point  = pivotlow((c > o? o  : c), a_len, a_len / 2)
  201.  
  202. // Call trendline function for high and low pivot points
  203. [a_phx1, a_phy1, a_phx2, a_phy2, a_slope_high] = a_f_trendline(a_high_point, a_len / 2, false, true)
  204. [a_plx1, a_ply1, a_plx2, a_ply2, a_slope_low]  = a_f_trendline(a_low_point,  a_len / 2, true,  true)
  205.  
  206. // ///// Secondary Trendlines /////
  207.  
  208. // // Trendline Extensions
  209.  
  210. b_Extension_Multiplier=
  211.  b_Extensions=="  25"?  1 :
  212.  b_Extensions=="  50"?  2 :
  213.  b_Extensions=="  75"?  3 :
  214.  b_Extensions==" 100"?  4 :
  215.  b_Extensions==" 150"?  6 :
  216.  b_Extensions==" 200"?  8 :
  217.  b_Extensions==" 300"? 12 :
  218.  b_Extensions==" 400"? 16 :
  219.  b_Extensions==" 500"? 20 :
  220.  b_Extensions==" 750"? 30 :
  221.  b_Extensions=="1000"? 40 :
  222.  b_Extensions=="Infinate"? 0 : na
  223.  
  224.  
  225. // Declaration of trendline function
  226. b_f_trendline(b__input_function, b__delay, b__only_up, b__extend) =>
  227.     // Calculate line coordinates (Ax,Ay) - (Bx,By)
  228.     var int   b_Ax    = 1
  229.     var int   b_Bx    = 1
  230.     var float b_By    = 0
  231.     var float b_slope = 0
  232.     b_Ay = fixnan(b__input_function)
  233.     if change(b_Ay)!=0
  234.         b_Ax := time[b__delay]
  235.         b_By := b_Ay[1]
  236.         b_Bx := b_Ax[1]
  237.         b_slope:= log_chart=="Yes"? ((log(b_Ay) - log(b_By)) / (b_Ax - b_Bx)) : ((b_Ay - b_By) / (b_Ax - b_Bx))
  238.     else
  239.         b_Ax := b_Ax[1]
  240.         b_Bx := b_Bx[1]
  241.         b_By := b_By[1]
  242.     // Draw trendlines
  243.     var line  b_trendline = na
  244.     var int   b_Axbis  = 0
  245.     var float b_Aybis  = 0
  246.     var bool  b__xtend = true
  247.     b_extension_time   = b_Extension_Multiplier * b_bar_time * 25
  248.     b_Axbis := b_Ax + b_extension_time
  249.     b_Aybis := log_chart=="Yes"? (b_Ay * exp(b_extension_time * b_slope)) : (b_Ay + b_extension_time * b_slope)
  250.     if b_Extension_Multiplier != 0
  251.         b__xtend := false
  252.     if change(b_Ay) != 0
  253.        
  254.         b_line_color_Rising_Falling      = b_slope * time < 0? (b__only_up ? b_Rising_Upper_Falling_Lower ? (a_Color_Type=="Colored" ? color.gray : color.teal) : na : (a_Color_Type=="Colored" ? color.red : color.teal)) : (b__only_up? (a_Color_Type=="Colored"? color.green : color.teal) : b_Rising_Upper_Falling_Lower ? (a_Color_Type=="Colored"? color.gray : color.teal) : na)
  255.         b_line_color_Not_Rising_Falling  = b_slope * time < 0? (b__only_up ? na :(a_Color_Type=="Colored" ? color.red : color.teal)) : (b__only_up? (a_Color_Type=="Colored"? color.green : color.teal) : na)
  256.        
  257.         b_line_color = b_Show_Secondary and not b_Rising_Upper_Falling_Lower ? b_line_color_Not_Rising_Falling : b_Show_Secondary and b_Rising_Upper_Falling_Lower ? b_line_color_Rising_Falling : na
  258.        
  259.         if not na(b_line_color)
  260.             b_trendline = line.new(b_Bx, b_By, b_Axbis, b_Aybis, xloc.bar_time, extend = b__xtend? extend.right : extend.none, color = b_line_color, style = line.style_dashed, width = b_width)
  261.     [b_Bx, b_By, b_Axbis, b_Aybis, b_slope]
  262.  
  263.  
  264. // Calculate pivot points    
  265. b_high_point = pivothigh((c > o? c : o),  b_len, b_len / 2)
  266. b_low_point  = pivotlow((c > o? o  : c), b_len, b_len / 2)
  267.  
  268. // Call trendline function for high and low pivot points
  269. [b_phx1, b_phy1, b_phx2, b_phy2, b_slope_high] = b_f_trendline(b_high_point, b_len / 2, false, true)
  270. [b_plx1, b_ply1, b_plx2, b_ply2, b_slope_low]  = b_f_trendline(b_low_point,  b_len / 2, true,  true)
  271.  
  272. // Plot and connect pivot points
  273. b_color_high = b_slope_high * time < 0 ? color.green : na
  274. b_color_low  = b_slope_low  * time > 0 ? color.red   : na
  275.  
  276. // Trend Candles //
  277. //UCS_Trend by ucsgears copy Trend Candles
  278. //Interpretation of TTM Trend bars. It is really close to the actual.
  279.  
  280. haclose = c
  281. haopen = 0.0
  282. haopen := na(haopen[1]) ? (o + c) / 2 : (haopen[1] + haclose[1]) / 2
  283.  
  284. ccolor = haclose - haopen > 0 ? 1 : 0
  285. inside6 = haopen <= max(haopen[6],haclose[6]) and haopen>=min(haopen[6],haclose[6]) and haclose <= max(haopen[6],haclose[6]) and haclose >= min(haopen[6],haclose[6]) ? 1 : 0
  286. inside5 = haopen <= max(haopen[5],haclose[5]) and haopen>=min(haopen[5],haclose[5]) and haclose <= max(haopen[5],haclose[5]) and haclose >= min(haopen[5],haclose[5]) ? 1 : 0
  287. inside4 = haopen <= max(haopen[4],haclose[4]) and haopen>=min(haopen[4],haclose[4]) and haclose <= max(haopen[4],haclose[4]) and haclose >= min(haopen[4],haclose[4]) ? 1 : 0
  288. inside3 = haopen <= max(haopen[3],haclose[3]) and haopen>=min(haopen[3],haclose[3]) and haclose <= max(haopen[3],haclose[3]) and haclose >= min(haopen[3],haclose[3]) ? 1 : 0
  289. inside2 = haopen <= max(haopen[2],haclose[2]) and haopen>=min(haopen[2],haclose[2]) and haclose <= max(haopen[2],haclose[2]) and haclose >= min(haopen[2],haclose[2]) ? 1 : 0
  290. inside1 = haopen <= max(haopen[1],haclose[1]) and haopen>=min(haopen[1],haclose[1]) and haclose <= max(haopen[1],haclose[1]) and haclose >= min(haopen[1],haclose[1]) ? 1 : 0
  291.  
  292. colorvalue = inside6 ? ccolor[6] : inside5 ? ccolor[5] : inside4 ? ccolor[4] : inside3 ? ccolor[3] : inside2 ? ccolor[2] : inside1 ? ccolor[1] : ccolor
  293. Trend_Candle_Color = colorvalue ?  color.lime : color.fuchsia
  294.  
  295. // Bar Color according to Trend Candles
  296. barcolor(ShowTrendCandles=="Yes"? Trend_Candle_Color : na, title = "Trend Candles")
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top