Advertisement
Guest User

Untitled

a guest
Oct 9th, 2019
6,183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. ### Expected Move Labels ###
  2. # This script will add expected move labels, #
  3. # in dollars, to charts. IT IS INTENDED TO BE#
  4. # USED ONLY ON CHARTS WITH DAILY BARS. The #
  5. # math will not work one charts with other #
  6. # settings. #
  7.  
  8. ### Settings for coloring ###
  9.  
  10. input customWindow = 50;
  11. input violationMetricHigh = high;
  12. input violationMetricLow = low;
  13. input centerPoint = close;
  14.  
  15. def dayCountBacktest = 3;
  16. def weekCountBacktest = 5;
  17. def monthCountBacktest = 22;
  18. def customWindowBacktest = customWindow - (RoundDown(customWindow / 7, 0) * 2);
  19. def customWindowDanger = RoundUp(customWindowBacktest * 0.32, 0);
  20. def customWindowWarning = RoundDown(customWindowBacktest * 0.16, 0);
  21. def dayCountDanger = RoundUp(dayCountBacktest * 0.32, 0);
  22. def dayCountWarning = RoundDown(dayCountBacktest * 0.16, 0);
  23. def weekCountDanger = RoundUp(weekCountBacktest * 0.32, 0);
  24. def weekCountWarning = RoundDown(weekCountBacktest * 0.16, 0);
  25. def monthCountDanger = RoundUp(monthCountBacktest * 0.32, 0);
  26. def monthCountWarning = RoundDown(monthCountBacktest * 0.16, 0);
  27.  
  28. script ExMove {
  29. input center = 0;
  30. input window = 1;
  31.  
  32. def IVBase = imp_volatility();
  33.  
  34. plot ExMove = center * IVBase * Sqrt(window / 365);
  35. }
  36.  
  37. ### Calculate the expected move ###
  38. def ExMoveOneDay = ExMove(centerPoint, 1);
  39. def ExMoveOneWeek = ExMove(centerPoint, 7);
  40. def ExMoveOneMonth = ExMove(centerPoint, 30);
  41. def ExMoveCustom = ExMove(centerPoint, customWindow);
  42.  
  43. ### Determine violations ###
  44. def dayBacktestCenter = (Average(close, dayCountBacktest) + Average(close, RoundUp(dayCountBacktest/2, 0)) + Average(close, RoundUp(dayCountBacktest/4, 0)))/3;
  45. def dayCount = fold i = 1 to dayCountBacktest with countA = 0
  46. do
  47. if violationMetricHigh[i] > (dayBacktestCenter + ExMoveOneDay) or violationMetricLow[i] < (dayBacktestCenter - ExMoveOneDay) then
  48. countA + 1
  49. else
  50. countA;
  51.  
  52.  
  53. def weekBacktestCenter = (Average(close, weekCountBacktest) + Average(close, RoundUp(weekCountBacktest/2, 0)) + Average(close, RoundUp(weekCountBacktest/4, 0)))/3;
  54. def weekCount = fold n = 1 to weekCountBacktest with countB = 0
  55. do
  56. if violationMetricHigh[n] > (weekBacktestCenter + ExMoveOneWeek) or violationMetricLow[n] < (weekBacktestCenter - ExMoveOneWeek) then
  57. countB + 1
  58. else
  59. countB;
  60.  
  61. def monthBacktestCenter = (Average(close, monthCountBacktest) + Average(close, RoundUp(monthCountBacktest/2, 0)) + Average(close, RoundUp(monthCountBacktest/4, 0)))/3;
  62. def monthCount = fold m = 1 to monthCountBacktest with countC = 0
  63. do
  64. if violationMetricHigh[m] > (monthBacktestCenter + ExMoveOneMonth) or violationMetricLow[m] < (monthBacktestCenter - ExMoveOneMonth) then
  65. countC + 1
  66. else
  67. countC;
  68.  
  69. def customBacktestCenter = (Average(close, customWindowBacktest) + Average(close, RoundUp(customWindowBacktest/2, 0)) + Average(close, RoundUp(customWindowBacktest/4, 0)))/3;
  70. def customCount = fold o = 1 to customWindowBacktest with countD = 0
  71. do
  72. if violationMetricHigh[o] > (customBacktestCenter + ExMoveCustom) or violationMetricLow[o] < (customBacktestCenter - ExMoveCustom) then
  73. countD + 1
  74. else
  75. countD;
  76.  
  77. ### Add labels to chart ###
  78. AddLabel(yes, "Range at 68% confidence", Color.WHITE);
  79. AddLabel(yes, "1 Day: +/-" + AsDollars(ExMoveOneDay) + "(" + dayCount + "/" + dayCountBacktest + ")", if dayCount >= dayCountDanger then Color.RED else if dayCount < dayCountDanger and dayCount > dayCountWarning then Color.YELLOW else Color.GREEN);
  80. AddLabel(yes, "1 Week: +/-" + AsDollars(ExMoveOneWeek) + "(" + weekCount + "/" + weekCountBacktest + ")", if weekCount >= weekCountDanger then Color.RED else if weekCount > weekCountWarning and weekCount < weekCountDanger then Color.YELLOW else Color.GREEN);
  81. AddLabel(yes, "1 Month: +/-" + AsDollars(ExMoveOneMonth) + "(" + monthCount + "/" + monthCountBacktest + ")", if monthCount >= monthCountDanger then Color.RED else if monthCount > monthCountWarning and monthCount < monthCountDanger then Color.YELLOW else Color.GREEN);
  82. AddLabel(yes, customWindow + " Days: +/-" + AsDollars(ExMoveCustom) + "(" + customCount + "/" + customWindowBacktest + ")", if customCount >= customWindowDanger then Color.RED else if customCount > customWindowWarning and customCount < customWindowDanger then Color.YELLOW else Color.GREEN);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement