hqchart 1.1.12920 → 1.1.12935

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.
@@ -49,7 +49,8 @@ JSNetwork.HttpReqeust=function(obj) //对请求进行封装
49
49
  StringFormat: 1=带单位万/亿 2=原始格式
50
50
  Condition: 限制条件 { Symbol:'Index'/'Stock'(只支持指数/股票),Period:[](支持的周期), Include:[](指定支持的股票,代码全部大写包括后缀, Message:"提示信息")}
51
51
  OutName:动态输出变量名字 [{Name:原始变量名, DynamicName:动态名字格式}] 如 {Name:"MA1", DynamicName:"MA{M1}"};
52
- SplitType: Y轴分割类型
52
+ SplitType: Y轴分割类型,
53
+ YAxis:{ FloatPrecision:小数位数, StringFormat:, EnableRemoveZero } //Y轴刻度输出格式
53
54
  *///周期条件枚举
54
55
  var CONDITION_PERIOD={MINUTE_ID:101,//分钟 走势图
55
56
  MULTIDAY_MINUTE_ID:102,//多日分钟 走势图
@@ -65,7 +66,9 @@ this.Get=function(id){if(!this.DataMap.has(id))return null;return this.DataMap.g
65
66
  ['五彩K线-十字星',this.COLOR_KSTAR1],['五彩K线-早晨之星',this.COLOR_KSTAR2],['五彩K线-黄昏之星',this.COLOR_KSTAR3],['五彩K线-长十字',this.COLOR_SHI1],['五彩K线-身怀六甲',this.COLOR_K220],['五彩K线-三个白武士',this.COLOR_K300],['五彩K线-三只乌鸦',this.COLOR_K310],['五彩K线-光头阳线',this.COLOR_K380],['五彩K线-光脚阴线',this.COLOR_K390],['五彩K线-垂死十字',this.COLOR_K134],['五彩K线-早晨十字星',this.COLOR_K140],['五彩K线-黄昏十字星',this.COLOR_K150],['五彩K线-射击之星',this.COLOR_K160],['五彩K线-倒转锤头',this.COLOR_K165],['五彩K线-锤头',this.COLOR_K170],['五彩K线-吊颈',this.COLOR_K180],['五彩K线-穿头破脚',this.COLOR_K190],['五彩K线-出水芙蓉',this.COLOR_CSFR],['五彩K线-乌云盖顶',this.COLOR_WYGD],['五彩K线-曙光初现',this.COLOR_SGCJ],['五彩K线-十字胎',this.COLOR_SZTAI],['五彩K线-剑',this.COLOR_SWORD],['五彩K线-平顶',this.COLOR_PINGDING],['五彩K线-平底',this.COLOR_PINGDI],['五彩K线-大阳烛',this.COLOR_DAYANZHU],['五彩K线-大阴烛',this.COLOR_DAYINGZHU],['五彩K线-好友反攻',this.COLOR_HYFG],['五彩K线-跳空缺口',this.COLOR_TKQK],['五彩K线-双飞乌鸦',this.COLOR_SFWY],['五彩K线-上升三部曲',this.COLOR_SSSBQ],['五彩K线-下跌三部曲',this.COLOR_XDSBQ],['五彩K线-长下影',this.COLOR_CHXY],['五彩K线-长上影',this.COLOR_CHSY],['五彩K线-分离',this.COLOR_FENLI],//交易系统
66
67
  ['交易系统-BIAS',this.TRADE_BIAS],['交易系统-CCI',this.TRADE_CCI],['交易系统-DMI',this.TRADE_DMI],['交易系统-KD',this.TRADE_KD],['交易系统-BOLL',this.TRADE_BOLL],['交易系统-KDJ',this.TRADE_KDJ],['交易系统-MA',this.TRADE_MA],['交易系统-MACD',this.TRADE_MACD],['交易系统-MTM',this.TRADE_MTM],['交易系统-PSY',this.TRADE_PSY],['交易系统-ROC',this.TRADE_ROC],['交易系统-RSI',this.TRADE_RSI],['交易系统-VR',this.TRADE_VR],['交易系统-DPSJ',this.TRADE_DPSJ],['TEST',this.TEST]//测试用
67
68
  ]);}JSIndexScript.AddIndex=function(aryIndex)//添加自定义指标
68
- {for(var i in aryIndex){g_CustomIndex.Add(aryIndex[i]);}};JSIndexScript.prototype.Get=function(id){var data=g_CustomIndex.Get(id);if(data)return data;var func=this.DataMap.get(id);if(func){var data=func();data.ID=id;return data;}return null;};JSIndexScript.prototype.Search=function(name){var result=[];var reg=new RegExp(name,'i');this.DataMap.forEach(function(value,key){if(key.indexOf('交易系统-')!=0&&key.indexOf('五彩K线-')!=0&&key.search(reg)>=0)result.push(key);});return result;};JSIndexScript.prototype.MA=function(){var data={Name:'MA',Description:'均线',IsMainIndex:true,StringFormat:2,Args:[{Name:'M1',Value:5},{Name:'M2',Value:10},{Name:'M3',Value:20}],OutName:[{Name:'MA1',DynamicName:"MA{M1}"},{Name:'MA2',DynamicName:"MA{M2}"},{Name:'MA3',DynamicName:"MA{M3}"}],Script://脚本
69
+ {for(var i in aryIndex){g_CustomIndex.Add(aryIndex[i]);}};//修改指标属性
70
+ JSIndexScript.ModifyAttribute=function(indexInfo,attribute){if(!attribute)return;if(attribute.Args)indexInfo.Args=attribute.Args;//外部可以设置参数
71
+ if(IFrameSplitOperator.IsNumber(attribute.FloatPrecision))indexInfo.FloatPrecision=attribute.FloatPrecision;if(IFrameSplitOperator.IsNumber(attribute.StringFormat))indexInfo.StringFormat=attribute.StringFormat;if(IFrameSplitOperator.IsBool(attribute.IsSync))indexInfo.IsSync=attribute.IsSync;if(IFrameSplitOperator.IsBool(attribute.IsShortTitle))indexInfo.IsShortTitle=attribute.IsShortTitle;if(attribute.TitleFont)indexInfo.TitleFont=attribute.TitleFont;if(attribute.Lock)indexInfo.Lock=attribute.Lock;if(attribute.YAxis){var item=attribute.YAxis;if(!indexInfo.YAxis)indexInfo.YAxis={};if(IFrameSplitOperator.IsNumber(item.FloatPrecision))indexInfo.YAxis.FloatPrecision=item.FloatPrecision;if(IFrameSplitOperator.IsNumber(item.StringFormat))indexInfo.YAxis.StringFormat=item.StringFormat;if(IFrameSplitOperator.IsBool(item.EnableRemoveZero))indexInfo.YAxis.EnableRemoveZero=item.EnableRemoveZero;}};JSIndexScript.prototype.Get=function(id){var data=g_CustomIndex.Get(id);if(data)return data;var func=this.DataMap.get(id);if(func){var data=func();data.ID=id;return data;}return null;};JSIndexScript.prototype.Search=function(name){var result=[];var reg=new RegExp(name,'i');this.DataMap.forEach(function(value,key){if(key.indexOf('交易系统-')!=0&&key.indexOf('五彩K线-')!=0&&key.search(reg)>=0)result.push(key);});return result;};JSIndexScript.prototype.MA=function(){var data={Name:'MA',Description:'均线',IsMainIndex:true,StringFormat:2,Args:[{Name:'M1',Value:5},{Name:'M2',Value:10},{Name:'M3',Value:20}],OutName:[{Name:'MA1',DynamicName:"MA{M1}"},{Name:'MA2',DynamicName:"MA{M2}"},{Name:'MA3',DynamicName:"MA{M3}"}],Script://脚本
69
72
  'MA1:MA(CLOSE,M1);\n\
70
73
  MA2:MA(CLOSE,M2);\n\
71
74
  MA3:MA(CLOSE,M3);'};return data;};JSIndexScript.prototype.MA4=function(){var data={Name:'MA',Description:'均线',IsMainIndex:true,StringFormat:2,Args:[{Name:'M1',Value:5},{Name:'M2',Value:10},{Name:'M3',Value:20},{Name:'M4',Value:60}],OutName:[{Name:'MA1',DynamicName:"MA{M1}"},{Name:'MA2',DynamicName:"MA{M2}"},{Name:'MA3',DynamicName:"MA{M3}"},{Name:'MA4',DynamicName:"MA{M4}"}],Script://脚本
@@ -373,7 +376,7 @@ STICKLINE(SS == -1 OR SM <= -1 AND SS == 0, B1, C, 10, 0), COLORCYAN;\n\
373
376
  STICKLINE(SS == 2, B2, C, 10, 1), COLORRED;\n\
374
377
  STICKLINE(SS == -2, B2, C, 10, 0), COLORCYAN;\n\
375
378
  STICKLINE((SS == -1 OR SS == -2) AND SM > 0, B2, B1, 10, 1), COLORRED;\n\
376
- STICKLINE((SS == 1 OR SS == 2) AND SM < 0, B2, B1, 10, 0), COLORCYAN;'};return data;};JSIndexScript.prototype.AMO=function(){var data={Name:'AMO',Description:'成交金额',IsMainIndex:false,Args:[{Name:'M1',Value:5},{Name:'M2',Value:10}],Script://脚本
379
+ STICKLINE((SS == 1 OR SS == 2) AND SM < 0, B2, B1, 10, 0), COLORCYAN;'};return data;};JSIndexScript.prototype.AMO=function(){var data={Name:'AMO',Description:'成交金额',IsMainIndex:false,StringFormat:2,YAxis:{FloatPrecision:0,StringFormat:2},Args:[{Name:'M1',Value:5},{Name:'M2',Value:10}],Script://脚本
377
380
  'AMOW:AMOUNT/10000.0,VOLSTICK;\n\
378
381
  AMO1:MA(AMOW,M1);\n\
379
382
  AMO2:MA(AMOW,M2);'};return data;};JSIndexScript.prototype.VRSI=function(){var data={Name:'VRSI',Description:'相对强弱量',IsMainIndex:false,Args:[{Name:'N1',Value:6},{Name:'N2',Value:12},{Name:'N3',Value:24}],Script://脚本
@@ -1384,7 +1387,7 @@ var scriptData=new JSIndexScript();if(option.ColorIndex)//五彩K线
1384
1387
  }}for(var i=0;i<option.Windows.length;++i){var item=option.Windows[i];if(item.Script){chart.WindowIndex[i]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
1385
1388
  }else if(item.JsonData){chart.WindowIndex[i]=new JsonDataIndex(item.Name,item.Script,item.Args,item);//脚本执行
1386
1389
  }else if(item.Local&&item.Local.Data){chart.WindowIndex[i]=new LocalJsonDataIndex(item.Local.Name,item.Local.Args,{JsonData:item.Local.Data});}else if(item.API)//使用API挂接指标数据 API:{ Name:指标名字, Script:指标脚本可以为空, Args:参数可以为空, Url:指标执行地址 }
1387
- {var apiItem=item.API;chart.WindowIndex[i]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexItem=JSIndexMap.Get(item.Index);if(indexItem){chart.WindowIndex[i]=indexItem.Create(item.Option);if(chart.WindowIndex[i].SetArgs)chart.WindowIndex[i].SetArgs(item.Args);chart.CreateWindowIndex(i);}else{var _indexInfo2=scriptData.Get(item.Index);if(!_indexInfo2)continue;if(item.Lock)_indexInfo2.Lock=item.Lock;_indexInfo2.ID=item.Index;var args=_indexInfo2.Args;if(item.Args)args=item.Args;if(item.IsShortTitle)_indexInfo2.IsShortTitle=item.IsShortTitle;if(item.TitleFont)_indexInfo2.TitleFont=item.TitleFont;if(IFrameSplitOperator.IsBool(item.IsSync))_indexInfo2.IsSync=item.IsSync;chart.WindowIndex[i]=new ScriptIndex(_indexInfo2.Name,_indexInfo2.Script,args,_indexInfo2);//脚本执行
1390
+ {var apiItem=item.API;chart.WindowIndex[i]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexItem=JSIndexMap.Get(item.Index);if(indexItem){chart.WindowIndex[i]=indexItem.Create(item.Option);if(chart.WindowIndex[i].SetArgs)chart.WindowIndex[i].SetArgs(item.Args);chart.CreateWindowIndex(i);}else{var _indexInfo2=scriptData.Get(item.Index);if(!_indexInfo2)continue;JSIndexScript.ModifyAttribute(_indexInfo2,item);_indexInfo2.ID=item.Index;chart.WindowIndex[i]=new ScriptIndex(_indexInfo2.Name,_indexInfo2.Script,_indexInfo2.Args,_indexInfo2);//脚本执行
1388
1391
  if(item.StringFormat>0)chart.WindowIndex[i].StringFormat=item.StringFormat;if(item.FloatPrecision>=0)chart.WindowIndex[i].FloatPrecision=item.FloatPrecision;}}var frame=chart.Frame.SubFrame[i].Frame;if(IFrameSplitOperator.IsBool(item.Modify))frame.ModifyIndex=item.Modify;if(IFrameSplitOperator.IsBool(item.Change))frame.ChangeIndex=item.Change;if(IFrameSplitOperator.IsBool(item.Close))frame.CloseIndex=item.Close;if(IFrameSplitOperator.IsBool(item.Overlay))frame.OverlayIndex=item.Overlay;if(IFrameSplitOperator.IsBool(item.Export))frame.ExportData=item.Export;if(IFrameSplitOperator.IsBool(item.MaxMin))chart.Frame.SubFrame[i].Frame.MaxMinWindow=item.MaxMin;if(IFrameSplitOperator.IsBool(item.TitleWindow))chart.Frame.SubFrame[i].Frame.TitleWindow=item.TitleWindow;if(item.IsDrawTitleBG==true)chart.Frame.SubFrame[i].Frame.IsDrawTitleBG=item.IsDrawTitleBG;if(IFrameSplitOperator.IsBool(item.IsShowNameArrow))chart.Frame.SubFrame[i].Frame.IsShowNameArrow=item.IsShowNameArrow;if(IFrameSplitOperator.IsNumber(item.TitleHeight))chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight=item.TitleHeight;else item.TitleHeight=chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight;if(IFrameSplitOperator.IsBool(item.IsShowTitleArrow))chart.Frame.SubFrame[i].Frame.IsShowTitleArrow=item.IsShowTitleArrow;if(item.IsShowIndexName==false)chart.Frame.SubFrame[i].Frame.IsShowIndexName=false;if(item.IsShowOverlayIndexName==false)chart.Frame.SubFrame[i].Frame.IsShowOverlayIndexName=false;if(IFrameSplitOperator.IsNumber(item.IndexParamSpace))chart.Frame.SubFrame[i].Frame.IndexParamSpace=item.IndexParamSpace;if(IFrameSplitOperator.IsNumber(item.IndexTitleSpace))chart.Frame.SubFrame[i].Frame.IndexTitleSpace=item.IndexTitleSpace;if(item.OverlayIndexType){if(IFrameSplitOperator.IsNumber(item.OverlayIndexType.Position))chart.Frame.SubFrame[i].Frame.OverlayIndexType.Position=item.OverlayIndexType.Position;if(IFrameSplitOperator.IsNumber(item.OverlayIndexType.LineSpace))chart.Frame.SubFrame[i].Frame.OverlayIndexType.LineSpace=item.OverlayIndexType.LineSpace;}}//叠加指标宽度
1389
1392
  if(option.OverlayIndexFrameWidth>40)chart.Frame.FixedRightWidth.Overlay=option.OverlayIndexFrameWidth;//叠加指标
1390
1393
  if(IFrameSplitOperator.IsNonEmptyArray(option.OverlayIndex)){for(var i=0;i<option.OverlayIndex.length;++i){var item=option.OverlayIndex[i];if(item.Windows>=chart.Frame.SubFrame.length)continue;var itemString=(0,_stringify2.default)(item);var obj=JSON.parse(itemString);if(item.Index)obj.IndexName=item.Index;if(item.Windows>=0)obj.WindowIndex=item.Windows;chart.CreateOverlayWindowsIndex(obj);}}this.AdjustTitleHeight(chart);return chart;};//自定义指数历史K线图
@@ -2074,8 +2077,7 @@ this.Frame.SetSizeChage(true);if(this.UpdateXShowText)this.UpdateXShowText();thi
2074
2077
  this.Draw();return index;};//增加一个指标窗口
2075
2078
  this.AddIndexWindow=function(indexName,option){//查找系统指标
2076
2079
  var scriptData=new JSIndexScript();var indexInfo=scriptData.Get(indexName);if(!indexInfo)return;this.RemoveMinSizeWindows();//清空隐藏的指标
2077
- var index=this.AddNewSubFrame(option);var indexData={Name:indexInfo.Name,Script:indexInfo.Script,Args:indexInfo.Args,ID:indexName,//扩展属性 可以是空
2078
- KLineType:indexInfo.KLineType,YSpecificMaxMin:indexInfo.YSpecificMaxMin,YSplitScale:indexInfo.YSplitScale,FloatPrecision:indexInfo.FloatPrecision,Condition:indexInfo.Condition,StringFormat:indexInfo.StringFormat,OutName:indexInfo.OutName};if(option){if(option.FloatPrecision>=0)indexData.FloatPrecision=option.FloatPrecision;if(option.StringFormat>0)indexData.StringFormat=option.StringFormat;if(option.Args)indexData.Args=option.Args;if(option.Lock)indexData.Lock=option.Lock;}this.WindowIndex[index]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData);//脚本执行
2080
+ var index=this.AddNewSubFrame(option);JSIndexScript.ModifyAttribute(indexInfo,option);this.WindowIndex[index]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
2079
2081
  if(this.ClassName=="MinuteChartContainer"||this.ClassName=="MinuteChartHScreenContainer")var bindData=this.SourceData;else var bindData=this.ChartPaint[0].Data;this.BindIndexData(index,bindData);//执行脚本
2080
2082
  };this.AddAPIIndexWindow=function(indexData,option){if(!indexData.API)return;this.RemoveMinSizeWindows();//清空隐藏的指标
2081
2083
  var index=this.AddNewSubFrame(option);//使用API挂接指标数据 API:{ Name:指标名字, Script:指标脚本可以为空, Args:参数可以为空, Url:指标执行地址 }
@@ -4966,7 +4968,7 @@ PAGE_LAST_OVERLAY_INDEX_VALUE_ID:5//叠加指标前屏最后一个数据刻度
4966
4968
  this.Frame;//框架信息
4967
4969
  this.FrameSplitData;//坐标轴分割方法
4968
4970
  this.SplitCount=5;//刻度个数
4969
- this.StringFormat=0;//刻度字符串格式
4971
+ this.StringFormat=0;//刻度字符串格式 2=原始格式
4970
4972
  this.IsShowLeftText=true;//显示左边刻度
4971
4973
  this.IsShowRightText=true;//显示右边刻度
4972
4974
  this.LanguageID=JSCHART_LANGUAGE_ID.LANGUAGE_CHINESE_ID;this.GetEventCallback;//事件回调
@@ -4993,7 +4995,8 @@ if(IFrameSplitOperator.IsNumber(option.LineType))info.LineType=option.LineType;i
4993
4995
  if(!pageInfo)return;if(!this.OverlayIndex)return;if(!IFrameSplitOperator.IsNonEmptyArray(this.OverlayIndex.ChartPaint))return;var event=null;if(this.GetEventCallback)event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FORMAT_OVERLAY_INDEX_Y_LABEL);var endIndex=pageInfo.End.Index;var floatPrecision=2;if(IFrameSplitOperator.IsNumber(this.FloatPrecision))floatPrecision=this.FloatPrecision;for(var i=0,j=0;i<this.OverlayIndex.ChartPaint.length;++i){var chart=this.OverlayIndex.ChartPaint[i];if(!chart.ChartFrame)continue;if(!chart.GetItemData)continue;var aryItem=chart.GetItemData({Index:endIndex});if(!IFrameSplitOperator.IsNonEmptyArray(aryItem))continue;for(j=0;j<aryItem.length;++j){var item=aryItem[j];var info=new CoordinateInfo();info.Type=1;info.TextColor=g_JSChartResource.FrameLatestPrice.TextColor;info.LineColor=item.Color;info.LineType=-1;//默认不画线
4994
4996
  info.IsLast=pageInfo.IsLast;//是否是最后一个数据
4995
4997
  if(IFrameSplitOperator.IsNumber(option.LineType))info.LineType=option.LineType;info.Value=item.Value;var text=IFrameSplitOperator.FormatValueString(item.Value,floatPrecision,this.LanguageID);if(option.Position=='left')info.Message[0]=text;else info.Message[1]=text;if(!pageInfo.IsLast){var config={};if(!pageInfo.IsLast)config.EmptyBGColor=g_JSChartResource.FrameLatestPrice.EmptyBGColor;info.ExtendData={Custom:config};}if(event){var sendData={PreventDefault:false,Label:info,Data:item,IndexName:chart.IndexName,OverlayIdentify:this.OverlayIndex.Identify};event.Callback(event,sendData,this);if(sendData.PreventDefault)continue;}this.Frame.CustomHorizontalInfo.push(info);}}},//回调外部处理自定义Y轴刻度
4996
- this.InvokeCustomYCoordinateCallback=function(){if(!this.GetEventCallback)return null;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_CUSTOM_Y_COORDINATE);if(!event||!event.Callback)return null;var data={ID:this.Frame.Identify,Frame:this.Frame,PreventDefault:false,Custom:this.Custom};if(this.OverlayIdentify)data.OverlayIdentify=this.OverlayIdentify;event.Callback(event,data,this);return data;};}//字符串格式化 千分位分割
4998
+ this.InvokeCustomYCoordinateCallback=function(){if(!this.GetEventCallback)return null;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_CUSTOM_Y_COORDINATE);if(!event||!event.Callback)return null;var data={ID:this.Frame.Identify,Frame:this.Frame,PreventDefault:false,Custom:this.Custom};if(this.OverlayIdentify)data.OverlayIdentify=this.OverlayIdentify;event.Callback(event,data,this);return data;};this.Reset=function()//重置
4999
+ {};this.SetOption=function(option){};}//字符串格式化 千分位分割
4997
5000
  IFrameSplitOperator.FormatValueThousandsString=function(value,floatPrecision){if(value==null||isNaN(value)){if(floatPrecision>0){var nullText='-.';for(var i=0;i<floatPrecision;++i){nullText+='-';}return nullText;}return'--';}var result='';var num=value.toFixed(floatPrecision);if(floatPrecision>0){var numFloat=num.split('.')[1];var numM=num.split('.')[0];while(numM.length>3){result=','+numM.slice(-3)+result;numM=numM.slice(0,numM.length-3);}if(numM){result=numM+result+'.'+numFloat;}}else{while(num.length>3){result=','+num.slice(-3)+result;num=num.slice(0,num.length-3);}if(num){result=num+result;}}return result;};//数据输出格式化 floatPrecision=小数位数
4998
5001
  IFrameSplitOperator.FormatValueString=function(value,floatPrecision,languageID){/*
4999
5002
  if (value==null || isNaN(value))
@@ -5157,11 +5160,12 @@ this.FloatPrecision=2;//坐标小数位数(默认2)
5157
5160
  this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];this.SplitType=0;//0=自动分割 1=固定分割 2=堆积图(0-100)
5158
5161
  this.DefaultSplitType=0;this.Custom=[];//[{Type:0}]; 定制刻度
5159
5162
  this.DefaultYMaxMin;//{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
5160
- this.EnableRemoveZero=true;this.LineType=null;//线段样式
5163
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;this.LineType=null;//线段样式
5161
5164
  this.IgnoreYValue=null;//在这个数组里的数字不显示在刻度上
5162
5165
  this.FixedYMaxMin;//{ Max, Min} 固定Y轴最大最小值
5163
5166
  this.EnableZoomUpDown=false;this.IsBeforeData=false;this.BeforeOpenData;this.IsAfterData=false;this.AfterCloseData;this.ShareAfterVol=0;this.MultiDayBeforeOpenData;this.MultiDayAfterCloseData;this.OverlayIdentify;this.HQChart;this.OverlayIndex;//叠加指标信息
5164
- this.IsEnableDragY=function(){return true;};this.GetFloatPrecision=function(value,floatPrecision){if(value>this.FLOATPRECISION_RANGE[0])return floatPrecision;if(floatPrecision<0)return 2;for(;floatPrecision<this.FLOATPRECISION_RANGE.length;++floatPrecision){if(value>this.FLOATPRECISION_RANGE[floatPrecision])break;}return floatPrecision;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;if(this.Frame.YMaxMin)//原始的数据范围
5167
+ this.IsEnableDragY=function(){return true;};this.Reset=function()//重置
5168
+ {this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;this.StringFormat=g_JSChartResource.Frame.StringFormat;};this.SetOption=function(option){if(!option)return;if(IFrameSplitOperator.IsNumber(option.FloatPrecision))this.FloatPrecision=option.FloatPrecision;if(IFrameSplitOperator.IsNumber(option.StringFormat))this.StringFormat=option.StringFormat;if(IFrameSplitOperator.IsBool(option.EnableRemoveZero))this.EnableRemoveZero=option.EnableRemoveZero;};this.GetFloatPrecision=function(value,floatPrecision){if(value>this.FLOATPRECISION_RANGE[0])return floatPrecision;if(floatPrecision<0)return 2;for(;floatPrecision<this.FLOATPRECISION_RANGE.length;++floatPrecision){if(value>this.FLOATPRECISION_RANGE[floatPrecision])break;}return floatPrecision;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;if(this.Frame.YMaxMin)//原始的数据范围
5165
5169
  {var item=this.Frame.YMaxMin;if(IFrameSplitOperator.IsNumber(item.Max)&&IFrameSplitOperator.IsNumber(item.Min)){splitData.Max=item.Max;splitData.Min=item.Min;}}if(splitData.Max==splitData.Min)//如果一样上下扩大下
5166
5170
  {if(splitData.Max==0){splitData.Max=1;splitData.Min=-1;}else{splitData.Max+=splitData.Max*0.01;splitData.Min-=splitData.Min*0.01;}}var isFixedMaxMin=false;if(this.FixedYMaxMin&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Max)&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Min))isFixedMaxMin=true;if(isFixedMaxMin){splitData.Max=this.FixedYMaxMin.Max;splitData.Min=this.FixedYMaxMin.Min;}else if(this.DefaultYMaxMin)//指定最小的Y轴范围
5167
5171
  {var range=this.DefaultYMaxMin;if(IFrameSplitOperator.IsNumber(range.Max)){if(splitData.Min>range.Max)splitData.Min=range.Max;else if(splitData.Max<range.Max)splitData.Max=range.Max;}if(IFrameSplitOperator.IsNumber(range.Min)){if(splitData.Max<range.Min)splitData.Max=range.Min;else if(splitData.Min>range.Min)splitData.Min=range.Min;}}if(this.Frame.YSpecificMaxMin){splitData.Count=this.Frame.YSpecificMaxMin.Count;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else if(this.SplitType==1||isFixedMaxMin){splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else if(this.SplitType==2){splitData.Max=100;splitData.Min=0;splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);}else{splitData.Count=this.SplitCount;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);this.IntegerCoordinateSplit(splitData);}this.Frame.HorizontalMax=splitData.Max;this.Frame.HorizontalMin=splitData.Min;this.Frame.HorizontalInfo=[];if(this.Frame.YSplitScale)//固定坐标
@@ -5170,7 +5174,8 @@ coordinate.Message[1]=IFrameSplitOperator.FormatValueString(value,floatPrecision
5170
5174
  //this.Frame.HorizontalInfo[i].TextColor="rgb(100,0,200)";
5171
5175
  //this.Frame.HorizontalInfo[i].LineColor="rgb(220,220,220)";
5172
5176
  }}this.FilterIgnoreYValue();this.CustomCoordinate();if(this.SplitType!=1)this.Frame.HorizontalInfo=this.Filter(this.Frame.HorizontalInfo,splitData.Max>0&&splitData.Min<0);this.RightFrameSplitY();this.CallAcutionSplitY(this.SplitCount,splitData);if(this.EnableRemoveZero)this.RemoveZero(this.Frame.HorizontalInfo);this.DynamicMessageText();this.Frame.HorizontalMax=splitData.Max;this.Frame.HorizontalMin=splitData.Min;if(this.EnableZoomUpDown==true&&!this.FixedYMaxMin)this.FixedYMaxMin={Max:splitData.Max,Min:splitData.Min};if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);if(event&&event.Callback){var data={ID:this.Frame.Identify,Frame:this.Frame};if(this.OverlayIdentify)data.OverlayIdentify=this.OverlayIdentify;event.Callback(event,data,this);}}};this.FormatValueString=function(value){var text;if(this.StringFormat==1)//手机端格式 如果有万,亿单位了 去掉小数
5173
- {var floatPrecision=this.FloatPrecision;if(IFrameSplitOperator.IsNumber(value)&&Math.abs(value)>1000)floatPrecision=0;text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);}else{var absValue=Math.abs(value);if(absValue<0.0000000001){text=0;}else if(absValue<this.FLOATPRECISION_RANGE[this.FLOATPRECISION_RANGE.length-1]){text=value.toExponential(2).toString();}else{var floatPrecision=this.GetFloatPrecision(absValue,this.FloatPrecision);//数据比小数位数还小, 调整小数位数
5177
+ {var floatPrecision=this.FloatPrecision;if(IFrameSplitOperator.IsNumber(value)&&Math.abs(value)>1000)floatPrecision=0;text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);}else if(this.StringFormat==2)//原始数据输出
5178
+ {text=''+value.toFixed(this.FloatPrecision);}else{var absValue=Math.abs(value);if(absValue<0.0000000001){text=0;}else if(absValue<this.FLOATPRECISION_RANGE[this.FLOATPRECISION_RANGE.length-1]){text=value.toExponential(2).toString();}else{var floatPrecision=this.GetFloatPrecision(absValue,this.FloatPrecision);//数据比小数位数还小, 调整小数位数
5174
5179
  text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);}}return text;};this.FilterIgnoreYValue=function(){if(!this.IgnoreYValue||this.IgnoreYValue.length<=0)return;var setValue=new _set2.default(this.IgnoreYValue);this.Frame.HorizontalInfo=this.Frame.HorizontalInfo.filter(function(item){return!setValue.has(item.Value);});};this.DynamicMessageText=function(){if(this.SplitType==2){for(var i=0;i<this.Frame.HorizontalInfo.length;++i){var item=this.Frame.HorizontalInfo[i];if(item.Message[0])item.Message[0]+='%';if(item.Message[1])item.Message[1]+='%';}}};this.CallAcutionSplitY=function(count,splitData){if(this.Frame.Identify!=1)return null;var aryCallAcution=this.GetCallAcutionSplitY(count,splitData);if(!aryCallAcution)return;for(var i=0;i<this.Frame.HorizontalInfo.length;++i)//把显示的数据迁移到 Message[2] Message[3]
5175
5180
  {var item=this.Frame.HorizontalInfo[i];if(aryCallAcution.IsBeforeData){item.Message[2]=item.Message[0];item.Message[0]=null;}if(aryCallAcution.IsAfterData&&(this.ShareAfterVol==0||this.ShareAfterVol==2)){item.Message[3]=item.Message[1];item.Message[1]=null;}}//集合竞价的坐标插入最后
5176
5181
  for(var i=0;i<aryCallAcution.HorizontalInfo.length;++i){var item=aryCallAcution.HorizontalInfo[i];this.Frame.HorizontalInfo.push(item);}};this.GetCallAcutionSplitY=function(count,splitData){if(this.Frame.Identify!=1)return null;var isBeforeData=this.IsBeforeData==true&&this.BeforeOpenData&&(this.BeforeOpenData.Ver==2.0||this.BeforeOpenData.Ver==3.0);var isAfterData=this.IsAfterData==true&&this.AfterCloseData&&(this.AfterCloseData.Ver==2.0||this.AfterCloseData.Ver==3.0);if(isBeforeData||isAfterData){var intervalY=(splitData.Max-splitData.Min)/(count-1);if(isBeforeData)var intervalLeft=(this.BeforeOpenData.VolMax-this.BeforeOpenData.VolMin)/(count-1);if(isAfterData)var intervalRight=(this.AfterCloseData.VolMax-this.AfterCloseData.VolMin)/(count-1);var aryHorizontalInfo=[];for(var i=0;i<count;++i){var item=new CoordinateInfo();var yValue=intervalY*i;item.Value=yValue;item.LineType=8;if(isBeforeData){var leftValue=intervalLeft*i;item.Message[0]=this.FormatValueString(leftValue);}if(isAfterData&&(this.ShareAfterVol==0||this.ShareAfterVol==2)){var rightValue=intervalRight*i;item.Message[1]=this.FormatValueString(rightValue);}aryHorizontalInfo.push(item);}return{HorizontalInfo:aryHorizontalInfo,IsBeforeData:isBeforeData,IsAfterData:isAfterData};}var isMultiDayBeforeData=false;var intervalLeft=null;if(this.MultiDayBeforeOpenData&&IFrameSplitOperator.IsNonEmptyArray(this.MultiDayBeforeOpenData)){isMultiDayBeforeData=true;var firstDayData=this.MultiDayBeforeOpenData[0];if(firstDayData.Ver==2.0||firstDayData.Ver==3.0){var intervalLeft=(firstDayData.VolMax-firstDayData.VolMin)/(count-1);}}var isMultiDayAfterData=false;var intervalRight=null;if(this.MultiDayAfterCloseData&&IFrameSplitOperator.IsNonEmptyArray(this.MultiDayAfterCloseData)){isMultiDayAfterData=true;var firstDayData=this.MultiDayAfterCloseData[0];if(firstDayData.Ver==2.0||firstDayData.Ver==3.0){var intervalRight=(firstDayData.VolMax-firstDayData.VolMin)/(count-1);}}if(isMultiDayBeforeData||isMultiDayAfterData){var intervalY=(splitData.Max-splitData.Min)/(count-1);var aryHorizontalInfo=[];for(var i=0;i<count;++i){var item=new CoordinateInfo();var yValue=intervalY*i;item.Value=yValue;item.LineType=9;var isVaild=false;if(intervalLeft!=null){var leftValue=intervalLeft*i;item.Message[0]=this.FormatValueString(leftValue);isVaild=true;}if(intervalRight!=null&&(this.ShareAfterVol==0||this.ShareAfterVol==2)){var rightValue=intervalRight*i;item.Message[1]=this.FormatValueString(rightValue);isVaild=true;}if(isVaild)aryHorizontalInfo.push(item);}if(IFrameSplitOperator.IsNonEmptyArray(aryHorizontalInfo))return{HorizontalInfo:aryHorizontalInfo,IsBeforeData:isMultiDayBeforeData,IsAfterData:isMultiDayAfterData};}return null;};this.RightFrameSplitY=function(){if(!this.Frame.RightFrame)return;var rightFrame=this.Frame.RightFrame;if(rightFrame.YSplitOperator)rightFrame.YSplitOperator.Operator();for(var i=0;i<this.Frame.HorizontalInfo.length;++i){var item=this.Frame.HorizontalInfo[i];var y=this.Frame.GetYFromData(item.Value);var yValue=rightFrame.GetYData(y);item.Message[1]=IFrameSplitOperator.FormatValueString(yValue,this.FloatPrecision,this.LanguageID);}};this.CustomCoordinate=function(){this.Frame.CustomHorizontalInfo=[];var data=this.InvokeCustomYCoordinateCallback();if(data&&data.PreventDefault==true)return;if(!IFrameSplitOperator.IsNonEmptyArray(this.Custom))return;for(var i=0;i<this.Custom.length;++i){var item=this.Custom[i];if(item.Type==JSCHART_CUSTOM_YCOORDINATE_ID.PAGE_LAST_INDEX_VALUE_ID)//当前屏最后一个数据
@@ -6516,7 +6521,8 @@ this.FrameSplitTextFont=14*GetDevicePixelRatio()+"px 微软雅黑";//坐标刻
6516
6521
  this.FrameTitleBGColor="rgb(246,251,253)";//标题栏背景色
6517
6522
  this.SelFrameBorderColor='rgb(130, 130, 130)';this.Frame={XBottomOffset:2*GetDevicePixelRatio(),//X轴文字向下偏移
6518
6523
  YTopOffset:2*GetDevicePixelRatio(),//Y轴顶部文字向下偏移
6519
- YTextPadding:[2,2]};this.ToolbarButtonStyle=0;this.FrameLogo={TextColor:'rgb(178,34,34)',Font:"bold "+16*GetDevicePixelRatio()+"px 微软雅黑",Text:"*仅学习使用*",//不要修改声明, 任何修改声明产生的任何法律责任由修改者自行独立承担,与HQChart插件作者无关。
6524
+ YTextPadding:[2,2],EnableRemoveZero:true,//移除小数点后面的0
6525
+ StringFormat:0};this.ToolbarButtonStyle=0;this.FrameLogo={TextColor:'rgb(178,34,34)',Font:"bold "+16*GetDevicePixelRatio()+"px 微软雅黑",Text:"*仅学习使用*",//不要修改声明, 任何修改声明产生的任何法律责任由修改者自行独立承担,与HQChart插件作者无关。
6520
6526
  BGColor:"rgba(230,230,230, 0.5)"};//百分比坐标文字颜色
6521
6527
  this.Frame.PercentageText={PriceColor:'rgb(117,125,129)',PercentageColor:"rgb(117,125,129)",SplitColor:"rgb(117,125,129)",Font:14*GetDevicePixelRatio()+"px 微软雅黑"};//对数坐标
6522
6528
  this.FrameLogarithmic={OpenPriceFont:"bold "+14*GetDevicePixelRatio()+"px 微软雅黑",//开盘价刻度文字字体
@@ -7265,7 +7271,7 @@ this.ChangeIndex=function(windowIndex,indexName,option){if(option&&option.API)//
7265
7271
  return this.ChangeAPIIndex(windowIndex,option);var indexItem=JSIndexMap.Get(indexName);if(!indexItem){//查找系统指标
7266
7272
  var scriptData=new JSIndexScript();var indexInfo=scriptData.Get(indexName);if(!indexInfo)return;if(indexInfo.IsMainIndex){windowIndex=0;//主图指标只能在主图显示
7267
7273
  }else{if(windowIndex==0)windowIndex=1;//幅图指标,不能再主图显示
7268
- }var indexData=indexInfo;if(option){if(option.FloatPrecision>=0)indexData.FloatPrecision=option.FloatPrecision;if(option.StringFormat>0)indexData.StringFormat=option.StringFormat;if(option.Args)indexData.Args=option.Args;if(option.TitleFont)indexData.TitleFont=option.TitleFont;if(option.IsShortTitle)indexData.IsShortTitle=option.IsShortTitle;if(option.Lock)indexData.Lock=option.Lock;}return this.ChangeScriptIndex(windowIndex,indexData,option);}//主图指标
7274
+ }JSIndexScript.ModifyAttribute(indexInfo,option);return this.ChangeScriptIndex(windowIndex,indexInfo,option);}//主图指标
7269
7275
  if(indexItem.IsMainIndex){if(windowIndex>0)windowIndex=0;//主图指标只能在主图显示
7270
7276
  }else{if(windowIndex==0)windowIndex=1;//幅图指标,不能再主图显示
7271
7277
  }var paint=new Array();//踢出当前窗口的指标画法
@@ -7293,9 +7299,7 @@ if(IFrameSplitOperator.IsBool(obj.IsShareY))frame.IsShareY=obj.IsShareY;if(IFram
7293
7299
  frame.YSplitOperator=new FrameSplitY();frame.YSplitOperator.LanguageID=this.LanguageID;frame.YSplitOperator.FrameSplitData=this.FrameSplitData.get('double');frame.YSplitOperator.Frame=frame;frame.YSplitOperator.ChartBorder=frame.ChartBorder;frame.YSplitOperator.SplitCount=subFrame.Frame.YSplitOperator.SplitCount;frame.YSplitOperator.GetEventCallback=function(id){return _this21.GetEventCallback(id);};frame.YSplitOperator.GetKLineChartCallback=function(){return _this21.GetKLineChart();};frame.YSplitOperator.OverlayIndex=overlayFrame;frame.YSplitOperator.HQChart=this;frame.YSplitOperator.OverlayIdentify=overlayFrame.Identify;if(obj.Frame){var item=obj.Frame;if(item.Custom)frame.YSplitOperator.Custom=item.Custom;if(IFrameSplitOperator.IsBool(item.IsYDrawMainFrame))frame.IsYDrawMainFrame=item.IsYDrawMainFrame;//自定义刻度绘制在主图上
7294
7300
  if(IFrameSplitOperator.IsBool(item.IsShowToolbar))frame.IsShowToolbar=item.IsShowToolbar;//是否显示工具栏
7295
7301
  }overlayFrame.Frame=frame;if(apiItem){var apiIndex=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,obj,true);apiIndex.OverlayIndex={IsOverlay:true,Identify:overlayFrame.Identify,WindowIndex:windowIndex,Frame:overlayFrame};//叠加指标信息
7296
- overlayFrame.Script=apiIndex;}else if(indexInfo){var args=indexInfo.Args;if(obj.Args)args=obj.Args;//外部可以设置参数
7297
- var indexData={Name:indexInfo.Name,Script:indexInfo.Script,Args:args,ID:indexName,//扩展属性 可以是空
7298
- KLineType:indexInfo.KLineType,YSpecificMaxMin:indexInfo.YSpecificMaxMin,YSplitScale:indexInfo.YSplitScale,FloatPrecision:indexInfo.FloatPrecision,Condition:indexInfo.Condition,OutName:indexInfo.OutName};if(IFrameSplitOperator.IsNumber(obj.FloatPrecision))indexData.FloatPrecision=obj.FloatPrecision;if(IFrameSplitOperator.IsNumber(obj.StringFormat))indexData.StringFormat=obj.StringFormat;if(IFrameSplitOperator.IsBool(obj.IsSync))indexData.IsSync=obj.IsSync;var scriptIndex=new OverlayScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData);//脚本执行
7302
+ overlayFrame.Script=apiIndex;}else if(indexInfo){JSIndexScript.ModifyAttribute(indexInfo,obj);var scriptIndex=new OverlayScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
7299
7303
  scriptIndex.OverlayIndex={IsOverlay:true,Identify:overlayFrame.Identify,WindowIndex:windowIndex,Frame:overlayFrame};//叠加指标信息
7300
7304
  overlayFrame.Script=scriptIndex;}else{var scriptIndex=indexCustom.Create();scriptIndex.OverlayIndex={IsOverlay:true,Identify:overlayFrame.Identify,WindowIndex:windowIndex,Frame:overlayFrame};//叠加指标信息
7301
7305
  scriptIndex.Create(this,windowIndex);overlayFrame.Script=scriptIndex;}var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_OVERLAY_FRAME);if(event&&event.Callback){var sendData={OverlayFrame:overlayFrame,WindowIndex:windowIndex,SubFrame:subFrame};event.Callback(event,sendData,this);}subFrame.OverlayIndex.push(overlayFrame);return overlayFrame;};this.DeleteOverlayWindowsIndex=function(identify)//删除叠加指标
@@ -7334,8 +7338,7 @@ for(var i=0;i<currentLength;++i){this.DeleteIndexPaint(i);var frame=this.Frame.S
7334
7338
  {var subFrame=this.CreateSubFrameItem(i);this.Frame.SubFrame[i]=subFrame;var titlePaint=new DynamicChartTitlePainting();titlePaint.Frame=this.Frame.SubFrame[i].Frame;titlePaint.Canvas=this.Canvas;titlePaint.LanguageID=this.LanguageID;titlePaint.GetEventCallback=function(id){return _this23.GetEventCallback(id);};titlePaint.SelectedChart=this.SelectedChart;this.TitlePaint[i+1]=titlePaint;}}var systemScript=new JSIndexScript();for(var i=0;i<count;++i){var windowIndex=i;var item=option.Windows[i];var frameItem=null;if(option.Frame&&option.Frame.length>i)frameItem=option.Frame[i];var titleIndex=windowIndex+1;this.TitlePaint[titleIndex].Data=[];this.TitlePaint[titleIndex].Title=null;if(item.Script)//自定义指标脚本
7335
7339
  {this.WindowIndex[i]=new ScriptIndex(item.Name,item.Script,item.Args,item);//脚本执行
7336
7340
  }else if(item.API)//后台指标
7337
- {var apiItem=item.API;this.WindowIndex[windowIndex]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexItem=JSIndexMap.Get(indexID);if(indexItem){this.WindowIndex[i]=indexItem.Create();this.CreateWindowIndex(windowIndex);}else{var indexInfo=systemScript.Get(indexID);if(indexInfo){var args=indexInfo.Args;if(option.Windows[i].Args)args=option.Windows[i].Args;var indexData={Name:indexInfo.Name,Script:indexInfo.Script,Args:args,ID:indexID,//扩展属性 可以是空
7338
- KLineType:indexInfo.KLineType,YSpecificMaxMin:indexInfo.YSpecificMaxMin,YSplitScale:indexInfo.YSplitScale,FloatPrecision:indexInfo.FloatPrecision,Condition:indexInfo.Condition,OutName:indexInfo.OutName};if(item.TitleFont)indexData.TitleFont=item.TitleFont;this.WindowIndex[i]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData);//脚本执行
7341
+ {var apiItem=item.API;this.WindowIndex[windowIndex]=new APIScriptIndex(apiItem.Name,apiItem.Script,apiItem.Args,item);}else{var indexID=item.Index;var indexItem=JSIndexMap.Get(indexID);if(indexItem){this.WindowIndex[i]=indexItem.Create();this.CreateWindowIndex(windowIndex);}else{var indexInfo=systemScript.Get(indexID);if(indexInfo){JSIndexScript.ModifyAttribute(indexInfo,item);this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo);//脚本执行
7339
7342
  }}}this.SetSubFrameAttribute(this.Frame.SubFrame[i],item,frameItem);}//最后一个显示X轴坐标
7340
7343
  for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i].Frame;if(i==this.Frame.SubFrame.length-1)item.XSplitOperator.ShowText=true;else item.XSplitOperator.ShowText=false;}if(!bRefreshData){var bindData=this.ChartPaint[0].Data;for(var i=0;i<count;++i)//请求指标
7341
7344
  {this.BindIndexData(i,bindData);}this.UpdataDataoffset();//更新数据偏移
@@ -11385,6 +11388,7 @@ this.LockCallback=null;this.LockID=null;this.LockBG=null;//锁背景色
11385
11388
  this.LockTextColor=null;this.LockText=null;this.LockFont=null;this.LockCount=20;this.LockMinWidth=null;this.TitleFont=g_JSChartResource.TitleFont;//标题字体
11386
11389
  this.IsShortTitle=false;//是否显示指标参数
11387
11390
  this.IsUsePageData=false;//是否使用了K线界面数据
11391
+ this.YAxis=null;//Y轴刻度设置 { FloatPrecision, StringFormat, EnableRemoveZero }
11388
11392
  //调试信息
11389
11393
  this.Debug;// { Callback:, Count: }
11390
11394
  this.IsSync=false;//是否是同步计算 (无数据请求)
@@ -11394,7 +11398,7 @@ this.MaxRunCount=-1;//最大执行次数 -1=无限
11394
11398
  if(option){if(option.FloatPrecision>=0)this.FloatPrecision=option.FloatPrecision;if(option.StringFormat>0)this.StringFormat=option.StringFormat;if(option.ID)this.ID=option.ID;if(option.KLineType>=0||option.KLineType===-1)this.KLineType=option.KLineType;if(option.InstructionType)this.InstructionType=option.InstructionType;if(option.YSpecificMaxMin)this.YSpecificMaxMin=option.YSpecificMaxMin;if(option.YSplitScale)this.YSplitScale=option.YSplitScale;if(option.Condition)this.Condition=option.Condition;if(option.TitleFont)this.TitleFont=option.TitleFont;if(option.IsShortTitle)this.IsShortTitle=option.IsShortTitle;if(option.OutName)this.OutName=option.OutName;if(IFrameSplitOperator.IsNumber(option.YSplitType))this.YSplitType=option.YSplitType;if(IFrameSplitOperator.IsBool(option.IsSync))this.IsSync=option.IsSync;if(IFrameSplitOperator.IsNumber(option.MaxRunCount))this.MaxRunCount=option.MaxRunCount;if(option.Debug){if(IFrameSplitOperator.IsPlusNumber(option.Debug.Count)&&option.Debug.Callback){this.Debug={Count:option.Debug.Count,Callback:option.Debug.Callback};}}}if(option&&option.Lock){if(option.Lock.IsLocked==true)this.IsLocked=true;//指标上锁
11395
11399
  if(option.Lock.Callback)this.LockCallback=option.Lock.Callback;//锁回调
11396
11400
  if(option.Lock.ID)this.LockID=option.Lock.ID;//锁ID
11397
- if(option.Lock.BG)this.LockBG=option.Lock.BG;if(option.Lock.TextColor)this.LockTextColor=option.Lock.TextColor;if(option.Lock.Text)this.LockText=option.Lock.Text;if(option.Lock.Font)this.LockFont=option.Lock.Font;if(option.Lock.Count)this.LockCount=option.Lock.Count;if(option.Lock.MinWidth)this.LockMinWidth=option.Lock.MinWidth*GetDevicePixelRatio();}if(args)this.Arguments=args;this.CopyTo=function(dest)//赋值到新实例出来
11401
+ if(option.Lock.BG)this.LockBG=option.Lock.BG;if(option.Lock.TextColor)this.LockTextColor=option.Lock.TextColor;if(option.Lock.Text)this.LockText=option.Lock.Text;if(option.Lock.Font)this.LockFont=option.Lock.Font;if(option.Lock.Count)this.LockCount=option.Lock.Count;if(option.Lock.MinWidth)this.LockMinWidth=option.Lock.MinWidth*GetDevicePixelRatio();}if(option&&option.YAxis){this.YAxis={};if(IFrameSplitOperator.IsNumber(option.YAxis.FloatPrecision))this.YAxis.FloatPrecision=option.YAxis.FloatPrecision;if(IFrameSplitOperator.IsNumber(option.YAxis.StringFormat))this.YAxis.StringFormat=option.YAxis.StringFormat;if(IFrameSplitOperator.IsBool(option.YAxis.EnableRemoveZero))this.YAxis.EnableRemoveZero=option.YAxis.EnableRemoveZero;}if(args)this.Arguments=args;this.CopyTo=function(dest)//赋值到新实例出来
11398
11402
  {dest.FloatPrecision=this.FloatPrecision;dest.StringFormat=this.StringFormat;dest.KLineType=this.KLineType;dest.InstructionType=this.InstructionType;dest.Condition=this.Condition;dest.TitleFont=this.TitleFont;dest.IsShortTitle=this.IsShortTitle;dest.OutName=this.OutName;dest.Arguments=this.Arguments;dest.Script=this.Script;dest.Name=this.Name;dest.ID=this.ID;};this.SetLock=function(lockData){if(lockData.IsLocked==true){this.IsLocked=true;//指标上锁
11399
11403
  if(lockData.Callback)this.LockCallback=lockData.Callback;//锁回调
11400
11404
  if(lockData.ID)this.LockID=lockData.ID;//锁ID
@@ -11489,7 +11493,8 @@ return true;}else if(this.InstructionType==1)//交易系统
11489
11493
  {var buyData,sellData;for(var i in this.OutVar){var _item26=this.OutVar[i];if(_item26.Name=='ENTERLONG')buyData=_item26.Data;else if(_item26.Name=='EXITLONG')sellData=_item26.Data;}hqChart.SetInstructionData(this.InstructionType,{Buy:buyData,Sell:sellData,Name:this.Name,Param:indexParam,ID:this.ID});//设置指示数据
11490
11494
  return true;}};this.BindData=function(hqChart,windowIndex,hisData){if(windowIndex==0&&this.InstructionType){this.BindInstructionData(hqChart,windowIndex,hisData);return;}//清空主指标图形
11491
11495
  hqChart.DeleteIndexPaint(windowIndex);if(windowIndex==0)hqChart.ShowKLine(true);if(this.OutVar==null||this.OutVar.length<0)return;//叠加一个K线背景
11492
- if(this.KLineType!=null){if(this.KLineType===0||this.KLineType===1||this.KLineType===2)this.CreateSelfKLine(hqChart,windowIndex,hisData);else if(this.KLineType===-1&&windowIndex==0)hqChart.ShowKLine(false);}if(windowIndex>=1&&hqChart.Frame){hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator.FloatPrecision=this.FloatPrecision;if(this.YSpecificMaxMin)hqChart.Frame.SubFrame[windowIndex].Frame.YSpecificMaxMin=this.YSpecificMaxMin;//最大最小值
11496
+ if(this.KLineType!=null){if(this.KLineType===0||this.KLineType===1||this.KLineType===2)this.CreateSelfKLine(hqChart,windowIndex,hisData);else if(this.KLineType===-1&&windowIndex==0)hqChart.ShowKLine(false);}if(windowIndex>=1&&hqChart.Frame){//Y轴刻度格式 默认跟标题栏一致
11497
+ var ySpliter=hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator;if(ySpliter){ySpliter.Reset();ySpliter.FloatPrecision=this.FloatPrecision;if(this.YAxis)ySpliter.SetOption(this.YAxis);}if(this.YSpecificMaxMin)hqChart.Frame.SubFrame[windowIndex].Frame.YSpecificMaxMin=this.YSpecificMaxMin;//最大最小值
11493
11498
  if(this.YSplitScale)hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.YSplitScale;//固定刻度
11494
11499
  }if(IFrameSplitOperator.IsNumber(this.YSplitType))hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator.SplitType=this.YSplitType;/*
11495
11500
  if (this.Name=='MA') //测试多线段
@@ -11540,7 +11545,7 @@ this.newMethod(name,script,args,option);delete this.newMethod;this.ClassName="Ov
11540
11545
  this.OverlayIndex=null;// { IsOverlay:true, Identify:overlayFrame.Identify, WindowIndex:windowIndex, Frame:overlayFrame }
11541
11546
  //显示指标不符合条件
11542
11547
  this.ShowConditionError=function(param,msg){var hqChart=param.HQChart;var windowIndex=param.WindowIndex;var message='指标不支持当前品种或周期';if(msg)message=msg;var overlayIndex=this.OverlayIndex;var frame=overlayIndex.Frame;frame.ChartPaint=[];var chart=new ChartLine();chart.Canvas=hqChart.Canvas;chart.ChartBorder=frame.Frame.ChartBorder;chart.ChartFrame=frame.Frame;chart.Identify=overlayIndex.Identify;chart.NotSupportMessage=message;frame.ChartPaint.push(chart);hqChart.Draw();};this.BindData=function(hqChart,windowIndex,hisData){if(!this.OverlayIndex||this.OverlayIndex.IsOverlay!=true)return;this.OverlayIndex.Frame.ChartPaint=[];if(!IFrameSplitOperator.IsNonEmptyArray(this.OutVar))return;//修改Y轴分割方式
11543
- if(IFrameSplitOperator.IsNumber(this.YSplitType))this.OverlayIndex.Frame.Frame.YSplitOperator.SplitType=this.YSplitType;//指标名字
11548
+ var ySpliter=this.OverlayIndex.Frame.Frame.YSplitOperator;if(ySpliter){ySpliter.Reset();ySpliter.FloatPrecision=this.FloatPrecision;if(IFrameSplitOperator.IsNumber(this.YSplitType))ySpliter.SplitType=this.YSplitType;if(this.YAxis)ySpliter.SetOption(this.YAxis);}//指标名字
11544
11549
  var titleInfo={Data:[],Title:this.Name,Frame:this.OverlayIndex.Frame.Frame,Script:this};var indexParam='';for(var i in this.Arguments){var _item29=this.Arguments[i];if(indexParam.length>0)indexParam+=',';indexParam+=_item29.Value.toString();}if(indexParam.length>0)titleInfo.Title=this.Name+'('+indexParam+')';var titleIndex=windowIndex+1;var titlePaint=hqChart.TitlePaint[titleIndex];titlePaint.OverlayIndex.set(this.OverlayIndex.Identify,titleInfo);if(this.OutName&&this.OutName.length>0&&this.Arguments&&this.Arguments.length>0){titlePaint.SetDynamicTitle(this.OutName,this.Arguments,this.OverlayIndex.Identify);}this.OverlayIndex.Frame.Frame.Title=this.Name;//给子框架设置标题
11545
11550
  if(hqChart.Frame.SubFrame[windowIndex]){var mainFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(mainFrame)this.OverlayIndex.Frame.Frame.XPointCount=mainFrame.XPointCount;//跟主窗口同步下页面显示数据个数
11546
11551
  }for(var i=0;i<this.OutVar.length;++i){var _item30=this.OutVar[i];if(_item30.IsExData===true)continue;//扩展数据不显示图形
@@ -12801,7 +12806,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12801
12806
  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);};}/********************************************************************************
12802
12807
  * 版本信息输出
12803
12808
  *
12804
- */var HQCHART_VERSION="1.1.12919";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12809
+ */var HQCHART_VERSION="1.1.12934";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
12805
12810
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12806
12811
  // BaseIndex:BaseIndex,
12807
12812
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.12920",
3
+ "version": "1.1.12935",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -19560,6 +19560,8 @@ function ScriptIndex(name,script,args,option)
19560
19560
  this.TitleFont=g_JSChartResource.TitleFont; //标题字体
19561
19561
  this.IsShortTitle=false; //是否显示指标参数
19562
19562
  this.IsUsePageData=false; //是否使用了K线界面数据
19563
+
19564
+ this.YAxis=null; //Y轴刻度设置 { FloatPrecision, StringFormat, EnableRemoveZero }
19563
19565
 
19564
19566
  //调试信息
19565
19567
  this.Debug; // { Callback:, Count: }
@@ -19609,6 +19611,15 @@ function ScriptIndex(name,script,args,option)
19609
19611
  if (option.Lock.MinWidth) this.LockMinWidth=option.Lock.MinWidth*GetDevicePixelRatio();
19610
19612
  }
19611
19613
 
19614
+ if (option && option.YAxis)
19615
+ {
19616
+ this.YAxis={ };
19617
+ if (IFrameSplitOperator.IsNumber(option.YAxis.FloatPrecision)) this.YAxis.FloatPrecision=option.YAxis.FloatPrecision;
19618
+ if (IFrameSplitOperator.IsNumber(option.YAxis.StringFormat)) this.YAxis.StringFormat=option.YAxis.StringFormat;
19619
+ if (IFrameSplitOperator.IsBool(option.YAxis.EnableRemoveZero)) this.YAxis.EnableRemoveZero=option.YAxis.EnableRemoveZero;
19620
+
19621
+ }
19622
+
19612
19623
  if (args) this.Arguments=args;
19613
19624
 
19614
19625
  this.CopyTo=function(dest) //赋值到新实例出来
@@ -21286,7 +21297,15 @@ function ScriptIndex(name,script,args,option)
21286
21297
 
21287
21298
  if (windowIndex>=1 && hqChart.Frame)
21288
21299
  {
21289
- hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator.FloatPrecision=this.FloatPrecision;
21300
+ //Y轴刻度格式 默认跟标题栏一致
21301
+ var ySpliter=hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator;
21302
+ if (ySpliter)
21303
+ {
21304
+ ySpliter.Reset();
21305
+ ySpliter.FloatPrecision=this.FloatPrecision;
21306
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
21307
+ }
21308
+
21290
21309
  if (this.YSpecificMaxMin) hqChart.Frame.SubFrame[windowIndex].Frame.YSpecificMaxMin=this.YSpecificMaxMin; //最大最小值
21291
21310
  if (this.YSplitScale) hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.YSplitScale; //固定刻度
21292
21311
  }
@@ -21658,7 +21677,14 @@ function OverlayScriptIndex(name,script,args,option)
21658
21677
  if (!IFrameSplitOperator.IsNonEmptyArray(this.OutVar)) return;
21659
21678
 
21660
21679
  //修改Y轴分割方式
21661
- if (IFrameSplitOperator.IsNumber(this.YSplitType)) this.OverlayIndex.Frame.Frame.YSplitOperator.SplitType=this.YSplitType;
21680
+ var ySpliter=this.OverlayIndex.Frame.Frame.YSplitOperator;
21681
+ if (ySpliter)
21682
+ {
21683
+ ySpliter.Reset();
21684
+ ySpliter.FloatPrecision=this.FloatPrecision;
21685
+ if (IFrameSplitOperator.IsNumber(this.YSplitType)) ySpliter.SplitType=this.YSplitType;
21686
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
21687
+ }
21662
21688
 
21663
21689
  //指标名字
21664
21690
  var titleInfo={ Data:[], Title:this.Name, Frame:this.OverlayIndex.Frame.Frame, Script:this };
@@ -25,7 +25,8 @@
25
25
  StringFormat: 1=带单位万/亿 2=原始格式
26
26
  Condition: 限制条件 { Symbol:'Index'/'Stock'(只支持指数/股票),Period:[](支持的周期), Include:[](指定支持的股票,代码全部大写包括后缀, Message:"提示信息")}
27
27
  OutName:动态输出变量名字 [{Name:原始变量名, DynamicName:动态名字格式}] 如 {Name:"MA1", DynamicName:"MA{M1}"};
28
- SplitType: Y轴分割类型
28
+ SplitType: Y轴分割类型,
29
+ YAxis:{ FloatPrecision:小数位数, StringFormat:, EnableRemoveZero } //Y轴刻度输出格式
29
30
  */
30
31
 
31
32
  //周期条件枚举
@@ -167,6 +168,29 @@ JSIndexScript.AddIndex=function(aryIndex) //添加自定义指标
167
168
  }
168
169
  }
169
170
 
171
+ //修改指标属性
172
+ JSIndexScript.ModifyAttribute=function(indexInfo, attribute)
173
+ {
174
+ if (!attribute) return;
175
+
176
+ if (attribute.Args) indexInfo.Args=attribute.Args; //外部可以设置参数
177
+ if (IFrameSplitOperator.IsNumber(attribute.FloatPrecision)) indexInfo.FloatPrecision=attribute.FloatPrecision;
178
+ if (IFrameSplitOperator.IsNumber(attribute.StringFormat)) indexInfo.StringFormat=attribute.StringFormat;
179
+ if (IFrameSplitOperator.IsBool(attribute.IsSync)) indexInfo.IsSync=attribute.IsSync;
180
+ if (IFrameSplitOperator.IsBool(attribute.IsShortTitle)) indexInfo.IsShortTitle=attribute.IsShortTitle;
181
+ if (attribute.TitleFont) indexInfo.TitleFont=attribute.TitleFont;
182
+ if (attribute.Lock) indexInfo.Lock=attribute.Lock;
183
+
184
+ if (attribute.YAxis)
185
+ {
186
+ var item=attribute.YAxis;
187
+ if (!indexInfo.YAxis) indexInfo.YAxis={ };
188
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) indexInfo.YAxis.FloatPrecision=item.FloatPrecision;
189
+ if (IFrameSplitOperator.IsNumber(item.StringFormat)) indexInfo.YAxis.StringFormat=item.StringFormat;
190
+ if (IFrameSplitOperator.IsBool(item.EnableRemoveZero)) indexInfo.YAxis.EnableRemoveZero=item.EnableRemoveZero;
191
+ }
192
+ }
193
+
170
194
  JSIndexScript.prototype.Get=function(id)
171
195
  {
172
196
  var data=g_CustomIndex.Get(id);
@@ -1581,7 +1605,7 @@ JSIndexScript.prototype.AMO = function ()
1581
1605
  {
1582
1606
  let data =
1583
1607
  {
1584
- Name: 'AMO', Description: '成交金额', IsMainIndex: false,
1608
+ Name: 'AMO', Description: '成交金额', IsMainIndex: false, StringFormat:2, YAxis:{ FloatPrecision:0, StringFormat:2 },
1585
1609
  Args: [{ Name: 'M1', Value: 5 },{ Name: 'M2', Value: 10 }],
1586
1610
  Script: //脚本
1587
1611
  'AMOW:AMOUNT/10000.0,VOLSTICK;\n\
@@ -611,15 +611,10 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
611
611
  {
612
612
  let indexInfo = scriptData.Get(item.Index);
613
613
  if (!indexInfo) continue;
614
-
615
- if (item.Lock) indexInfo.Lock=item.Lock;
614
+ JSIndexScript.ModifyAttribute(indexInfo, item);
616
615
  indexInfo.ID=item.Index;
617
- var args=indexInfo.Args;
618
- if (item.Args) args=item.Args;
619
- if (item.IsShortTitle) indexInfo.IsShortTitle=item.IsShortTitle;
620
- if (item.TitleFont) indexInfo.TitleFont=item.TitleFont;
621
- if (IFrameSplitOperator.IsBool(item.IsSync)) indexInfo.IsSync=item.IsSync;
622
- chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, args,indexInfo); //脚本执行
616
+
617
+ chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
623
618
  if (item.StringFormat>0) chart.WindowIndex[i].StringFormat=item.StringFormat;
624
619
  if (item.FloatPrecision>=0) chart.WindowIndex[i].FloatPrecision=item.FloatPrecision;
625
620
  }
@@ -8062,7 +8057,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8062
8057
  subFrame.Frame.IsShowYText[1]=option.IsShowRightText;
8063
8058
  subFrame.Frame.YSplitOperator.IsShowRightText=option.IsShowRightText; //显示右边刻度
8064
8059
  }
8065
-
8066
8060
  }
8067
8061
 
8068
8062
  this.AddNewSubFrame=function(option)
@@ -8110,24 +8104,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
8110
8104
  this.RemoveMinSizeWindows(); //清空隐藏的指标
8111
8105
  var index=this.AddNewSubFrame(option);
8112
8106
 
8113
- var indexData =
8114
- {
8115
- Name:indexInfo.Name, Script:indexInfo.Script, Args: indexInfo.Args, ID:indexName ,
8116
- //扩展属性 可以是空
8117
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
8118
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,StringFormat:indexInfo.StringFormat,
8119
- OutName:indexInfo.OutName
8120
- };
8107
+ JSIndexScript.ModifyAttribute(indexInfo, option);
8121
8108
 
8122
- if (option)
8123
- {
8124
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
8125
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
8126
- if (option.Args) indexData.Args=option.Args;
8127
- if (option.Lock) indexData.Lock=option.Lock;
8128
- }
8129
-
8130
- this.WindowIndex[index] = new ScriptIndex(indexData.Name, indexData.Script, indexData.Args,indexData); //脚本执行
8109
+ this.WindowIndex[index] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
8131
8110
  if (this.ClassName=="MinuteChartContainer" || this.ClassName=="MinuteChartHScreenContainer")
8132
8111
  var bindData=this.SourceData;
8133
8112
  else
@@ -42777,7 +42756,7 @@ function IFrameSplitOperator()
42777
42756
  this.Frame; //框架信息
42778
42757
  this.FrameSplitData; //坐标轴分割方法
42779
42758
  this.SplitCount=5; //刻度个数
42780
- this.StringFormat=0; //刻度字符串格式
42759
+ this.StringFormat=0; //刻度字符串格式 2=原始格式
42781
42760
  this.IsShowLeftText=true; //显示左边刻度
42782
42761
  this.IsShowRightText=true; //显示右边刻度
42783
42762
  this.LanguageID=JSCHART_LANGUAGE_ID.LANGUAGE_CHINESE_ID;
@@ -43120,6 +43099,13 @@ function IFrameSplitOperator()
43120
43099
 
43121
43100
  return data;
43122
43101
  }
43102
+
43103
+ this.Reset=function() //重置
43104
+ {
43105
+
43106
+ }
43107
+
43108
+ this.SetOption=function(option) { }
43123
43109
  }
43124
43110
 
43125
43111
  //字符串格式化 千分位分割
@@ -44386,7 +44372,7 @@ function FrameSplitY()
44386
44372
  this.DefaultSplitType=0;
44387
44373
  this.Custom=[]; //[{Type:0}]; 定制刻度
44388
44374
  this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
44389
- this.EnableRemoveZero=true;
44375
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
44390
44376
  this.LineType=null; //线段样式
44391
44377
  this.IgnoreYValue = null; //在这个数组里的数字不显示在刻度上
44392
44378
  this.FixedYMaxMin; //{ Max, Min} 固定Y轴最大最小值
@@ -44411,6 +44397,22 @@ function FrameSplitY()
44411
44397
  return true;
44412
44398
  }
44413
44399
 
44400
+
44401
+ this.Reset=function() //重置
44402
+ {
44403
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
44404
+ this.StringFormat=g_JSChartResource.Frame.StringFormat;
44405
+ }
44406
+
44407
+ this.SetOption=function(option)
44408
+ {
44409
+ if (!option) return;
44410
+
44411
+ if (IFrameSplitOperator.IsNumber(option.FloatPrecision)) this.FloatPrecision=option.FloatPrecision;
44412
+ if (IFrameSplitOperator.IsNumber(option.StringFormat)) this.StringFormat=option.StringFormat;
44413
+ if (IFrameSplitOperator.IsBool(option.EnableRemoveZero)) this.EnableRemoveZero=option.EnableRemoveZero;
44414
+ }
44415
+
44414
44416
  this.GetFloatPrecision=function(value,floatPrecision)
44415
44417
  {
44416
44418
  if (value>this.FLOATPRECISION_RANGE[0]) return floatPrecision;
@@ -44594,6 +44596,10 @@ function FrameSplitY()
44594
44596
  if (IFrameSplitOperator.IsNumber(value) && Math.abs(value) > 1000) floatPrecision=0;
44595
44597
  text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);
44596
44598
  }
44599
+ else if (this.StringFormat==2) //原始数据输出
44600
+ {
44601
+ text=`${value.toFixed(this.FloatPrecision)}`;
44602
+ }
44597
44603
  else
44598
44604
  {
44599
44605
  var absValue=Math.abs(value);
@@ -61818,7 +61824,9 @@ function JSChartResource()
61818
61824
  this.Frame={
61819
61825
  XBottomOffset:2*GetDevicePixelRatio(), //X轴文字向下偏移
61820
61826
  YTopOffset:2*GetDevicePixelRatio(), //Y轴顶部文字向下偏移
61821
- YTextPadding:[2,2]
61827
+ YTextPadding:[2,2],
61828
+ EnableRemoveZero:true, //移除小数点后面的0
61829
+ StringFormat:0
61822
61830
  };
61823
61831
  this.ToolbarButtonStyle=0;
61824
61832
 
@@ -67778,6 +67786,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
67778
67786
  this.Draw();
67779
67787
  }
67780
67788
 
67789
+
67781
67790
  this.OnKLinePageChange=function(eventid)
67782
67791
  {
67783
67792
  if (!this.ChartPaint[0]) return;
@@ -67846,18 +67855,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
67846
67855
  {
67847
67856
  if (windowIndex == 0) windowIndex = 1; //幅图指标,不能再主图显示
67848
67857
  }
67849
- let indexData = indexInfo;
67850
- if (option)
67851
- {
67852
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
67853
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
67854
- if (option.Args) indexData.Args=option.Args;
67855
- if (option.TitleFont) indexData.TitleFont=option.TitleFont;
67856
- if (option.IsShortTitle) indexData.IsShortTitle=option.IsShortTitle;
67857
- if (option.Lock) indexData.Lock=option.Lock;
67858
- }
67859
-
67860
- return this.ChangeScriptIndex(windowIndex, indexData,option);
67858
+
67859
+ JSIndexScript.ModifyAttribute(indexInfo, option)
67860
+ return this.ChangeScriptIndex(windowIndex, indexInfo, option);
67861
67861
  }
67862
67862
 
67863
67863
  //主图指标
@@ -68003,21 +68003,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68003
68003
  }
68004
68004
  else if (indexInfo)
68005
68005
  {
68006
- var args=indexInfo.Args;
68007
- if (obj.Args) args=obj.Args; //外部可以设置参数
68008
- let indexData =
68009
- {
68010
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexName,
68011
- //扩展属性 可以是空
68012
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
68013
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
68014
- OutName:indexInfo.OutName
68015
- };
68016
-
68017
- if (IFrameSplitOperator.IsNumber(obj.FloatPrecision)) indexData.FloatPrecision=obj.FloatPrecision;
68018
- if (IFrameSplitOperator.IsNumber(obj.StringFormat)) indexData.StringFormat=obj.StringFormat;
68019
- if (IFrameSplitOperator.IsBool(obj.IsSync)) indexData.IsSync=obj.IsSync;
68020
- var scriptIndex=new OverlayScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
68006
+ JSIndexScript.ModifyAttribute(indexInfo, obj);
68007
+ var scriptIndex=new OverlayScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
68021
68008
  scriptIndex.OverlayIndex={ IsOverlay:true, Identify:overlayFrame.Identify, WindowIndex:windowIndex, Frame:overlayFrame }; //叠加指标信息
68022
68009
  overlayFrame.Script=scriptIndex;
68023
68010
  }
@@ -68386,19 +68373,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
68386
68373
  var indexInfo = systemScript.Get(indexID);
68387
68374
  if (indexInfo)
68388
68375
  {
68389
- var args=indexInfo.Args;
68390
- if (option.Windows[i].Args) args=option.Windows[i].Args;
68391
- let indexData =
68392
- {
68393
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexID ,
68394
- //扩展属性 可以是空
68395
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
68396
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
68397
- OutName:indexInfo.OutName
68398
- };
68399
- if (item.TitleFont) indexData.TitleFont=item.TitleFont;
68400
-
68401
- this.WindowIndex[i]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
68376
+ JSIndexScript.ModifyAttribute(indexInfo,item);
68377
+ this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
68402
68378
  }
68403
68379
  }
68404
68380
  }
@@ -37,7 +37,8 @@ var JSConsole=
37
37
  StringFormat: 1=带单位万/亿 2=原始格式
38
38
  Condition: 限制条件 { Symbol:'Index'/'Stock'(只支持指数/股票),Period:[](支持的周期), Include:[](指定支持的股票,代码全部大写包括后缀, Message:"提示信息")}
39
39
  OutName:动态输出变量名字 [{Name:原始变量名, DynamicName:动态名字格式}] 如 {Name:"MA1", DynamicName:"MA{M1}"};
40
- SplitType: Y轴分割类型
40
+ SplitType: Y轴分割类型,
41
+ YAxis:{ FloatPrecision:小数位数, StringFormat:, EnableRemoveZero } //Y轴刻度输出格式
41
42
  */
42
43
 
43
44
  //周期条件枚举
@@ -179,6 +180,29 @@ JSIndexScript.AddIndex=function(aryIndex) //添加自定义指标
179
180
  }
180
181
  }
181
182
 
183
+ //修改指标属性
184
+ JSIndexScript.ModifyAttribute=function(indexInfo, attribute)
185
+ {
186
+ if (!attribute) return;
187
+
188
+ if (attribute.Args) indexInfo.Args=attribute.Args; //外部可以设置参数
189
+ if (IFrameSplitOperator.IsNumber(attribute.FloatPrecision)) indexInfo.FloatPrecision=attribute.FloatPrecision;
190
+ if (IFrameSplitOperator.IsNumber(attribute.StringFormat)) indexInfo.StringFormat=attribute.StringFormat;
191
+ if (IFrameSplitOperator.IsBool(attribute.IsSync)) indexInfo.IsSync=attribute.IsSync;
192
+ if (IFrameSplitOperator.IsBool(attribute.IsShortTitle)) indexInfo.IsShortTitle=attribute.IsShortTitle;
193
+ if (attribute.TitleFont) indexInfo.TitleFont=attribute.TitleFont;
194
+ if (attribute.Lock) indexInfo.Lock=attribute.Lock;
195
+
196
+ if (attribute.YAxis)
197
+ {
198
+ var item=attribute.YAxis;
199
+ if (!indexInfo.YAxis) indexInfo.YAxis={ };
200
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) indexInfo.YAxis.FloatPrecision=item.FloatPrecision;
201
+ if (IFrameSplitOperator.IsNumber(item.StringFormat)) indexInfo.YAxis.StringFormat=item.StringFormat;
202
+ if (IFrameSplitOperator.IsBool(item.EnableRemoveZero)) indexInfo.YAxis.EnableRemoveZero=item.EnableRemoveZero;
203
+ }
204
+ }
205
+
182
206
  JSIndexScript.prototype.Get=function(id)
183
207
  {
184
208
  var data=g_CustomIndex.Get(id);
@@ -1593,7 +1617,7 @@ JSIndexScript.prototype.AMO = function ()
1593
1617
  {
1594
1618
  let data =
1595
1619
  {
1596
- Name: 'AMO', Description: '成交金额', IsMainIndex: false,
1620
+ Name: 'AMO', Description: '成交金额', IsMainIndex: false, StringFormat:2, YAxis:{ FloatPrecision:0, StringFormat:2 },
1597
1621
  Args: [{ Name: 'M1', Value: 5 },{ Name: 'M2', Value: 10 }],
1598
1622
  Script: //脚本
1599
1623
  'AMOW:AMOUNT/10000.0,VOLSTICK;\n\
@@ -4778,15 +4802,10 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4778
4802
  {
4779
4803
  let indexInfo = scriptData.Get(item.Index);
4780
4804
  if (!indexInfo) continue;
4781
-
4782
- if (item.Lock) indexInfo.Lock=item.Lock;
4805
+ JSIndexScript.ModifyAttribute(indexInfo, item);
4783
4806
  indexInfo.ID=item.Index;
4784
- var args=indexInfo.Args;
4785
- if (item.Args) args=item.Args;
4786
- if (item.IsShortTitle) indexInfo.IsShortTitle=item.IsShortTitle;
4787
- if (item.TitleFont) indexInfo.TitleFont=item.TitleFont;
4788
- if (IFrameSplitOperator.IsBool(item.IsSync)) indexInfo.IsSync=item.IsSync;
4789
- chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, args,indexInfo); //脚本执行
4807
+
4808
+ chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
4790
4809
  if (item.StringFormat>0) chart.WindowIndex[i].StringFormat=item.StringFormat;
4791
4810
  if (item.FloatPrecision>=0) chart.WindowIndex[i].FloatPrecision=item.FloatPrecision;
4792
4811
  }
@@ -12229,7 +12248,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12229
12248
  subFrame.Frame.IsShowYText[1]=option.IsShowRightText;
12230
12249
  subFrame.Frame.YSplitOperator.IsShowRightText=option.IsShowRightText; //显示右边刻度
12231
12250
  }
12232
-
12233
12251
  }
12234
12252
 
12235
12253
  this.AddNewSubFrame=function(option)
@@ -12277,24 +12295,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12277
12295
  this.RemoveMinSizeWindows(); //清空隐藏的指标
12278
12296
  var index=this.AddNewSubFrame(option);
12279
12297
 
12280
- var indexData =
12281
- {
12282
- Name:indexInfo.Name, Script:indexInfo.Script, Args: indexInfo.Args, ID:indexName ,
12283
- //扩展属性 可以是空
12284
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
12285
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,StringFormat:indexInfo.StringFormat,
12286
- OutName:indexInfo.OutName
12287
- };
12298
+ JSIndexScript.ModifyAttribute(indexInfo, option);
12288
12299
 
12289
- if (option)
12290
- {
12291
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
12292
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
12293
- if (option.Args) indexData.Args=option.Args;
12294
- if (option.Lock) indexData.Lock=option.Lock;
12295
- }
12296
-
12297
- this.WindowIndex[index] = new ScriptIndex(indexData.Name, indexData.Script, indexData.Args,indexData); //脚本执行
12300
+ this.WindowIndex[index] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
12298
12301
  if (this.ClassName=="MinuteChartContainer" || this.ClassName=="MinuteChartHScreenContainer")
12299
12302
  var bindData=this.SourceData;
12300
12303
  else
@@ -46944,7 +46947,7 @@ function IFrameSplitOperator()
46944
46947
  this.Frame; //框架信息
46945
46948
  this.FrameSplitData; //坐标轴分割方法
46946
46949
  this.SplitCount=5; //刻度个数
46947
- this.StringFormat=0; //刻度字符串格式
46950
+ this.StringFormat=0; //刻度字符串格式 2=原始格式
46948
46951
  this.IsShowLeftText=true; //显示左边刻度
46949
46952
  this.IsShowRightText=true; //显示右边刻度
46950
46953
  this.LanguageID=JSCHART_LANGUAGE_ID.LANGUAGE_CHINESE_ID;
@@ -47287,6 +47290,13 @@ function IFrameSplitOperator()
47287
47290
 
47288
47291
  return data;
47289
47292
  }
47293
+
47294
+ this.Reset=function() //重置
47295
+ {
47296
+
47297
+ }
47298
+
47299
+ this.SetOption=function(option) { }
47290
47300
  }
47291
47301
 
47292
47302
  //字符串格式化 千分位分割
@@ -48553,7 +48563,7 @@ function FrameSplitY()
48553
48563
  this.DefaultSplitType=0;
48554
48564
  this.Custom=[]; //[{Type:0}]; 定制刻度
48555
48565
  this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
48556
- this.EnableRemoveZero=true;
48566
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
48557
48567
  this.LineType=null; //线段样式
48558
48568
  this.IgnoreYValue = null; //在这个数组里的数字不显示在刻度上
48559
48569
  this.FixedYMaxMin; //{ Max, Min} 固定Y轴最大最小值
@@ -48578,6 +48588,22 @@ function FrameSplitY()
48578
48588
  return true;
48579
48589
  }
48580
48590
 
48591
+
48592
+ this.Reset=function() //重置
48593
+ {
48594
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
48595
+ this.StringFormat=g_JSChartResource.Frame.StringFormat;
48596
+ }
48597
+
48598
+ this.SetOption=function(option)
48599
+ {
48600
+ if (!option) return;
48601
+
48602
+ if (IFrameSplitOperator.IsNumber(option.FloatPrecision)) this.FloatPrecision=option.FloatPrecision;
48603
+ if (IFrameSplitOperator.IsNumber(option.StringFormat)) this.StringFormat=option.StringFormat;
48604
+ if (IFrameSplitOperator.IsBool(option.EnableRemoveZero)) this.EnableRemoveZero=option.EnableRemoveZero;
48605
+ }
48606
+
48581
48607
  this.GetFloatPrecision=function(value,floatPrecision)
48582
48608
  {
48583
48609
  if (value>this.FLOATPRECISION_RANGE[0]) return floatPrecision;
@@ -48761,6 +48787,10 @@ function FrameSplitY()
48761
48787
  if (IFrameSplitOperator.IsNumber(value) && Math.abs(value) > 1000) floatPrecision=0;
48762
48788
  text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);
48763
48789
  }
48790
+ else if (this.StringFormat==2) //原始数据输出
48791
+ {
48792
+ text=`${value.toFixed(this.FloatPrecision)}`;
48793
+ }
48764
48794
  else
48765
48795
  {
48766
48796
  var absValue=Math.abs(value);
@@ -65985,7 +66015,9 @@ function JSChartResource()
65985
66015
  this.Frame={
65986
66016
  XBottomOffset:2*GetDevicePixelRatio(), //X轴文字向下偏移
65987
66017
  YTopOffset:2*GetDevicePixelRatio(), //Y轴顶部文字向下偏移
65988
- YTextPadding:[2,2]
66018
+ YTextPadding:[2,2],
66019
+ EnableRemoveZero:true, //移除小数点后面的0
66020
+ StringFormat:0
65989
66021
  };
65990
66022
  this.ToolbarButtonStyle=0;
65991
66023
 
@@ -71945,6 +71977,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71945
71977
  this.Draw();
71946
71978
  }
71947
71979
 
71980
+
71948
71981
  this.OnKLinePageChange=function(eventid)
71949
71982
  {
71950
71983
  if (!this.ChartPaint[0]) return;
@@ -72013,18 +72046,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72013
72046
  {
72014
72047
  if (windowIndex == 0) windowIndex = 1; //幅图指标,不能再主图显示
72015
72048
  }
72016
- let indexData = indexInfo;
72017
- if (option)
72018
- {
72019
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
72020
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
72021
- if (option.Args) indexData.Args=option.Args;
72022
- if (option.TitleFont) indexData.TitleFont=option.TitleFont;
72023
- if (option.IsShortTitle) indexData.IsShortTitle=option.IsShortTitle;
72024
- if (option.Lock) indexData.Lock=option.Lock;
72025
- }
72026
-
72027
- return this.ChangeScriptIndex(windowIndex, indexData,option);
72049
+
72050
+ JSIndexScript.ModifyAttribute(indexInfo, option)
72051
+ return this.ChangeScriptIndex(windowIndex, indexInfo, option);
72028
72052
  }
72029
72053
 
72030
72054
  //主图指标
@@ -72170,21 +72194,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72170
72194
  }
72171
72195
  else if (indexInfo)
72172
72196
  {
72173
- var args=indexInfo.Args;
72174
- if (obj.Args) args=obj.Args; //外部可以设置参数
72175
- let indexData =
72176
- {
72177
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexName,
72178
- //扩展属性 可以是空
72179
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
72180
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
72181
- OutName:indexInfo.OutName
72182
- };
72183
-
72184
- if (IFrameSplitOperator.IsNumber(obj.FloatPrecision)) indexData.FloatPrecision=obj.FloatPrecision;
72185
- if (IFrameSplitOperator.IsNumber(obj.StringFormat)) indexData.StringFormat=obj.StringFormat;
72186
- if (IFrameSplitOperator.IsBool(obj.IsSync)) indexData.IsSync=obj.IsSync;
72187
- var scriptIndex=new OverlayScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
72197
+ JSIndexScript.ModifyAttribute(indexInfo, obj);
72198
+ var scriptIndex=new OverlayScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
72188
72199
  scriptIndex.OverlayIndex={ IsOverlay:true, Identify:overlayFrame.Identify, WindowIndex:windowIndex, Frame:overlayFrame }; //叠加指标信息
72189
72200
  overlayFrame.Script=scriptIndex;
72190
72201
  }
@@ -72553,19 +72564,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72553
72564
  var indexInfo = systemScript.Get(indexID);
72554
72565
  if (indexInfo)
72555
72566
  {
72556
- var args=indexInfo.Args;
72557
- if (option.Windows[i].Args) args=option.Windows[i].Args;
72558
- let indexData =
72559
- {
72560
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexID ,
72561
- //扩展属性 可以是空
72562
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
72563
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
72564
- OutName:indexInfo.OutName
72565
- };
72566
- if (item.TitleFont) indexData.TitleFont=item.TitleFont;
72567
-
72568
- this.WindowIndex[i]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
72567
+ JSIndexScript.ModifyAttribute(indexInfo,item);
72568
+ this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
72569
72569
  }
72570
72570
  }
72571
72571
  }
@@ -112403,6 +112403,8 @@ function ScriptIndex(name,script,args,option)
112403
112403
  this.TitleFont=g_JSChartResource.TitleFont; //标题字体
112404
112404
  this.IsShortTitle=false; //是否显示指标参数
112405
112405
  this.IsUsePageData=false; //是否使用了K线界面数据
112406
+
112407
+ this.YAxis=null; //Y轴刻度设置 { FloatPrecision, StringFormat, EnableRemoveZero }
112406
112408
 
112407
112409
  //调试信息
112408
112410
  this.Debug; // { Callback:, Count: }
@@ -112452,6 +112454,15 @@ function ScriptIndex(name,script,args,option)
112452
112454
  if (option.Lock.MinWidth) this.LockMinWidth=option.Lock.MinWidth*GetDevicePixelRatio();
112453
112455
  }
112454
112456
 
112457
+ if (option && option.YAxis)
112458
+ {
112459
+ this.YAxis={ };
112460
+ if (IFrameSplitOperator.IsNumber(option.YAxis.FloatPrecision)) this.YAxis.FloatPrecision=option.YAxis.FloatPrecision;
112461
+ if (IFrameSplitOperator.IsNumber(option.YAxis.StringFormat)) this.YAxis.StringFormat=option.YAxis.StringFormat;
112462
+ if (IFrameSplitOperator.IsBool(option.YAxis.EnableRemoveZero)) this.YAxis.EnableRemoveZero=option.YAxis.EnableRemoveZero;
112463
+
112464
+ }
112465
+
112455
112466
  if (args) this.Arguments=args;
112456
112467
 
112457
112468
  this.CopyTo=function(dest) //赋值到新实例出来
@@ -114129,7 +114140,15 @@ function ScriptIndex(name,script,args,option)
114129
114140
 
114130
114141
  if (windowIndex>=1 && hqChart.Frame)
114131
114142
  {
114132
- hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator.FloatPrecision=this.FloatPrecision;
114143
+ //Y轴刻度格式 默认跟标题栏一致
114144
+ var ySpliter=hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator;
114145
+ if (ySpliter)
114146
+ {
114147
+ ySpliter.Reset();
114148
+ ySpliter.FloatPrecision=this.FloatPrecision;
114149
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
114150
+ }
114151
+
114133
114152
  if (this.YSpecificMaxMin) hqChart.Frame.SubFrame[windowIndex].Frame.YSpecificMaxMin=this.YSpecificMaxMin; //最大最小值
114134
114153
  if (this.YSplitScale) hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.YSplitScale; //固定刻度
114135
114154
  }
@@ -114501,7 +114520,14 @@ function OverlayScriptIndex(name,script,args,option)
114501
114520
  if (!IFrameSplitOperator.IsNonEmptyArray(this.OutVar)) return;
114502
114521
 
114503
114522
  //修改Y轴分割方式
114504
- if (IFrameSplitOperator.IsNumber(this.YSplitType)) this.OverlayIndex.Frame.Frame.YSplitOperator.SplitType=this.YSplitType;
114523
+ var ySpliter=this.OverlayIndex.Frame.Frame.YSplitOperator;
114524
+ if (ySpliter)
114525
+ {
114526
+ ySpliter.Reset();
114527
+ ySpliter.FloatPrecision=this.FloatPrecision;
114528
+ if (IFrameSplitOperator.IsNumber(this.YSplitType)) ySpliter.SplitType=this.YSplitType;
114529
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
114530
+ }
114505
114531
 
114506
114532
  //指标名字
114507
114533
  var titleInfo={ Data:[], Title:this.Name, Frame:this.OverlayIndex.Frame.Frame, Script:this };
@@ -129282,7 +129308,7 @@ function ScrollBarBGChart()
129282
129308
 
129283
129309
 
129284
129310
 
129285
- var HQCHART_VERSION="1.1.12919";
129311
+ var HQCHART_VERSION="1.1.12934";
129286
129312
 
129287
129313
  function PrintHQChartVersion()
129288
129314
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12919";
8
+ var HQCHART_VERSION="1.1.12934";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -81,7 +81,8 @@ JSNetwork.HttpRequest=function(obj) //对请求进行封装
81
81
  StringFormat: 1=带单位万/亿 2=原始格式
82
82
  Condition: 限制条件 { Symbol:'Index'/'Stock'(只支持指数/股票),Period:[](支持的周期), Include:[](指定支持的股票,代码全部大写包括后缀, Message:"提示信息")}
83
83
  OutName:动态输出变量名字 [{Name:原始变量名, DynamicName:动态名字格式}] 如 {Name:"MA1", DynamicName:"MA{M1}"};
84
- SplitType: Y轴分割类型
84
+ SplitType: Y轴分割类型,
85
+ YAxis:{ FloatPrecision:小数位数, StringFormat:, EnableRemoveZero } //Y轴刻度输出格式
85
86
  */
86
87
 
87
88
  //周期条件枚举
@@ -223,6 +224,29 @@ JSIndexScript.AddIndex=function(aryIndex) //添加自定义指标
223
224
  }
224
225
  }
225
226
 
227
+ //修改指标属性
228
+ JSIndexScript.ModifyAttribute=function(indexInfo, attribute)
229
+ {
230
+ if (!attribute) return;
231
+
232
+ if (attribute.Args) indexInfo.Args=attribute.Args; //外部可以设置参数
233
+ if (IFrameSplitOperator.IsNumber(attribute.FloatPrecision)) indexInfo.FloatPrecision=attribute.FloatPrecision;
234
+ if (IFrameSplitOperator.IsNumber(attribute.StringFormat)) indexInfo.StringFormat=attribute.StringFormat;
235
+ if (IFrameSplitOperator.IsBool(attribute.IsSync)) indexInfo.IsSync=attribute.IsSync;
236
+ if (IFrameSplitOperator.IsBool(attribute.IsShortTitle)) indexInfo.IsShortTitle=attribute.IsShortTitle;
237
+ if (attribute.TitleFont) indexInfo.TitleFont=attribute.TitleFont;
238
+ if (attribute.Lock) indexInfo.Lock=attribute.Lock;
239
+
240
+ if (attribute.YAxis)
241
+ {
242
+ var item=attribute.YAxis;
243
+ if (!indexInfo.YAxis) indexInfo.YAxis={ };
244
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) indexInfo.YAxis.FloatPrecision=item.FloatPrecision;
245
+ if (IFrameSplitOperator.IsNumber(item.StringFormat)) indexInfo.YAxis.StringFormat=item.StringFormat;
246
+ if (IFrameSplitOperator.IsBool(item.EnableRemoveZero)) indexInfo.YAxis.EnableRemoveZero=item.EnableRemoveZero;
247
+ }
248
+ }
249
+
226
250
  JSIndexScript.prototype.Get=function(id)
227
251
  {
228
252
  var data=g_CustomIndex.Get(id);
@@ -1637,7 +1661,7 @@ JSIndexScript.prototype.AMO = function ()
1637
1661
  {
1638
1662
  let data =
1639
1663
  {
1640
- Name: 'AMO', Description: '成交金额', IsMainIndex: false,
1664
+ Name: 'AMO', Description: '成交金额', IsMainIndex: false, StringFormat:2, YAxis:{ FloatPrecision:0, StringFormat:2 },
1641
1665
  Args: [{ Name: 'M1', Value: 5 },{ Name: 'M2', Value: 10 }],
1642
1666
  Script: //脚本
1643
1667
  'AMOW:AMOUNT/10000.0,VOLSTICK;\n\
@@ -4822,15 +4846,10 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4822
4846
  {
4823
4847
  let indexInfo = scriptData.Get(item.Index);
4824
4848
  if (!indexInfo) continue;
4825
-
4826
- if (item.Lock) indexInfo.Lock=item.Lock;
4849
+ JSIndexScript.ModifyAttribute(indexInfo, item);
4827
4850
  indexInfo.ID=item.Index;
4828
- var args=indexInfo.Args;
4829
- if (item.Args) args=item.Args;
4830
- if (item.IsShortTitle) indexInfo.IsShortTitle=item.IsShortTitle;
4831
- if (item.TitleFont) indexInfo.TitleFont=item.TitleFont;
4832
- if (IFrameSplitOperator.IsBool(item.IsSync)) indexInfo.IsSync=item.IsSync;
4833
- chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, args,indexInfo); //脚本执行
4851
+
4852
+ chart.WindowIndex[i] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
4834
4853
  if (item.StringFormat>0) chart.WindowIndex[i].StringFormat=item.StringFormat;
4835
4854
  if (item.FloatPrecision>=0) chart.WindowIndex[i].FloatPrecision=item.FloatPrecision;
4836
4855
  }
@@ -12273,7 +12292,6 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12273
12292
  subFrame.Frame.IsShowYText[1]=option.IsShowRightText;
12274
12293
  subFrame.Frame.YSplitOperator.IsShowRightText=option.IsShowRightText; //显示右边刻度
12275
12294
  }
12276
-
12277
12295
  }
12278
12296
 
12279
12297
  this.AddNewSubFrame=function(option)
@@ -12321,24 +12339,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
12321
12339
  this.RemoveMinSizeWindows(); //清空隐藏的指标
12322
12340
  var index=this.AddNewSubFrame(option);
12323
12341
 
12324
- var indexData =
12325
- {
12326
- Name:indexInfo.Name, Script:indexInfo.Script, Args: indexInfo.Args, ID:indexName ,
12327
- //扩展属性 可以是空
12328
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
12329
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,StringFormat:indexInfo.StringFormat,
12330
- OutName:indexInfo.OutName
12331
- };
12342
+ JSIndexScript.ModifyAttribute(indexInfo, option);
12332
12343
 
12333
- if (option)
12334
- {
12335
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
12336
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
12337
- if (option.Args) indexData.Args=option.Args;
12338
- if (option.Lock) indexData.Lock=option.Lock;
12339
- }
12340
-
12341
- this.WindowIndex[index] = new ScriptIndex(indexData.Name, indexData.Script, indexData.Args,indexData); //脚本执行
12344
+ this.WindowIndex[index] = new ScriptIndex(indexInfo.Name, indexInfo.Script, indexInfo.Args,indexInfo); //脚本执行
12342
12345
  if (this.ClassName=="MinuteChartContainer" || this.ClassName=="MinuteChartHScreenContainer")
12343
12346
  var bindData=this.SourceData;
12344
12347
  else
@@ -46988,7 +46991,7 @@ function IFrameSplitOperator()
46988
46991
  this.Frame; //框架信息
46989
46992
  this.FrameSplitData; //坐标轴分割方法
46990
46993
  this.SplitCount=5; //刻度个数
46991
- this.StringFormat=0; //刻度字符串格式
46994
+ this.StringFormat=0; //刻度字符串格式 2=原始格式
46992
46995
  this.IsShowLeftText=true; //显示左边刻度
46993
46996
  this.IsShowRightText=true; //显示右边刻度
46994
46997
  this.LanguageID=JSCHART_LANGUAGE_ID.LANGUAGE_CHINESE_ID;
@@ -47331,6 +47334,13 @@ function IFrameSplitOperator()
47331
47334
 
47332
47335
  return data;
47333
47336
  }
47337
+
47338
+ this.Reset=function() //重置
47339
+ {
47340
+
47341
+ }
47342
+
47343
+ this.SetOption=function(option) { }
47334
47344
  }
47335
47345
 
47336
47346
  //字符串格式化 千分位分割
@@ -48597,7 +48607,7 @@ function FrameSplitY()
48597
48607
  this.DefaultSplitType=0;
48598
48608
  this.Custom=[]; //[{Type:0}]; 定制刻度
48599
48609
  this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
48600
- this.EnableRemoveZero=true;
48610
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
48601
48611
  this.LineType=null; //线段样式
48602
48612
  this.IgnoreYValue = null; //在这个数组里的数字不显示在刻度上
48603
48613
  this.FixedYMaxMin; //{ Max, Min} 固定Y轴最大最小值
@@ -48622,6 +48632,22 @@ function FrameSplitY()
48622
48632
  return true;
48623
48633
  }
48624
48634
 
48635
+
48636
+ this.Reset=function() //重置
48637
+ {
48638
+ this.EnableRemoveZero=g_JSChartResource.Frame.EnableRemoveZero;
48639
+ this.StringFormat=g_JSChartResource.Frame.StringFormat;
48640
+ }
48641
+
48642
+ this.SetOption=function(option)
48643
+ {
48644
+ if (!option) return;
48645
+
48646
+ if (IFrameSplitOperator.IsNumber(option.FloatPrecision)) this.FloatPrecision=option.FloatPrecision;
48647
+ if (IFrameSplitOperator.IsNumber(option.StringFormat)) this.StringFormat=option.StringFormat;
48648
+ if (IFrameSplitOperator.IsBool(option.EnableRemoveZero)) this.EnableRemoveZero=option.EnableRemoveZero;
48649
+ }
48650
+
48625
48651
  this.GetFloatPrecision=function(value,floatPrecision)
48626
48652
  {
48627
48653
  if (value>this.FLOATPRECISION_RANGE[0]) return floatPrecision;
@@ -48805,6 +48831,10 @@ function FrameSplitY()
48805
48831
  if (IFrameSplitOperator.IsNumber(value) && Math.abs(value) > 1000) floatPrecision=0;
48806
48832
  text=IFrameSplitOperator.FormatValueString(value,floatPrecision,this.LanguageID);
48807
48833
  }
48834
+ else if (this.StringFormat==2) //原始数据输出
48835
+ {
48836
+ text=`${value.toFixed(this.FloatPrecision)}`;
48837
+ }
48808
48838
  else
48809
48839
  {
48810
48840
  var absValue=Math.abs(value);
@@ -66029,7 +66059,9 @@ function JSChartResource()
66029
66059
  this.Frame={
66030
66060
  XBottomOffset:2*GetDevicePixelRatio(), //X轴文字向下偏移
66031
66061
  YTopOffset:2*GetDevicePixelRatio(), //Y轴顶部文字向下偏移
66032
- YTextPadding:[2,2]
66062
+ YTextPadding:[2,2],
66063
+ EnableRemoveZero:true, //移除小数点后面的0
66064
+ StringFormat:0
66033
66065
  };
66034
66066
  this.ToolbarButtonStyle=0;
66035
66067
 
@@ -71989,6 +72021,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
71989
72021
  this.Draw();
71990
72022
  }
71991
72023
 
72024
+
71992
72025
  this.OnKLinePageChange=function(eventid)
71993
72026
  {
71994
72027
  if (!this.ChartPaint[0]) return;
@@ -72057,18 +72090,9 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72057
72090
  {
72058
72091
  if (windowIndex == 0) windowIndex = 1; //幅图指标,不能再主图显示
72059
72092
  }
72060
- let indexData = indexInfo;
72061
- if (option)
72062
- {
72063
- if (option.FloatPrecision>=0) indexData.FloatPrecision=option.FloatPrecision;
72064
- if (option.StringFormat>0) indexData.StringFormat=option.StringFormat;
72065
- if (option.Args) indexData.Args=option.Args;
72066
- if (option.TitleFont) indexData.TitleFont=option.TitleFont;
72067
- if (option.IsShortTitle) indexData.IsShortTitle=option.IsShortTitle;
72068
- if (option.Lock) indexData.Lock=option.Lock;
72069
- }
72070
-
72071
- return this.ChangeScriptIndex(windowIndex, indexData,option);
72093
+
72094
+ JSIndexScript.ModifyAttribute(indexInfo, option)
72095
+ return this.ChangeScriptIndex(windowIndex, indexInfo, option);
72072
72096
  }
72073
72097
 
72074
72098
  //主图指标
@@ -72214,21 +72238,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72214
72238
  }
72215
72239
  else if (indexInfo)
72216
72240
  {
72217
- var args=indexInfo.Args;
72218
- if (obj.Args) args=obj.Args; //外部可以设置参数
72219
- let indexData =
72220
- {
72221
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexName,
72222
- //扩展属性 可以是空
72223
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
72224
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
72225
- OutName:indexInfo.OutName
72226
- };
72227
-
72228
- if (IFrameSplitOperator.IsNumber(obj.FloatPrecision)) indexData.FloatPrecision=obj.FloatPrecision;
72229
- if (IFrameSplitOperator.IsNumber(obj.StringFormat)) indexData.StringFormat=obj.StringFormat;
72230
- if (IFrameSplitOperator.IsBool(obj.IsSync)) indexData.IsSync=obj.IsSync;
72231
- var scriptIndex=new OverlayScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
72241
+ JSIndexScript.ModifyAttribute(indexInfo, obj);
72242
+ var scriptIndex=new OverlayScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
72232
72243
  scriptIndex.OverlayIndex={ IsOverlay:true, Identify:overlayFrame.Identify, WindowIndex:windowIndex, Frame:overlayFrame }; //叠加指标信息
72233
72244
  overlayFrame.Script=scriptIndex;
72234
72245
  }
@@ -72597,19 +72608,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
72597
72608
  var indexInfo = systemScript.Get(indexID);
72598
72609
  if (indexInfo)
72599
72610
  {
72600
- var args=indexInfo.Args;
72601
- if (option.Windows[i].Args) args=option.Windows[i].Args;
72602
- let indexData =
72603
- {
72604
- Name:indexInfo.Name, Script:indexInfo.Script, Args: args, ID:indexID ,
72605
- //扩展属性 可以是空
72606
- KLineType:indexInfo.KLineType, YSpecificMaxMin:indexInfo.YSpecificMaxMin, YSplitScale:indexInfo.YSplitScale,
72607
- FloatPrecision:indexInfo.FloatPrecision, Condition:indexInfo.Condition,
72608
- OutName:indexInfo.OutName
72609
- };
72610
- if (item.TitleFont) indexData.TitleFont=item.TitleFont;
72611
-
72612
- this.WindowIndex[i]=new ScriptIndex(indexData.Name,indexData.Script,indexData.Args,indexData); //脚本执行
72611
+ JSIndexScript.ModifyAttribute(indexInfo,item);
72612
+ this.WindowIndex[i]=new ScriptIndex(indexInfo.Name,indexInfo.Script,indexInfo.Args,indexInfo); //脚本执行
72613
72613
  }
72614
72614
  }
72615
72615
  }
@@ -112447,6 +112447,8 @@ function ScriptIndex(name,script,args,option)
112447
112447
  this.TitleFont=g_JSChartResource.TitleFont; //标题字体
112448
112448
  this.IsShortTitle=false; //是否显示指标参数
112449
112449
  this.IsUsePageData=false; //是否使用了K线界面数据
112450
+
112451
+ this.YAxis=null; //Y轴刻度设置 { FloatPrecision, StringFormat, EnableRemoveZero }
112450
112452
 
112451
112453
  //调试信息
112452
112454
  this.Debug; // { Callback:, Count: }
@@ -112496,6 +112498,15 @@ function ScriptIndex(name,script,args,option)
112496
112498
  if (option.Lock.MinWidth) this.LockMinWidth=option.Lock.MinWidth*GetDevicePixelRatio();
112497
112499
  }
112498
112500
 
112501
+ if (option && option.YAxis)
112502
+ {
112503
+ this.YAxis={ };
112504
+ if (IFrameSplitOperator.IsNumber(option.YAxis.FloatPrecision)) this.YAxis.FloatPrecision=option.YAxis.FloatPrecision;
112505
+ if (IFrameSplitOperator.IsNumber(option.YAxis.StringFormat)) this.YAxis.StringFormat=option.YAxis.StringFormat;
112506
+ if (IFrameSplitOperator.IsBool(option.YAxis.EnableRemoveZero)) this.YAxis.EnableRemoveZero=option.YAxis.EnableRemoveZero;
112507
+
112508
+ }
112509
+
112499
112510
  if (args) this.Arguments=args;
112500
112511
 
112501
112512
  this.CopyTo=function(dest) //赋值到新实例出来
@@ -114173,7 +114184,15 @@ function ScriptIndex(name,script,args,option)
114173
114184
 
114174
114185
  if (windowIndex>=1 && hqChart.Frame)
114175
114186
  {
114176
- hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator.FloatPrecision=this.FloatPrecision;
114187
+ //Y轴刻度格式 默认跟标题栏一致
114188
+ var ySpliter=hqChart.Frame.SubFrame[windowIndex].Frame.YSplitOperator;
114189
+ if (ySpliter)
114190
+ {
114191
+ ySpliter.Reset();
114192
+ ySpliter.FloatPrecision=this.FloatPrecision;
114193
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
114194
+ }
114195
+
114177
114196
  if (this.YSpecificMaxMin) hqChart.Frame.SubFrame[windowIndex].Frame.YSpecificMaxMin=this.YSpecificMaxMin; //最大最小值
114178
114197
  if (this.YSplitScale) hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.YSplitScale; //固定刻度
114179
114198
  }
@@ -114545,7 +114564,14 @@ function OverlayScriptIndex(name,script,args,option)
114545
114564
  if (!IFrameSplitOperator.IsNonEmptyArray(this.OutVar)) return;
114546
114565
 
114547
114566
  //修改Y轴分割方式
114548
- if (IFrameSplitOperator.IsNumber(this.YSplitType)) this.OverlayIndex.Frame.Frame.YSplitOperator.SplitType=this.YSplitType;
114567
+ var ySpliter=this.OverlayIndex.Frame.Frame.YSplitOperator;
114568
+ if (ySpliter)
114569
+ {
114570
+ ySpliter.Reset();
114571
+ ySpliter.FloatPrecision=this.FloatPrecision;
114572
+ if (IFrameSplitOperator.IsNumber(this.YSplitType)) ySpliter.SplitType=this.YSplitType;
114573
+ if (this.YAxis) ySpliter.SetOption(this.YAxis);
114574
+ }
114549
114575
 
114550
114576
  //指标名字
114551
114577
  var titleInfo={ Data:[], Title:this.Name, Frame:this.OverlayIndex.Frame.Frame, Script:this };
@@ -129440,7 +129466,7 @@ function HQChartScriptWorker()
129440
129466
 
129441
129467
 
129442
129468
 
129443
- var HQCHART_VERSION="1.1.12919";
129469
+ var HQCHART_VERSION="1.1.12934";
129444
129470
 
129445
129471
  function PrintHQChartVersion()
129446
129472
  {