hqchart 1.1.15039 → 1.1.15043

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1190,7 +1190,7 @@ if(option.KLine.MaxRequestDataCount>0)chart.MaxRequestDataCount=option.KLine.Max
1190
1190
  if(option.KLine.RightSpaceCount>0)chart.RightSpaceCount=option.KLine.RightSpaceCount;if(option.KLine.ZoomType>0)chart.ZoomType=option.KLine.ZoomType;if(option.KLine.DataWidth>=1)chart.KLineSize={DataWidth:option.KLine.DataWidth};if(IFrameSplitOperator.IsNumber(option.KLine.RightFormula))chart.RightFormula=option.KLine.RightFormula;}//自定义显示位置
1191
1191
  if(option.CustomShow&&IFrameSplitOperator.IsPlusNumber(option.CustomShow.Date)){var item=option.CustomShow;chart.CustomShow={Date:item.Date};if(IFrameSplitOperator.IsNumber(item.Time))chart.CustomShow.Time=item.Time;if(IFrameSplitOperator.IsPlusNumber(item.PageSize))chart.CustomShow.PageSize=item.PageSize;}if(option.EnableFlowCapital){var item=option.EnableFlowCapital;if(item.BIT==true)chart.EnableFlowCapital.BIT=item.BIT;}if(IFrameSplitOperator.IsBool(option.EnableBorderDrag)){chart.EnableBorderDrag=option.EnableBorderDrag;}if(option.Page){if(option.Page.Day&&option.Page.Day.Enable==true)chart.Page.Day.Enable=true;if(option.Page.Minute&&option.Page.Minute.Enable==true)chart.Page.Minute.Enable=true;}if(option.DragDownload){if(option.DragDownload.Day&&option.DragDownload.Day.Enable==true)chart.DragDownload.Day.Enable=true;if(option.DragDownload.Minute&&option.DragDownload.Minute.Enable==true)chart.DragDownload.Minute.Enable=true;}if(option.ZoomDownload){if(option.ZoomDownload.Day&&IFrameSplitOperator.IsBool(option.ZoomDownload.Day.Enable))chart.ZoomDownload.Day.Enable=option.ZoomDownload.Day.Enable;if(option.ZoomDownload.Minute&&IFrameSplitOperator.IsBool(option.ZoomDownload.Minute.Enable))chart.ZoomDownload.Minute.Enable=option.ZoomDownload.Minute.Enable;}if(option.Language){var value=g_JSChartLocalization.GetLanguageID(option.Language);if(IFrameSplitOperator.IsNumber(value))chart.LanguageID=value;}if(option.SourceDatatLimit)chart.SetSourceDatatLimit(option.SourceDatatLimit);if(option.DrawPicture)//画图工具
1192
1192
  {if(option.DrawPicture.StorageKey&&chart.ChartDrawStorage)chart.ChartDrawStorage.Load(option.DrawPicture.StorageKey);}if(option.DrawTool)//画图工具
1193
- {if(option.DrawTool.StorageKey&&chart.ChartDrawStorage)chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);}if(option.KeyboardMove){var item=option.KeyboardMove;if(IFrameSplitOperator.IsPlusNumber(item.Delay))chart.KeyboardMove.Delay=item.Delay;if(IFrameSplitOperator.IsPlusNumber(item.PressTime))chart.KeyboardMove.PressTime=item.PressTime;}if(IFrameSplitOperator.IsNumber(option.StepPixel))chart.StepPixel=option.StepPixel;if(option.ZoomStepPixel>0)chart.ZoomStepPixel=option.ZoomStepPixel;if(option.IsApiPeriod==true)chart.IsApiPeriod=option.IsApiPeriod;//图形选中
1193
+ {var item=option.DrawTool;if(chart.ChartDrawStorage){if(item.StorageKey)chart.ChartDrawStorage.Load(item.StorageKey);if(IFrameSplitOperator.IsBool(item.EnableCrossPeriod))chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;}}if(option.KeyboardMove){var item=option.KeyboardMove;if(IFrameSplitOperator.IsPlusNumber(item.Delay))chart.KeyboardMove.Delay=item.Delay;if(IFrameSplitOperator.IsPlusNumber(item.PressTime))chart.KeyboardMove.PressTime=item.PressTime;}if(IFrameSplitOperator.IsNumber(option.StepPixel))chart.StepPixel=option.StepPixel;if(option.ZoomStepPixel>0)chart.ZoomStepPixel=option.ZoomStepPixel;if(option.IsApiPeriod==true)chart.IsApiPeriod=option.IsApiPeriod;//图形选中
1194
1194
  if(option.SelectedChart){var item=option.SelectedChart;if(IFrameSplitOperator.IsBool(item.EnableSelected))chart.SelectedChart.EnableSelected=item.EnableSelected;if(IFrameSplitOperator.IsBool(item.EnableMoveOn))chart.SelectedChart.EnableMoveOn=item.EnableMoveOn;}if(option.PressKeyboardConfig)this.SetPressKeyboardConfig(chart,option.PressKeyboardConfig);if(!option.Windows||option.Windows.length<=0)return null;//K线扩展计算方法配置
1195
1195
  if(IFrameSplitOperator.IsNonEmptyArray(option.KLineCalcOption)){for(var i=0;i<option.KLineCalcOption.length;++i){var item=option.KLineCalcOption[i];if(!item.ClassName||!item.Option)continue;chart.SetKLineCalcOption(item.ClassName,item.Option);}}if(option.FastSlide){var item=option.FastSlide;if(IFrameSplitOperator.IsNumber(item.MinDistance))chart.FastSlideConfig.MinDistance=item.MinDistance;if(IFrameSplitOperator.IsNumber(item.MinSpeed))chart.FastSlideConfig.MinSpeed=item.MinSpeed;if(IFrameSplitOperator.IsNumber(item.MaxTime))chart.FastSlideConfig.MaxTime=item.MaxTime;if(IFrameSplitOperator.IsBool(item.Enable))chart.FastSlideConfig.Enable=item.Enable;}if(chart.ClassName=="KLineChartContainer"){if(!option.DragSelectRect){option.DragSelectRect={Enable:true};//默认开启区间选中画布
1196
1196
  }if(option.DragSelectRect){var zindex=10;var item=option.DragSelectRect;if(IFrameSplitOperator.IsNumber(item.ZIndex))zindex=item.ZIndex;if(item.Enable)this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey,{ZIndex:zindex});//创建独立的区间选择画布
@@ -6455,8 +6455,9 @@ this.PointMagnetKLine=function(){if(!this.IsSupportMagnet)return false;if(!this.
6455
6455
  this.PointToValue=function(){if(!this.Frame)return false;if(this.Frame.ClassName=="MinuteFrame"||this.Frame.Class=="MinuteHScreenFrame"){return this.PointToValue_Minute();}else{return this.PointToValue_KLine();}};this.PointToKLine=function(aryPoint){if(!this.Frame)return null;var data=this.Frame.Data;if(!data)return null;var kLine=[];var isHScreen=this.Frame.IsHScreen;if(isHScreen){for(var i in aryPoint){var item=aryPoint[i];var xValue=parseInt(this.Frame.GetXData(item.Y))+data.DataOffset;var yValue=this.Frame.GetYData(item.X);var valueItem={XValue:xValue,YValue:yValue};var kline=data.Data[xValue];valueItem.DateTime={Date:kline.Date};if(IFrameSplitOperator.IsNumber(kline.Time))valueItem.DateTime.Time=kline.Time;kLine[i]=valueItem;}}else{for(var i in aryPoint){var item=aryPoint[i];var index=parseInt(this.Frame.GetXData(item.X,false));var xValue=index+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length){xValue=data.Data.length-1;index=xValue-data.DataOffset;}var yValue=this.Frame.GetYData(item.Y,false);var valueItem={XValue:xValue,YValue:yValue,XIndex:index};var kline=data.Data[xValue];valueItem.DateTime={Date:kline.Date};if(IFrameSplitOperator.IsNumber(kline.Time))valueItem.DateTime.Time=kline.Time;kLine[i]=valueItem;}}return kLine;};this.PointToValue_KLine=function(){if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;var isHScreen=this.Frame.IsHScreen;if(isHScreen){for(var i=0;i<this.Point.length;++i){var item=this.Point[i];var xValue=parseInt(this.Frame.GetXData(item.Y,false))+data.DataOffset;var yValue=this.Frame.GetYData(item.X,false);var valueItem={XValue:xValue,YValue:yValue};var kline=data.Data[xValue];valueItem.DateTime={Date:kline.Date};if(IFrameSplitOperator.IsNumber(kline.Time))valueItem.DateTime.Time=kline.Time;this.Value[i]=valueItem;}}else{for(var i=0;i<this.Point.length;++i){var item=this.Point[i];var xValue=parseInt(this.Frame.GetXData(item.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yValue=this.Frame.GetYData(item.Y,false);var valueItem={XValue:xValue,YValue:yValue};var kline=data.Data[xValue];valueItem.DateTime={Date:kline.Date};if(IFrameSplitOperator.IsNumber(kline.Time))valueItem.DateTime.Time=kline.Time;this.Value[i]=valueItem;}}return true;};this.PointToValue_Minute=function(){if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;var isHScreen=this.Frame.IsHScreen;if(isHScreen){for(var i=0;i<this.Point.length;++i){var item=this.Point[i];var xValue=parseInt(this.Frame.GetXData(item.Y,false));var yValue=this.Frame.GetYData(item.X,false);var valueItem={XValue:xValue,YValue:yValue};var minuteItem=data.Data[xValue];valueItem.DateTime={Date:minuteItem.Date,Time:minuteItem.Time};this.Value[i]=valueItem;}}else{var xDatetime=g_MinuteTimeStringData.GetTimeData(this.Symbol);for(var i=0;i<this.Point.length;++i){var item=this.Point[i];var xValue=parseInt(this.Frame.GetXData(item.X,false));var yValue=this.Frame.GetYData(item.Y,false);if(xValue>=data.Data.length)//超过当前数据,直接读固定时间
6456
6456
  {var index=xValue%xDatetime.length;var dataIndex=data.Data.length-1;var valueItem={XValue:xValue,YValue:yValue};var minuteItem=data.Data[dataIndex];var timeItem=xDatetime[index];valueItem.DateTime={Date:minuteItem.Date,Time:timeItem};this.Value[i]=valueItem;}else{var valueItem={XValue:xValue,YValue:yValue};var minuteItem=data.Data[xValue];valueItem.DateTime={Date:minuteItem.Date,Time:minuteItem.Time};this.Value[i]=valueItem;}}}return true;};this.IsPointIn=function(x,y,option){return false;};//Value => Point
6457
6457
  this.ValueToPoint=function(){if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;//this.UpdateXValue();
6458
- var isHScreen=this.Frame.IsHScreen;this.Point=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}this.Point[i]=pt;}};this.UpdateXValue=function()//通过datetime更新x的索引
6459
- {if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;var aryDateTime=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];if(!item.DateTime)break;var dateTime={Date:item.DateTime.Date};if(IFrameSplitOperator.IsNumber(item.DateTime.Time))dateTime.Time=item.DateTime.Time;aryDateTime[i]=dateTime;}data.FindDataIndexByDateTime(aryDateTime);for(var i=0;i<aryDateTime.length;++i){var findItem=aryDateTime[i];var valueItem=this.Value[i];if(findItem.Index>=0)valueItem.XValue=findItem.Index;}};//重置X索引数据
6458
+ var isHScreen=this.Frame.IsHScreen;this.Point=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];var pt=new Point();if(isHScreen){pt.Y=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.X=this.Frame.GetYFromData(item.YValue,false);}else{pt.X=this.Frame.GetXFromIndex(item.XValue-data.DataOffset,false);pt.Y=this.Frame.GetYFromData(item.YValue,false);}this.Point[i]=pt;}};this.GetkData=function(){if(!this.Frame)return null;var data=this.Frame.Data;if(!data)return null;return data;};//周期变动 X重新定位
6459
+ this.ChangePeriod=function(period){var kData=this.GetkData();if(!kData)return;var aryDateTime=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];if(!item.DateTime)break;var dateTime={Date:item.DateTime.Date,Time:0,Match:null};if(IFrameSplitOperator.IsNumber(item.DateTime.Time))dateTime.Time=item.DateTime.Time;aryDateTime[i]=dateTime;}var findCount=0;var perData=null;var perIndex=-1;for(var i=0,j=0;i<kData.Data.length;++i){var kItem=kData.Data[i];for(j=0;j<aryDateTime.length;++j){var item=aryDateTime[j];if(item.Match)continue;if(ChartData.IsDayPeriod(period,true)){if(kItem.Date>item.Date){item.Match={KItem:perData,Index:perIndex};++findCount;}}else if(ChartData.IsMinutePeriod(period,true)){if(kItem.Date>item.Date||kItem.Date==item.Date&&kItem.Time>item.Time){item.Match={KItem:perData,Index:perIndex};++findCount;}}}perData=kItem;perIndex=i;if(findCount>=aryDateTime.length)break;}for(var i=0;i<aryDateTime.length;++i){var item=aryDateTime[i];var valueItem=this.Value[i];if(item.Match&&item.Match.KItem){valueItem.DateTime={Date:item.Match.Date,Time:item.Match.Time};valueItem.XValue=item.Match.Index;}else{valueItem.DateTime=null;valueItem.XValue=null;}}this.Period=period;};this.UpdateXValue=function()//通过datetime更新x的索引
6460
+ {var data=this.GetkData();if(!data)return false;var aryDateTime=[];for(var i=0;i<this.Value.length;++i){var item=this.Value[i];if(!item.DateTime)break;var dateTime={Date:item.DateTime.Date};if(IFrameSplitOperator.IsNumber(item.DateTime.Time))dateTime.Time=item.DateTime.Time;aryDateTime[i]=dateTime;}data.FindDataIndexByDateTime(aryDateTime);for(var i=0;i<aryDateTime.length;++i){var findItem=aryDateTime[i];var valueItem=this.Value[i];if(findItem.Index>=0)valueItem.XValue=findItem.Index;}};//重置X索引数据
6460
6461
  this.ResetXValue=function(){for(var i=0;i<this.Value.length;++i){var item=this.Value[i];item.XValue=null;}return true;};//xStep,yStep 移动的偏移量
6461
6462
  this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==null)return false;var index=parseInt(this.MovePointIndex);if(index===100)//整体移动
6462
6463
  {if(this.IsMoveOutOfBounds(this.Point,xStep,yStep))return false;for(var i in this.Point){this.Point[i].X+=xStep;this.Point[i].Y+=yStep;}}else if(index===0||index===1||index===2||index===3||index===4||index===5){if(index<this.Point.length){this.Point[index].X+=xStep;this.Point[index].Y+=yStep;}}else{return false;}};//是否超出边界了
@@ -7147,17 +7148,20 @@ var aryLabel=this.FormatLabelText(drawPoint);if(!IFrameSplitOperator.IsNonEmptyA
7147
7148
  {rtText.Left=ptCenter.X+clientWidth/2-rtText.Width/2;rtText.Right=rtText.Left+rtText.Width;rtText.Top=ptCenter.Y-rtText.Height/2;rtText.Bottom=rtText.Top+rtText.Height;}else if(lableItem.Type==1)//顶部
7148
7149
  {rtText.Left=ptCenter.X+clientWidth/2-rtText.Width/2;rtText.Right=rtText.Left+rtText.Width;rtText.Top=ptTop.Y-rtText.Height;rtText.Bottom=rtText.Top+rtText.Height;}else if(lableItem.Type==2){rtText.Left=ptCenter.X+clientWidth/2-rtText.Width/2;rtText.Right=rtText.Left+rtText.Width;rtText.Top=ptBottom.Y;rtText.Bottom=rtText.Top+rtText.Height;}else{return;}this.Canvas.fillStyle=lableItem.BGColor;this.Canvas.fillRect(rtText.Left,rtText.Top,rtText.Width,rtText.Height);this.Canvas.textAlign='left';this.Canvas.textBaseline='bottom';this.Canvas.fillStyle=lableItem.TextColor;var x=rtText.Left+margin.Left;var y=rtText.Top+margin.Top+this.TextFontHeight;for(var i=0;i<lableItem.AryText.length;++i){var item=lableItem.AryText[i];var xText=x;var yText=y;if(IFrameSplitOperator.IsNumber(item.YOffset))yText+=item.YOffset;this.Canvas.fillText(item.Text,xText,yText);y+=this.TextFontHeight;}};this.FormatLabelText=function(drawPoint){if(this.HQChart){var event=this.HQChart.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_TVLONGPOSITION_LABEL);if(event&&event.Callback){var sendData={Frame:this.Frame,AryLabel:null,AryPoint:drawPoint,PreventDefault:false};event.Callback(event,sendData,this);if(sendData.PreventDefault)return sendData.AryLabel;}}var ptCenter=drawPoint[0];var ptTop=drawPoint[2];var ptBottom=drawPoint[3];var aryData=[];var yValue=this.Frame.GetYData(ptCenter.Y,false);aryData.push({Type:0,AryText:[{Text:'Open: '+yValue.toFixed(2)}],BGColor:"rgb(112,128,144)",TextColor:"rgb(255,255,255)"});var yValue=this.Frame.GetYData(ptTop.Y,false);aryData.push({Type:1,AryText:[{Text:'Target: '+yValue.toFixed(2),YOffset:-1}],BGColor:this.TopAreaConfig.TextBGColor,TextColor:this.TopAreaConfig.TextColor});var yValue=this.Frame.GetYData(ptBottom.Y,false);aryData.push({Type:2,AryText:[{Text:'Stop: '+yValue.toFixed(2),YOffset:-1}],BGColor:this.BottomAreaConfig.TextBGColor,TextColor:this.BottomAreaConfig.TextColor});return aryData;};this.CalculateLabelSize=function(lableItem){lableItem.Width=0;lableItem.Height=0;for(var i=0;i<lableItem.AryText.length;++i){var item=lableItem.AryText[i];var textWidth=this.Canvas.measureText(item.Text).width;item.TextWidth=textWidth;if(lableItem.Width<textWidth)lableItem.Width=textWidth;lableItem.Height+=this.TextFontHeight;}};this.Move=function(xStep,yStep){if(this.Status!=20)return false;if(!this.Frame)return false;var data=this.Frame.Data;if(!data)return false;if(this.MovePointIndex==100)//整体移动
7149
7150
  {for(var i=0;i<this.Point.length;++i){var item=this.Point[i];item.X+=xStep;item.Y+=yStep;}}else if(this.MovePointIndex===0){for(var i=0;i<this.Point.length;++i){var item=this.Point[i];if(i==0){item.X+=xStep;item.Y+=yStep;}else if(i==1){item.Y+=yStep;}else if(i==2||i==3){item.X+=xStep;}}}else if(this.MovePointIndex==1){this.Point[1].X+=xStep;}else if(this.MovePointIndex==2){var ptCenter=this.Point[0];var item=this.Point[2];if(item.Y+yStep<ptCenter.Y)item.Y+=yStep;}else if(this.MovePointIndex==3){var ptCenter=this.Point[0];var item=this.Point[3];if(item.Y+yStep>ptCenter.Y)item.Y+=yStep;}};}function ChartDrawTVShortPosition(){this.newMethod=ChartDrawTVLongPosition;//派生
7150
- this.newMethod();delete this.newMethod;this.ClassName='ChartDrawTVShortPosition';this.TopAreaConfig=CloneData(g_JSChartResource.ChartDrawTVLongPosition.BottomArea);this.BottomAreaConfig=CloneData(g_JSChartResource.ChartDrawTVLongPosition.TopArea);}function ChartDrawStorage(){this.DrawData=new _map2.default();//画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
7151
+ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawTVShortPosition';this.TopAreaConfig=CloneData(g_JSChartResource.ChartDrawTVLongPosition.BottomArea);this.BottomAreaConfig=CloneData(g_JSChartResource.ChartDrawTVLongPosition.TopArea);}function ChartDrawStorage(){//this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
7152
+ this.DrawDataV2=new _map2.default();//画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
7151
7153
  this.StorageKey;this.GetEventCallback;//事件回调
7154
+ this.EnableCrossPeriod=false;//跨周期
7152
7155
  this.Load=function(key)//从本地读取画图工具
7153
- {if(!key)return;this.StorageKey=key;var cacheValue=localStorage[this.StorageKey];JSConsole.Chart.Log('[ChartDrawStorage::Load] Load to localStorage, key='+this.StorageKey+', cache='+cacheValue);if(!cacheValue)return;if(typeof cacheValue!="string")return;var saveData=JSON.parse(cacheValue);for(var i in saveData){var item=saveData[i];var drawMap=new _map2.default();for(var j in item.Value){var drawItem=item.Value[j];drawMap.set(drawItem.Key,drawItem.Value);}this.DrawData.set(item.Key,drawMap);}};this.Save=function()//把数据保存到本地
7154
- {if(!this.StorageKey)return;var saveData=[];var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=(0,_getIterator3.default)(this.DrawData),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var stock=_step14.value;var key=stock[0];var value=stock[1];var itemData={Key:key,Value:[]};var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=(0,_getIterator3.default)(value),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var drawItem=_step15.value;if(drawItem[1]&&drawItem[1].EnableSave===false)continue;itemData.Value.push({Key:drawItem[0],Value:drawItem[1]});}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}if(IFrameSplitOperator.IsNonEmptyArray(itemData.Value))saveData.push(itemData);}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}JSConsole.Chart.Log('[ChartDrawStorage::Save] save to localStorage, key='+this.StorageKey);var strData=(0,_stringify2.default)(saveData);localStorage[this.StorageKey]=strData;};this.GetItemKey=function(obj)//生成每个画图工具的key
7155
- {var strKey=obj.Symbol+'-'+obj.Period;return strKey;};this.SaveDrawData=function(drawPicture)//保存一个画图工具
7156
- {var strKey=this.GetItemKey(drawPicture);var data=drawPicture.ExportStorageData();if(!data)return;if(this.DrawData.has(strKey))//更新
7157
- {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data',strKey,drawPicture,data);this.DrawData.get(strKey).set(data.Guid,data);}else//新增
7158
- {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data',strKey,drawPicture,data);var newData=new _map2.default();newData.set(data.Guid,data);this.DrawData.set(strKey,newData);}JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ',this.DrawData);this.Save();};this.DeleteDrawData=function(drawPicture)//删除一个画图工具
7159
- {var strKey=this.GetItemKey(drawPicture);if(!this.DrawData.has(strKey))return;var mapDraw=this.DrawData.get(strKey);if(!mapDraw.has(drawPicture.Guid))return;mapDraw.delete(drawPicture.Guid);this.Save();};this.Clear=function(){this.DrawData=new _map2.default();this.Save();};this.GetDrawData=function(obj)//获取已有的画图工具数据{Symbol: , Period:, }
7160
- {var data=[];var strKey=this.GetItemKey(obj);if(!this.DrawData.has(strKey))return data;var stockData=this.DrawData.get(strKey);var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=(0,_getIterator3.default)(stockData),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var item=_step16.value;data.push(item[1]);}}catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}return data;};}/////////////////////////////////////////////////////////////////////////////////////////////////////////
7156
+ {if(!key)return;this.StorageKey=key;var cacheValue=localStorage[this.StorageKey];JSConsole.Chart.Log('[ChartDrawStorage::Load] Load to localStorage, key='+this.StorageKey+', cache='+cacheValue);if(!cacheValue)return;if(typeof cacheValue!="string")return;var saveData=JSON.parse(cacheValue);if(!saveData)return;if(IFrameSplitOperator.IsNonEmptyArray(saveData))//老版本 key=symbol-Period
7157
+ {for(var i=0;i<saveData.length;++i){var item=saveData[i];for(var j=0;j<item.Value.length;++j){var drawItem=item.Value[j];var symbol=drawItem.Value.Symbol;if(!this.DrawDataV2.has(symbol))this.DrawDataV2.set(symbol,{Symbol:symbol,MapPicture:new _map2.default()});var stockItem=this.DrawDataV2.get(symbol);stockItem.MapPicture.set(drawItem.Value.Guid,drawItem.Value);}}}else if(saveData.Ver==2.0&&IFrameSplitOperator.IsNonEmptyArray(saveData.Data)){for(var i=0;i<saveData.Data.length;++i){var item=saveData.Data[i];//{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
7158
+ var stockItem={Symbol:item.Symbol,MapPicture:new _map2.default()};for(var j=0;j<item.AryPicture.length;++j){var drawItem=item.AryPicture[j];stockItem.MapPicture.set(drawItem.Guid,drawItem);}this.DrawDataV2.set(stockItem.Symbol,stockItem);}}};this.Save=function()//把数据保存到本地
7159
+ {if(!this.StorageKey)return;var saveData=[];var _iteratorNormalCompletion14=true;var _didIteratorError14=false;var _iteratorError14=undefined;try{for(var _iterator14=(0,_getIterator3.default)(this.DrawDataV2),_step14;!(_iteratorNormalCompletion14=(_step14=_iterator14.next()).done);_iteratorNormalCompletion14=true){var mapItem=_step14.value;var symbol=mapItem[0];var stockItem=mapItem[1];var itemData={Symbol:symbol,AryPicture:[]};var _iteratorNormalCompletion15=true;var _didIteratorError15=false;var _iteratorError15=undefined;try{for(var _iterator15=(0,_getIterator3.default)(stockItem.MapPicture),_step15;!(_iteratorNormalCompletion15=(_step15=_iterator15.next()).done);_iteratorNormalCompletion15=true){var pictureItem=_step15.value;var drawItem=pictureItem[1];if(drawItem.EnableSave===false)continue;itemData.AryPicture.push(drawItem);}}catch(err){_didIteratorError15=true;_iteratorError15=err;}finally{try{if(!_iteratorNormalCompletion15&&_iterator15.return){_iterator15.return();}}finally{if(_didIteratorError15){throw _iteratorError15;}}}if(IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))saveData.push(itemData);}}catch(err){_didIteratorError14=true;_iteratorError14=err;}finally{try{if(!_iteratorNormalCompletion14&&_iterator14.return){_iterator14.return();}}finally{if(_didIteratorError14){throw _iteratorError14;}}}JSConsole.Chart.Log('[ChartDrawStorage::Save] save to localStorage, key='+this.StorageKey);var strData=(0,_stringify2.default)({Ver:2.0,Data:saveData});localStorage[this.StorageKey]=strData;};this.SaveDrawData=function(drawPicture)//保存一个画图工具
7160
+ {var symbol=drawPicture.Symbol;var data=drawPicture.ExportStorageData();if(!data)return;if(this.DrawDataV2.has(symbol))//更新
7161
+ {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data',symbol,drawPicture,data);var stockItem=this.DrawDataV2.get(symbol);stockItem.MapPicture.set(data.Guid,data);}else//新增
7162
+ {JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data',symbol,drawPicture,data);var stockItem={Symbol:symbol,MapPicture:new _map2.default()};stockItem.set(data.Guid,data);this.DrawDataV2.set(symbol,newData);}JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ',this.DrawDataV2);this.Save();};this.DeleteDrawData=function(drawPicture)//删除一个画图工具
7163
+ {var symbol=drawPicture.Symbol;if(!this.DrawDataV2.has(symbol))return;var stockItem=this.DrawDataV2.get(symbol);if(!stockItem.MapPicture.has(drawPicture.Guid))return;stockItem.MapPicture.delete(drawPicture.Guid);this.Save();};this.Clear=function(){this.DrawDataV2=new _map2.default();this.Save();};this.GetDrawData=function(obj)//获取已有的画图工具数据{ Symbol: , Period:, }
7164
+ {var aryData=[];var symbol=obj.Symbol;if(!this.DrawDataV2.has(symbol))return aryData;var stockItem=this.DrawDataV2.get(symbol);var _iteratorNormalCompletion16=true;var _didIteratorError16=false;var _iteratorError16=undefined;try{for(var _iterator16=(0,_getIterator3.default)(stockItem.MapPicture),_step16;!(_iteratorNormalCompletion16=(_step16=_iterator16.next()).done);_iteratorNormalCompletion16=true){var mapItem=_step16.value;var drawItem=mapItem[1];if(this.EnableCrossPeriod){aryData.push(drawItem);}else{if(drawItem.Period==obj.Period)aryData.push(drawItem);}}}catch(err){_didIteratorError16=true;_iteratorError16=err;}finally{try{if(!_iteratorNormalCompletion16&&_iterator16.return){_iterator16.return();}}finally{if(_didIteratorError16){throw _iteratorError16;}}}return aryData;};}/////////////////////////////////////////////////////////////////////////////////////////////////////////
7161
7165
  // 数据分割
7162
7166
  // [0]=Start起始 [1]=End结束 [2]=FixInterval修正的间隔 [3]=Increase
7163
7167
  //
@@ -8471,7 +8475,7 @@ if(!MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol)&&!MARKET_SUFFIX_NAME.IsBIT(this.
8471
8475
  for(var i=0;i<aryMenu.length;++i){var item=aryMenu[i];if(item.Name=="五彩K线"){if(this.ColorIndex){item.SubMenu.push({Name:JSPopMenu.SEPARATOR_LINE_NAME});item.SubMenu.push({Name:"删除五彩K线",Data:{ID:JSCHART_MENU_ID.CMD_DELETE_COLOR_INDEX_ID}});}}else if(item.Name=="专家系统"){if(this.TradeIndex){item.SubMenu.push({Name:JSPopMenu.SEPARATOR_LINE_NAME});item.SubMenu.push({Name:"删除专家系统",Data:{ID:JSCHART_MENU_ID.CMD_DELETE_TRADE_INDEX_ID}});}}else if(item.Name=="叠加品种"){for(var j=0;j<item.SubMenu.length;++j){if(item.SubMenu[j].Checked){item.SubMenu.push({Name:JSPopMenu.SEPARATOR_LINE_NAME});item.SubMenu.push({Name:"取消叠加",Data:{ID:JSCHART_MENU_ID.CMD_DELETE_ALL_OVERLAY_SYMBOL_ID}});break;}}}else if(item.Name=="信息地雷"){for(var j=0;j<item.SubMenu.length;++j){if(item.SubMenu[j].Checked){item.SubMenu.push({Name:JSPopMenu.SEPARATOR_LINE_NAME});item.SubMenu.push({Name:"删除所有",Data:{ID:JSCHART_MENU_ID.CMD_DELETE_ALL_KLINE_INFO_ID}});break;}}}else if(item.Name=="十字光标"){if(kItem){var bLocked=this.IsLockCorssCursor();if(bLocked)item.SubMenu.push({Name:"锁十字光标",Data:{ID:JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR},Checked:bLocked});else item.SubMenu.push({Name:"锁十字光标",Data:{ID:JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR,Args:[{KItem:{Date:kItem.Date,Time:kItem.Time},Draw:true}]},Checked:bLocked});}}}return aryMenu;};this.PopupSelectRectMenuV2=function(data,e){var _this32=this;var aryMenu=[{Name:"区间统计",Data:{ID:JSCHART_MENU_ID.CMD_SELECTED_SUMMARY_ID,Args:[e,data.SelectData]}},{Name:"区间放大",Data:{ID:JSCHART_MENU_ID.CMD_SELECTED_ZOOM_ID,Args:[data.SelectData]}}];var menuData={Menu:aryMenu,Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID};menuData.ClickCallback=function(data){_this32.OnClickRightMenu(data);};var x=data.X,y=data.Y;this.PopupMenuByRClick(menuData,x,y);};//重新加载画图工具(切换股票|周期)
8472
8476
  this.ReloadChartDrawPicture=function(){this.ChartDrawPicture=[];if(this.SelectChartDrawPicture)this.SelectChartDrawPicture.IsSelected=false;this.SelectChartDrawPicture=null;this.CurrentChartDrawPicture=null;if(this.ChartDrawStorage){this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData({Symbol:this.Symbol,Period:this.Period});var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_LOAD_DRAWPICTURE);if(event&&event.Callback){var sendData={Symbol:this.Symbol,Period:this.Period,DrawStorage:this.ChartDrawStorage,ChartDrawStorageCache:this.ChartDrawStorageCache};event.Callback(event,sendData,this);}}};this.CreateChartDrawPictureByStorage=function()//把缓存(this.ChartDrawStorageCache) 画图工具创建出来
8473
8477
  {if(!IFrameSplitOperator.IsNonEmptyArray(this.ChartDrawStorageCache))return;for(var i=0;i<this.ChartDrawStorageCache.length;++i){var item=this.ChartDrawStorageCache[i];if(item.FrameID<0||!this.Frame.SubFrame||this.Frame.SubFrame.length<item.FrameID)continue;var drawPicture=IChartDrawPicture.CreateChartDrawPicture(item);if(!drawPicture)continue;drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame;//绑定框架坐标
8474
- drawPicture.Option=this.ChartDrawOption;if(drawPicture.ImportStorageData)drawPicture.ImportStorageData(item);drawPicture.UpdateXValue();drawPicture.ValueToPoint();var self=this;drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};this.ChartDrawPicture.push(drawPicture);}this.ChartDrawStorageCache=null;//清空缓存
8478
+ drawPicture.Option=this.ChartDrawOption;if(drawPicture.ImportStorageData)drawPicture.ImportStorageData(item);if(drawPicture.Period!=this.Period){drawPicture.ChangePeriod(this.Period);}else{drawPicture.UpdateXValue();}drawPicture.ValueToPoint();var self=this;drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};this.ChartDrawPicture.push(drawPicture);}this.ChartDrawStorageCache=null;//清空缓存
8475
8479
  };//更新信息地雷
8476
8480
  this.UpdataChartInfo=function(){//TODO: 根据K线数据日期来做map, 不在K线上的合并到下一个k线日期里面
8477
8481
  var mapInfoData=null;if(this.Period==0)//日线数据 根据日期
@@ -9349,7 +9353,7 @@ if(option)drawPicture.SetOption(option);var self=this;drawPicture.Update=functio
9349
9353
  {self.DrawDynamicInfo();};drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};this.CurrentChartDrawPicture=drawPicture;JSConsole.Chart.Log("[MinuteChartContainer::CreateChartDrawPicture] ",name,this.CurrentChartDrawPicture);return true;};//手动添加画线
9350
9354
  this.AddChartDrawPicture=function(obj){if(!obj)return null;if(obj.FrameID<0||obj.FrameID>=this.Frame.SubFrame.length)return null;var self=this;var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var drawPicture=item.Create();drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[obj.FrameID].Frame;//绑定框架坐标
9351
9355
  drawPicture.Symbol=this.Symbol;drawPicture.Period=888888888;if(obj.Value)drawPicture.Value=obj.Value;if(obj.Guid)drawPicture.Guid=obj.Guid;if(drawPicture.ImportStorageData)drawPicture.ImportStorageData(obj);drawPicture.SetOption(obj);if(obj.EnableUpdateXValue)drawPicture.UpdateXValue();drawPicture.ValueToPoint();drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};this.ChartDrawPicture.push(drawPicture);if(obj.Draw==true)this.DrawDynamicInfo();return drawPicture;};this.ReloadChartDrawPicture=function(){this.ChartDrawPicture=[];if(this.SelectChartDrawPicture)this.SelectChartDrawPicture.IsSelected=false;this.SelectChartDrawPicture=null;this.CurrentChartDrawPicture=null;this.MoveOnChartDrawPicture=null;if(this.ChartDrawStorage){this.ChartDrawStorageCache=this.ChartDrawStorage.GetDrawData({Symbol:this.Symbol,Period:888888888});}};this.CreateChartDrawPictureByStorage=function()//把缓存(this.ChartDrawStorageCache) 画图工具创建出来
9352
- {var _this43=this;if(!this.ChartDrawStorageCache||this.ChartDrawStorageCache.length<=0)return;var self=this;for(var i=0;i<this.ChartDrawStorageCache.length;++i){var item=this.ChartDrawStorageCache[i];if(item.FrameID<0||!this.Frame.SubFrame||this.Frame.SubFrame.length<item.FrameID)continue;var drawPicture=IChartDrawPicture.CreateChartDrawPicture(item);if(!drawPicture)continue;drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame;//绑定框架坐标
9356
+ {var _this43=this;if(!this.ChartDrawStorageCache||this.ChartDrawStorageCache.length<=0)return;var kData=this.GetKData();for(var i=0;i<this.ChartDrawStorageCache.length;++i){var item=this.ChartDrawStorageCache[i];if(item.FrameID<0||!this.Frame.SubFrame||this.Frame.SubFrame.length<item.FrameID)continue;var drawPicture=IChartDrawPicture.CreateChartDrawPicture(item);if(!drawPicture)continue;drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[item.FrameID].Frame;//绑定框架坐标
9353
9357
  if(drawPicture.ImportStorageData)drawPicture.ImportStorageData(item);drawPicture.ResetXValue();drawPicture.UpdateXValue();drawPicture.ValueToPoint();drawPicture.GetActiveDrawPicture=function(){return _this43.GetActiveDrawPicture();};this.ChartDrawPicture.push(drawPicture);}this.ChartDrawStorageCache=null;//清空缓存
9354
9358
  };this.SetSizeChange=function(bChanged){this.Frame.SetSizeChage(bChanged);for(var i in this.ExtendChartPaint){var item=this.ExtendChartPaint[i];item.SizeChange=bChanged;}};this.SetSizeChage=this.SetSizeChange;//根据X坐标获取数据索引
9355
9359
  this.GetDataIndexByPoint=function(x){var frame=this.Frame;if(this.Frame.SubFrame&&this.Frame.SubFrame.length>0)frame=this.Frame.SubFrame[0].Frame;if(!frame)return;var value=frame.GetXData(x);var index=parseInt(value.toFixed(0));return index;};//不支持未来时间 目前只支持主图
@@ -15328,7 +15332,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
15328
15332
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
15329
15333
  * 版本信息输出
15330
15334
  *
15331
- */var HQCHART_VERSION="1.1.15038";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
15335
+ */var HQCHART_VERSION="1.1.15042";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
15332
15336
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
15333
15337
  // BaseIndex:BaseIndex,
15334
15338
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15039",
3
+ "version": "1.1.15043",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -422,7 +422,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
422
422
 
423
423
  if (option.DrawTool) //画图工具
424
424
  {
425
- if (option.DrawTool.StorageKey && chart.ChartDrawStorage) chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);
425
+ var item=option.DrawTool;
426
+ if (chart.ChartDrawStorage)
427
+ {
428
+ if (item.StorageKey) chart.ChartDrawStorage.Load(item.StorageKey);
429
+ if (IFrameSplitOperator.IsBool(item.EnableCrossPeriod)) chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;
430
+ }
431
+
426
432
  }
427
433
 
428
434
  if (option.KeyboardMove)
@@ -64630,10 +64636,89 @@ function IChartDrawPicture()
64630
64636
  }
64631
64637
  }
64632
64638
 
64633
- this.UpdateXValue=function() //通过datetime更新x的索引
64639
+ this.GetkData=function()
64634
64640
  {
64635
- if (!this.Frame) return false;
64641
+ if (!this.Frame) return null;
64636
64642
  var data=this.Frame.Data;
64643
+ if (!data) return null;
64644
+
64645
+ return data;
64646
+ }
64647
+
64648
+ //周期变动 X重新定位
64649
+ this.ChangePeriod=function(period)
64650
+ {
64651
+ var kData=this.GetkData();
64652
+ if (!kData) return;
64653
+
64654
+ var aryDateTime=[];
64655
+ for(var i=0; i<this.Value.length; ++i)
64656
+ {
64657
+ var item=this.Value[i];
64658
+ if (!item.DateTime) break;
64659
+ var dateTime={ Date:item.DateTime.Date, Time:0, Match:null };
64660
+ if (IFrameSplitOperator.IsNumber(item.DateTime.Time)) dateTime.Time=item.DateTime.Time;
64661
+ aryDateTime[i]=dateTime;
64662
+ }
64663
+
64664
+ var findCount=0;
64665
+ var perData=null;
64666
+ var perIndex=-1;
64667
+ for(var i=0, j=0;i<kData.Data.length;++i)
64668
+ {
64669
+ var kItem=kData.Data[i];
64670
+
64671
+ for(j=0;j<aryDateTime.length;++j)
64672
+ {
64673
+ var item=aryDateTime[j];
64674
+ if (item.Match) continue;
64675
+
64676
+ if (ChartData.IsDayPeriod(period, true))
64677
+ {
64678
+ if (kItem.Date>item.Date)
64679
+ {
64680
+ item.Match={ KItem:perData, Index:perIndex };
64681
+ ++findCount;
64682
+ }
64683
+ }
64684
+ else if (ChartData.IsMinutePeriod(period, true))
64685
+ {
64686
+ if (kItem.Date>item.Date || (kItem.Date==item.Date && kItem.Time>item.Time))
64687
+ {
64688
+ item.Match={ KItem:perData, Index:perIndex };
64689
+ ++findCount;
64690
+ }
64691
+ }
64692
+ }
64693
+
64694
+ perData=kItem;
64695
+ perIndex=i;
64696
+
64697
+ if (findCount>=aryDateTime.length) break;
64698
+ }
64699
+
64700
+ for(var i=0;i<aryDateTime.length;++i)
64701
+ {
64702
+ var item=aryDateTime[i];
64703
+ var valueItem=this.Value[i];
64704
+ if (item.Match && item.Match.KItem)
64705
+ {
64706
+ valueItem.DateTime={ Date:item.Match.Date, Time:item.Match.Time };
64707
+ valueItem.XValue=item.Match.Index;
64708
+ }
64709
+ else
64710
+ {
64711
+ valueItem.DateTime=null;
64712
+ valueItem.XValue=null;
64713
+ }
64714
+ }
64715
+
64716
+ this.Period=period;
64717
+ }
64718
+
64719
+ this.UpdateXValue=function() //通过datetime更新x的索引
64720
+ {
64721
+ var data=this.GetkData();
64637
64722
  if (!data) return false;
64638
64723
 
64639
64724
  var aryDateTime=[];
@@ -76343,9 +76428,12 @@ function ChartDrawTVShortPosition()
76343
76428
 
76344
76429
  function ChartDrawStorage()
76345
76430
  {
76346
- this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
76431
+ //this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
76432
+ this.DrawDataV2=new Map(); //画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
76433
+
76347
76434
  this.StorageKey;
76348
- this.GetEventCallback; //事件回调
76435
+ this.GetEventCallback; //事件回调
76436
+ this.EnableCrossPeriod=false; //跨周期
76349
76437
 
76350
76438
  this.Load=function(key) //从本地读取画图工具
76351
76439
  {
@@ -76358,18 +76446,39 @@ function ChartDrawStorage()
76358
76446
  if (typeof(cacheValue) != "string") return;
76359
76447
 
76360
76448
  var saveData=JSON.parse(cacheValue);
76361
- for(var i in saveData)
76362
- {
76363
- var item=saveData[i];
76364
- var drawMap=new Map();
76449
+ if (!saveData) return;
76365
76450
 
76366
- for(var j in item.Value)
76451
+ if (IFrameSplitOperator.IsNonEmptyArray(saveData)) //老版本 key=symbol-Period
76452
+ {
76453
+ for(var i=0;i<saveData.length;++i)
76367
76454
  {
76368
- var drawItem=item.Value[j];
76369
- drawMap.set(drawItem.Key, drawItem.Value);
76455
+ var item=saveData[i];
76456
+ for(var j=0;j<item.Value.length;++j)
76457
+ {
76458
+ var drawItem=item.Value[j];
76459
+ var symbol=drawItem.Value.Symbol;
76460
+ if (!this.DrawDataV2.has(symbol))
76461
+ this.DrawDataV2.set(symbol, {Symbol:symbol, MapPicture: new Map() });
76462
+
76463
+ var stockItem=this.DrawDataV2.get(symbol);
76464
+ stockItem.MapPicture.set(drawItem.Value.Guid, drawItem.Value);
76465
+ }
76370
76466
  }
76467
+ }
76468
+ else if (saveData.Ver==2.0 && IFrameSplitOperator.IsNonEmptyArray(saveData.Data))
76469
+ {
76470
+ for(var i=0;i<saveData.Data.length;++i)
76471
+ {
76472
+ var item=saveData.Data[i]; //{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
76473
+ var stockItem={ Symbol:item.Symbol, MapPicture:new Map() };
76474
+ for(var j=0; j<item.AryPicture.length;++j)
76475
+ {
76476
+ var drawItem=item.AryPicture[j];
76477
+ stockItem.MapPicture.set(drawItem.Guid, drawItem);
76478
+ }
76371
76479
 
76372
- this.DrawData.set(item.Key,drawMap);
76480
+ this.DrawDataV2.set(stockItem.Symbol,stockItem);
76481
+ }
76373
76482
  }
76374
76483
  }
76375
76484
 
@@ -76378,89 +76487,95 @@ function ChartDrawStorage()
76378
76487
  if (!this.StorageKey) return;
76379
76488
 
76380
76489
  var saveData=[];
76381
- for(var stock of this.DrawData)
76490
+ for(var mapItem of this.DrawDataV2)
76382
76491
  {
76383
- var key=stock[0];
76384
- var value=stock[1];
76385
- var itemData={ Key:key, Value:[]};
76492
+ var symbol=mapItem[0];
76493
+ var stockItem=mapItem[1];
76386
76494
 
76387
- for(var drawItem of value)
76495
+ var itemData={ Symbol:symbol, AryPicture:[] };
76496
+
76497
+ for(var pictureItem of stockItem.MapPicture)
76388
76498
  {
76389
- if (drawItem[1] && drawItem[1].EnableSave===false) continue;
76499
+ var drawItem=pictureItem[1];
76500
+ if (drawItem.EnableSave===false) continue;
76390
76501
 
76391
- itemData.Value.push({Key:drawItem[0], Value:drawItem[1]});
76502
+ itemData.AryPicture.push(drawItem);
76392
76503
  }
76393
76504
 
76394
- if (IFrameSplitOperator.IsNonEmptyArray(itemData.Value))
76505
+ if (IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))
76395
76506
  saveData.push(itemData);
76396
76507
  }
76397
76508
 
76398
76509
  JSConsole.Chart.Log(`[ChartDrawStorage::Save] save to localStorage, key=${this.StorageKey}`);
76399
- var strData=JSON.stringify(saveData);
76510
+ var strData=JSON.stringify({Ver:2.0, Data:saveData});
76400
76511
  localStorage[this.StorageKey]=strData;
76401
76512
  }
76402
76513
 
76403
- this.GetItemKey=function(obj) //生成每个画图工具的key
76404
- {
76405
- var strKey=`${obj.Symbol}-${obj.Period}`;
76406
- return strKey;
76407
- }
76408
-
76409
76514
  this.SaveDrawData=function(drawPicture) //保存一个画图工具
76410
76515
  {
76411
- var strKey=this.GetItemKey(drawPicture);
76516
+ var symbol=drawPicture.Symbol;
76412
76517
  var data=drawPicture.ExportStorageData();
76413
76518
  if (!data) return;
76414
76519
 
76415
- if (this.DrawData.has(strKey)) //更新
76520
+ if (this.DrawDataV2.has(symbol)) //更新
76416
76521
  {
76417
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data', strKey, drawPicture,data);
76418
- this.DrawData.get(strKey).set(data.Guid, data);
76522
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data', symbol, drawPicture, data);
76523
+ var stockItem=this.DrawDataV2.get(symbol);
76524
+ stockItem.MapPicture.set(data.Guid, data);
76419
76525
  }
76420
76526
  else //新增
76421
76527
  {
76422
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data', strKey, drawPicture,data);
76423
- var newData=new Map();
76424
- newData.set(data.Guid, data);
76425
- this.DrawData.set(strKey,newData);
76528
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data', symbol, drawPicture,data);
76529
+ var stockItem={ Symbol:symbol, MapPicture:new Map() } ;
76530
+ stockItem.set(data.Guid, data);
76531
+ this.DrawDataV2.set(symbol,newData);
76426
76532
  }
76427
76533
 
76428
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawData);
76534
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawDataV2);
76429
76535
 
76430
76536
  this.Save();
76431
76537
  }
76432
76538
 
76433
76539
  this.DeleteDrawData=function(drawPicture) //删除一个画图工具
76434
76540
  {
76435
- var strKey=this.GetItemKey(drawPicture);
76436
- if (!this.DrawData.has(strKey)) return;
76541
+ var symbol=drawPicture.Symbol;
76542
+ if (!this.DrawDataV2.has(symbol)) return;
76437
76543
 
76438
- var mapDraw=this.DrawData.get(strKey);
76439
- if (!mapDraw.has(drawPicture.Guid)) return;
76544
+ var stockItem=this.DrawDataV2.get(symbol);
76545
+ if (!stockItem.MapPicture.has(drawPicture.Guid)) return;
76440
76546
 
76441
- mapDraw.delete(drawPicture.Guid);
76547
+ stockItem.MapPicture.delete(drawPicture.Guid);
76442
76548
  this.Save();
76443
76549
  }
76444
76550
 
76445
76551
  this.Clear=function()
76446
76552
  {
76447
- this.DrawData=new Map();
76553
+ this.DrawDataV2=new Map();
76448
76554
  this.Save();
76449
76555
  }
76450
76556
 
76451
- this.GetDrawData=function(obj) //获取已有的画图工具数据{Symbol: , Period:, }
76557
+ this.GetDrawData=function(obj) //获取已有的画图工具数据{ Symbol: , Period:, }
76452
76558
  {
76453
- var data=[];
76454
- var strKey=this.GetItemKey(obj);
76455
- if (!this.DrawData.has(strKey)) return data;
76559
+ var aryData=[];
76560
+ var symbol=obj.Symbol;
76456
76561
 
76457
- var stockData=this.DrawData.get(strKey);
76458
- for(var item of stockData)
76562
+ if (!this.DrawDataV2.has(symbol)) return aryData;
76563
+
76564
+ var stockItem=this.DrawDataV2.get(symbol);
76565
+ for(var mapItem of stockItem.MapPicture)
76459
76566
  {
76460
- data.push(item[1]);
76567
+ var drawItem=mapItem[1];
76568
+ if (this.EnableCrossPeriod)
76569
+ {
76570
+ aryData.push(drawItem);
76571
+ }
76572
+ else
76573
+ {
76574
+ if (drawItem.Period==obj.Period) aryData.push(drawItem);
76575
+ }
76461
76576
  }
76462
76577
 
76463
- return data;
76578
+ return aryData;
76464
76579
  }
76465
76580
  }
76466
76581
 
@@ -87781,7 +87896,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
87781
87896
  drawPicture.Option=this.ChartDrawOption;
87782
87897
 
87783
87898
  if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
87784
- drawPicture.UpdateXValue();
87899
+ if (drawPicture.Period!=this.Period)
87900
+ {
87901
+ drawPicture.ChangePeriod(this.Period);
87902
+ }
87903
+ else
87904
+ {
87905
+ drawPicture.UpdateXValue();
87906
+ }
87907
+
87908
+
87785
87909
  drawPicture.ValueToPoint();
87786
87910
 
87787
87911
  var self=this;
@@ -95579,7 +95703,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
95579
95703
  {
95580
95704
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
95581
95705
 
95582
- var self=this;
95706
+ var kData=this.GetKData();
95583
95707
  for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
95584
95708
  {
95585
95709
  var item=this.ChartDrawStorageCache[i];
@@ -4518,7 +4518,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4518
4518
 
4519
4519
  if (option.DrawTool) //画图工具
4520
4520
  {
4521
- if (option.DrawTool.StorageKey && chart.ChartDrawStorage) chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);
4521
+ var item=option.DrawTool;
4522
+ if (chart.ChartDrawStorage)
4523
+ {
4524
+ if (item.StorageKey) chart.ChartDrawStorage.Load(item.StorageKey);
4525
+ if (IFrameSplitOperator.IsBool(item.EnableCrossPeriod)) chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;
4526
+ }
4527
+
4522
4528
  }
4523
4529
 
4524
4530
  if (option.KeyboardMove)
@@ -68726,10 +68732,89 @@ function IChartDrawPicture()
68726
68732
  }
68727
68733
  }
68728
68734
 
68729
- this.UpdateXValue=function() //通过datetime更新x的索引
68735
+ this.GetkData=function()
68730
68736
  {
68731
- if (!this.Frame) return false;
68737
+ if (!this.Frame) return null;
68732
68738
  var data=this.Frame.Data;
68739
+ if (!data) return null;
68740
+
68741
+ return data;
68742
+ }
68743
+
68744
+ //周期变动 X重新定位
68745
+ this.ChangePeriod=function(period)
68746
+ {
68747
+ var kData=this.GetkData();
68748
+ if (!kData) return;
68749
+
68750
+ var aryDateTime=[];
68751
+ for(var i=0; i<this.Value.length; ++i)
68752
+ {
68753
+ var item=this.Value[i];
68754
+ if (!item.DateTime) break;
68755
+ var dateTime={ Date:item.DateTime.Date, Time:0, Match:null };
68756
+ if (IFrameSplitOperator.IsNumber(item.DateTime.Time)) dateTime.Time=item.DateTime.Time;
68757
+ aryDateTime[i]=dateTime;
68758
+ }
68759
+
68760
+ var findCount=0;
68761
+ var perData=null;
68762
+ var perIndex=-1;
68763
+ for(var i=0, j=0;i<kData.Data.length;++i)
68764
+ {
68765
+ var kItem=kData.Data[i];
68766
+
68767
+ for(j=0;j<aryDateTime.length;++j)
68768
+ {
68769
+ var item=aryDateTime[j];
68770
+ if (item.Match) continue;
68771
+
68772
+ if (ChartData.IsDayPeriod(period, true))
68773
+ {
68774
+ if (kItem.Date>item.Date)
68775
+ {
68776
+ item.Match={ KItem:perData, Index:perIndex };
68777
+ ++findCount;
68778
+ }
68779
+ }
68780
+ else if (ChartData.IsMinutePeriod(period, true))
68781
+ {
68782
+ if (kItem.Date>item.Date || (kItem.Date==item.Date && kItem.Time>item.Time))
68783
+ {
68784
+ item.Match={ KItem:perData, Index:perIndex };
68785
+ ++findCount;
68786
+ }
68787
+ }
68788
+ }
68789
+
68790
+ perData=kItem;
68791
+ perIndex=i;
68792
+
68793
+ if (findCount>=aryDateTime.length) break;
68794
+ }
68795
+
68796
+ for(var i=0;i<aryDateTime.length;++i)
68797
+ {
68798
+ var item=aryDateTime[i];
68799
+ var valueItem=this.Value[i];
68800
+ if (item.Match && item.Match.KItem)
68801
+ {
68802
+ valueItem.DateTime={ Date:item.Match.Date, Time:item.Match.Time };
68803
+ valueItem.XValue=item.Match.Index;
68804
+ }
68805
+ else
68806
+ {
68807
+ valueItem.DateTime=null;
68808
+ valueItem.XValue=null;
68809
+ }
68810
+ }
68811
+
68812
+ this.Period=period;
68813
+ }
68814
+
68815
+ this.UpdateXValue=function() //通过datetime更新x的索引
68816
+ {
68817
+ var data=this.GetkData();
68733
68818
  if (!data) return false;
68734
68819
 
68735
68820
  var aryDateTime=[];
@@ -80439,9 +80524,12 @@ function ChartDrawTVShortPosition()
80439
80524
 
80440
80525
  function ChartDrawStorage()
80441
80526
  {
80442
- this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
80527
+ //this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80528
+ this.DrawDataV2=new Map(); //画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80529
+
80443
80530
  this.StorageKey;
80444
- this.GetEventCallback; //事件回调
80531
+ this.GetEventCallback; //事件回调
80532
+ this.EnableCrossPeriod=false; //跨周期
80445
80533
 
80446
80534
  this.Load=function(key) //从本地读取画图工具
80447
80535
  {
@@ -80454,18 +80542,39 @@ function ChartDrawStorage()
80454
80542
  if (typeof(cacheValue) != "string") return;
80455
80543
 
80456
80544
  var saveData=JSON.parse(cacheValue);
80457
- for(var i in saveData)
80458
- {
80459
- var item=saveData[i];
80460
- var drawMap=new Map();
80545
+ if (!saveData) return;
80461
80546
 
80462
- for(var j in item.Value)
80547
+ if (IFrameSplitOperator.IsNonEmptyArray(saveData)) //老版本 key=symbol-Period
80548
+ {
80549
+ for(var i=0;i<saveData.length;++i)
80463
80550
  {
80464
- var drawItem=item.Value[j];
80465
- drawMap.set(drawItem.Key, drawItem.Value);
80551
+ var item=saveData[i];
80552
+ for(var j=0;j<item.Value.length;++j)
80553
+ {
80554
+ var drawItem=item.Value[j];
80555
+ var symbol=drawItem.Value.Symbol;
80556
+ if (!this.DrawDataV2.has(symbol))
80557
+ this.DrawDataV2.set(symbol, {Symbol:symbol, MapPicture: new Map() });
80558
+
80559
+ var stockItem=this.DrawDataV2.get(symbol);
80560
+ stockItem.MapPicture.set(drawItem.Value.Guid, drawItem.Value);
80561
+ }
80466
80562
  }
80563
+ }
80564
+ else if (saveData.Ver==2.0 && IFrameSplitOperator.IsNonEmptyArray(saveData.Data))
80565
+ {
80566
+ for(var i=0;i<saveData.Data.length;++i)
80567
+ {
80568
+ var item=saveData.Data[i]; //{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
80569
+ var stockItem={ Symbol:item.Symbol, MapPicture:new Map() };
80570
+ for(var j=0; j<item.AryPicture.length;++j)
80571
+ {
80572
+ var drawItem=item.AryPicture[j];
80573
+ stockItem.MapPicture.set(drawItem.Guid, drawItem);
80574
+ }
80467
80575
 
80468
- this.DrawData.set(item.Key,drawMap);
80576
+ this.DrawDataV2.set(stockItem.Symbol,stockItem);
80577
+ }
80469
80578
  }
80470
80579
  }
80471
80580
 
@@ -80474,89 +80583,95 @@ function ChartDrawStorage()
80474
80583
  if (!this.StorageKey) return;
80475
80584
 
80476
80585
  var saveData=[];
80477
- for(var stock of this.DrawData)
80586
+ for(var mapItem of this.DrawDataV2)
80478
80587
  {
80479
- var key=stock[0];
80480
- var value=stock[1];
80481
- var itemData={ Key:key, Value:[]};
80588
+ var symbol=mapItem[0];
80589
+ var stockItem=mapItem[1];
80482
80590
 
80483
- for(var drawItem of value)
80591
+ var itemData={ Symbol:symbol, AryPicture:[] };
80592
+
80593
+ for(var pictureItem of stockItem.MapPicture)
80484
80594
  {
80485
- if (drawItem[1] && drawItem[1].EnableSave===false) continue;
80595
+ var drawItem=pictureItem[1];
80596
+ if (drawItem.EnableSave===false) continue;
80486
80597
 
80487
- itemData.Value.push({Key:drawItem[0], Value:drawItem[1]});
80598
+ itemData.AryPicture.push(drawItem);
80488
80599
  }
80489
80600
 
80490
- if (IFrameSplitOperator.IsNonEmptyArray(itemData.Value))
80601
+ if (IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))
80491
80602
  saveData.push(itemData);
80492
80603
  }
80493
80604
 
80494
80605
  JSConsole.Chart.Log(`[ChartDrawStorage::Save] save to localStorage, key=${this.StorageKey}`);
80495
- var strData=JSON.stringify(saveData);
80606
+ var strData=JSON.stringify({Ver:2.0, Data:saveData});
80496
80607
  localStorage[this.StorageKey]=strData;
80497
80608
  }
80498
80609
 
80499
- this.GetItemKey=function(obj) //生成每个画图工具的key
80500
- {
80501
- var strKey=`${obj.Symbol}-${obj.Period}`;
80502
- return strKey;
80503
- }
80504
-
80505
80610
  this.SaveDrawData=function(drawPicture) //保存一个画图工具
80506
80611
  {
80507
- var strKey=this.GetItemKey(drawPicture);
80612
+ var symbol=drawPicture.Symbol;
80508
80613
  var data=drawPicture.ExportStorageData();
80509
80614
  if (!data) return;
80510
80615
 
80511
- if (this.DrawData.has(strKey)) //更新
80616
+ if (this.DrawDataV2.has(symbol)) //更新
80512
80617
  {
80513
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data', strKey, drawPicture,data);
80514
- this.DrawData.get(strKey).set(data.Guid, data);
80618
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data', symbol, drawPicture, data);
80619
+ var stockItem=this.DrawDataV2.get(symbol);
80620
+ stockItem.MapPicture.set(data.Guid, data);
80515
80621
  }
80516
80622
  else //新增
80517
80623
  {
80518
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data', strKey, drawPicture,data);
80519
- var newData=new Map();
80520
- newData.set(data.Guid, data);
80521
- this.DrawData.set(strKey,newData);
80624
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data', symbol, drawPicture,data);
80625
+ var stockItem={ Symbol:symbol, MapPicture:new Map() } ;
80626
+ stockItem.set(data.Guid, data);
80627
+ this.DrawDataV2.set(symbol,newData);
80522
80628
  }
80523
80629
 
80524
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawData);
80630
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawDataV2);
80525
80631
 
80526
80632
  this.Save();
80527
80633
  }
80528
80634
 
80529
80635
  this.DeleteDrawData=function(drawPicture) //删除一个画图工具
80530
80636
  {
80531
- var strKey=this.GetItemKey(drawPicture);
80532
- if (!this.DrawData.has(strKey)) return;
80637
+ var symbol=drawPicture.Symbol;
80638
+ if (!this.DrawDataV2.has(symbol)) return;
80533
80639
 
80534
- var mapDraw=this.DrawData.get(strKey);
80535
- if (!mapDraw.has(drawPicture.Guid)) return;
80640
+ var stockItem=this.DrawDataV2.get(symbol);
80641
+ if (!stockItem.MapPicture.has(drawPicture.Guid)) return;
80536
80642
 
80537
- mapDraw.delete(drawPicture.Guid);
80643
+ stockItem.MapPicture.delete(drawPicture.Guid);
80538
80644
  this.Save();
80539
80645
  }
80540
80646
 
80541
80647
  this.Clear=function()
80542
80648
  {
80543
- this.DrawData=new Map();
80649
+ this.DrawDataV2=new Map();
80544
80650
  this.Save();
80545
80651
  }
80546
80652
 
80547
- this.GetDrawData=function(obj) //获取已有的画图工具数据{Symbol: , Period:, }
80653
+ this.GetDrawData=function(obj) //获取已有的画图工具数据{ Symbol: , Period:, }
80548
80654
  {
80549
- var data=[];
80550
- var strKey=this.GetItemKey(obj);
80551
- if (!this.DrawData.has(strKey)) return data;
80655
+ var aryData=[];
80656
+ var symbol=obj.Symbol;
80552
80657
 
80553
- var stockData=this.DrawData.get(strKey);
80554
- for(var item of stockData)
80658
+ if (!this.DrawDataV2.has(symbol)) return aryData;
80659
+
80660
+ var stockItem=this.DrawDataV2.get(symbol);
80661
+ for(var mapItem of stockItem.MapPicture)
80555
80662
  {
80556
- data.push(item[1]);
80663
+ var drawItem=mapItem[1];
80664
+ if (this.EnableCrossPeriod)
80665
+ {
80666
+ aryData.push(drawItem);
80667
+ }
80668
+ else
80669
+ {
80670
+ if (drawItem.Period==obj.Period) aryData.push(drawItem);
80671
+ }
80557
80672
  }
80558
80673
 
80559
- return data;
80674
+ return aryData;
80560
80675
  }
80561
80676
  }
80562
80677
 
@@ -91877,7 +91992,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
91877
91992
  drawPicture.Option=this.ChartDrawOption;
91878
91993
 
91879
91994
  if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
91880
- drawPicture.UpdateXValue();
91995
+ if (drawPicture.Period!=this.Period)
91996
+ {
91997
+ drawPicture.ChangePeriod(this.Period);
91998
+ }
91999
+ else
92000
+ {
92001
+ drawPicture.UpdateXValue();
92002
+ }
92003
+
92004
+
91881
92005
  drawPicture.ValueToPoint();
91882
92006
 
91883
92007
  var self=this;
@@ -99675,7 +99799,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
99675
99799
  {
99676
99800
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
99677
99801
 
99678
- var self=this;
99802
+ var kData=this.GetKData();
99679
99803
  for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
99680
99804
  {
99681
99805
  var item=this.ChartDrawStorageCache[i];
@@ -153171,7 +153295,7 @@ function ScrollBarBGChart()
153171
153295
 
153172
153296
 
153173
153297
 
153174
- var HQCHART_VERSION="1.1.15038";
153298
+ var HQCHART_VERSION="1.1.15042";
153175
153299
 
153176
153300
  function PrintHQChartVersion()
153177
153301
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15038";
8
+ var HQCHART_VERSION="1.1.15042";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -4562,7 +4562,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4562
4562
 
4563
4563
  if (option.DrawTool) //画图工具
4564
4564
  {
4565
- if (option.DrawTool.StorageKey && chart.ChartDrawStorage) chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);
4565
+ var item=option.DrawTool;
4566
+ if (chart.ChartDrawStorage)
4567
+ {
4568
+ if (item.StorageKey) chart.ChartDrawStorage.Load(item.StorageKey);
4569
+ if (IFrameSplitOperator.IsBool(item.EnableCrossPeriod)) chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;
4570
+ }
4571
+
4566
4572
  }
4567
4573
 
4568
4574
  if (option.KeyboardMove)
@@ -68770,10 +68776,89 @@ function IChartDrawPicture()
68770
68776
  }
68771
68777
  }
68772
68778
 
68773
- this.UpdateXValue=function() //通过datetime更新x的索引
68779
+ this.GetkData=function()
68774
68780
  {
68775
- if (!this.Frame) return false;
68781
+ if (!this.Frame) return null;
68776
68782
  var data=this.Frame.Data;
68783
+ if (!data) return null;
68784
+
68785
+ return data;
68786
+ }
68787
+
68788
+ //周期变动 X重新定位
68789
+ this.ChangePeriod=function(period)
68790
+ {
68791
+ var kData=this.GetkData();
68792
+ if (!kData) return;
68793
+
68794
+ var aryDateTime=[];
68795
+ for(var i=0; i<this.Value.length; ++i)
68796
+ {
68797
+ var item=this.Value[i];
68798
+ if (!item.DateTime) break;
68799
+ var dateTime={ Date:item.DateTime.Date, Time:0, Match:null };
68800
+ if (IFrameSplitOperator.IsNumber(item.DateTime.Time)) dateTime.Time=item.DateTime.Time;
68801
+ aryDateTime[i]=dateTime;
68802
+ }
68803
+
68804
+ var findCount=0;
68805
+ var perData=null;
68806
+ var perIndex=-1;
68807
+ for(var i=0, j=0;i<kData.Data.length;++i)
68808
+ {
68809
+ var kItem=kData.Data[i];
68810
+
68811
+ for(j=0;j<aryDateTime.length;++j)
68812
+ {
68813
+ var item=aryDateTime[j];
68814
+ if (item.Match) continue;
68815
+
68816
+ if (ChartData.IsDayPeriod(period, true))
68817
+ {
68818
+ if (kItem.Date>item.Date)
68819
+ {
68820
+ item.Match={ KItem:perData, Index:perIndex };
68821
+ ++findCount;
68822
+ }
68823
+ }
68824
+ else if (ChartData.IsMinutePeriod(period, true))
68825
+ {
68826
+ if (kItem.Date>item.Date || (kItem.Date==item.Date && kItem.Time>item.Time))
68827
+ {
68828
+ item.Match={ KItem:perData, Index:perIndex };
68829
+ ++findCount;
68830
+ }
68831
+ }
68832
+ }
68833
+
68834
+ perData=kItem;
68835
+ perIndex=i;
68836
+
68837
+ if (findCount>=aryDateTime.length) break;
68838
+ }
68839
+
68840
+ for(var i=0;i<aryDateTime.length;++i)
68841
+ {
68842
+ var item=aryDateTime[i];
68843
+ var valueItem=this.Value[i];
68844
+ if (item.Match && item.Match.KItem)
68845
+ {
68846
+ valueItem.DateTime={ Date:item.Match.Date, Time:item.Match.Time };
68847
+ valueItem.XValue=item.Match.Index;
68848
+ }
68849
+ else
68850
+ {
68851
+ valueItem.DateTime=null;
68852
+ valueItem.XValue=null;
68853
+ }
68854
+ }
68855
+
68856
+ this.Period=period;
68857
+ }
68858
+
68859
+ this.UpdateXValue=function() //通过datetime更新x的索引
68860
+ {
68861
+ var data=this.GetkData();
68777
68862
  if (!data) return false;
68778
68863
 
68779
68864
  var aryDateTime=[];
@@ -80483,9 +80568,12 @@ function ChartDrawTVShortPosition()
80483
80568
 
80484
80569
  function ChartDrawStorage()
80485
80570
  {
80486
- this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
80571
+ //this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80572
+ this.DrawDataV2=new Map(); //画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80573
+
80487
80574
  this.StorageKey;
80488
- this.GetEventCallback; //事件回调
80575
+ this.GetEventCallback; //事件回调
80576
+ this.EnableCrossPeriod=false; //跨周期
80489
80577
 
80490
80578
  this.Load=function(key) //从本地读取画图工具
80491
80579
  {
@@ -80498,18 +80586,39 @@ function ChartDrawStorage()
80498
80586
  if (typeof(cacheValue) != "string") return;
80499
80587
 
80500
80588
  var saveData=JSON.parse(cacheValue);
80501
- for(var i in saveData)
80502
- {
80503
- var item=saveData[i];
80504
- var drawMap=new Map();
80589
+ if (!saveData) return;
80505
80590
 
80506
- for(var j in item.Value)
80591
+ if (IFrameSplitOperator.IsNonEmptyArray(saveData)) //老版本 key=symbol-Period
80592
+ {
80593
+ for(var i=0;i<saveData.length;++i)
80507
80594
  {
80508
- var drawItem=item.Value[j];
80509
- drawMap.set(drawItem.Key, drawItem.Value);
80595
+ var item=saveData[i];
80596
+ for(var j=0;j<item.Value.length;++j)
80597
+ {
80598
+ var drawItem=item.Value[j];
80599
+ var symbol=drawItem.Value.Symbol;
80600
+ if (!this.DrawDataV2.has(symbol))
80601
+ this.DrawDataV2.set(symbol, {Symbol:symbol, MapPicture: new Map() });
80602
+
80603
+ var stockItem=this.DrawDataV2.get(symbol);
80604
+ stockItem.MapPicture.set(drawItem.Value.Guid, drawItem.Value);
80605
+ }
80510
80606
  }
80607
+ }
80608
+ else if (saveData.Ver==2.0 && IFrameSplitOperator.IsNonEmptyArray(saveData.Data))
80609
+ {
80610
+ for(var i=0;i<saveData.Data.length;++i)
80611
+ {
80612
+ var item=saveData.Data[i]; //{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
80613
+ var stockItem={ Symbol:item.Symbol, MapPicture:new Map() };
80614
+ for(var j=0; j<item.AryPicture.length;++j)
80615
+ {
80616
+ var drawItem=item.AryPicture[j];
80617
+ stockItem.MapPicture.set(drawItem.Guid, drawItem);
80618
+ }
80511
80619
 
80512
- this.DrawData.set(item.Key,drawMap);
80620
+ this.DrawDataV2.set(stockItem.Symbol,stockItem);
80621
+ }
80513
80622
  }
80514
80623
  }
80515
80624
 
@@ -80518,89 +80627,95 @@ function ChartDrawStorage()
80518
80627
  if (!this.StorageKey) return;
80519
80628
 
80520
80629
  var saveData=[];
80521
- for(var stock of this.DrawData)
80630
+ for(var mapItem of this.DrawDataV2)
80522
80631
  {
80523
- var key=stock[0];
80524
- var value=stock[1];
80525
- var itemData={ Key:key, Value:[]};
80632
+ var symbol=mapItem[0];
80633
+ var stockItem=mapItem[1];
80526
80634
 
80527
- for(var drawItem of value)
80635
+ var itemData={ Symbol:symbol, AryPicture:[] };
80636
+
80637
+ for(var pictureItem of stockItem.MapPicture)
80528
80638
  {
80529
- if (drawItem[1] && drawItem[1].EnableSave===false) continue;
80639
+ var drawItem=pictureItem[1];
80640
+ if (drawItem.EnableSave===false) continue;
80530
80641
 
80531
- itemData.Value.push({Key:drawItem[0], Value:drawItem[1]});
80642
+ itemData.AryPicture.push(drawItem);
80532
80643
  }
80533
80644
 
80534
- if (IFrameSplitOperator.IsNonEmptyArray(itemData.Value))
80645
+ if (IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))
80535
80646
  saveData.push(itemData);
80536
80647
  }
80537
80648
 
80538
80649
  JSConsole.Chart.Log(`[ChartDrawStorage::Save] save to localStorage, key=${this.StorageKey}`);
80539
- var strData=JSON.stringify(saveData);
80650
+ var strData=JSON.stringify({Ver:2.0, Data:saveData});
80540
80651
  localStorage[this.StorageKey]=strData;
80541
80652
  }
80542
80653
 
80543
- this.GetItemKey=function(obj) //生成每个画图工具的key
80544
- {
80545
- var strKey=`${obj.Symbol}-${obj.Period}`;
80546
- return strKey;
80547
- }
80548
-
80549
80654
  this.SaveDrawData=function(drawPicture) //保存一个画图工具
80550
80655
  {
80551
- var strKey=this.GetItemKey(drawPicture);
80656
+ var symbol=drawPicture.Symbol;
80552
80657
  var data=drawPicture.ExportStorageData();
80553
80658
  if (!data) return;
80554
80659
 
80555
- if (this.DrawData.has(strKey)) //更新
80660
+ if (this.DrawDataV2.has(symbol)) //更新
80556
80661
  {
80557
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data', strKey, drawPicture,data);
80558
- this.DrawData.get(strKey).set(data.Guid, data);
80662
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data', symbol, drawPicture, data);
80663
+ var stockItem=this.DrawDataV2.get(symbol);
80664
+ stockItem.MapPicture.set(data.Guid, data);
80559
80665
  }
80560
80666
  else //新增
80561
80667
  {
80562
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data', strKey, drawPicture,data);
80563
- var newData=new Map();
80564
- newData.set(data.Guid, data);
80565
- this.DrawData.set(strKey,newData);
80668
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data', symbol, drawPicture,data);
80669
+ var stockItem={ Symbol:symbol, MapPicture:new Map() } ;
80670
+ stockItem.set(data.Guid, data);
80671
+ this.DrawDataV2.set(symbol,newData);
80566
80672
  }
80567
80673
 
80568
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawData);
80674
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawDataV2);
80569
80675
 
80570
80676
  this.Save();
80571
80677
  }
80572
80678
 
80573
80679
  this.DeleteDrawData=function(drawPicture) //删除一个画图工具
80574
80680
  {
80575
- var strKey=this.GetItemKey(drawPicture);
80576
- if (!this.DrawData.has(strKey)) return;
80681
+ var symbol=drawPicture.Symbol;
80682
+ if (!this.DrawDataV2.has(symbol)) return;
80577
80683
 
80578
- var mapDraw=this.DrawData.get(strKey);
80579
- if (!mapDraw.has(drawPicture.Guid)) return;
80684
+ var stockItem=this.DrawDataV2.get(symbol);
80685
+ if (!stockItem.MapPicture.has(drawPicture.Guid)) return;
80580
80686
 
80581
- mapDraw.delete(drawPicture.Guid);
80687
+ stockItem.MapPicture.delete(drawPicture.Guid);
80582
80688
  this.Save();
80583
80689
  }
80584
80690
 
80585
80691
  this.Clear=function()
80586
80692
  {
80587
- this.DrawData=new Map();
80693
+ this.DrawDataV2=new Map();
80588
80694
  this.Save();
80589
80695
  }
80590
80696
 
80591
- this.GetDrawData=function(obj) //获取已有的画图工具数据{Symbol: , Period:, }
80697
+ this.GetDrawData=function(obj) //获取已有的画图工具数据{ Symbol: , Period:, }
80592
80698
  {
80593
- var data=[];
80594
- var strKey=this.GetItemKey(obj);
80595
- if (!this.DrawData.has(strKey)) return data;
80699
+ var aryData=[];
80700
+ var symbol=obj.Symbol;
80596
80701
 
80597
- var stockData=this.DrawData.get(strKey);
80598
- for(var item of stockData)
80702
+ if (!this.DrawDataV2.has(symbol)) return aryData;
80703
+
80704
+ var stockItem=this.DrawDataV2.get(symbol);
80705
+ for(var mapItem of stockItem.MapPicture)
80599
80706
  {
80600
- data.push(item[1]);
80707
+ var drawItem=mapItem[1];
80708
+ if (this.EnableCrossPeriod)
80709
+ {
80710
+ aryData.push(drawItem);
80711
+ }
80712
+ else
80713
+ {
80714
+ if (drawItem.Period==obj.Period) aryData.push(drawItem);
80715
+ }
80601
80716
  }
80602
80717
 
80603
- return data;
80718
+ return aryData;
80604
80719
  }
80605
80720
  }
80606
80721
 
@@ -91921,7 +92036,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
91921
92036
  drawPicture.Option=this.ChartDrawOption;
91922
92037
 
91923
92038
  if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
91924
- drawPicture.UpdateXValue();
92039
+ if (drawPicture.Period!=this.Period)
92040
+ {
92041
+ drawPicture.ChangePeriod(this.Period);
92042
+ }
92043
+ else
92044
+ {
92045
+ drawPicture.UpdateXValue();
92046
+ }
92047
+
92048
+
91925
92049
  drawPicture.ValueToPoint();
91926
92050
 
91927
92051
  var self=this;
@@ -99719,7 +99843,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
99719
99843
  {
99720
99844
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
99721
99845
 
99722
- var self=this;
99846
+ var kData=this.GetKData();
99723
99847
  for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
99724
99848
  {
99725
99849
  var item=this.ChartDrawStorageCache[i];
@@ -165017,7 +165141,7 @@ function HQChartScriptWorker()
165017
165141
 
165018
165142
 
165019
165143
 
165020
- var HQCHART_VERSION="1.1.15038";
165144
+ var HQCHART_VERSION="1.1.15042";
165021
165145
 
165022
165146
  function PrintHQChartVersion()
165023
165147
  {