/* Format prices according to language */ /* @autor Martin Nachev (22.01.2014) */ /* @idea Google.bg: javascript split string every 3 characters at right */ var EchelonVolume = 0; var QuantiteEchelon = 0; function createdCurve(leftScInit,ptq_){ maxAndMin(leftScInit, ptq_); SymexChartGlobals.stepX = (SymexChartGlobals.chart_width * 0.95) / (ptq_ - leftScInit); if(SymexChartGlobals.type_curve == "J"){ drawLine_jap( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); }else if(SymexChartGlobals.type_curve == "B"){ drawLine_barchart( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); }else if(SymexChartGlobals.type_curve == "H"){ drawLine_Heikin( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); }/*else if(SymexChartGlobals.type_curve == "K"){ drawLine_kagi( leftScInit, ptq_); }*/else { drawLine( leftScInit, ptq_); } if(SymexChartGlobals.ichi == 1){ // drawLine_ichi( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); } if(SymexChartGlobals.display_SAR == 1){ //drawLine_parabolic( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); } if(SymexChartGlobals.display_BOL == 1){ drawLine_bollinger( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); } if(SymexChartGlobals.display_STR == 1 ){ // drawLine_superTrend( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); } if(SymexChartGlobals.display_KAMA == 1){ //drawLine_kama( leftScInit, ptq_,SymexChartGlobals.period_type,SymexChartGlobals.period_qty,SymexChartGlobals.chart_height ); } if(SymexChartGlobals.points_qty_label < ptq_){ labels_X( leftScInit, SymexChartGlobals.points_qty_label ); }else{ labels_X( leftScInit, ptq_); } if(SymexChartGlobals.pivot == 1){ labels_pivot(); } labels_Y( leftScInit, ptq_ ); if( SymexChartGlobals.display_news == 1 ) { $.ajax({ method: "GET", url: "cookie.php", data: { news: 1 } }) createCookie("news",1,1) news( leftScInit, ptq_ ); }else{ $.ajax({ method: "GET", url: "cookie.php", data: { news: 0 } }) createCookie("news",0,1) } if( SymexChartGlobals.display_signaux == 1 ) { signaux( leftScInit, ptq_ ); } if( SymexChartGlobals.display_events == 1 ) { $.ajax({ method: "GET", url: "cookie.php", data: { news: 1 } }) createCookie("events",1,1) events( leftScInit, ptq_ ); }else{ $.ajax({ method: "GET", url: "cookie.php", data: { news: 0 } }) createCookie("events",0,1) } for(var x=0,y=1;x 0 ) { f.unshift( v.substring( 0, firstGroupLen ) ); } if(Math.abs(value) > 1000) var formatted = signed+f.join( thousSep ); else var formatted = signed+Math.abs(f.join( "" )); if ( noDecimal == false ) { formatted += decSep + value.match( new RegExp( "[0-9]+$" ) )[0]; } return formatted; } function format_num( value, noDecimal ) { var dec = 3; var value = value.toFixed( dec ); // String var noDecimal = typeof noDecimal == "boolean" ? noDecimal : false; var decSep = SymexChartGlobals.language == "en" ? "." : ","; var thousSep = SymexChartGlobals.language == "en" ? " " : "."; var v = parseInt( value ) + ""; // String - main number part var firstGroupLen = v.length % 3; // only first group could be less than 3 digits var f = v.substring( firstGroupLen ).match( new RegExp( ".{3}", "g" ) ) || []; // Array !!! if ( firstGroupLen > 0 ) { f.unshift( v.substring( 0, firstGroupLen ) ); } var formatted = f.join( thousSep ); if ( noDecimal == false && eval(value.match( new RegExp( "[0-9]+$" ) )[0]) > "0" ) { formatted += decSep + value.match( new RegExp( "[0-9]+$" ) )[0]; } return formatted; } function format_num2( value, noDecimal ) { var dec = 2; var value = value.toFixed( dec ); // String var noDecimal = typeof noDecimal == "boolean" ? noDecimal : false; var decSep = SymexChartGlobals.language == "en" ? "." : ","; var thousSep = SymexChartGlobals.language == "en" ? " " : "."; var v = parseInt( value ) + ""; // String - main number part var firstGroupLen = v.length % 3; // only first group could be less than 3 digits var f = v.substring( firstGroupLen ).match( new RegExp( ".{3}", "g" ) ) || []; // Array !!! if ( firstGroupLen > 0 ) { f.unshift( v.substring( 0, firstGroupLen ) ); } var formatted = f.join( thousSep ); //if ( noDecimal == false && eval(value.match( new RegExp( "[0-9]+$" ) )[0]) > "0" ) { formatted += decSep + value.match( new RegExp( "[0-9]+$" ) )[0]; //} return formatted; } function format_calcul( value, noDecimal ) { var dec = 0; var value = value.toFixed( dec ); // String var noDecimal = typeof noDecimal == "boolean" ? noDecimal : false; var decSep = SymexChartGlobals.language == "en" ? "." : "."; var thousSep = SymexChartGlobals.language == "en" ? "" : ""; var v = parseInt( value ) + ""; // String - main number part var firstGroupLen = v.length % 3; // only first group could be less than 3 digits var f = v.substring( firstGroupLen ).match( new RegExp( ".{3}", "g" ) ) || []; // Array !!! if ( firstGroupLen > 0 ) { f.unshift( v.substring( 0, firstGroupLen ) ); } var formatted = f.join( thousSep ); if ( noDecimal == false && eval(value.match( new RegExp( "[0-9]+$" ) )[0]) > "0" ) { formatted += decSep + value.match( new RegExp( "[0-9]+$" ) )[0]; } return formatted; } /* Format volume according to given divider */ /* Example: 1 200 000 -> 1,2M */ /* @author Martin Nachev (30.09.2014) */ function format_volume( value, inMillions ) { var divider = 1; var suffix = ""; var dec = 1; if ( typeof SymexChartSettings.settings[3] != "undefined" ) { divider = SymexChartSettings.settings[3].split( "," )[0]; suffix = SymexChartSettings.settings[3].split( "," )[1]; dec = 1; } var vol = ( value / divider ).toFixed( dec ) + suffix; if(vol.split( "." )[1] == 0){ return vol.split( "." )[0]; }else{ return vol; } } function getURLParam() { var returnObject = {}; var href = document.location.href; if ( href.indexOf("?") > -1 ) { var param = href.substr(href.indexOf("?") + 1); var arrayParam = param.split("&"); for ( var i = 0; i < arrayParam.length; i++ ) { var value = arrayParam[i].split("="); returnObject[value[0]] = value[1]; } } return returnObject; } function array_max( arr, x1, x2 ) { var max_ = null; var check; for( var i = parseInt(x1); i <= parseInt(x2); i++ ) { check = parseFloat(arr[i]); if ( check && ( max_ === null || check > max_ ) ) { max_ = check; } } return max_; } function array_max2(arr, x1, x2 ) { var max_ = null; var check = ""; for( var i =parseInt(x1); i <= parseInt(x2); i++ ) { if(typeof(arr[i])!== "undefined"){ check = parseFloat(arr[i]); } if ( check && ( max_ === null || check > max_ ) ) { max_ = check; } } return max_; } function array_min( arr, x1, x2 ) { var min_ = null; var check; for( var i = parseInt(x1); i <= parseInt(x2); i++ ) { check = parseFloat(arr[i]); if ( check && ( min_ === null || check < min_ ) ) { min_ = check; } } return min_; } function search_date(date_found){ var d_date_i = SymexChartGlobals.points_qty-1; for(var i = 0;i < SymexChartGlobals.points_qty_s;i++){ if(date_found <= data_date[i]){ d_date_i = i break; } } return d_date_i; } function Pixelto_old(name_chart,y_,max_Grid,min_Grid){ var position = $(name_chart).position(); var a = (( position.top - (position.top + jQuery(name_chart).height() )) / (max_Grid - min_Grid)); var b = position.top - a * max_Grid; var eu_ = (y_ - b) / a; return eu_; } function value_A_B(name_chart,max_M,min_M){ var position = $("#"+name_chart).position(); SymexChartGlobals.a[name_chart] = (( position.top - (position.top + $("#"+name_chart).height() )) / (max_M - min_M)); SymexChartGlobals.b[name_chart] = position.top - SymexChartGlobals.a[name_chart] * max_M; } function Pixelto(name_chart,y_){ var eu_ = (y_ - SymexChartGlobals.b[name_chart] ) / SymexChartGlobals.a[name_chart] ; return eu_; } function PixeltoEuro(y_){ var onePix_ = (SymexChartGlobals.max_grid.replace(",",".") - SymexChartGlobals.min_grid.replace(",",".")) / (SymexChartGlobals.chart_height ); var eu_ = SymexChartGlobals.max_grid.replace(",",".") - ((y_-1 ) * onePix_); return eu_; } function EurotoPixel(eu_){ var onePix_ = (SymexChartGlobals.max_grid.replace(",",".") - SymexChartGlobals.min_grid.replace(",",".")) / (SymexChartGlobals.chart_height ); var y_ = (1/onePix_)*(SymexChartGlobals.max_grid.replace(",",".")-eu_); return y_; } function Pixel_X(x_){ var X_ = (( x_ / SymexChartGlobals.stepX ) + SymexChartGlobals.begin); return X_; } // Return first quote for given period for a ticker function get_first_quote( arr, x1, x2 ) { for( var i = x1; i <= x2; i++ ) { if ( typeof arr[i] != "undefined" ) { return arr[i]; } } return null; } // Convert date format: Ymd => d/m/Y function date_eu(d){ if(typeof SymexChartSettings.lang_array['separateur'] == "undefined"){var separateur = '/';}else{var separateur = SymexChartSettings.lang_array['separateur'];} var date_ = ""; if(SymexChartGlobals.language == "en"){ date_ = d.substr(4,2) + separateur + d.substr(6,2) + separateur + d.substr(0,4); }else{ date_ = d.substr(6,2) + separateur + d.substr(4,2) + separateur + d.substr(0,4); } return date_; } function header_info( x1_, x2_ , date_send ) { if ( x2_ > SymexChartGlobals.points_qty ) { x2_ = SymexChartGlobals.points_qty; } if ( SymexChartGlobals.showLegend ) { var legend = ""; for ( var i = 0; i < SymexChartGlobals.tickers_qty; i++ ) { legend += ""; legend += "— " + SymexChartGlobals.ticker_symbol[i] + " "; } $( "#head-info" ).append( "
" + legend + "
" ); } var period = "
"; period += SymexChartSettings.lang_array[20] + date_eu( data_date[x1_] ) + " "; // From if(data_close_0.length <= (x2_)){ period += SymexChartSettings.lang_array[21] + date_eu( data_date[(data_close_0.length -1)] ); // To }else{ period += SymexChartSettings.lang_array[21] + date_eu(data_date[(x2_)] ); // To } period += "
"; jQuery( "#period-info" ).html( period ); } function drawLine( x1_, x2_ ) { x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; // Conteiner for canvas elements var canvas_ = new Array(); var BOL = 0; // Add all canvas element in for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ canvas_[i] = document.getElementById("price_" + i); canvas_[i].height = SymexChartGlobals.chart_height; canvas_[i].width = SymexChartGlobals.chart_width; if(SymexChartGlobals.tickers_qty > 1 && BOL == 0){ if(SymexChartGlobals.tickers.split( ";" )[i].split( "," )[0] == "BOG"){ BOL = 1; var index_BOL = i; }else{ BOL =0; } } } // If canvas container is ready if (canvas_[0].getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ context_[i] = canvas_[i].getContext("2d"); } for( var w = 0; w < SymexChartGlobals.tickers_qty; w++ ){ init_quotes[w] = get_first_quote(eval("data_close_" + w), x1_, x2_); } // Set global max / min for each ticker // Recalculate max / min for good `Y` scale var values_scale_data = values_scale(SymexChartGlobals.max_[0], SymexChartGlobals.min_[0]); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("priceGraph",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); // Distance between two points in "X" axis => Override global var // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker if ( SymexChartGlobals.mountain == 1 ) { var lingrad = context_[0].createLinearGradient( 0, 0, SymexChartGlobals.chart_width, 0 ); lingrad.addColorStop( 0, SymexChartSettings.colors_[21] ); lingrad.addColorStop( 1, SymexChartSettings.colors_[22] ); } //loop for each ticker for ( var i = 0; i < SymexChartGlobals.tickers_qty; i++ ) { init_positionY = (SymexChartGlobals.max_[0] - SymexChartGlobals.init_quotes[i]) / coefStepY; // Init drawing process context_[i].beginPath(); context_[i].moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0; var iter2 = 0; var iter3 = 0;//count steps for ( var i_ = x1_; i_ <= x2_; i_++ ) //+1 => because 0 point is set with moveTo { // If empty point (no data for current date) if ( typeof eval( "data_close_" + i + "[i_]" ) == "undefined") { // iter++; //continue; } if ( i > 0 && SymexChartGlobals.showVariation == 0 && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "MMA" && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "BOL" ) { var formula_convert; formula_convert = "tmp_val" + " = "; formula_convert += "(data_close_" + i + "[i_] / "; formula_convert += init_quotes[i] + ") * "; formula_convert += init_quotes[0]; eval(formula_convert); } else { tmp_val = eval( "data_close_" + i + "[i_]" ); // if(i==1) // alert(eval( "data_close_" + i + "[i_]" )) } // Calculate next "Y" axis position stepY = (SymexChartGlobals.max_[0] - tmp_val) / coefStepY; if (SymexChartGlobals.mountain == 2 && SymexChartGlobals.tickers_qty == 1) { // Bars /** * For the moment - we draw bars when none compare mode. * If we have to enable bars in compare mode: * 1. Recalculate open, high, low with formula for compare mode! * 2. In feeder file we have to server open, high, low when compare mode */ // Override line width defined in css/demo.php SymexChartSettings.linesW_[0] = 1; var stepY_open = (SymexChartGlobals.max_[i] - eval("data_open_" + i + "[i_]")) / coefStepY; var stepY_high = (SymexChartGlobals.max_[i] - eval("data_high_" + i + "[i_]")) / coefStepY; var stepY_low = (SymexChartGlobals.max_[i] - eval("data_low_" + i + "[i_]")) / coefStepY; var stepY_close = stepY; // Close horizontal line context_[i].moveTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_close.toFixed(2) ); context_[i].lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_close.toFixed(2) ); // High-low vertival line context_[i].moveTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_low.toFixed(2) ); context_[i].lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_high.toFixed(2) ); // Open horizontal line context_[i].moveTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_open.toFixed(2) ); context_[i].lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_open.toFixed(2) ); } else { // If line or mountain context_[i].lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY.toFixed(2) ); } //remember last dot coords of main ticker => for mountain if ( i == 0 ) { var last_dot_main = (SymexChartGlobals.stepX * (iter + 1)).toFixed(2); } iter++; } //finish drawing process for current ticker context_[i].strokeStyle = SymexChartSettings.colors_[i]; context_[i].lineWidth = SymexChartSettings.linesW_[i]; context_[i].stroke(); } /* Close mountain */ /* Two variants: */ /* 1. When negative values - mountain must be filled over and under `0` value */ /* 2. When only positive values - standart mountain */ if (SymexChartGlobals.mountain == 1) { if (SymexChartGlobals.min_[0] < 0) { var zero_posY = (SymexChartGlobals.max_[0] - 0) / coefStepY; // Close figure (arc) context_[0].lineTo( last_dot_main, zero_posY ); context_[0].lineTo( 0, zero_posY ); context_[0].lineTo( 0, init_positionY ); } else { // Close figure (arc) context_[0].lineTo( last_dot_main, SymexChartGlobals.chart_height ); context_[0].lineTo( 0, SymexChartGlobals.chart_height ); context_[0].lineTo( 0, init_positionY ); } // Fill mountain context_[0].fillStyle = lingrad; context_[0].fill(); } } //if canvas */ } //end func function drawLine_2() { // Get canvas element var canvas_sum = document.getElementById("summary_0"); // If canvas is ready if (canvas_sum.getContext){ //get all 2D plots context_sum = canvas_sum.getContext("2d"); var it_; var coefStepY; var init_positionY; var stepY; //local calculation for step "X" for all period (without zoom) var stepX_ = (SymexChartGlobals.chart_width*0.95) / SymexChartGlobals.points_qty;//(data_date.length); //OVERRIDE max / min for main ticker SymexChartGlobals.max_[0] = array_max( data_close_0, 0, data_date.length ); SymexChartGlobals.min_[0] = array_min( data_close_0, 0, data_date.length ); var ampl = SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]; if ( ampl > (SymexChartGlobals.max_[0] / 20) ) { SymexChartGlobals.max_[0] = (SymexChartGlobals.max_[0] + (Math.abs(SymexChartGlobals.max_[0]) * 0.05)).toFixed(2); SymexChartGlobals.min_[0] = (SymexChartGlobals.min_[0] - (Math.abs(SymexChartGlobals.min_[0]) * 0.05)).toFixed(2); } else { SymexChartGlobals.max_[0] = (SymexChartGlobals.max_[0] + ampl).toFixed(2); SymexChartGlobals.min_[0] = (SymexChartGlobals.min_[0] - ampl).toFixed(2); } // Start mountain var lingrad = context_sum.createLinearGradient( 0, 0, SymexChartGlobals.chart_width, 0 ); lingrad.addColorStop( 0, SymexChartSettings.colors_[23] ); lingrad.addColorStop( 1, SymexChartSettings.colors_[24] ); //MAX / MIN => calculate in function above, which is called before this one!!! //distance between two points in "Y" axis coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_sum_height; if(coefStepY < 0.001){ coefStepY *= 1; } if(SymexChartGlobals.type_curve == "K"){ iter=1; var color = "black" ; // default color var ReferentClose = data_close_0[i_]; for ( var i_ = 0; i_ < SymexChartGlobals.points_qty; i_++ ){ stepY = (SymexChartGlobals.max_[0] - eval( "data_close_0[i_]")) / coefStepY; stepY_next = (SymexChartGlobals.max_[0] - eval( "data_close_0[i_+1]")) / coefStepY; context_sum.beginPath(); context_sum.moveTo((stepX_ * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; context_sum.lineTo((stepX_ * (iter)).toFixed(2), stepY.toFixed(2) ) ; context_sum.lineTo((stepX_ * (iter)).toFixed(2), stepY_next.toFixed(2) ) ; context_sum.lineWidth = 1; context_sum.strokeStyle= color; context_sum.stroke(); iter++; } }else{ //set init position => same for all tickers => depends to main ticker for( var u = 0; u < SymexChartGlobals.points_qty; u++ ){ if ( data_close_0[0 + u] ){ init_positionY = (SymexChartGlobals.max_[0] - data_close_0[0 + u]) / coefStepY; break; } } //init drawing process context_sum.beginPath(); context_sum.moveTo( 1, init_positionY ); //loop for each quotation var iter = 0; //count steps for ( var i_ = 1; i_ < data_date.length; i_++ ) { // If empty point (no data for current date) if ( typeof data_close_0[i_] == "undefined" ) { iter++; continue; } // Calculate next "Y" axis position stepY = (SymexChartGlobals.max_[0] - data_close_0[i_]) / coefStepY ; context_sum.lineTo( (stepX_ * (iter + 1)).toFixed(2), stepY.toFixed(2)); // // Remember last dot coords of main ticker => for mountain var last_dot_main = (stepX_ * (iter + 1)).toFixed(2); iter++; } //finish drawing process for current ticker context_sum.strokeStyle = SymexChartSettings.colors_[20]; context_sum.lineWidth = SymexChartSettings.linesW_[20]; context_sum.stroke(); // Finish mountain if (SymexChartGlobals.min_[0] < 0) { var zero_posY = ( SymexChartGlobals.max_[0] - 0 ) / coefStepY; // Close figure (arc) context_sum.lineTo( last_dot_main, zero_posY ); context_sum.lineTo( 0, zero_posY ); context_sum.lineTo( 0, init_positionY ); } else { // Close figure (arc) context_sum.lineTo( last_dot_main, SymexChartGlobals.chart_sum_height ); context_sum.lineTo( 0, SymexChartGlobals.chart_sum_height ); context_sum.lineTo( 0, init_positionY ); } // Fill mountain context_sum.fillStyle = lingrad; context_sum.fill(); } } // Ff canvas } //end func function drawMACD( x1_, x2_,y,name_){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); var name_array = "data['"+name_+"'][0]"; if(data[name_].length > 1){ var name_array2 = "data['"+name_+"'][1]"; }else{ var name_array2 = ""; } if(data[name_].length > 2){ var name_array3 = "data['"+name_+"'][2]"; }else{ var name_array3 = ""; } // Quantity of points to be draw for each ticker => override global var points_qty = x2_ - x1_; // Conteiner for canvas elements var canvas_ = new Array(); canvas_[0] = document.getElementById("chart"+ y +"_0"); canvas_[1] = document.getElementById("chart"+ y +"_1"); if(data[name_].length > 2){ canvas_[2] = document.getElementById("chart"+ y +"_2"); } // If canvas container is ready if (canvas_[0].getContext){ // 2D plots container var context_ = new Array(); // Get 2D plot context_[0] = canvas_[0].getContext("2d"); context_[1] = canvas_[1].getContext("2d"); if(data[name_].length > 2){ context_[2] = canvas_[2].getContext("2d"); } // Set global max / min volumes var max_MACD1; var min_MACD1; var max_MACD2; var min_MACD2; var max_volume; var min_volume; var it_; // ? var coefStepY1; var coefStepY2; var coefStepY3; var stepY1; var stepY2; var init_positionY1; var init_positionY2; var init_positionY3; max_MACD1 = array_max2( eval(name_array), x1_, x2_ ); min_MACD1 = array_min( eval(name_array), x1_, x2_ ); if(name_ == "CCI"){ max_M = Math.round(((max_MACD1 + 50)/100))*100; min_M = Math.round(((min_MACD1 - 50)/100))*100; var values_scale_data = values_scale(max_M, min_M); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; }else if(name_ == "STO" || name_ == "RSI" || name_ == "ARO"){ max_M = 100; min_M = 0; }else if(name_ == "WIL"){ max_M = 0; min_M = -100; }else if(name_array2 != ""){ max_MACD2 = array_max2( eval(name_array2), x1_, x2_ ); min_MACD2 = array_min( eval(name_array2), x1_, x2_ ); if(max_MACD2 == null){ max_MACD2 = 0; min_MACD2 = 9999; } max_M = Math.max(max_MACD1,max_MACD2); min_M = Math.min(min_MACD1,min_MACD2); }else{ max_M = max_MACD1; min_M = min_MACD1; } if(name_array3 != ""){ max_MACD3 = array_max2( eval(name_array3), x1_, x2_ ); min_MACD3 = array_min( eval(name_array3), x1_, x2_ ); if(max_MACD3 == null){ max_MACD3 = 0; min_MACD2 = 9999; } max_M = Math.max(max_M,max_MACD3); min_M = Math.min(min_M,min_MACD3); } SymexChartGlobals.max_MACD = max_M; SymexChartGlobals.min_MACD = min_M; value_A_B("secondGraph"+y,max_M,min_M); // Distance between two points in "X" axis => OVERRIDE GLOBAL //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width_snd*0.95) / (points_qty - 1); // Distance between two points in "Y" axis coefStepY1 = (max_M-min_M) / SymexChartGlobals.chart_MACD_height; coefStepY2 = (max_M-min_M) / SymexChartGlobals.chart_MACD_height; coefStepY3 = (max_M-min_M) / SymexChartGlobals.chart_MACD_height; if(name_ == "VOL"){ max_volume = array_max( eval(name_array), x1_, x2_ ); min_volume = array_min( eval(name_array), x1_, x2_ ); var values_scale_data = values_scale(max_volume, min_volume); max_volume = values_scale_data[0]; min_volume = values_scale_data[1]; SymexChartGlobals.max_volume = max_volume; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("secondGraph"+y,max_volume,min_volume) coefStepY_vol = (max_volume - min_volume) / SymexChartGlobals.chart_MACD_height; for( var u = 0; u < points_qty; u++ ){ if ( name_array[x1_ + u] ){ init_positionY = (max_volume - name_array+[x1_ + u]) / coefStepY_vol; break; } } } // Set init position for( var u = 0; u < points_qty; u++ ){ if ( name_array[x1_ + u] ){ init_positionY1 = ((max_M ) - name_array+[x1_ + u]) / coefStepY1; break; } } if(name_array2 != ""){ for( var u = 0; u < points_qty; u++ ){ if ( name_array2[x1_ + u] ){ init_positionY2 = ((max_M ) - name_array2[x1_ + u]) / coefStepY2; break; } } } if(name_array3 != ""){ for( var u = 0; u < points_qty; u++ ){ if ( name_array3[x1_ + u] ){ init_positionY3 = ((max_M ) - name_array3[x1_ + u]) / coefStepY3; break; } } } // Set init position var iter = 0; //count steps var iter2 = 0; var iter3 = 0; var flag_init_point = false; // Loop for each quotation if(name_ != "VOL"){ context_[0].beginPath(); context_[0].moveTo( 1, init_positionY1 ); } for ( var i_ = x1_; i_ <= x2_; i_++ ){ // If empty point (no quotation for current date) if(name_ == "VOL"){ context_[0].beginPath(); stepY = (max_volume - eval(name_array + "[" + i_ + "]")) / coefStepY_vol; context_[0].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ); context_[0].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), SymexChartGlobals.chart_MACD_height ); // 50 is volume height if(SymexChartGlobals.type_curve == "K"){ context_[0].strokeStyle = "black" ; }else{ if(data_close_0[i_] > data_open_0[i_]){ //finish drawing process for current ticker //ajouter les couleurs !!!!!!!!!!!!!!!!!!!!!!!! if(typeof SymexChartSettings.ColorVolumeUP == "undefined"){ context_[0].strokeStyle = "green" ; }else{ context_[0].strokeStyle = SymexChartSettings.ColorVolumeUP ; } }else if(data_close_0[i_] < data_open_0[i_]){ if(typeof SymexChartSettings.ColorVolumeDown == "undefined"){ context_[0].strokeStyle = "red" ; }else{ context_[0].strokeStyle = SymexChartSettings.ColorVolumeDown ; } }else{ if(typeof SymexChartSettings.ColorVolume_0 == "undefined"){ context_[0].strokeStyle = "black" ; }else{ context_[0].strokeStyle = SymexChartSettings.ColorVolume_0 ; } } } context_[0].lineWidth = SymexChartGlobals.stepX / 2; context_[0].stroke(); }else{ // Calculate next "Y" axis position stepY1 = ( (max_M) - eval(name_array + "[" + i_ + "]")) / coefStepY1; // if (stepY1 > 49.9) stepY1 = 49.9; // Agains bug in IE browsers (50 is volume height) context_[0].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY1.toFixed(2) ); } iter++; } context_[0].strokeStyle = SymexChartSettings.colors_[name_+"_0"];//SymexChartSettings.colors_[i]; context_[0].lineWidth = SymexChartSettings.linesW_snd[0]; context_[0].stroke(); if(name_ == "CCI"){ stepY100 = ( max_M - 100) / coefStepY1; stepYN100 = ( max_M + 100) / coefStepY1; context_[1].beginPath(); context_[1].moveTo( 0, stepY100 ); context_[1].lineTo( SymexChartGlobals.chart_width, stepY100 ); context_[1].strokeStyle = "#000000"; context_[1].lineWidth = 1; context_[1].stroke(); context_[1].beginPath(); context_[1].moveTo( 0, stepYN100 ); context_[1].lineTo( SymexChartGlobals.chart_width, stepYN100 ); context_[1].strokeStyle = "#000000" context_[1].lineWidth = 1; context_[1].stroke(); } if(name_array2 != ""){ context_[1].beginPath(); context_[1].moveTo( 1, init_positionY2 ); for ( var i_ = x1_; i_ <= x2_; i_++ ){ // If empty point (no quotation for current date) if ( typeof eval(name_array2 + "[" + i_ + "]") == "undefined" ) { iter2++; continue; } if(i_ > 14 || name_ != "DMI") { // Calculate next "Y" axis position stepY2 = (max_M - eval(name_array2 + "[" + i_ + "]")) / coefStepY1; // if (stepY2 > 49.9) stepY2 = 49.9; // Agains bug in IE browsers (50 is volume height) context_[1].lineTo( (SymexChartGlobals.stepX * (iter2) ).toFixed(2), stepY2.toFixed(2) ); } iter2++; } //finish drawing process for current ticker context_[1].strokeStyle = SymexChartSettings.colors_[name_+"_1"];//SymexChartSettings.colors_[i]; // context_[1].strokeStyle = "#2A894F";//SymexChartSettings.colors_[i+1]; context_[1].lineWidth = SymexChartSettings.linesW_snd[0]; context_[1].stroke(); } if(name_array3 != ""){ context_[2].beginPath(); context_[2].moveTo( 1, init_positionY3 ); for ( var i_ = x1_; i_ <= x2_; i_++ ) { // If empty point (no quotation for current date) if ( typeof eval(name_array3 + "[" + i_ + "]") == "undefined" ) { iter3++; continue; } if(i_ > 28 || name_ != "DMI") { // Calculate next "Y" axis position stepY3 = (max_M - eval(name_array3 + "[" + i_ + "]")) / coefStepY1; // if (stepY2 > 49.9) stepY2 = 49.9; // Agains bug in IE browsers (50 is volume height) context_[2].lineTo( (SymexChartGlobals.stepX * (iter3) ).toFixed(2), stepY3.toFixed(2) ); } iter3++; } //finish drawing process for current ticker context_[2].strokeStyle = SymexChartSettings.colors_[name_+"_2"];//SymexChartSettings.colors_[i]; // context_[1].strokeStyle = "#2A894F";//SymexChartSettings.colors_[i+1]; context_[2].lineWidth = SymexChartSettings.linesW_snd[0]; context_[2].stroke(); } } //if canvas */ } //end func function values_scale(max_, min_){ var amplitude = max_ - min_; var distance; if (amplitude <= 0.01) { distance = 0.002; } else if (amplitude <= 0.1) { distance = 0.01; } else if (amplitude <= 0.3) { distance = 0.02; } else if (amplitude <= 0.5) { distance = 0.05; } else if (amplitude <= 1) { distance = 0.1; } else if (amplitude <= 2) { distance = 0.25; } else if (amplitude <= 5) { distance = 0.5; } else if (amplitude <= 10) { distance = 1; } else if (amplitude <= 20) { distance = 2; } else if (amplitude <= 30) { distance = 4; } else if (amplitude <= 50) { distance = 10; } else if (amplitude <= 100) { distance = 20; } else if (amplitude <= 200) { distance = 40; } else if (amplitude <= 300) { distance = 60; } else if (amplitude <= 400) { distance = 80; } else if (amplitude <= 500) { distance = 100; } else if (amplitude <= 600) { distance = 120; } else if (amplitude <= 700) { distance = 140; } else if (amplitude <= 800) { distance = 160; } else if (amplitude <= 900) { distance = 180; } else if (amplitude <= 1000) { distance = 200; } else if (amplitude <= 1100) { distance = 220; } else if (amplitude <= 1200) { distance = 240; } else if (amplitude <= 1400) { distance = 280; } else if (amplitude <= 1600) { distance = 300; } else if (amplitude <= 1800) { distance = 350; } else if (amplitude <= 2000) { distance = 400; } else if (amplitude <= 2400) { distance = 450; } else if (amplitude <= 2800) { distance = 500; } else if (amplitude <= 3200) { distance = 600; } else if (amplitude <= 4000) { distance = 1000; } else if (amplitude <= 8000) { distance = 1500; } else if (amplitude <= 16000) { distance = 3000; } else if (amplitude <= 32000) { distance = 5000; } else if (amplitude <= 64000) { distance = 15000; } else if (amplitude <= 128000) { distance = 20000; } else if (amplitude <= 250000) { distance = 50000; } else if (amplitude <= 500000) { distance = 100000; } else if (amplitude <= 1000000) { distance = 200000; } else if (amplitude <= 5000000) { distance = 1000000; } else if (amplitude <= 10000000) { distance = 2000000; } else if (amplitude <= 30000000) { distance = 3000000; } else { distance = 10000000; } var max_scale = Math.round(max_ / distance); var min_scale = Math.floor(min_ / distance); if ((max_scale * distance) <= max_) { max_scale = (max_scale + 1) * distance; } else { max_scale = max_scale * distance; } if ((min_scale * distance) > min_) { min_scale = (min_scale - 1) * distance; } else { min_scale = min_scale * distance; } min_ = min_scale; max_ = max_scale; nhl = Math.round((max_scale - min_scale) / distance); if (nhl < 2) { nhl = 2; } return [max_, min_, nhl, distance]; } function drawLine_jap( x1_, x2_ , x3_, x4_, x5_ ) { x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_- x1_ ; var ecart_points = parseInt(x5_) / x2_; // Conteiner for canvas elements var canvas_ = new Array(); // Add all canvas element in for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ canvas_[i] = document.getElementById("price_" + i); canvas_[i].height = SymexChartGlobals.chart_height; canvas_[i].width = SymexChartGlobals.chart_width; } // If canvas container is ready if (canvas_[0].getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ context_[i] = canvas_[i].getContext("2d"); } // Set global max / min for each ticker for( var w = 0; w < SymexChartGlobals.tickers_qty; w++ ) { init_quotes[w] = get_first_quote(eval("data_close_" + w), x1_, x2_); } // Recalculate max / min for good `Y` scale var values_scale_data = values_scale(SymexChartGlobals.max_[0], SymexChartGlobals.min_[0]); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("priceGraph",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty-1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[w] - init_quotes[w]) / coefStepY; if ( SymexChartGlobals.mountain == 1 ) { var lingrad = context_[0].createLinearGradient( 0, 0, SymexChartGlobals.chart_width, 0 ); lingrad.addColorStop( 0, SymexChartSettings.colors_[21] ); lingrad.addColorStop( 1, SymexChartSettings.colors_[22] ); } //loop for each ticker for ( var i = 0; i < SymexChartGlobals.tickers_qty; i++ ) { if(i > 0){ context_[i].beginPath(); } // Init drawing process context_[i].moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0;//count steps for ( var i_ = x1_;i_<= x2_; i_++ ) //+1 => because 0 point is set with moveTo { if ( typeof eval( "data_close_" + i + "[i_]" ) == "undefined" ) { iter++; continue; } if ( i > 0 && SymexChartGlobals.showVariation == 0 && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "MMA" && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "BOG") { var formula_convert; formula_convert = "tmp_val" + " = "; formula_convert += "(data_close_" + i + "[i_] / "; formula_convert += init_quotes[i] + ") * "; formula_convert += init_quotes[0]; eval(formula_convert); }else{ tmp_val = eval( "data_close_" + i + "[i_]" ); } // Calculate next "Y" axis position stepY = (SymexChartGlobals.max_[0] - tmp_val) / coefStepY; // If line or mountain if(i == 0){ var stepY_open = (SymexChartGlobals.max_[0] - eval("data_open_" + i + "[i_]")) / coefStepY; var stepY_high = (SymexChartGlobals.max_[0] - eval("data_high_" + i + "[i_]")) / coefStepY; var stepY_low = (SymexChartGlobals.max_[0] - eval("data_low_" + i + "[i_]")) / coefStepY; var stepY_close = stepY; if(eval( "data_close_" + i + "[i_]") > eval("data_open_" + i + "[i_]")){ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2)); context_[i].lineWidth = 1; context_[i].strokeStyle="black"; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].lineWidth = 1; context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="green"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2) - SymexChartGlobals.stepX / 4, stepY_close.toFixed(2),SymexChartGlobals.stepX / 2,stepY_open.toFixed(2)-stepY_close.toFixed(2)); context_[i].fill(); context_[i].stroke(); }else if(eval( "data_close_" + i + "[i_]") == eval("data_open_" + i + "[i_]")){ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2) ); context_[i].strokeStyle="black"; context_[i].lineWidth = 1; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].lineWidth = 1; context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="black"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2) - SymexChartGlobals.stepX / 4, stepY_open.toFixed(2),SymexChartGlobals.stepX / 2,2); context_[i].fill(); context_[i].stroke(); }else{ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2) ); context_[i].lineWidth = 1; context_[i].strokeStyle="black"; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="red"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2) - SymexChartGlobals.stepX / 4, stepY_open.toFixed(2),SymexChartGlobals.stepX / 2,stepY_close.toFixed(2)-stepY_open.toFixed(2)); context_[i].fill(); context_[i].stroke(); } }else{ stepY = (SymexChartGlobals.max_[0] - tmp_val) / coefStepY; //stepY = (SymexChartGlobals.max_[0] - eval("data_close_" + i +"[i_]")) / coefStepY context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ); } iter++; //remember last dot coords of main ticker => for mountain if ( i == 0 ) { var last_dot_main = (SymexChartGlobals.stepX * (iter + 1)).toFixed(2); } } context_[i].strokeStyle = SymexChartSettings.colors_[i]; context_[i].lineWidth = 1; context_[i].stroke(); //finish drawing process for current ticker } } //if canvas */ } //end func function drawLine_Heikin( x1_, x2_ , x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_- x1_ ; var ecart_points = parseInt(x5_) / x2_; // Conteiner for canvas elements var canvas_ = new Array(); // Add all canvas element in for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ canvas_[i] = document.getElementById("price_" + i); canvas_[i].height = SymexChartGlobals.chart_height; canvas_[i].width = SymexChartGlobals.chart_width; } // If canvas container is ready if (canvas_[0].getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ context_[i] = canvas_[i].getContext("2d"); } // Set global max / min for each ticker for( var w = 0; w < SymexChartGlobals.tickers_qty; w++ ) { if(w == 0) init_quotes[w] = get_first_quote(eval("data_close_HA_" + w), x1_, x2_); else init_quotes[w] = get_first_quote(eval("data_close_" + w), x1_, x2_); } // Recalculate max / min for good `Y` scale var values_scale_data = values_scale(SymexChartGlobals.max_[0], SymexChartGlobals.min_[0]); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("priceGraph",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); // Distance between two points in "X" axis => Override global var // SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty-1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[w] - init_quotes[w]) / coefStepY; if ( SymexChartGlobals.mountain == 1 ) { var lingrad = context_[0].createLinearGradient( 0, 0, SymexChartGlobals.chart_width, 0 ); lingrad.addColorStop( 0, SymexChartSettings.colors_[21] ); lingrad.addColorStop( 1, SymexChartSettings.colors_[22] ); } //loop for each ticker for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ // Init drawing process context_[i].moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0;//count steps for ( var i_ = x1_;i_<= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // If empty point (no data for current date) if(i==0){ if ( typeof eval( "data_close_HA_" + i + "[i_]" ) == "undefined" ) { iter++; continue; } }else{ if ( typeof eval( "data_close_" + i + "[i_]" ) == "undefined" ) { iter++; continue; } } if(i == 0){ var HA_close = eval("data_close_HA_" + i + "[i_]")//(eval("data_open_" + i + "[i_]") + eval("data_high_" + i + "[i_]") + eval("data_low_" + i + "[i_]") + eval("data_close_" + i + "[i_]"))/4; var HA_open = eval("data_open_HA_" + i + "[i_]")//(eval("data_open_" + i + "[i_-1]") + eval("data_close_" + i + "[i_-1]"))/2; // If line or mountain var stepY_open = (SymexChartGlobals.max_[0] - HA_open)/ coefStepY;//(SymexChartGlobals.max_[0] - eval("data_open_" + i + "[i_]")) / coefStepY; var stepY_close = (SymexChartGlobals.max_[0] - HA_close)/ coefStepY; var stepY_high = (SymexChartGlobals.max_[0] - eval("data_high_HA_" + i + "[i_]")) / coefStepY; var stepY_low = (SymexChartGlobals.max_[0] - eval("data_low_HA_" + i + "[i_]")) / coefStepY; if(HA_close > HA_open){ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2)); context_[i].lineWidth = 1; context_[i].strokeStyle="black"; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].lineWidth = 1; context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="green"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2)-2.5, stepY_open.toFixed(2),5,stepY_close.toFixed(2)-stepY_open.toFixed(2)); context_[i].fill(); context_[i].stroke(); }else if(HA_close == HA_open){ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2) ); context_[i].lineWidth = 1; context_[i].strokeStyle="black"; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].lineWidth = 1; context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="black"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2)-2.5, stepY_open.toFixed(2),5,2); context_[i].fill(); context_[i].stroke(); }else{ context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2) ); context_[i].lineWidth = 1; context_[i].strokeStyle="black"; context_[i].stroke(); context_[i].beginPath(); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2) ); context_[i].stroke(); context_[i].beginPath(); context_[i].fillStyle="red"; context_[i].fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2)-2.5, stepY_open.toFixed(2),5,stepY_close.toFixed(2)-stepY_open.toFixed(2)); context_[i].fill(); context_[i].stroke(); } }else{ stepY = (SymexChartGlobals.max_[0] - eval("data_close_" + i +"[i_]")) / coefStepY context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ); } iter++; //remember last dot coords of main ticker => for mountain if ( i == 0 ) { var last_dot_main = (SymexChartGlobals.stepX * (iter + 1)).toFixed(2); } } context_[i].strokeStyle = SymexChartSettings.colors_[i]; context_[i].lineWidth = 1; context_[i].stroke(); } } //if canvas */ } //end func function drawLine_ichi( x1_, x2_ , x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Conteiner for canvas elements var canvas_ = new Array(); // Add all canvas element in canvas_tenkan = document.getElementById("price_TENKAN"); canvas_kijun = document.getElementById("price_KIJUN"); canvas_chikou = document.getElementById("price_CHIKOU"); canvas_senkouA = document.getElementById("price_SENKOUA"); canvas_senkouB = document.getElementById("price_SENKOUB"); canvas_senkouSPAN = document.getElementById("price_SENKOUSPAN"); canvas_tenkan.height = SymexChartGlobals.chart_height; canvas_tenkan.width = SymexChartGlobals.chart_width; canvas_kijun.height = SymexChartGlobals.chart_height; canvas_kijun.width = SymexChartGlobals.chart_width; canvas_chikou.height = SymexChartGlobals.chart_height; canvas_chikou.width = SymexChartGlobals.chart_width; canvas_senkouA.height = SymexChartGlobals.chart_height; canvas_senkouA.width = SymexChartGlobals.chart_width; canvas_senkouB.height = SymexChartGlobals.chart_height; canvas_senkouB.width = SymexChartGlobals.chart_width; canvas_senkouSPAN.height = SymexChartGlobals.chart_height; canvas_senkouSPANwidth = SymexChartGlobals.chart_width; // If canvas container is ready if (canvas_tenkan.getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker context_TENKAN = canvas_tenkan.getContext("2d"); context_KIJUN = canvas_kijun.getContext("2d"); context_CHIKOU = canvas_chikou.getContext("2d"); context_SENKOUA = canvas_senkouA.getContext("2d"); context_SENKOUB = canvas_senkouB.getContext("2d"); context_SENKOUSPAN = canvas_senkouSPAN.getContext("2d"); // Set global max / min for each ticker init_quotes[0] = get_first_quote(eval("price_TENKAN"), x1_, x2_); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; coefStepY_TENKAN = (SymexChartGlobals.max_TENKAN - SymexChartGlobals.min_TENKAN) / SymexChartGlobals.chart_height; coefStepY_max_SENKOUA = (SymexChartGlobals.max_SENKOUA - SymexChartGlobals.min_SENKOUA) / SymexChartGlobals.chart_height; coefStepY_max_SENKOUB = (SymexChartGlobals.max_SENKOUA - SymexChartGlobals.min_SENKOUA) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[0] - init_quotes[0]) / coefStepY; init_positionY_SENKOUA= (SymexChartGlobals.max_SENKOUA - init_quotes[0]) / coefStepY_max_SENKOUA; init_positionY_SENKOUB= (SymexChartGlobals.max_SENKOUB - init_quotes[0]) / coefStepY_max_SENKOUB; var lingrad = context_SENKOUSPAN.createLinearGradient( 1, 1, SymexChartGlobals.chart_width, 1 ); lingrad.addColorStop( 0, "#ffe2ff" ); lingrad.addColorStop( 1, "#ffe2ff" ); // Init drawing process context_SENKOUSPAN.moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0; for ( var i_ = x1_; i_ <= x2_ ; i_++ ){ //+1 => because 0 point is set with moveTo // If empty point (no data for current date) if ( typeof eval( "data_tenkan_" + "[i_]" ) == "undefined" ) { iter++; continue; } if ( i != 0 ){ var stepY_TENKAN = (SymexChartGlobals.max_[0] - eval("data_tenkan_" + "[i_]")) / coefStepY; var stepY_KIJUN = (SymexChartGlobals.max_[0] - eval("data_kijun_" + "[i_]")) / coefStepY; context_TENKAN.lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_TENKAN.toFixed(2) ); context_KIJUN.lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_KIJUN.toFixed(2) ); } iter++; } context_TENKAN.strokeStyle = "#ff4ce0"; context_TENKAN.lineWidth = SymexChartSettings.linesW_2; context_TENKAN.stroke(); context_KIJUN.strokeStyle = "#119622"; context_KIJUN.lineWidth = SymexChartSettings.linesW_2; context_KIJUN.stroke(); var iter = 0; for ( var i_ = x1_; i_ <= x2_ -1 ; i_++ ){ //+1 => because 0 point is set with moveTo if ( i != 0 ){ var stepY_CHIKOU = (SymexChartGlobals.max_[0] - eval("data_chikou_" + "[i_]")) / coefStepY; var stepY_SENKOUA = (SymexChartGlobals.max_[0] - eval("data_senkouA_" + "[i_]")) / coefStepY; var stepY_SENKOUB = (SymexChartGlobals.max_[0] - eval("data_senkouB_" + "[i_]")) / coefStepY; context_CHIKOU.lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_CHIKOU.toFixed(2) ); context_SENKOUA.lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_SENKOUA.toFixed(2) ); context_SENKOUB.lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY_SENKOUB.toFixed(2) ); } iter++; } var last_dot_main = (SymexChartGlobals.stepX * (iter + 1)).toFixed(2); context_CHIKOU.strokeStyle = "#7296e2"; context_CHIKOU.lineWidth = SymexChartSettings.linesW_2; context_CHIKOU.stroke(); context_SENKOUA.strokeStyle = "#724ce0"; context_SENKOUA.lineWidth = SymexChartSettings.linesW_2; context_SENKOUA.stroke(); context_SENKOUB.strokeStyle = "#ec997a"; context_SENKOUB.lineWidth = SymexChartSettings.linesW_2; context_SENKOUB.stroke(); for ( var i_ = x1_; i_ <= (data_senkouA_.length); i_++ ){ var stepY_SENKOUA = (SymexChartGlobals.max_[0] - eval("data_senkouA_" + "["+(i_)+"]")) / coefStepY; var stepY_SENKOUB = (SymexChartGlobals.max_[0] - eval("data_senkouB_" + "["+(i_)+"]")) / coefStepY; context_SENKOUSPAN.beginPath(); context_SENKOUSPAN.strokeStyle = "#ffe2ff"; context_SENKOUSPAN.lineWidth = 0.5; context_SENKOUSPAN.moveTo( (SymexChartGlobals.stepX * (i_ - x1_ + 0)).toFixed(2),(SymexChartGlobals.max_[0] - eval("data_senkouA_" + "["+(i_)+"]")) / coefStepY ); if(eval("data_senkouA_" + "["+(i_+1)+"]") == "null"){ context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 5)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_senkouA_" + "["+(i_+5)+"]")) / coefStepY ); }else{ context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 1)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_senkouA_" + "["+(i_+1)+"]")) / coefStepY ); } if(eval("data_senkouA_" + "["+(i_+1)+"]") == "null"){ context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 5)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_senkouB_" + "["+(i_+5)+"]")) / coefStepY ); }else{ context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 1)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_senkouB_" + "["+(i_+1)+"]")) / coefStepY ); } context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 0)).toFixed(2), stepY_SENKOUB.toFixed(2) ); context_SENKOUSPAN.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 0)).toFixed(2), stepY_SENKOUA.toFixed(2)); context_SENKOUSPAN.globalAlpha = 0.5; context_SENKOUSPAN.fillStyle = lingrad; context_SENKOUSPAN.fill(); context_SENKOUSPAN.stroke(); context_SENKOUSPAN.fillStyle = lingrad; context_SENKOUSPAN.fill(); } } //if canvas */ } //end func function drawLine_barchart( x1_, x2_, x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Conteiner for canvas elements var canvas_ = new Array(); // Add all canvas element in for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ canvas_[i] = document.getElementById("price_" + i); canvas_[i].height = SymexChartGlobals.chart_height; canvas_[i].width = SymexChartGlobals.chart_width; } // If canvas container is ready if (canvas_[0].getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ context_[i] = canvas_[i].getContext("2d"); } // Set global max / min for each ticker for( var w = 0; w < SymexChartGlobals.tickers_qty; w++ ){ init_quotes[w] = get_first_quote(eval("data_close_" + w), x1_, x2_); } // Recalculate max / min for good `Y` scale var values_scale_data = values_scale(SymexChartGlobals.max_[0], SymexChartGlobals.min_[0]); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("priceGraph",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[w] - init_quotes[w]) / coefStepY; //loop for each ticker for(var i = 0; i < (SymexChartGlobals.tickers_qty); i++){ // Init drawing process context_[i].beginPath(); context_[i].moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0; var iter2 = 0; var iter3 = 0; //count steps for ( var i_ = x1_; i_ <= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // If empty point (no data for current date) if ( typeof eval( "data_close_" + i + "[i_]" ) == "undefined" ) { iter++; continue; } if(i > 0 && SymexChartGlobals.showVariation == 0 && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "MMA" && SymexChartGlobals.tickers.split( ";" )[1].split( "," )[0] != "BOG"){ var formula_convert; formula_convert = "tmp_val" + " = "; formula_convert += "(data_close_" + i + "[i_] / "; formula_convert += init_quotes[i] + ") * "; formula_convert += init_quotes[0]; eval(formula_convert); }else{ tmp_val = eval( "data_close_" + i + "[i_]" ); } // Calculate next "Y" axis position stepY = (SymexChartGlobals.max_[0] - tmp_val) / coefStepY; if(i==0){ // If line or mountain var stepY_open = (SymexChartGlobals.max_[i] - eval("data_open_" + i + "[i_]")) / coefStepY; var stepY_high = (SymexChartGlobals.max_[i] - eval("data_high_" + i + "[i_]")) / coefStepY; var stepY_low = (SymexChartGlobals.max_[i] - eval("data_low_" + i + "[i_]")) / coefStepY; var stepY_close = stepY; context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_low.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_high.toFixed(2) ); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)-0).toFixed(2),stepY_open.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)-5).toFixed(2), stepY_open.toFixed(2)); context_[i].moveTo( (SymexChartGlobals.stepX * (iter)).toFixed(2),stepY_close.toFixed(2)); context_[i].lineTo( (SymexChartGlobals.stepX * (iter)+5).toFixed(2),stepY_close.toFixed(2)); }else{ context_[i].lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ); } iter++; } //finish drawing process for current ticker context_[i].strokeStyle = SymexChartSettings.colors_[i]; context_[i].lineWidth = 1; context_[i].stroke(); } } //if canvas */ } //end func function drawLine_bollinger( x1_, x2_, x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Conteiner for canvas elements // Add all canvas element in var canvas_SUP = document.getElementById("price_SUP"); var canvas_INF = document.getElementById("price_INF"); var canvas_BOL = document.getElementById("price_BOL"); var canvas_BOL_nua = document.getElementById("price_BOL_nua"); canvas_SUP.height = SymexChartGlobals.chart_height; canvas_SUP.width = SymexChartGlobals.chart_width; canvas_INF.height = SymexChartGlobals.chart_height; canvas_INF.width = SymexChartGlobals.chart_width; canvas_BOL.height = SymexChartGlobals.chart_height; canvas_BOL.width = SymexChartGlobals.chart_width; canvas_BOL_nua.height = SymexChartGlobals.chart_height; canvas_BOL_nua.width = SymexChartGlobals.chart_width; // If canvas container is ready if (canvas_SUP.getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots context_BOL = canvas_BOL.getContext("2d"); context_SUP = canvas_SUP.getContext("2d"); context_INF = canvas_INF.getContext("2d"); context_BOL_nua = canvas_BOL_nua.getContext("2d"); var lingrad = context_BOL.createLinearGradient( 1, 1, SymexChartGlobals.chart_width, 1 ); lingrad.addColorStop( 0, "#F29A0E" ); lingrad.addColorStop( 1, "#F29A0E" ); // Set global max / min for each ticker init_quotes[0] = get_first_quote(eval("data_close_BOL"), x1_, x2_); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; coefStepY_SUP = (SymexChartGlobals.max_SUP - SymexChartGlobals.min_SUP) / SymexChartGlobals.chart_height; coefStepY_INF = (SymexChartGlobals.max_INF - SymexChartGlobals.min_INF) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[0] - init_quotes[0]) / coefStepY; var iter = 0; //count steps context_BOL.beginPath(); for(var i_ = x1_; i_ <= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // Calculate next "Y" axis position stepY = (SymexChartGlobals.max_[0] - eval( "data_close_BOL[i_]")) / coefStepY; var stepY_SUP = (SymexChartGlobals.max_[0] - eval("data_SUP_1" + "[i_]")) / coefStepY; var stepY_INF = (SymexChartGlobals.max_[0] - eval("data_INF_1"+ "[i_]")) / coefStepY; context_BOL.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ); context_SUP.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_SUP.toFixed(2) ); context_INF.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_INF.toFixed(2) ); //remember last dot coords of main ticker => for mountain iter++; } context_BOL.strokeStyle = SymexChartSettings.colors_BOL; context_BOL.lineWidth = SymexChartSettings.linesW_2; context_BOL.stroke(); context_SUP.strokeStyle = SymexChartSettings.colors_BOL; context_SUP.lineWidth = SymexChartSettings.linesW_2; context_SUP.stroke(); context_INF.strokeStyle = SymexChartSettings.colors_BOL; context_INF.lineWidth = SymexChartSettings.linesW_2; context_INF.stroke(); for(var i_ = x1_; i_ <= x2_; i_++ ){ var stepY_SUP = (SymexChartGlobals.max_[0] - eval("data_SUP_1" + "["+(i_)+"]")) / coefStepY; var stepY_INF = (SymexChartGlobals.max_[0] - eval("data_INF_1" + "["+(i_)+"]")) / coefStepY; context_BOL_nua.beginPath(); context_BOL_nua.strokeStyle = "#F29A0E"; context_BOL_nua.lineWidth = 0.1; context_BOL_nua.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 1)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_INF_1" + "["+(i_+1)+"]")) / coefStepY ); context_BOL_nua.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 1)).toFixed(2), (SymexChartGlobals.max_[0] - eval("data_SUP_1" + "["+(i_+1)+"]")) / coefStepY ); context_BOL_nua.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 0)).toFixed(2), stepY_SUP.toFixed(2) ); context_BOL_nua.lineTo( (SymexChartGlobals.stepX * (i_ - x1_ + 0)).toFixed(2), stepY_INF.toFixed(2)); context_BOL_nua.fillStyle = lingrad; context_BOL_nua.globalAlpha = 0.07; context_BOL_nua.fill(); context_BOL_nua.stroke(); } } //if canvas */ } function drawLine_parabolic( x1_, x2_, x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Conteiner for canvas elements // Add all canvas element in var canvas_SAR = document.getElementById("price_SAR"); canvas_SAR.height = SymexChartGlobals.chart_height; canvas_SAR.width = SymexChartGlobals.chart_width; // If canvas container is ready if (canvas_SAR.getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots context_ = canvas_SAR.getContext("2d"); value_A_B("price_SAR",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; init_quotes[0] = get_first_quote(eval(data['SAR'][0]), x1_, x2_); // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[0] - init_quotes[0]) / coefStepY; //loop for each ticker // Init drawing process context_.beginPath(); context_.moveTo( 1, init_positionY ); // Loop for each quotation var iter = 0; var iter = 0; for ( var i_ = x1_; i_ <= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // If empty point (no data for current date) if ( typeof eval( data['SAR'][0][i_] ) == "undefined" ) { iter++; continue; } context_.beginPath(); // If line or mountain var stepY_sar = (SymexChartGlobals.max_[0] - eval(data['SAR'][0][i_])) / coefStepY; if( data['SAR'][0][i_] > data_close_0[i_]){ context_.fillStyle="red"; context_.fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2)-1.5,stepY_sar.toFixed(2), 3,3); context_.fill(); }else{ context_.fillStyle="green"; context_.fillRect((SymexChartGlobals.stepX * (iter)).toFixed(2)-1.5,stepY_sar.toFixed(2), 3,3); context_.fill(); } context_.lineWidth = 1; context_.stroke(); iter++; } } //if canvas */ } //end func function drawLine_superTrend( x1_, x2_, x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Conteiner for canvas elements // Add all canvas element in var canvas_STR= document.getElementById("price_STR"); canvas_STR.height = SymexChartGlobals.chart_height; canvas_STR.width = SymexChartGlobals.chart_width; // If canvas container is ready if (canvas_STR.getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots context_STR = canvas_STR.getContext("2d"); // Set global max / min for each ticker init_quotes[0] = get_first_quote(eval(data['STR'][0]), x1_, x2_); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[0] - init_quotes[0]) / coefStepY; // Loop for each quotation var iter = 0; //count steps for ( var i_ = x1_; i_ <= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // Calculate next "Y" axis position var stepY_STR_prec = (SymexChartGlobals.max_[0] - data['STR'][0][i_-1]) / coefStepY; var stepY_STR = (SymexChartGlobals.max_[0] - data['STR'][0][i_]) / coefStepY; //remember last dot coords of main ticker => for mountain if(data['STR'][0][i_] > eval("data_close_0[i_]")){ context_STR.beginPath(); context_STR.moveTo(( SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY_STR_prec ); context_STR.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_STR.toFixed(2) ); context_STR.strokeStyle = SymexChartSettings.colors_["STR_1"]; }else{ context_STR.beginPath(); context_STR.moveTo(( SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY_STR_prec ); context_STR.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_STR.toFixed(2) ); context_STR.strokeStyle = SymexChartSettings.colors_["STR_0"]; } context_STR.lineWidth = SymexChartSettings.linesW_2; context_STR.stroke(); iter++; } } //if canvas */ } function drawLine_kama( x1_, x2_, x3_, x4_, x5_ ){ x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; var ecart_points = x5_ / x2_; // Add all canvas element in var canvas_KAMA= document.getElementById("price_KAMA"); canvas_KAMA.height = SymexChartGlobals.chart_height; canvas_KAMA.width = SymexChartGlobals.chart_width; // If canvas container is ready if (canvas_KAMA.getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots context_KAMA = canvas_KAMA.getContext("2d"); // Set global max / min for each ticker init_quotes[0] = get_first_quote(eval(data['KAM'][0]), x1_, x2_); // Distance between two points in "X" axis => Override global var //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width - 1) / (points_qty - 1); // Distance between two points in "Y" axis (depends to main ticker) coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; // Set init position => same for all tickers => depends to main ticker init_positionY = (SymexChartGlobals.max_[0] - init_quotes[0]) / coefStepY; // Loop for each quotation var iter = 0; //count steps for ( var i_ = x1_; i_ <= x2_; i_++ ){ //+1 => because 0 point is set with moveTo // Calculate next "Y" axis position var stepY_STR_prec = (SymexChartGlobals.max_[0] - data['KAM'][0][i_-1]) / coefStepY; var stepY_STR = (SymexChartGlobals.max_[0] - data['KAM'][0][i_]) / coefStepY; if(data['KAM'][0][i_] > eval("data_close_0[i_]")){ context_KAMA.beginPath(); context_KAMA.moveTo(( SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY_STR_prec ); context_KAMA.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_STR.toFixed(2) ); context_KAMA.strokeStyle = SymexChartSettings.colors_["STR_1"]; }else{ context_KAMA.beginPath(); context_KAMA.moveTo(( SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY_STR_prec ); context_KAMA.lineTo( (SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_STR.toFixed(2) ); context_KAMA.strokeStyle = SymexChartSettings.colors_["STR_0"]; } context_KAMA.lineWidth = SymexChartSettings.linesW_2; context_KAMA.stroke(); iter++; } } //if canvas */ } function check_max_min_ichi(){ SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_TENKAN,SymexChartGlobals.max_KINJUN,SymexChartGlobals.max_CHIKOU,SymexChartGlobals.max_SENKOUA,SymexChartGlobals.max_SENKOUB); if(SymexChartGlobals.min_TENKAN < SymexChartGlobals.min_[0] && SymexChartGlobals.min_TENKAN > 0) { SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_TENKAN); } if(SymexChartGlobals.min_KINJUN < SymexChartGlobals.min_[0] && SymexChartGlobals.min_KINJUN > 0) { SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_KINJUN); } if(SymexChartGlobals.min_CHIKOU < SymexChartGlobals.min_[0] && SymexChartGlobals.min_CHIKOU > 0) { SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_CHIKOU); } if(SymexChartGlobals.min_SENKOUA < SymexChartGlobals.min_[0] && SymexChartGlobals.min_SENKOUA > 0) { SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_SENKOUA); } if(SymexChartGlobals.min_SENKOUB < SymexChartGlobals.min_[0] && SymexChartGlobals.min_SENKOUB > 0) { SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_SENKOUB); } } function precell_view(x,x_orig,y,x_cirle,y_cirle,touch,elm,ls_,points_qty_){ if(SymexChartGlobals.paint_graph_active == 0){ // Size of precission cell var precCellH = jQuery( "#precCell" ).height(); var precCellW = jQuery( "#precCell" ).width(); var tolerance = 5; var next = 0; if (SymexChartGlobals.begin == 0) next = 0; var curr_date = parseInt( x / SymexChartGlobals.stepX ) + parseInt(next) + parseInt(SymexChartGlobals.begin) ; if ( curr_date > points_qty_ ) curr_date = points_qty_ ; if ( x > ( SymexChartGlobals.chart_width / 2 ) ) x = parseInt(( SymexChartGlobals.stepX * (curr_date - SymexChartGlobals.begin)).toFixed(0)) - precCellW - 20; else x = parseInt(( SymexChartGlobals.stepX * (curr_date - SymexChartGlobals.begin)).toFixed(0)) + 10; if ( y > ( SymexChartGlobals.chart_height / 2 ) ) y = y - precCellH - 80; else y += 40; if(SymexChartGlobals.period_view == "MView" || SymexChartGlobals.period_view == "WView"){ x_orig = parseInt(( SymexChartGlobals.stepX * (curr_date - SymexChartGlobals.begin)).toFixed(0)) ; if((x_orig + (x_orig - x)/2) < x){ x_orig = parseInt(( SymexChartGlobals.stepX * (curr_date - SymexChartGlobals.begin)).toFixed(0)) ; }else{ x_orig = parseInt(( SymexChartGlobals.stepX * (curr_date - SymexChartGlobals.begin)).toFixed(0)) ; } }else{ if(SymexChartGlobals.type_curve == "J"){ x_orig = parseInt(( (SymexChartGlobals.stepX) * (curr_date - SymexChartGlobals.begin)).toFixed(0) - next) ; }else{ x_orig = parseInt(( (SymexChartGlobals.stepX) * (curr_date - SymexChartGlobals.begin)).toFixed(0) - next) ; // $("#test").html(x_orig_prev+ " -- "+x_orig+ " -- " + x_orig_next) } } x_orig_prev = parseInt(( (SymexChartGlobals.stepX) * (curr_date - SymexChartGlobals.begin)).toFixed(0) - next -20) ; x_orig_next = parseInt(( (SymexChartGlobals.stepX) * (curr_date - SymexChartGlobals.begin)).toFixed(0) - next -(-20)) ; y_cirle_w = y_cirle; x_cirle = x_orig ; // Only for Coteboursiere Mobile Version !!! if ( y < -15 ) y = -15; // -15px - precission cell over price graph's margin top space (period info) var y_max = SymexChartGlobals.chart_height + 20; // +20px - over labels X if ( y + precCellH > y_max ) y = y_max - precCellH; // If no quotations on current day if ( typeof data_close_0[curr_date] == "undefined") { jQuery("#precCellPointerW_left").show(); jQuery("#precCellPointerW_right").hide(); if(x_cirle > (SymexChartGlobals.chart_width_snd/2)) jQuery("#precCellW").css("left",0);else jQuery("#precCellW").css("left",SymexChartGlobals.chart_width_snd-65); jQuery("#precCellPointerW_left").css("top", y_cirle_w); jQuery("#precCellPointerW_left").css("width", SymexChartGlobals.chart_width_snd); jQuery("#precCellW").css("top", (y_cirle_w) - (jQuery("#precCellW").height()/2)); if(y_cirle_w >= 0 && y_cirle_w <= (SymexChartGlobals.chart_height+SymexChartGlobals.chart_margin_top+SymexChartGlobals.chart_margin_top)){ jQuery("#precCellW").css("width","50px"); jQuery("#precCell_txtW").css("text-align","right"); jQuery("#precCell_txtW").html(format_num2(Pixelto("priceGraph",(y_cirle_w-SymexChartGlobals.chart_margin_top)))); }else{ for(var a=0,b=1;a= (position.top-tolerance) && y_cirle_w <= (SymexChartGlobals.chart_MACD_height+position.top+tolerance)){ if(y_cirle_w < (position.top)) y_cirle_w = position.top; if(y_cirle_w > (SymexChartGlobals.chart_MACD_height+position.top)) y_cirle_w = (SymexChartGlobals.chart_MACD_height+position.top); jQuery("#precCellW").css("width","65px"); if((SymexChartGlobals.sub_chart[a] == "VOL" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV") && (max_ > 1000000 || Math.abs(min_) > 1000000)){ var value_cap_niv = format_volume ( (Pixelto("secondGraph"+b,(y_cirle_w)))/1000000 , false )+ "M" ; }else if(SymexChartGlobals.sub_chart[a] == "VOL" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV"){ var value_cap_niv = format_price( (Pixelto("secondGraph"+b,(y_cirle_w ))), nb_fix ); }else{ var value_cap_niv = format_price((Pixelto("secondGraph"+b,(y_cirle_w ))),nb_fix) } jQuery("#precCell_txtW").html(value_cap_niv); } } } }else{ var MA1_key = ""; var MA2_key = ""; var MA3_key = ""; var BOL_key = ""; var close_compa = ""; for ( var i = 0; i < (SymexChartGlobals.tickers_qty); i++ ){ // Init drawing process if(SymexChartGlobals.tickers.split( ";" )[i].split( "," )[0] == "MMA"){ if(MA1_key == "") var MA1_key = i ; if(MA2_key == "" && i > MA1_key) var MA2_key = i ; if(MA3_key == "" && i > MA1_key && i > MA2_key) var MA3_key = i ; } if(SymexChartGlobals.compa > 0 && i > 0 && SymexChartGlobals.tickers.split( ";" )[i].split( "," )[0] != "MMA") { close_compa += "
"+SymexChartGlobals.tickers.split( ";" )[i].split( "," )[0]+" : "+ eval("data_close_"+ i + "[curr_date]")+ "
"; } } /* ===== Manage news ===== */ // If infobox pointer is over a triangle - imitate triangle"s mouseover event! var flagClear = true; for ( var itn = parseInt( x_orig ); itn > parseInt( x_orig ) - 10; itn-- ){ // `-10` - width of triangle if ( $( ".left_" + itn ).length > 0 ) { $( ".left_" + itn ).trigger( "mouseover" ); flagClear = false; break; } } if(flagClear){ $("#news-info").html(" "); } var varWord = typeof SymexChartSettings.lang_array[36] != "undefined" ? SymexChartSettings.lang_array[36] : "Performance : "; var text_precCell_date= "
" + date_eu( data_date[curr_date] )+"
"; var text_precCell = "
"; text_precCell += "" +SymexChartGlobals.showVariation > 0 ? varWord : SymexChartSettings.lang_array[31]; if(SymexChartGlobals.type_curve == "H"){ var close_pv = data_close_HA_0[curr_date] ; var open_pv = data_open_HA_0[curr_date]; var high_pv = data_high_HA_0[curr_date]; high_pv = format_price(high_pv); var low_pv = data_low_HA_0[curr_date]; low_pv = format_price(low_pv); close_pv = format_price(close_pv); open_pv = format_price(open_pv); var HA = " (HA) : "; }else if(SymexChartGlobals.type_curve == "K"){ text_precCell = "
"+ SymexChartSettings.lang_array[30] + " : "+ date_eu( data_date[curr_date] )+""; text_precCell += "" + SymexChartSettings.lang_array[51]; var close_pv = format_price( data_close_0[curr_date]); var HA = " : "; }else{ var close_pv = format_price( data_close_0[curr_date]); var open_pv = format_price( data_open_0[curr_date] ); var high_pv = format_price(data_high_0[curr_date]); var low_pv = format_price(data_low_0[curr_date]); var HA = " : "; } text_precCell += HA + "" + close_pv + " "; if(SymexChartGlobals.type_curve != "K"){ text_precCell += SymexChartGlobals.showVariation > 0 ? "%" : ""; text_precCell += "
" ; var full = 2; text_precCell += "
" + SymexChartSettings.lang_array[33] + HA + "" + open_pv+ "
"; text_precCell += "
" + SymexChartSettings.lang_array[34] + HA + "" + high_pv+ "
"; text_precCell += "
" + SymexChartSettings.lang_array[35] + HA + "" + low_pv+ "
"; } full += 3; if(SymexChartGlobals.ichi == 1){ if(typeof(eval("data_tenkan_" +"["+curr_date+"]")) != "undefined"){ var tenkan_close = eval("data_tenkan_" +"["+curr_date+"]"); text_precCell += created_text_precCell("#ff4ce0",SymexChartSettings.lang_array[52],tenkan_close,""); full ++; }else{ var tenkan_close = "" ; } if(typeof(eval("data_kijun_" +"["+curr_date+"]")) != "undefined"){ var kijun_close = eval("data_kijun_" +"["+curr_date+"]") text_precCell += created_text_precCell("#119622",SymexChartSettings.lang_array[41],kijun_close,""); full ++; }else{ var kijun_close = "" ; } if(eval("data_senkouA_" +"["+curr_date+"]") != "null" && eval("data_senkouA_" +"["+curr_date+"]") > "0"){ var senkouA_close = eval("data_senkouA_" +"["+curr_date+"]"); text_precCell += created_text_precCell("#724ce0",SymexChartSettings.lang_array[43],senkouA_close,""); full ++; }else{ var senkouA_close = "" ; } if(eval("data_senkouB_" +"["+curr_date+"]") != "null" && eval("data_senkouB_" +"["+curr_date+"]") > "0"){ var senkouB_close = eval("data_senkouB_" +"["+curr_date+"]"); text_precCell += created_text_precCell("#ec997a",SymexChartSettings.lang_array[44],senkouB_close,""); full ++; }else{ var senkouB_close = "" ; } } /*** CHECK ***/ if(MA1_key != ""){ if(SymexChartGlobals.tickers.split( ";" )[MA1_key].split( "," )[0] == "MMA"){ var MA_period = SymexChartGlobals.tickers.split( ";" )[MA1_key].split( "," )[1] ; if(typeof(eval("data_close_"+ MA1_key +"["+curr_date+"]" ))!= "undefined"){ var MA_Close = format_price( eval("data_close_"+ MA1_key +"["+curr_date+"]" )); text_precCell += created_text_precCell(SymexChartSettings.colors_[MA1_key],SymexChartSettings.lang_array[45],MA_Close,MA_period); full ++; }else{ var MA_Close = ""; } } } if(MA2_key != ""){ if(SymexChartGlobals.tickers.split( ";" )[MA2_key].split( "," )[0] == "MMA"){ if(typeof(eval("data_close_"+ MA2_key +"["+curr_date+"]" ))!= "undefined"){ var MA2_Close = format_price( eval("data_close_"+ MA2_key+"["+curr_date+"]" )); var MA2_period = SymexChartGlobals.tickers.split( ";" )[MA2_key].split( "," )[1] ; text_precCell += created_text_precCell(SymexChartSettings.colors_[MA2_key],SymexChartSettings.lang_array[45],MA2_Close,MA2_period); full ++; }else{ var MA2_Close = ""; } } } if(MA3_key != ""){ if(SymexChartGlobals.tickers.split( ";" )[MA3_key].split( "," )[0] == "MMA"){ if(typeof(eval("data_close_"+ MA3_key +"["+curr_date+"]" ))!= "undefined"){ var MA3_Close = format_price( eval("data_close_"+ MA3_key+"["+curr_date+"]" )); var MA3_period = SymexChartGlobals.tickers.split( ";" )[MA3_key].split( "," )[1] ; text_precCell += created_text_precCell(SymexChartSettings.colors_[MA3_key],SymexChartSettings.lang_array[45],MA3_Close,MA3_period); full ++; }else{ var MA3_Close = " - "; } } } text_precCell += close_compa; if(SymexChartGlobals.display_BOL == 1){ $MA_period = SymexChartGlobals.bol_qty; BOL_key = 1; if(typeof(eval("data_close_BOL" +"["+curr_date+"]" )) != "undefined" && typeof(eval("data_INF_"+ BOL_key +"["+curr_date+"]" )) != "undefined" && typeof(eval("data_SUP_"+ BOL_key +"["+curr_date+"]" )) != "undefined"){ var BOL_SUP_close = format_price( eval("data_SUP_"+ BOL_key +"["+curr_date+"]" )); var BOL_INF_close = format_price( eval("data_INF_"+ BOL_key +"["+curr_date+"]" )); full+=2 text_precCell += created_text_precCell(SymexChartSettings.colors_BOL,SymexChartSettings.lang_array[46] + " " + SymexChartSettings.lang_array[47],BOL_SUP_close,""); text_precCell += created_text_precCell(SymexChartSettings.colors_BOL,SymexChartSettings.lang_array[46] + " " + SymexChartSettings.lang_array[48],BOL_INF_close,""); }else{ var BOL_SUP_close = " - "; var BOL_INF_close = " - "; } } if(SymexChartGlobals.display_SAR == 1){ if(typeof(eval(data['SAR'][0][curr_date]))!= "undefined"){ text_precCell += created_text_precCell("#000000",SymexChartSettings.lang_array["SAR"],format_price( eval(data['SAR'][0][curr_date])),""); full++ } } if(SymexChartGlobals.display_STR == 1){ if(typeof(eval(data['STR'][0][curr_date]))!= "undefined"){ text_precCell += created_text_precCell("#000000",SymexChartSettings.lang_array["STR"],format_price( eval(data['STR'][0][curr_date])),""); full++ } } if(SymexChartGlobals.display_KAMA == 1){ if(typeof(eval(data['KAM'][0][curr_date]))!= "undefined"){ text_precCell += created_text_precCell("#000000",SymexChartSettings.lang_array["KAMA"],format_price( eval(data['KAM'][0][curr_date])),""); full++ } } coefStep_cirle = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; y_cirle = (SymexChartGlobals.max_[0] - data_close_0[curr_date]) / coefStep_cirle - jQuery("#precCell").offset().top ; var fontSize = parseInt( jQuery("#precCell_txt").css("font-size") ); var lineHeight = fontSize+5; var lH = lineHeight; jQuery("#precCell").css({ height: (5 + lH * full ) + "px", lineHeight: lH + "px" }); jQuery("#precCell").hide(); jQuery("#precCell_txt").hide(); jQuery("#precCellDate").show(); jQuery("#precCellPointer").show(); jQuery("#precCellPointerW_left").show(); jQuery("#precCellPointerW_right").show(); jQuery("#circles").show(); if(x_cirle > (SymexChartGlobals.chart_width_snd/2)) jQuery("#precCellW").css("left",0); else jQuery("#precCellW").css("left",SymexChartGlobals.chart_width_snd-65); jQuery("#precCellPointerW_left").css("top", y_cirle_w); jQuery("#precCellPointerW_left").css("width", x_orig_prev); jQuery("#precCellPointerW_right").css("top", y_cirle_w); jQuery("#precCellPointerW_right").css("left",eval("x_orig_next+SymexChartGlobals.chart_margin_left")); /* jQuery("#precCellPointerW").css("top", y_cirle_w-(x_orig_next-x_orig_prev)); jQuery("#precCellPointerW").css("left",eval("x_orig_prev")); jQuery("#precCellPointerW").css("width",(x_orig_next-x_orig_prev)*2); jQuery("#precCellPointerW").css("height",(x_orig_next-x_orig_prev)*2);*/ if(x_cirle > (SymexChartGlobals.chart_width_snd/2)){ jQuery("#precCellPointerW_right").css("width",SymexChartGlobals.chart_width - x_orig_next); }else{ jQuery("#precCellPointerW_right").css("width",SymexChartGlobals.chart_width - x_orig_next-20); } jQuery("#precCellW").css("top", (y_cirle_w) - (jQuery("#precCellW").height()/2)); if(y_cirle_w >= SymexChartGlobals.chart_margin_top && y_cirle_w <= (SymexChartGlobals.chart_height+SymexChartGlobals.chart_margin_top+SymexChartGlobals.chart_margin_top)){ jQuery("#precCellW").css("width","65px"); jQuery("#precCell_txtW").css("text-decoration-color","black"); jQuery("#precCell_txtW").css("text-align","right"); REMY = Pixelto("priceGraph",(y_cirle_w-SymexChartGlobals.chart_margin_top)); jQuery("#precCell_txtW").html("
" + format_num2(REMY, false) + "
"); } jQuery("#precCellPointer").css("left", x_orig); //*new* this.offsetLeft jQuery("#precCellCircle").css("left", x_cirle); //*new* this.offsetLeft jQuery("#precCellCircle").css("top", y_cirle); jQuery("#precCell").css("left", x); jQuery("#precCell").css("top", y); var left_date = x_cirle - ($("#precCellDate").width()/2); if(left_date < 0) left_date = 0; jQuery("#precCellDate").css("left",left_date); if($("#blocGraph").width() < 1300){ jQuery("#precision-info").css("font-size","11px"); } /* if ( SymexChartGlobals.pivot == 1){ text_precCell += "Pivot : " + format_price(pivot_0) + ""; } if ( SymexChartGlobals.support == 1 || SymexChartGlobals.support == 2){ text_precCell += " Support 1 : " + format_price(S1_0) + ""; } if (SymexChartGlobals.support == 2){ text_precCell += " Support 2 : " + format_price(S2_0)+ ""; } if ( SymexChartGlobals.resistance == 1 || SymexChartGlobals.resistance == 2){ text_precCell += " Resistance 1 : " + format_price(R1_0)+ ""; } if (SymexChartGlobals.resistance == 2){ text_precCell += " Resistance 2 : " + format_price(R2_0)+ ""; } */ /* if(full > 11){ */ //jQuery("#precision-info").css("font-size","9px"); if(SymexChartSettings.tool == 0){ jQuery("#precision-info").css("top",-18); jQuery("#news-info").css("top",-45); //jQuery("#blocGraph").css("padding-top",50); jQuery("#head-info").css("top",-65); } if(full > 11){ text_precCell = text_precCell.substr(0,text_precCell.lastIndexOf(" ")-2)+ "
" + text_precCell.substr(text_precCell.lastIndexOf(" ")-5); } // SymexChartGlobals.chart_margin_top = 40; /* }else{ jQuery("#precision-info").css("top",-15); jQuery("#news-info").css("top",-36); jQuery("#blocGraph").css("padding-top",40); jQuery("#head-info").css("top",-55); SymexChartGlobals.chart_margin_top = 40; } */ jQuery("#precCellDate_txt").html(text_precCell_date); jQuery("#precision-info").html(text_precCell); // jQuery("#precision2-info").html(text_precCell); var text_precCellMACD = new Array(); for(var a=0,b=1;a" + name_title_chart + " " + SymexChartSettings.lang_array[SymexChartGlobals.sub_chart[a]+"_0"] + " (" + split_arr_sto[0] + " - " + split_arr_sto[1] + ")"; }else if(SymexChartGlobals.sub_chart[a] == "KST"){ switch (qty) { case 'long': var kst_value = "9,12,18,24,6,6,6,9"; break; case 'medium': var kst_value = "10,13,15,20,10,13,15,20"; break; case 'short': default: var kst_value = "10,15,20,30,10,10,10,15"; break; } text_precCellMACD[b] = "
" + name_title_chart + " " + " (" + kst_value + ")"; }else if(SymexChartGlobals.sub_chart[a] == "DMI"){ text_precCellMACD[b] = "
" + name_title_chart + " " + SymexChartSettings.lang_array[SymexChartGlobals.sub_chart[a]+"_0"] + " (" + qty + ")"; }else{ text_precCellMACD[b] = "
" if(SymexChartGlobals.sub_chart[a] == "MASMON" || SymexChartGlobals.sub_chart[a] == "CCI" || SymexChartGlobals.sub_chart[a] == "CMF" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV"){ text_precCellMACD[b] += name_title_chart; }else{ text_precCellMACD[b] += SymexChartSettings.lang_array[SymexChartGlobals.sub_chart[a]+"_0"] ; } if(SymexChartGlobals.sub_chart[a] == "MACD"){ var split_arr_macd = qty.split(' - '); text_precCellMACD[b] += " (" + split_arr_macd[0] + " - " + split_arr_macd[1] +")"; }else if(SymexChartGlobals.sub_chart[a] == "VOL" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV"){ text_precCellMACD[b] += ""; }else{ text_precCellMACD[b] += " (" + qty + ")"; } } if(SymexChartGlobals.language !="en" && SymexChartGlobals.sub_chart[a] != "VOL"){ if(values_ < 1000000){ values_ = values_.replace(".",","); }else{ values_ = values_.substr(0,(values_.length-4))+(values_.substr(-4)).replace(".",","); } }else if(SymexChartGlobals.language =="en" && SymexChartGlobals.sub_chart[a] == "VOL"){ values_ = values_.replace(" ",","); values_ = values_.replace(" ",","); } text_precCellMACD[b] += " : " + values_ + "
"; if(data[SymexChartGlobals.sub_chart[a]].length > 1){ if(typeof(data[SymexChartGlobals.sub_chart[a]][1][curr_date] )!== "undefined"){ if(eval( data[SymexChartGlobals.sub_chart[a]][1][curr_date]) != "0" || SymexChartGlobals.sub_chart[a] != "DMI"){ var values_ = format_price(eval(data[SymexChartGlobals.sub_chart[a]][1][curr_date]),nb_fix); }else{ var values_ = " - "; } }else{ var values_ = " - "; } text_precCellMACD[b] += "
"; text_precCellMACD[b] += SymexChartSettings.lang_array[SymexChartGlobals.sub_chart[a]+"_1"]; if(SymexChartGlobals.sub_chart[a] == "MACD"){ text_precCellMACD[b] += " (" + split_arr_macd[2] + ")"; }else if(SymexChartGlobals.sub_chart[a] == "STO"){ text_precCellMACD[b] += " (" + split_arr_sto[2] + ")";; }else if(SymexChartGlobals.sub_chart[a] == "KST"){ text_precCellMACD[b] += " (9)";; }else{ text_precCellMACD[b] += " (" + qty + ")"; } if(SymexChartGlobals.language !="en"){ values_ = values_.replace(".",","); } text_precCellMACD[b] += " : " + ""+ values_+ "
"; full_chart2++; } if(data[SymexChartGlobals.sub_chart[a]].length > 2){ if(typeof(data[SymexChartGlobals.sub_chart[a]][2][curr_date] )!== "undefined"){ if( eval(data[SymexChartGlobals.sub_chart[a]][2][curr_date]) != "0" || SymexChartGlobals.sub_chart[a] != "DMI"){ var values_ = format_price(eval(data[SymexChartGlobals.sub_chart[a]][2][curr_date]),nb_fix); }else{ var values_ = " - "; } }else{ var values_ = " - "; } if(SymexChartGlobals.language !="en"){ values_ = values_.replace(".",","); } text_precCellMACD[b] += "
" + SymexChartSettings.lang_array[SymexChartGlobals.sub_chart[a]+"_2"] + " (" + qty + ")" + " : " + ""+ values_+ "
"; full_chart2++; } jQuery("#precCellSC"+b).css({ height: ( 5+ lH * full_chart2 ) + "px", lineHeight: lineHeight + "px" }); jQuery("#precCellSC"+b).hide(); jQuery("#precCell_txtSC"+b).hide(); jQuery("#precCellPointerSC"+b).show(); jQuery("#precCellPointerSC"+b).css("left", x_orig); //*new* this.offsetLeft jQuery("#precCellPointerSC"+b).css("left", x_cirle); //*new* this.offsetLeft jQuery("#precCellPointerSC"+b).css("top", 0); jQuery("#precCellSC"+b).css("left", x); jQuery("#precCellSC"+b).css("top", 25); jQuery("#title_chart_"+b).html(text_precCellMACD[b]); var position = $("#secondGraph"+b).position(); if(y_cirle_w >= (position.top-tolerance)&& y_cirle_w <= (SymexChartGlobals.chart_MACD_height+position.top+tolerance)){ if(y_cirle_w < (position.top)) y_cirle_w = position.top; if(y_cirle_w > (SymexChartGlobals.chart_MACD_height+position.top)) y_cirle_w = (SymexChartGlobals.chart_MACD_height+position.top); jQuery("#precCellW").css("width","65px"); if((SymexChartGlobals.sub_chart[a] == "VOL" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV") && (max_ > 1000000 || Math.abs(min_) > 1000000)){ var value_cap_niv = format_volume ( (Pixelto("secondGraph"+b,(y_cirle_w)))/1000000 , false )+ "M" ; }else if(SymexChartGlobals.sub_chart[a] == "VOL" || SymexChartGlobals.sub_chart[a] == "ADL" || SymexChartGlobals.sub_chart[a] == "OBV"){ var value_cap_niv = format_price( (Pixelto("secondGraph"+b,(y_cirle_w))), nb_fix ); }else{ var value_cap_niv = format_price((Pixelto("secondGraph"+b,(y_cirle_w))),nb_fix) } if(SymexChartGlobals.language !="en"){ value_cap_niv = value_cap_niv.replace(".",","); } jQuery("#precCell_txtW").html(value_cap_niv); } } } }else{ jQuery("#precCell" ).hide(); jQuery("#precCellPointer").hide(); jQuery("#precCellW").hide(); jQuery("#precCellPointerW").hide(); jQuery("#precCellPointerW_left").hide(); jQuery("#precCellPointerW_right").hide(); for(var a=0,b=1;a
" +"" + "Enregistrer l'image "); // +"
" }, width: SymexChartGlobals.chart_width +50, height: (SymexChartGlobals.chart_height+100) + ((SymexChartGlobals.chart_MACD_height+40) * (SymexChartGlobals.chart_n +1)) }); $("#popupImg").css("height",(SymexChartGlobals.chart_height) + ((SymexChartGlobals.chart_MACD_height) * (SymexChartGlobals.chart_n-2))); $("#popupImg").css("visibility","visible"); } */ function save_image(){ // $("#test").html((SymexChartGlobals.chart_height+100) + ((SymexChartGlobals.chart_MACD_height+40) * (SymexChartGlobals.chart_n +1))); jQuery("#precCell" ).hide(); jQuery("#precCellPointer").hide(); jQuery("#precCellW").hide(); jQuery("#precCellPointerW").hide(); jQuery("#precCellDate").hide(); jQuery("#circles").hide(); // var positions = jQuery("summaryGraph").position() ; html2canvas( document.getElementById("printscreen"),{ onrendered: function(canvas) { // var node = document.createElement(canvas); var data = canvas.toDataURL("image/png") ; $("#popupImg").html("
" +"" +"
" +"" +"" +"" +"" +"
" +"" ); var w = parseInt(SymexChartGlobals.chart_width +50); var h = parseInt((SymexChartGlobals.chart_height+100) + ((SymexChartGlobals.chart_MACD_height+40) * (SymexChartGlobals.chart_n +1))); }, width: parseInt(SymexChartGlobals.chart_width +50), height: parseInt(SymexChartGlobals.chart_height+100) + ((SymexChartGlobals.chart_MACD_height+40) * (SymexChartGlobals.chart_n +1)) }); $("#popupImg").css("height",(SymexChartGlobals.chart_height) + ((SymexChartGlobals.chart_MACD_height) * (SymexChartGlobals.chart_n+1))); $("#popupImg").css("visibility","visible"); } function maxAndMin(x1_, x2_){ for( var w = 0; w < SymexChartGlobals.tickers_qty; w++ ) { tmp_val_ = new Array(); var init_quotes_ = get_first_quote(eval("data_close_" + 0), x1_, x2_); if(SymexChartGlobals.compa > 0 && w > 0){ var init_quotes_w = get_first_quote(eval("data_close_" + w), x1_, x2_); for ( var i_ = x1_; i_ <= x2_; i_++ ){ tmp_val_[i_] = (eval("data_close_" + w + "[i_]") / init_quotes_w ) * init_quotes_; } } if((SymexChartGlobals.type_curve == "J" || SymexChartGlobals.type_curve == "B") && w == 0 ){ SymexChartGlobals.max_[w] = array_max( eval("data_high_" + w), x1_, x2_ ); SymexChartGlobals.min_[w] = array_min( eval("data_low_" + w), x1_, x2_ ); }else if(SymexChartGlobals.type_curve == "H" && w == 0){ SymexChartGlobals.max_[w] = array_max( eval("data_high_HA_" + w), x1_, x2_ ); SymexChartGlobals.min_[w] = array_min( eval("data_low_HA_" + w), x1_, x2_ ); }else{ SymexChartGlobals.max_[w] = array_max( eval("data_close_" + w), x1_, x2_ ); SymexChartGlobals.min_[w] = array_min( eval("data_close_" + w), x1_, x2_ ); } if(SymexChartGlobals.compa == 0 || (SymexChartGlobals.compa > 0 && (w ==0))){ SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_[w]); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_[w]); }else{ SymexChartGlobals.max_[w] = array_max( eval(tmp_val_), x1_, x2_ ); SymexChartGlobals.min_[w] = array_min( eval(tmp_val_), x1_, x2_ ); SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_[w]); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_[w]); } } if ( SymexChartGlobals.showVariation > 0 ) { SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_[w]); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_[w]); }else { if(SymexChartGlobals.ichi == 1){ SymexChartGlobals.max_TENKAN = array_max( eval("data_tenkan_" ), x1_, x2_ ); SymexChartGlobals.min_TENKAN = array_min( eval("data_tenkan_"), x1_, x2_ ); SymexChartGlobals.max_KINJUN = array_max( eval("data_kijun_"), x1_, x2_ ); SymexChartGlobals.min_KINJUN = array_min( eval("data_kijun_"), x1_, x2_ ); SymexChartGlobals.max_CHIKOU = array_max( eval("data_chikou_" ), x1_, x2_ ); SymexChartGlobals.min_CHIKOU = array_min( eval("data_chikou_" ), x1_, x2_ ); SymexChartGlobals.max_SENKOUA = array_max( eval("data_senkouA_" ), x1_, x2_ ); SymexChartGlobals.min_SENKOUA = array_min( eval("data_senkouA_" ), x1_, x2_ ); SymexChartGlobals.max_SENKOUB = array_max( eval("data_senkouB_" ), x1_, x2_ ); SymexChartGlobals.min_SENKOUB = array_min( eval("data_senkouB_"), x1_, x2_ ); check_max_min_ichi(); } if(SymexChartGlobals.display_BOL == 1){ SymexChartGlobals.max_BOL = array_max( eval("data_close_BOL"), x1_, x2_ ); SymexChartGlobals.min_BOL = array_min( eval("data_close_BOL"), x1_, x2_ ); SymexChartGlobals.max_SUP = array_max( eval("data_SUP_1"), x1_, x2_ ); SymexChartGlobals.min_SUP = array_min( eval("data_SUP_1"), x1_, x2_ ); SymexChartGlobals.max_INF = array_max( eval("data_INF_1"), x1_, x2_ ); SymexChartGlobals.min_INF = array_min( eval("data_INF_1"), x1_, x2_ ); SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_BOL,SymexChartGlobals.max_SUP,SymexChartGlobals.max_INF); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_BOL,SymexChartGlobals.min_SUP,SymexChartGlobals.min_INF); } if(SymexChartGlobals.display_SAR == 1){ SymexChartGlobals.max_SAR = array_max( eval("data[\'SAR\'][0]"), x1_, x2_ ); SymexChartGlobals.min_SAR = array_min( eval("data[\'SAR\'][0]"), x1_, x2_ ); SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_SAR); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_SAR); } if(SymexChartGlobals.display_STR == 1){ SymexChartGlobals.max_STR = array_max( eval("data[\'STR\'][0]"), x1_, x2_ ); SymexChartGlobals.min_STR = array_min( eval("data[\'STR\'][0]"), x1_, x2_ ); SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_STR); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_STR); } if(SymexChartGlobals.display_KAMA == 1){ SymexChartGlobals.max_KAMA = array_max( eval("data[\'KAM\'][0]"), x1_, x2_ ); SymexChartGlobals.min_KAMA = array_min( eval("data[\'KAM\'][0]"), x1_, x2_ ); SymexChartGlobals.max_[0] = Math.max(SymexChartGlobals.max_[0],SymexChartGlobals.max_KAMA); SymexChartGlobals.min_[0] = Math.min(SymexChartGlobals.min_[0],SymexChartGlobals.min_KAMA); } } } function position_start_end(){ if(SymexChartGlobals.period_chart_ != "" && SymexChartGlobals.ze_ == 0 && SymexChartGlobals.zs_ == 0){ switch(SymexChartGlobals.period_chart_){ case "1m": var datef_ = '20260509'; SymexChartGlobals.leftScInit = search_date(datef_); //var points_qty_ = SymexChartGlobals.points_qty; break; case "3m": var datef_ = '20260309'; SymexChartGlobals.leftScInit = search_date(datef_); //var points_qty_ = SymexChartGlobals.points_qty; break; case "6m": var datef_ = '20251209'; SymexChartGlobals.leftScInit = search_date(datef_); //var points_qty_ = SymexChartGlobals.points_qty; break; case "1a": var datef_ = '20250609'; SymexChartGlobals.leftScInit = search_date(datef_); // var SymexChartGlobals.points_qty_ = SymexChartGlobals.points_qty; break; case "2a": var datef_ = '20240609'; SymexChartGlobals.leftScInit = search_date(datef_); //var SymexChartGlobals.points_qty_ = SymexChartGlobals.points_qty; break; case "3a": var datef_ = '20230609'; SymexChartGlobals.leftScInit = search_date(datef_); // var SymexChartGlobals.points_qty_ = SymexChartGlobals.points_qty; break; case "ytd": var datef_ = '20260101'; SymexChartGlobals.leftScInit = search_date(datef_); // var SymexChartGlobals.points_qty_ = SymexChartGlobals.points_qty; break; case "all": default: SymexChartGlobals.leftScInit = 0; //var points_qty_ = SymexChartGlobals.points_qty; break; } SymexChartGlobals.points_qty = SymexChartGlobals.points_qty_s; $("#zoom_start").val(0); $("#zoom_end").val(0); SymexChartGlobals.ze_ = 0; SymexChartGlobals.zs_ = 0; $("#1m").removeClass("select"); $("#3m").removeClass("select"); $("#6m").removeClass("select"); $("#1m").removeClass("select"); $("#1a").removeClass("select"); $("#2a").removeClass("select"); $("#3a").removeClass("select"); $("#ytd").removeClass("select"); $("#all").removeClass("select"); $("#"+SymexChartGlobals.period_chart_).addClass("select"); }else{ if(jQuery("#zoom_end").val() != 0 && jQuery("#zoom_end").val() != SymexChartGlobals.chart_width && jQuery("#zoom_start").val() == 0){ SymexChartGlobals.points_qty = jQuery("#zoom_end").val(); SymexChartGlobals.leftScInit = 0; }else if(jQuery("#zoom_end").val() != 0 && jQuery("#zoom_end").val() != SymexChartGlobals.chart_width && jQuery("#zoom_start").val() != 0){ SymexChartGlobals.leftScInit = jQuery("#zoom_start").val(); SymexChartGlobals.points_qty = jQuery("#zoom_end").val(); }else if(jQuery("#zoom_end").val() == 0 && jQuery("#zoom_start").val() != 0){ SymexChartGlobals.leftScInit = jQuery("#zoom_start").val(); } $("#1m").removeClass("select"); $("#3m").removeClass("select"); $("#6m").removeClass("select"); $("#1m").removeClass("select"); $("#1a").removeClass("select"); $("#2a").removeClass("select"); $("#3a").removeClass("select"); $("#ytd").removeClass("select"); $("#all").removeClass("select"); } } function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",""); } function created_text_precCell(color,word,close_,period){ var text_p = "" + "
" + word; if(period != ""){ text_p += " (" + period +")"; } text_p += " : " + "" + close_ + "
" ; return text_p } function drawLine_kagi( x1_, x2_ ) { x1_ = parseInt(x1_); x2_ = parseInt(x2_); //OVERRIDE global SymexChartGlobals.begin = x1_; // Quantity of points to be draw for each ticker -> ***local var*** (we have global one!) var points_qty = x2_ - x1_; // Conteiner for canvas elements var canvas_ = new Array(); // Add all canvas element in for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ canvas_[i] = document.getElementById("price_" + i); } // If canvas container is ready if (canvas_[0].getContext){ var context_ = new Array(); // 2D plots container var coefStepY; var init_positionY; var stepY; var tmp_val; var init_quotes = new Array(); // Collect first quote for each ticker //get all 2D plots for(var i = 0; i < SymexChartGlobals.tickers_qty; i++ ){ context_[i] = canvas_[i].getContext("2d"); } var values_scale_data = values_scale(SymexChartGlobals.max_[0], SymexChartGlobals.min_[0]); SymexChartGlobals.max_[0] = values_scale_data[0]; SymexChartGlobals.min_[0] = values_scale_data[1]; SymexChartSettings.settings[0] = values_scale_data[2]; value_A_B("priceGraph",SymexChartGlobals.max_[0],SymexChartGlobals.min_[0]); coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; //SymexChartGlobals.stepX = (SymexChartGlobals.chart_width*0.95).toFixed(0) / (points_qty-1); for ( var i = 0; i < SymexChartGlobals.tickers_qty; i++ ) { if(i == 0){ var iter = 1; var color = "green" ; // default color var ReferentClose = data_close_0[0]; for ( var i_ = x1_ ; i_ <= (x2_); i_++ ){ stepY = (SymexChartGlobals.max_[0] - eval( "data_close_0[i_]")) / coefStepY; stepY_next = (SymexChartGlobals.max_[0] - eval( "data_close_0[i_+1]")) / coefStepY; stepY_refUP = (SymexChartGlobals.max_[0] - eval( "data_referentUP_0[i_]")) / coefStepY; stepY_refDOWN = (SymexChartGlobals.max_[0] - eval( "data_referentDOWN_0[i_]")) / coefStepY; stepY_prec = (SymexChartGlobals.max_[0] - eval( "data_close_0[i_-1]")) / coefStepY; if(data_trend_0[i_]){ context_[i].beginPath(); if(i_ == x2_){ context_[i].moveTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; }else{ context_[i].moveTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_next.toFixed(2) ) ; } context_[i].lineWidth = 1; if(data_trend_0[i_]){ context_[i].strokeStyle= "black";//"green"; }else{ context_[i].strokeStyle= "black";//"red"; } context_[i].stroke(); }else{ context_[i].beginPath(); if(i_ == x2_){ context_[i].moveTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; }else{ context_[i].moveTo((SymexChartGlobals.stepX * (iter-1)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter)).toFixed(2), stepY.toFixed(2) ) ; context_[i].lineTo((SymexChartGlobals.stepX * (iter)).toFixed(2), stepY_next.toFixed(2) ) ; } context_[i].lineWidth = 1; if(data_trend_0[i_]) context_[i].strokeStyle= "black";//"green"; else context_[i].strokeStyle= "black";//"red"; context_[i].stroke(); } iter++; } }else{ coefStepY = (SymexChartGlobals.max_[0] - SymexChartGlobals.min_[0]) / SymexChartGlobals.chart_height; var iter = 0; init_positionY = (SymexChartGlobals.max_[0] - SymexChartGlobals.init_quotes[0]) / coefStepY; context_[i].beginPath(); context_[i].moveTo( 1, init_positionY ); for ( var i_ = x1_ ; i_ <= (x2_); i_++ ){ stepY = (SymexChartGlobals.max_[0] - eval( "data_close_"+ i +"[i_]")) / coefStepY; context_[i].lineTo( (SymexChartGlobals.stepX * (iter + 0)).toFixed(2), stepY.toFixed(2) ); iter++; } context_[i].strokeStyle = SymexChartSettings.colors_[i]; context_[i].lineWidth = SymexChartSettings.linesW_[i]; context_[i].stroke(); } } } //if canvas */ } //end func