opt-pos-chart-stacked-tmpl.html 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <html>
  2. <head>
  3. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  4. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  5. <script type="text/javascript">
  6. google.load("visualization", "1.1", {packages:["corechart", 'table','gauge']});
  7. // google.load('visualization', '1', {'packages':['table']});
  8. // google.load("visualization", "1.1", {packages:["corechart"]});
  9. google.setOnLoadCallback(drawChart);
  10. function drawChart() {
  11. var data = google.visualization.arrayToDataTable([
  12. ['strike', 'Near-P', 'Near-C', 'Far-P', 'Far-C','Near-F', 'Far-F'],
  13. {{{dataPCpos}}}
  14. ]);
  15. var dataTbl = google.visualization.arrayToDataTable([
  16. {{{dataTablePos}}}
  17. ]);
  18. var options = {
  19. title: 'PUT:CALL Ratio [{{{PRvsCR}}}}] for the month of {{{option_months}}}',
  20. width: 900,
  21. legend:{ position: 'top', maxLines: 2},
  22. bar:{groupWidth: '20%'},
  23. chartArea:{left:40,top:50,width:"80%",height:"70%"},
  24. isStacked: true,
  25. series:{
  26. 0: {color:'#0066ff'},
  27. 1: {color:'#e60000'},
  28. 2: {color:'#80b3ff'},
  29. 3: {color:'#ff8080'},
  30. },
  31. };
  32. var chart = new google.visualization.ColumnChart(document.getElementById('barchart_material'));
  33. chart.draw(data, options);
  34. // chart table display implied volatilities in a nicely formatted table
  35. var chartTbl = new google.visualization.Table(document.getElementById('chartTbl_div'));
  36. //var portTbl = new google.visualization.Table(document.getElementById('portTblDiv'));
  37. var formatterColor = new google.visualization.ColorFormat();
  38. formatterColor.addRange(-100, 0, 'white', 'red');
  39. formatterColor.addRange(0, 100, 'white', 'blue');
  40. formatterColor.format(dataTbl, 5);
  41. var formatterColor2 = new google.visualization.ColorFormat();
  42. formatterColor2.addGradientRange(null, null, 'white', 'orange', 'blue');
  43. formatterColor2.format(dataTbl, 10);
  44. var formatter = new google.visualization.NumberFormat({pattern:'0.00'});
  45. for (var i = 2; i < 12; i++){
  46. formatter.format(dataTbl, i);
  47. }
  48. var options2 = {
  49. displayAnnotations: true,
  50. showRowNumber: true, width: '100%', height: '100%', allowHtml: true,
  51. };
  52. var formatterBar = new google.visualization.BarFormat({width: 80,
  53. colorPositive: 'green', max:100 });
  54. formatterBar.format(dataTbl, 11);
  55. chartTbl.draw(dataTbl, options2);
  56. $('input[id="b_reload"]').click();
  57. ////////////////////////////////////////////////////////////////////////////////
  58. // guage functions
  59. var dataG = google.visualization.arrayToDataTable([
  60. ['Label', 'Value'],
  61. ['Delta', 0],
  62. ['Delta-F', 0],
  63. ['Delta-C', 0],
  64. ['Delta-P', 0]
  65. ]);
  66. var optionsG = {
  67. width: 400, height: 120,
  68. redFrom: -50, redTo: -25,
  69. yellowFrom:-24, yellowTo: -15,
  70. greenFrom: -10, greenTo: 10,
  71. minorTicks: 5,
  72. min: -50, max: 50
  73. };
  74. var dataT = google.visualization.arrayToDataTable([
  75. ['Label', 'Value'],
  76. ['Theta', 0],
  77. ['Theta-C', 0],
  78. ['Theta-P', 0]
  79. ]);
  80. var optionsT = {
  81. width: 400, height: 120,
  82. redFrom: -3000, redTo: -2000,
  83. yellowFrom:-1999, yellowTo: 500,
  84. greenFrom: 5000, greenTo: 15000,
  85. minorTicks: 5,
  86. min: -3000, max: 15000
  87. };
  88. var gchart = new google.visualization.Gauge(document.getElementById('chart_div'));
  89. // refreshPortSummary();
  90. // gchart.draw(dataG, optionsG);
  91. var tchart = new google.visualization.Gauge(document.getElementById('chartTheta_div'));
  92. refreshPortSummary();
  93. function refreshPortSummary(){
  94. $.ajax({
  95. type: 'Post',
  96. url: '/ws_port_summary',
  97. success: function (data) {
  98. //alert(data);
  99. var jdata = JSON.parse(data);
  100. $('#temp').text(data);
  101. //alert(jdata.delta_all);
  102. dataG.setValue(0, 1, Math.round(jdata.delta_all*100)/100);
  103. dataG.setValue(1, 1, Math.round(jdata.delta_f*100)/100);
  104. dataG.setValue(2, 1, Math.round(jdata.delta_c*100)/100);
  105. dataG.setValue(3, 1, Math.round(jdata.delta_p*100)/100);
  106. gchart.draw(dataG, optionsG);
  107. dataT.setValue(0, 1, Math.round(jdata.theta_all));
  108. dataT.setValue(1, 1, Math.round(jdata.theta_c));
  109. dataT.setValue(2, 1, Math.round(jdata.theta_p));
  110. tchart.draw(dataT, optionsT);
  111. $('#pt_status').text("Unreal P/L: " + Math.round(jdata.unreal_pl*100)/100 + " Cal Status: " + jdata.status);
  112. }
  113. });
  114. };
  115. function isMarketOpen(now){
  116. var hkex_mstart_hhmm = '0915';
  117. var hkex_mend_hhmm = '1200';
  118. var hkex_astart_hhmm = '1300';
  119. var hkex_aend_hhmm = '1630';
  120. var now_hhmm = ('0' + now.getHours()).slice(-2) + '' + ('0' + now.getMinutes()).slice(-2);
  121. rc = (
  122. (hkex_mstart_hhmm < now_hhmm && now_hhmm < hkex_mend_hhmm) ||
  123. (hkex_astart_hhmm < now_hhmm && now_hhmm < hkex_aend_hhmm)
  124. ) ? true : false;
  125. return rc;
  126. }
  127. setInterval(function() {
  128. //var rc = isMarketOpen(new Date());
  129. if (isMarketOpen(new Date())){
  130. //if (rc){
  131. refreshPortSummary();
  132. }
  133. }, 9500);
  134. } // end drawChart
  135. //})
  136. // });
  137. </script>
  138. </head>
  139. <body>
  140. <div id='pt_status'></div>
  141. <div id="chart_div" style="width: 400px; height: 120px;"></div>
  142. <div id="chartTheta_div" style="width: 400px; height: 120px;"></div>
  143. <div id="barchart_material" style="width: 900px; height: 500px;"></div>
  144. <div id='chartTbl_div' style='width: 900px; height: 500px;'></div>
  145. <div id="portTbl">
  146. <input type="button" id="b_reload" value="Reload" />
  147. </div>
  148. <div id='portTblDiv' style='width: 900px; height: 500px;'></div>
  149. <div id='temp'></div>
  150. </body>
  151. </html>