Advertisement
Guest User

Ultimate Day Trader

a guest
Sep 19th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.84 KB | None | 0 0
  1. //@version=4
  2. strategy("Newest Ultimate Day Trading Strat", default_qty_value=1000, overlay=false)
  3.  
  4.  
  5. // === INPUTS ===
  6.  
  7. // Use Alternate Anchor TF for MAs
  8. anchor = input(0, minval=0, maxval=1440, title="Use Alternate Anchor TimeFrame (0=none, max=1440 (mins,D,W)")
  9. //
  10. gmmaType = input("Guppy", title="Guppy Type", options=["Guppy", "SuperGuppy"])
  11. smoothLen = input(1, minval=1, title="Oscillator Smoothing Length (1=none)")
  12. signalLen = input(13, minval=1, title="GMMA Oscillator Signal Length")
  13. showZones = input(true, title="Show Bullish/Bearish Zones")
  14. //
  15. src = input(title="Source", type=input.source, defval=close)
  16.  
  17. // Truncated Hilbert transform
  18. hilbertTransform(src) =>
  19. 0.962 * src + 0.5769 * nz(src[2]) - 0.5769 * nz(src[4]) - 0.0962 * nz(src[6])
  20.  
  21. firFilter(src) =>
  22. (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10
  23.  
  24. computeComponent(src, periodMult) =>
  25. hilbertTransform(src) * periodMult
  26.  
  27. getEIT(src) =>
  28. PI = 2 * asin(1)
  29.  
  30. mesaPeriod = 0.0
  31. mesaPeriodMult = 0.075 * nz(mesaPeriod[1]) + 0.54
  32.  
  33. smooth = 0.0
  34. smooth := firFilter(src)
  35.  
  36. detrender = 0.0
  37. detrender := computeComponent(smooth, mesaPeriodMult)
  38.  
  39. // Compute InPhase and Quadrature components
  40. I1 = nz(detrender[3])
  41. Q1 = computeComponent(detrender, mesaPeriodMult)
  42.  
  43. // Advance the phase of I1 and Q1 by 90 degrees
  44. jI = computeComponent(I1, mesaPeriodMult)
  45. jQ = computeComponent(Q1, mesaPeriodMult)
  46.  
  47. I2 = 0.0
  48. Q2 = 0.0
  49.  
  50. // Phasor addition for 3 bar averaging
  51. I2 := I1 - jQ
  52. Q2 := Q1 + jI
  53.  
  54. // Smooth the I and Q components before applying the discriminator
  55. I2 := 0.2 * I2 + 0.8 * nz(I2[1])
  56. Q2 := 0.2 * Q2 + 0.8 * nz(Q2[1])
  57.  
  58. // Homodyne Discriminator
  59. Re = I2 * nz(I2[1]) + Q2 * nz(Q2[1])
  60. Im = I2 * nz(Q2[1]) - Q2 * nz(I2[1])
  61.  
  62. Re := 0.2 * Re + 0.8 * nz(Re[1])
  63. Im := 0.2 * Im + 0.8 * nz(Im[1])
  64.  
  65. if Re != 0 and Im != 0
  66. mesaPeriod := 2 * PI / atan(Im / Re)
  67. mesaPeriod
  68.  
  69. if mesaPeriod > 1.5 * nz(mesaPeriod[1])
  70. mesaPeriod := 1.5 * nz(mesaPeriod[1])
  71. mesaPeriod
  72.  
  73. if mesaPeriod < 0.67 * nz(mesaPeriod[1])
  74. mesaPeriod := 0.67 * nz(mesaPeriod[1])
  75. mesaPeriod
  76.  
  77. if mesaPeriod < 6
  78. mesaPeriod := 6
  79. mesaPeriod
  80.  
  81. if mesaPeriod > 50
  82. mesaPeriod := 50
  83. mesaPeriod
  84.  
  85. mesaPeriod := 0.2 * mesaPeriod + 0.8 * nz(mesaPeriod[1])
  86.  
  87. smoothPeriod = 0.0
  88. smoothPeriod := 0.33 * mesaPeriod + 0.67 * nz(smoothPeriod[1])
  89.  
  90. // Compute Trendline as a SMA over the measured dominant cycle period
  91. dcPeriod = floor(smoothPeriod + 0.5)
  92.  
  93. if dcPeriod < 1
  94. dcPeriod := 1
  95. dcPeriod
  96.  
  97. itrend = 0.0
  98.  
  99. for i = 0 to dcPeriod - 1 by 1
  100. itrend := itrend + src[i]
  101. itrend
  102.  
  103. if dcPeriod > 0
  104. itrend := itrend / dcPeriod
  105. itrend
  106.  
  107. eit = firFilter(itrend)
  108.  
  109. if bar_index < 12
  110. eit := src
  111. eit
  112. eit
  113.  
  114. eit = getEIT(src)
  115. src1 = firFilter(src)
  116.  
  117. //
  118. // === /INPUTS ===
  119. //
  120.  
  121. // === FUNCTIONS ===
  122.  
  123. //Fast Guppy Avg EMA
  124. GMMAFast(src, mult) =>
  125. ema1 = ema(src1, 3 * mult)
  126. ema2 = ema(src1, 5 * mult)
  127. ema3 = ema(src1, 8 * mult)
  128. ema4 = ema(src1, 10 * mult)
  129. ema5 = ema(src1, 12 * mult)
  130. ema6 = ema(src1, 15 * mult)
  131. return = ema1 + ema2 + ema3 + ema4 + ema5 + ema6
  132. return
  133.  
  134. //Slow Guppy Avg EMA
  135. GMMASlow(src, mult) =>
  136. ema7 = ema(src1, 30 * mult)
  137. ema8 = ema(src1, 35 * mult)
  138. ema9 = ema(src1, 40 * mult)
  139. ema10 = ema(src1, 45 * mult)
  140. ema11 = ema(src1, 50 * mult)
  141. ema12 = ema(src1, 60 * mult)
  142. return = ema7 + ema8 + ema9 + ema10 + ema11 + ema12
  143. return
  144.  
  145. //Fast SuperGuppy Avg EMA
  146. superGMMAFast(src1, mult) =>
  147. emaF1 = ema(src1, 3 * mult)
  148. emaF2 = ema(src1, 5 * mult)
  149. emaF3 = ema(src1, 7 * mult)
  150. emaF4 = ema(src1, 9 * mult)
  151. emaF5 = ema(src1, 11 * mult)
  152. emaF6 = ema(src1, 13 * mult)
  153. emaF7 = ema(src1, 15 * mult)
  154. emaF8 = ema(src1, 17 * mult)
  155. emaF9 = ema(src1, 19 * mult)
  156. emaF10 = ema(src1, 21 * mult)
  157. emaF11 = ema(src1, 23 * mult)
  158. return = (emaF1 + emaF2 + emaF3 + emaF4 + emaF5 + emaF6 + emaF7 + emaF8 + emaF9 + emaF10 +
  159. emaF11) / 11
  160. return
  161.  
  162. //Slow SuperGuppy Avg EMA
  163. superGMMASlow(src, mult) =>
  164. emaS1 = ema(src1, 25 * mult)
  165. emaS2 = ema(src1, 28 * mult)
  166. emaS3 = ema(src1, 31 * mult)
  167. emaS4 = ema(src1, 34 * mult)
  168. emaS5 = ema(src1, 37 * mult)
  169. emaS6 = ema(src1, 40 * mult)
  170. emaS7 = ema(src1, 43 * mult)
  171. emaS8 = ema(src1, 46 * mult)
  172. emaS9 = ema(src1, 49 * mult)
  173. emaS10 = ema(src1, 52 * mult)
  174. emaS11 = ema(src1, 55 * mult)
  175. emaS12 = ema(src1, 58 * mult)
  176. emaS13 = ema(src1, 61 * mult)
  177. emaS14 = ema(src1, 64 * mult)
  178. emaS15 = ema(src1, 67 * mult)
  179. emaS16 = ema(src1, 70 * mult)
  180. // average
  181. return = (emaS1 + emaS2 + emaS3 + emaS4 + emaS5 + emaS6 + emaS7 + emaS8 + emaS9 + emaS10 +
  182. emaS11 + emaS12 + emaS13 + emaS14 + emaS15 + emaS16) / 16
  183. return
  184.  
  185. // === /FUNCTIONS ===
  186.  
  187.  
  188. // === SERIES ===
  189.  
  190.  
  191. // Calculate the Multiplier for Anchor MAs.
  192. mult = not timeframe.isintraday or anchor == 0 or timeframe.multiplier <= 0 or
  193. timeframe.multiplier >= anchor or anchor > 1440 ? 1 :
  194. round(anchor / timeframe.multiplier) > 1 ? round(anchor / timeframe.multiplier) :
  195. 1
  196. mult := timeframe.isintraday or anchor == 0 or timeframe.multiplier <= 0 or
  197. timeframe.multiplier >= anchor or anchor > 52 ? mult :
  198. round(anchor / timeframe.multiplier) > 1 ? round(anchor / timeframe.multiplier) :
  199. 1
  200.  
  201. // Select type of Oscillator calculation
  202. GMMAFast__1 = GMMAFast(src1, mult)
  203. superGMMAFast__1 = superGMMAFast(src1, mult)
  204. gmmaFast = gmmaType == "Guppy" ? GMMAFast__1 : superGMMAFast__1
  205. GMMASlow__1 = GMMASlow(src1, mult)
  206. superGMMASlow__1 = superGMMASlow(src1, mult)
  207. gmmaSlow = gmmaType == "Guppy" ? GMMASlow__1 : superGMMASlow__1
  208.  
  209. // Calculate Oscillator, Smoothed Osc and signal line
  210. gmmaOscRaw = (gmmaFast - gmmaSlow) / gmmaSlow * 100
  211. gmmaOsc = sma(gmmaOscRaw, smoothLen)
  212. gmmaSignal = ema(gmmaOscRaw, signalLen)
  213. gmmaClr = gmmaOsc < gmmaSignal ? color.red :
  214. gmmaOsc > gmmaSignal ? color.green : color.gray
  215.  
  216. // bullish signal rule:
  217. bearishRule = crossover(gmmaSignal, gmmaOsc)
  218. // bearish signal rule:
  219. bullishRule = crossunder(gmmaSignal, gmmaOsc)
  220. // current trading State
  221. ruleState = 0
  222. ruleState := bullishRule ? 1 : bearishRule ? -1 : nz(ruleState[1])
  223.  
  224. // === /SERIES ===
  225.  
  226. // === PLOTTING ===
  227.  
  228.  
  229. plot(gmmaOsc, title="GMMA OSC Smooth", style=plot.style_line, linewidth=2, color=gmmaClr, transp=10)
  230. plot(gmmaSignal, title="GMMA Signal", style=plot.style_line, linewidth=1, color=color.orange, transp=10)
  231. hline(0, title="Zero line", linestyle=hline.style_dotted, linewidth=2, color=color.gray)
  232.  
  233. // === /PLOTTING ===
  234.  
  235. //
  236. // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //
  237.  
  238. // === ALERTS ===
  239.  
  240. bgcolor(showZones ? ruleState == -1 ? color.red : ruleState == 1 ? color.green : color.gray : na, title="Guppy Bullish/Bearish Zones", transp=90)
  241.  
  242. alertcondition(bullishRule, title="Guppy Bullish", message="Guppy Bullish")
  243. alertcondition(bearishRule, title="Guppy Bearish", message="Guppy Bearish")
  244. ebc = input(false, title="Enable Bar colors")
  245. bc = gmmaOsc > gmmaSignal ? color.green : color.red
  246. barcolor(ebc ? bc : na)
  247. // === /ALERTS ===
  248.  
  249. longCondition = bullishRule
  250. shortCondition = bearishRule
  251. //
  252. min = security("USOIL", "1", close)
  253. if min > min[1] and longCondition
  254. strategy.entry("long", strategy.long)
  255.  
  256.  
  257. if min < min[1] and shortCondition
  258. strategy.entry("short", strategy.short)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement