Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. function generateData() {
  2. var unit = document.getElementById('unit').value;
  3.  
  4. function unitLessThanDay() {
  5. return unit === 'second' || unit === 'minute' || unit === 'hour';
  6. }
  7.  
  8. function beforeNineThirty(date) {
  9. return date.hour() < 9 || (date.hour() === 9 && date.minute() < 30);
  10. }
  11.  
  12. // Returns true if outside 9:30am-4pm on a weekday
  13. function outsideMarketHours(date) {
  14. if (date.isoWeekday() > 5) {
  15. return true;
  16. }
  17. if (unitLessThanDay() && (beforeNineThirty(date) || date.hour() > 16)) {
  18. return true;
  19. }
  20. return false;
  21. }
  22.  
  23. function randomNumber(min, max) {
  24. return Math.random() * (max - min) + min;
  25. }
  26.  
  27. function randomBar(date, lastClose) {
  28. var open = randomNumber(lastClose * 0.95, lastClose * 1.05).toFixed(2);
  29. var close = randomNumber(open * 0.95, open * 1.05).toFixed(2);
  30. return {
  31. t: date.valueOf(),
  32. y: close
  33. };
  34. }
  35.  
  36. var date = moment('Jan 01 1990', 'MMM DD YYYY');
  37. var now = moment();
  38. var data = [];
  39. var lessThanDay = unitLessThanDay();
  40. for (; data.length < 600 && date.isBefore(now); date = date.clone().add(1, unit).startOf(unit)) {
  41. if (outsideMarketHours(date)) {
  42. if (!lessThanDay || !beforeNineThirty(date)) {
  43. date = date.clone().add(date.isoWeekday() >= 5 ? 8 - date.isoWeekday() : 1, 'day');
  44. }
  45. if (lessThanDay) {
  46. date = date.hour(9).minute(30).second(0);
  47. }
  48. }
  49. data.push(randomBar(date, data.length > 0 ? data[data.length - 1].y : 30));
  50. }
  51.  
  52. return data;
  53. }
  54.  
  55. var ctx = document.getElementById('chart1').getContext('2d');
  56. ctx.canvas.width = 1000;
  57. ctx.canvas.height = 300;
  58.  
  59. var color = Chart.helpers.color;
  60. var cfg = {
  61. data: {
  62. datasets: [{
  63. label: 'Jamies super mega graph',
  64. backgroundColor: color(window.chartColors.stocklock).alpha(0.5).rgbString(),
  65. borderColor: window.chartColors.stocklock,
  66. data: generateData(),
  67. type: 'line',
  68. pointRadius: 0,
  69. fill: false,
  70. lineTension: 0,
  71. borderWidth: 2
  72. }]
  73. },
  74. options: {
  75. animation: {
  76. duration: 0
  77. },
  78. scales: {
  79. xAxes: [{
  80. type: 'time',
  81. distribution: 'series',
  82. offset: true,
  83. ticks: {
  84. major: {
  85. enabled: true,
  86. fontStyle: 'bold'
  87. },
  88. source: 'data',
  89. autoSkip: true,
  90. autoSkipPadding: 75,
  91. maxRotation: 0,
  92. sampleSize: 100
  93. },
  94. afterBuildTicks: function(scale, ticks) {
  95. var majorUnit = scale._majorUnit;
  96. var firstTick = ticks[0];
  97. var i, ilen, val, tick, currMajor, lastMajor;
  98.  
  99. val = moment(ticks[0].value);
  100. if ((majorUnit === 'minute' && val.second() === 0)
  101. || (majorUnit === 'hour' && val.minute() === 0)
  102. || (majorUnit === 'day' && val.hour() === 9)
  103. || (majorUnit === 'month' && val.date() <= 3 && val.isoWeekday() === 1)
  104. || (majorUnit === 'year' && val.month() === 0)) {
  105. firstTick.major = true;
  106. } else {
  107. firstTick.major = false;
  108. }
  109. lastMajor = val.get(majorUnit);
  110.  
  111. for (i = 1, ilen = ticks.length; i < ilen; i++) {
  112. tick = ticks[i];
  113. val = moment(tick.value);
  114. currMajor = val.get(majorUnit);
  115. tick.major = currMajor !== lastMajor;
  116. lastMajor = currMajor;
  117. }
  118. return ticks;
  119. }
  120. }],
  121. yAxes: [{
  122. gridLines: {
  123. drawBorder: false
  124. },
  125. scaleLabel: {
  126. display: true,
  127. labelString: 'Closing price ($)'
  128. }
  129. }]
  130. },
  131. tooltips: {
  132. intersect: false,
  133. mode: 'index',
  134. callbacks: {
  135. label: function(tooltipItem, myData) {
  136. var label = myData.datasets[tooltipItem.datasetIndex].label || '';
  137. if (label) {
  138. label += ': ';
  139. }
  140. label += parseFloat(tooltipItem.value).toFixed(2);
  141. return label;
  142. }
  143. }
  144. }
  145. }
  146. };
  147.  
  148. var chart = new Chart(ctx, cfg);
  149.  
  150. document.getElementById('update').addEventListener('click', function() {
  151. var dataset = chart.config.data.datasets[0];
  152. dataset.type = 'bar';
  153. dataset.data = generateData();
  154. chart.update();
  155. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement