hqchart 1.1.12644 → 1.1.12651
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.
- package/lib/umychart.vue.js +26 -12
- package/package.json +1 -1
- package/src/jscommon/umychart.complier.js +103 -16
- package/src/jscommon/umychart.js +34 -10
- package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +138 -27
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +138 -27
package/lib/umychart.vue.js
CHANGED
|
@@ -3943,7 +3943,9 @@ if(this.Position.Type==0)this.Canvas.textAlign='left';else if(this.Position.Type
|
|
|
3943
3943
|
var xRect=x-margin[0];var yRect=y-margin[2];var bgWidth=textWidth+margin[2]+margin[3];var bgHeight=drawInfo.Font.Height+margin[0]+margin[1];if(this.TextBG.Color){this.Canvas.fillStyle=this.TextBG.Color;this.Canvas.fillRect(xRect,yRect,bgHeight,bgWidth);}if(this.TextBG.Border){this.Canvas.strokeStyle=this.TextBG.Border;this.Canvas.strokeRect(ToFixedPoint(xRect),ToFixedPoint(yRect),ToFixedRect(bgHeight),ToFixedRect(bgWidth));}}this.Canvas.textBaseline="bottom";this.Canvas.textAlign="left";this.Canvas.fillStyle=drawInfo.Text.Color;this.Canvas.save();this.Canvas.translate(x,y);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,0,0);this.Canvas.restore();}else{var x=drawInfo.X;var y=drawInfo.Y;if(drawInfo.Text.Align=="right")x=x-textWidth;else if(drawInfo.Text.Align=="center")x=x-textWidth/2;if(drawInfo.Text.Baseline=="top")y+=drawInfo.Font.Height;else if(drawInfo.Text.Baseline=="middle")y+=drawInfo.Font.Height/2;if(this.TextBG&&(this.TextBG.Color||this.TextBG.Border)){var margin=this.TextBG.Margin;//0=上 1=下 2=左 3=右
|
|
3944
3944
|
var xRect=x-margin[2];var yRect=y-drawInfo.Font.Height-margin[1];var bgWidth=textWidth+margin[2]+margin[3];var bgHeight=drawInfo.Font.Height+margin[0]+margin[1];if(this.TextBG.Color){this.Canvas.fillStyle=this.TextBG.Color;this.Canvas.fillRect(xRect,yRect,bgWidth,bgHeight);}if(this.TextBG.Border){this.Canvas.strokeStyle=this.TextBG.Border;this.Canvas.strokeRect(ToFixedPoint(xRect),ToFixedPoint(yRect),ToFixedRect(bgWidth),ToFixedRect(bgHeight));}}this.Canvas.textBaseline="bottom";this.Canvas.textAlign="left";this.Canvas.fillStyle=drawInfo.Text.Color;this.Canvas.fillText(text,x,y);}};}function ChartTradeIcon(){this.newMethod=IChartPainting;//派生
|
|
3945
3945
|
this.newMethod();delete this.newMethod;this.ClassName='ChartTradeIcon';//类名
|
|
3946
|
-
this.TextAlign='center';this.TextBaseline='middle';this.SVG={Family:"iconfont",Size:12};this.AryIcon;this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(!this.Data||!this.Data.Data)return;if(!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon))return;this.Canvas.font=this.SVG.Size+'px '+this.SVG.Family;this.Canvas.textAlign=this.TextAlign;this.Canvas.textBaseline='middle';var yOffset=0;if(this.TradeType=="BUY"||this.TradeType=="BUYSHORT"){this.Canvas.textBaseline="
|
|
3946
|
+
this.TextAlign='center';this.TextBaseline='middle';this.SVG={Family:"iconfont",Size:12};this.AryIcon;this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(!this.Data||!this.Data.Data)return;if(!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon))return;var bHScreen=this.ChartFrame.IsHScreen===true;this.Canvas.font=this.SVG.Size+'px '+this.SVG.Family;this.Canvas.textAlign=this.TextAlign;this.Canvas.textBaseline='middle';var yOffset=0;if(this.TradeType=="BUY"||this.TradeType=="BUYSHORT"){this.Canvas.textBaseline="top";yOffset+=bHScreen?-2:2;}else if(this.TradeType=="SELL"||this.TradeType=="SELLSHORT"){this.Canvas.textBaseline="bottom";yOffset=bHScreen?2:-2;}var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;var border=this.ChartFrame.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;if(bHScreen){chartright=this.ChartBorder.GetBottom();//top=this.ChartBorder.GetRightEx();
|
|
3947
|
+
//bottom=this.ChartBorder.GetLeftEx();
|
|
3948
|
+
xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;}for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(value))continue;if(value<=0)continue;var iconItem=this.AryIcon[i];if(!IFrameSplitOperator.IsNumber(iconItem.Value)||!iconItem.Icon)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;var y=this.GetYFromData(iconItem.Value,false);this.Canvas.fillStyle=iconItem.Color;if(dataWidth>2)x=ToFixedPoint(x);this.DrawTradeIcon(iconItem.Icon,x,y+yOffset,bHScreen);}};this.DrawTradeIcon=function(text,x,y,isHScreen){if(isHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(text,0,0);this.Canvas.restore();}else{this.Canvas.fillText(text,x,y);}};this.GetMaxMin=function(){var range={Max:null,Min:null};if(!this.Data||!this.Data.Data)return range;if(!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon))return range;var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;if(this.ChartFrame.GlobalOption&&this.ChartFrame.GlobalOption.IsValueFullRange){start=0;xPointCount=this.Data.Data.length;}for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var value=this.Data.Data[i];if(!IFrameSplitOperator.IsNumber(value))continue;if(value<=0)continue;var iconItem=this.AryIcon[i];if(!IFrameSplitOperator.IsNumber(iconItem.Value)||!iconItem.Icon)continue;if(range.Max==null)range.Max=iconItem.Value;else if(range.Max<iconItem.Value)range.Max=iconItem.Value;if(range.Min==null)range.Min=iconItem.Value;else if(range.Min>iconItem.Value)range.Min=iconItem.Value;}return range;};}function ChartDrawText(){this.newMethod=IChartPainting;//派生
|
|
3947
3949
|
this.newMethod();delete this.newMethod;this.ClassName='ChartDrawText';//类名
|
|
3948
3950
|
this.Color="rgb(255,193,37)";//线段颜色
|
|
3949
3951
|
this.TextFont="14px 微软雅黑";//线段宽度
|
|
@@ -5503,7 +5505,7 @@ if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){for(var i=0;i<th
|
|
|
5503
5505
|
var pixelRatio=GetDevicePixelRatio();if(isHScreen){if(this.Frame.ChartBorder.Right<5*pixelRatio)return;var left=2;var bottom=this.Frame.ChartBorder.Right/2;//上下居中显示
|
|
5504
5506
|
var right=this.Frame.ChartBorder.GetHeight();var xText=this.Frame.ChartBorder.GetChartWidth();var yText=this.Frame.ChartBorder.GetTop();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);}else{if(this.Frame.ChartBorder.Top<5*pixelRatio)return;}this.Canvas.textAlign="left";this.Canvas.textBaseline="middle";this.Canvas.font=this.Font;var position={Left:left,Bottom:bottom,IsHScreen:isHScreen};var titleData=this.GetFormatTitle({Data:item});if(titleData&&IFrameSplitOperator.IsNonEmptyArray(titleData.AryText)){for(var i=0;i<titleData.AryText.length;++i){var item=titleData.AryText[i];if(!this.DrawText(item.Text,item.Color,position))break;}}};this.Draw=function(){if(!this.IsShow)return;if(this.CursorIndex==null||!this.Data||this.Data.length<=0){this.OnDrawEventCallback(null);return;}this.Canvas.font=this.Font;this.SpaceWidth=this.Canvas.measureText('0').width;var index=this.CursorIndex;index=parseInt(index.toFixed(0));var dataIndex=this.Data.DataOffset+index;if(dataIndex>=this.Data.Data.length)dataIndex=this.Data.Data.length-1;if(dataIndex<0){this.OnDrawEventCallback(null);return;}if(this.IsShowLastData())//鼠标不在图形上 显示最后一条数据
|
|
5505
5507
|
{dataIndex=this.Data.Data.length-1;}var item=this.Data.Data[dataIndex];this.OnDrawEventCallback(item);this.Canvas.save();this.DrawItem(item);this.Canvas.restore();};this.OnDrawEventCallback=function(drawData){var bDrawEvent=this.OnDrawEvent&&this.OnDrawEvent.Callback;var bMouseMoveEvent=this.OnMouseMoveEvent&&this.OnMouseMoveEvent.Callback;if(!bDrawEvent&&!bMouseMoveEvent)return;var data={Draw:drawData,Name:this.ClassName};if(this.Data&&this.Data.Data){var index=Math.abs(this.CursorIndex);index=parseInt(index.toFixed(0));var dataIndex=this.Data.DataOffset+index;var dataCount=this.Data.Data.length;data.DataIndex=dataIndex;data.DataCount=dataCount;}//叠加股票
|
|
5506
|
-
if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){data.OverlayStock=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(!item.Symbol||!item.Title)continue;data.OverlayStock.push({Symbol:item.Symbol,Name:item.Title,Data:item.Data});}}if(bDrawEvent)this.OnDrawEvent.Callback(this.OnDrawEvent,data,this);if(bMouseMoveEvent)this.OnMouseMoveEvent.Callback(this.OnMouseMoveEvent,data,this);};this.GetColor=function(price,yclse){if(price>yclse)return this.UpColor;else if(price<yclse)return this.DownColor;else return this.UnchagneColor;};this.OnUnchangeTitleColor=function(event,sendData){if(!event||!event.Callback)return false;sendData.ClassName=this.ClassName;event.Callback(event,sendData,this);if(sendData&&sendData.TitleColor)return true;return false;};this.DrawText=function(title,color,position){if(!title)return true;var isHScreen=this.Frame.IsHScreen===true;var right=this.Frame.ChartBorder.GetRight();if(isHScreen)right=this.Frame.ChartBorder.GetHeight();this.Canvas.fillStyle=color;var textWidth=this.Canvas.measureText(title).width;if(position.Left+textWidth>right)return false;if(this.IsShow)this.Canvas.fillText(title,position.Left,position.Bottom,textWidth);position.Left+=textWidth+this.SpaceWidth;return true;};//计算K线指标标题信息
|
|
5508
|
+
if(IFrameSplitOperator.IsNonEmptyArray(this.OverlayChartPaint)){data.OverlayStock=[];for(var i=0;i<this.OverlayChartPaint.length;++i){var item=this.OverlayChartPaint[i];if(!item.Symbol||!item.Title)continue;data.OverlayStock.push({Symbol:item.Symbol,Name:item.Title,Data:item.Data,Color:item.Color});}}if(bDrawEvent)this.OnDrawEvent.Callback(this.OnDrawEvent,data,this);if(bMouseMoveEvent)this.OnMouseMoveEvent.Callback(this.OnMouseMoveEvent,data,this);};this.GetColor=function(price,yclse){if(price>yclse)return this.UpColor;else if(price<yclse)return this.DownColor;else return this.UnchagneColor;};this.OnUnchangeTitleColor=function(event,sendData){if(!event||!event.Callback)return false;sendData.ClassName=this.ClassName;event.Callback(event,sendData,this);if(sendData&&sendData.TitleColor)return true;return false;};this.DrawText=function(title,color,position){if(!title)return true;var isHScreen=this.Frame.IsHScreen===true;var right=this.Frame.ChartBorder.GetRight();if(isHScreen)right=this.Frame.ChartBorder.GetHeight();this.Canvas.fillStyle=color;var textWidth=this.Canvas.measureText(title).width;if(position.Left+textWidth>right)return false;if(this.IsShow)this.Canvas.fillText(title,position.Left,position.Bottom,textWidth);position.Left+=textWidth+this.SpaceWidth;return true;};//计算K线指标标题信息
|
|
5507
5509
|
this.GetKLineCalculateTitle=function(){if(!this.HQChart)return null;var klineCalulate=this.HQChart.GetKLineCalulate();if(!klineCalulate||!klineCalulate.GetTitle)return null;return klineCalulate.GetTitle();};this.IsShowLastData=function(){var isShow=false;if(this.DrawStatus&&this.DrawStatus.IsTitleShowLatestData){var status=this.DrawStatus;if(!IFrameSplitOperator.IsNumber(status.FrameID)||status.FrameID<0)isShow=true;else if(status.CorssCursorTouchEnd&&status.IsOnTouch==false)isShow=true;}return isShow;};}function DynamicMinuteTitlePainting(){this.newMethod=DynamicKLineTitlePainting;//派生
|
|
5508
5510
|
this.newMethod();delete this.newMethod;this.ClassName='DynamicMinuteTitlePainting';this.SpaceWidth=1*GetDevicePixelRatio();this.YClose;this.IsShowDate=false;//标题是否显示日期
|
|
5509
5511
|
this.IsShowTime=true;//标题是否显示时间
|
|
@@ -10617,7 +10619,8 @@ this.DRAWGBK=function(condition,color,color2,colorAngle){var drawData={Color:[],
|
|
|
10617
10619
|
//例如:
|
|
10618
10620
|
//DRAWGBK_DIV(C>O,RGB(0,255,0),RGB(255,0,0),0,0);
|
|
10619
10621
|
this.DRAWGBK_DIV=function(condition,color,color2,colorType,fillType){var drawData={AryColor:[color,color2],ColorType:colorType,FillType:fillType,Data:[]};var result={DrawData:drawData,DrawType:'DRAWGBK_DIV'};if(!this.SymbolData||!this.SymbolData.Data||!IFrameSplitOperator.IsNonEmptyArray(this.SymbolData.Data.Data))return result;var aryKData=this.SymbolData.Data.Data;if(Array.isArray(condition)){for(var i=0;i<aryKData.length;++i){var condItem=condition[i];var item=null;if(condItem){var kItem=aryKData[i];if(fillType==1)item={AryValue:[kItem.High,kItem.Low]};else if(fillType==2)item={AryValue:[kItem.Open,kItem.Close]};else item={AryValue:null};}drawData.Data[i]=item;}}else{if(condition){for(var i=0;i<aryKData.length;++i){var kItem=aryKData[i];var item=null;if(fillType==1)item={AryValue:[kItem.High,kItem.Low]};else if(fillType==2)item={AryValue:[kItem.Open,kItem.Close]};else item={AryValue:null};drawData.Data[i]=item;}}}return result;};//画文字 及线段
|
|
10620
|
-
this.DRAWTEXT_LINE=function(condition,price,text,textcolor,fontSize,linetype,linecolor){var drawData={Text:{Title:text,Color:textcolor},Line:{Type:linetype,Color:linecolor}};if(fontSize<=0)fontSize=12;drawData.Text.Font=fontSize*GetDevicePixelRatio()+'px 微软雅黑';var result={DrawData:null,DrawType:'DRAWTEXT_LINE'};if(Array.isArray(condition)){
|
|
10622
|
+
this.DRAWTEXT_LINE=function(condition,price,text,textcolor,fontSize,linetype,linecolor){var drawData={Text:{Title:text,Color:textcolor},Line:{Type:linetype,Color:linecolor}};if(fontSize<=0)fontSize=12;drawData.Text.Font=fontSize*GetDevicePixelRatio()+'px 微软雅黑';var result={DrawData:null,DrawType:'DRAWTEXT_LINE'};if(Array.isArray(condition)){var item=null;if(IFrameSplitOperator.IsNonEmptyArray(condition))item=condition[condition.length-1];//取最后一个数值
|
|
10623
|
+
if(item){if(Array.isArray(price))drawData.Price=price[condition.length-1];else drawData.Price=price;result.DrawData=drawData;}}else{if(condition){if(Array.isArray(price)){var value=null;if(price.length>0)value=price[price.length-1];drawData.Price=value;}else{drawData.Price=price;}result.DrawData=drawData;}}return result;};// 相对位置上画矩形.
|
|
10621
10624
|
//用法: DRAWRECTREL(LEFT,TOP,RIGHT,BOTTOM,COLOR),以图形窗口(LEFT,TOP)为左上角,(RIGHT,BOTTOM)为右下角绘制矩形,坐标单位是窗口沿水平和垂直方向的1/1000,取值范围是0—999,超出范围则可能显示在图形窗口外,矩形中间填充颜色COLOR,COLOR为0表示不填充.
|
|
10622
10625
|
//例如: DRAWRECTREL(0,0,500,500,RGB(255,255,0))表示在图形最左上部1/4位置用黄色绘制矩形
|
|
10623
10626
|
this.DRAWRECTREL=function(left,top,right,bottom,color){var drawData={Rect:{Left:Math.min(left,right),Top:Math.min(top,bottom),Right:Math.max(right,left),Bottom:Math.max(bottom,top)},Color:color};if(color==0)drawData.Color=null;var result={DrawData:drawData,DrawType:'DRAWRECTREL'};return result;};//DRAWTEXTREL(X,Y,TEXT),在图形窗口(X,Y)坐标位置书写文字TEXT,坐标单位是窗口沿水平和垂直方向的1/1000,X、Y取值范围是0—999,超出范围则可能显示在图形窗口外。
|
|
@@ -10819,7 +10822,12 @@ return result;};//BARPOS 返回从第一根K线开始到当前的周期数。
|
|
|
10819
10822
|
//2、本机已有的第一根K线上返回值为1。
|
|
10820
10823
|
this.GetBarPos=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i123=0;_i123<lCount;++_i123){result.push(_i123+1);}return result;};this.GetTotalTradeMinuteCount=function(){var data=g_MinuteCoordinateData.GetCoordinateData(this.Symbol);if(data&&data.Count>0)return data.Count-1;return 242;};this.GetTotalBarsCount=function(){var lCount=this.Data.Data.length;return lCount;};this.GetIsLastBar=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var _i124=0;_i124<lCount;++_i124){if(_i124==lCount-1)result.push(1);else result.push(0);}return result;};//BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
|
|
10821
10824
|
//例如:BARSTATUS=2表示当天是该数据的最后一个周期.
|
|
10822
|
-
this.GetBarStatus=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var i=0;i<lCount;++i){if(i==0)result[i]=1;else if(i==lCount-1)result[i]=2;else result[i]=0;}return result;}
|
|
10825
|
+
this.GetBarStatus=function(){var result=[];if(!this.Data||!this.Data.Data||!this.Data.Data.length)return result;var lCount=this.Data.Data.length;for(var i=0;i<lCount;++i){if(i==0)result[i]=1;else if(i==lCount-1)result[i]=2;else result[i]=0;}return result;};//求真实波幅, (最高-最低),(最高-昨收),(最低-昨收)三者绝对值中的最大值.
|
|
10826
|
+
//用法:
|
|
10827
|
+
//TR,求真实波幅.
|
|
10828
|
+
//例如:ATR:=MA(TR,10);
|
|
10829
|
+
//表示求真实波幅的10周期均值
|
|
10830
|
+
this.GetTRData=function(node){var result=[];if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return result;var lCount=this.Data.Data.length;for(var i=0;i<lCount;++i){var item=this.Data.Data[i];var max=null;if(IFrameSplitOperator.IsNumber(item.High)&&IFrameSplitOperator.IsNumber(item.Low)){var value=Math.abs(item.High-item.Low);if(max==null||max<value)max=value;}if(IFrameSplitOperator.IsNumber(item.High)&&IFrameSplitOperator.IsNumber(item.YClose)){var value=Math.abs(item.High-item.YClose);if(max==null||max<value)max=value;}if(IFrameSplitOperator.IsNumber(item.YClose)&&IFrameSplitOperator.IsNumber(item.Low)){var value=Math.abs(item.Low-item.YClose);if(max==null||max<value)max=value;}result[i]=max;}return result;};//融资融券函数
|
|
10823
10831
|
this.GetMarginCacheData=function(id,node){var jobID=JS_EXECUTE_JOB_ID.GetMarginJobID(id);if(!jobID)this.Execute.ThrowUnexpectedNode(node,'不支持MARGIN('+id+')');if(this.MarginData.has(jobID))return this.MarginData.get(jobID);return[];};//下融资融券
|
|
10824
10832
|
this.GetMarginData=function(jobID){if(this.MarginData.has(jobID))return this.Execute.RunNextJob();JSConsole.Complier.Log('[JSSymbolData::GetMarginData] jobID=',jobID);var self=this;var fieldList=["name","date","symbol"];switch(jobID){case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_BALANCE://融资融券余额
|
|
10825
10833
|
fieldList.push("margin.balance");break;case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_MARGIN_RATE://融资占比
|
|
@@ -11182,7 +11190,8 @@ this.ConstVarTable=new _map2.default([//个股数据
|
|
|
11182
11190
|
["ZDBLOCKNUM",null],//所属自定义板块的个数
|
|
11183
11191
|
["HYSYL",null],//指数市盈率或个股所属行业的市盈率
|
|
11184
11192
|
["HYSJL",null],//指数市净率或个股所属行业的市净率
|
|
11185
|
-
['DRAWNULL',null],["NULL",null],["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null]
|
|
11193
|
+
['DRAWNULL',null],["NULL",null],["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null],["TR",null],//真实波幅
|
|
11194
|
+
["AUTOFILTER",null]]);this.SymbolData=new JSSymbolData(this.AST,option,this);this.Algorithm=new JSAlgorithm(this.ErrorHandler,this.SymbolData);this.Draw=new JSDraw(this.ErrorHandler,this.SymbolData);this.JobList=[];//执行的任务队列
|
|
11186
11195
|
this.UpdateUICallback=null;//回调
|
|
11187
11196
|
this.CallbackParam=null;this.IsSectionMode=false;if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam){this.CallbackParam=option.CallbackParam;if(this.CallbackParam.HQChart)this.GetEventCallback=function(id){return _this45.CallbackParam.HQChart.GetEventCallback(id);};}if(option.Arguments)this.Arguments=option.Arguments;if(option.IsSectionMode)this.IsSectionMode=option.IsSectionMode;if(option.Self)this.IndexCtrl=option.Self;//调试模式信息
|
|
11188
11197
|
if(IFrameSplitOperator.IsNumber(option.Debug))this.Debug=option.Debug;if(option.DebugFilter)this.DebugFilter=option.DebugFilter;}this.Execute=function(){this.OutVarTable=[];this.VarTable=new _map2.default();this.VarDrawTable=new _map2.default();//绘图变量表
|
|
@@ -11212,7 +11221,8 @@ case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_FINONE:return this.SymbolData.GetFinOne(jobI
|
|
|
11212
11221
|
return this.SymbolData.GetVariantData(jobItem);case JS_EXECUTE_JOB_ID.JOB_CUSTOM_VARIANT_DATA:return this.SymbolData.GetCustomVariantData(jobItem);case JS_EXECUTE_JOB_ID.JOB_CUSTOM_FUNCTION_DATA:return this.SymbolData.GetCustomFunctionData(jobItem);case JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_CUSTOM_API_DATA:return this.SymbolData.DownloadCustomAPIData(jobItem);case JS_EXECUTE_JOB_ID.JOB_EXECUTE_INDEX:return this.SymbolData.CallScriptIndex(jobItem);case JS_EXECUTE_JOB_ID.JOB_RUN_SCRIPT:if(this.Debug===1&&this.DebugFilter)return this.DebugRun();else return this.Run();}};this.ReadSymbolData=function(name,node){switch(name){case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':case"OPI":case'VOLINSTK':case"SETTLE":case"QHJSJ":case"ZSTJJ":case"ISEQUAL"://平盘
|
|
11213
11222
|
case"ISUP"://收阳
|
|
11214
11223
|
case"ISDOWN"://收阴
|
|
11215
|
-
return this.SymbolData.GetSymbolCacheData(name);case'VOLR':return this.SymbolData.GetVolRateCacheData(node)
|
|
11224
|
+
return this.SymbolData.GetSymbolCacheData(name);case'VOLR':return this.SymbolData.GetVolRateCacheData(node);case"TR"://TR,求真实波幅.
|
|
11225
|
+
return this.SymbolData.GetTRData(node);//大盘数据
|
|
11216
11226
|
case'INDEXA':case'INDEXC':case'INDEXH':case'INDEXH':case'INDEXO':case'INDEXV':case'INDEXL':case'INDEXADV':case'INDEXDEC':return this.SymbolData.GetIndexCacheData(name);case'CURRBARSCOUNT':return this.SymbolData.GetCurrBarsCount();case"BARPOS":return this.SymbolData.GetBarPos();case"TOTALBARSCOUNT":return this.SymbolData.GetTotalBarsCount();case"TOTALFZNUM":return this.SymbolData.GetTotalTradeMinuteCount();case'ISLASTBAR':return this.SymbolData.GetIsLastBar();case"BARSTATUS":return this.SymbolData.GetBarStatus();case"TOTALCAPITAL":case'CAPITAL':case'EXCHANGE':case"HYBLOCK":case"DYBLOCK":case"GNBLOCK":case"FGBLOCK":case"ZSBLOCK":case"ZHBLOCK":case"ZDBLOCK":case"HYZSCODE":case"GNBLOCKNUM":case"FGBLOCKNUM":case"ZSBLOCKNUM":case"ZHBLOCKNUM":case"ZDBLOCKNUM":case"HYSYL":case"HYSJL":return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});case'SETCODE':return this.SymbolData.SETCODE();case'CODE':return this.SymbolData.GetSymbol();case'STKNAME':return this.SymbolData.GetName();case"TIME":return this.SymbolData.TIME();case"TIME2":return this.SymbolData.TIME2();case'DATE':return this.SymbolData.DATE();case"DATETIME":return this.SymbolData.DateTime();case'YEAR':return this.SymbolData.YEAR();case'MONTH':return this.SymbolData.MONTH();case'WEEK':case"WEEKDAY":return this.SymbolData.WEEK();case"DAY":return this.SymbolData.DAY();case'PERIOD':return this.SymbolData.PERIOD();case'FROMOPEN':return this.SymbolData.GetLatestIndexCacheData('FROMOPEN');case"HOUR":return this.SymbolData.HOUR();case"MINUTE":return this.SymbolData.MINUTE();case'DRAWNULL':case"NULL":return this.SymbolData.GetDrawNull();case'ADVANCE':case'DECLINE':return this.SymbolData.GetIndexIncreaseCacheData(name,this.SymbolData.Symbol,node);case"TQFLAG":return this.SymbolData.Right;case"MACHINEDATE":{var now=new Date();return now.getFullYear()*10000+now.getMonth()*1*100+now.getDate()-19000000;}case"MACHINETIME":{var now=new Date();return now.getHours()*10000+now.getMinutes()*1*100+now.getSeconds();}case"MACHINEWEEK":{var now=new Date();return now.getDay();}case"WEEKOFYEAR":return this.SymbolData.WEEKOFYEAR();case"DAYSTOTODAY":return this.SymbolData.DAYSTOTODAY();}};this.ReadCustomVariant=function(name,node){return this.SymbolData.GetStockCacheData({VariantName:name,Node:node});};//读取变量
|
|
11217
11227
|
this.ReadVariable=function(name,node){if(this.ConstVarTable.has(name)){var data=this.ConstVarTable.get(name);if(data==null)//动态加载,用到再加载
|
|
11218
11228
|
{data=this.ReadSymbolData(name,node);this.ConstVarTable.set(name,data);}return data;}if(g_JSComplierResource.IsCustomVariant(name))return this.ReadCustomVariant(name,node);//读取自定义变量
|
|
@@ -11281,7 +11291,7 @@ this.ConstVarTable=new _map2.default([//个股数据
|
|
|
11281
11291
|
['HYBLOCK',"所属行业"],//所属行业板块
|
|
11282
11292
|
['DYBLOCK',"所属地域"],//所属地域板块
|
|
11283
11293
|
['GNBLOCK',"所属概念"],//所属概念
|
|
11284
|
-
["FGBLOCK","所属风格板块"],["ZSBLOCK","所属指数板块"],["ZHBLOCK",'所属组合板块'],["ZDBLOCK",'所属自定义板块'],["HYZSCODE","所属行业的板块指数代码"],["GNBLOCKNUM","所属概念板块的个数"],["FGBLOCKNUM","所属风格板块的个数"],["ZSBLOCKNUM","所属指数板块的个数"],["ZHBLOCKNUM","所属组合板块的个数"],["ZDBLOCKNUM","所属自定义板块的个数"],["HYSYL","指数市盈率或个股所属行业的市盈率"],["HYSJL","指数市净率或个股所属行业的市净率"],['DRAWNULL',"无效数据"]]);if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam)this.CallbackParam=option.CallbackParam;if(option.Arguments)this.Arguments=option.Arguments;}this.Run=function(){try{this.OutVarTable=[];this.VarTable=new _map2.default();JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments',this.Arguments);for(var _i145 in this.Arguments)//预定义的变量
|
|
11294
|
+
["FGBLOCK","所属风格板块"],["ZSBLOCK","所属指数板块"],["ZHBLOCK",'所属组合板块'],["ZDBLOCK",'所属自定义板块'],["HYZSCODE","所属行业的板块指数代码"],["GNBLOCKNUM","所属概念板块的个数"],["FGBLOCKNUM","所属风格板块的个数"],["ZSBLOCKNUM","所属指数板块的个数"],["ZHBLOCKNUM","所属组合板块的个数"],["ZDBLOCKNUM","所属自定义板块的个数"],["HYSYL","指数市盈率或个股所属行业的市盈率"],["HYSJL","指数市净率或个股所属行业的市净率"],['DRAWNULL',"无效数据"],["TR","求真实波幅"]]);if(option){if(option.Callback)this.UpdateUICallback=option.Callback;if(option.CallbackParam)this.CallbackParam=option.CallbackParam;if(option.Arguments)this.Arguments=option.Arguments;}this.Run=function(){try{this.OutVarTable=[];this.VarTable=new _map2.default();JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments',this.Arguments);for(var _i145 in this.Arguments)//预定义的变量
|
|
11285
11295
|
{var _item26=this.Arguments[_i145];this.VarTable.set(_item26.Name,_item26.Value);}var data=this.RunAST();//执行脚本
|
|
11286
11296
|
JSConsole.Complier.Log('[JSExplainer.Run] explain finish',data);if(this.UpdateUICallback)//回调发送结果, 可以支持异步
|
|
11287
11297
|
{JSConsole.Complier.Log('[JSExplainer.Run] invoke UpdateUICallback.');this.UpdateUICallback(data);}}catch(error){JSConsole.Complier.Log('[JSExplainer.Run] throw error ',error);if(this.ErrorCallback){this.ErrorCallback(error,this.OutVarTable);}}};this.RunAST=function(){if(!this.AST)this.ThrowError();if(!this.AST.Body)this.ThrowError();for(var _i146 in this.AST.Body){var _item27=this.AST.Body[_i146];this.VisitNode(_item27);//输出变量
|
|
@@ -11307,11 +11317,11 @@ else if(value.indexOf('LINEOVERLAY')==0)isOverlayLine=true;else if(value.indexOf
|
|
|
11307
11317
|
this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[];for(var _i148 in node.Arguments){var _item29=node.Arguments[_i148];var value=void 0;if(_item29.Type==Syntax.BinaryExpression||_item29.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(_item29);else if(_item29.Type==Syntax.CallExpression)value=this.VisitCallExpression(_item29);else value=this.GetNodeValue(_item29);args.push(value);}JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]',funcName,'(',args.toString(),')');if(g_JSComplierResource.IsCustomFunction(funcName)){var data=this.Algorithm.CallCustomFunction(funcName,args,this.SymbolData,node);node.Out=[];node.Draw=null;if(data){if(data.Out)node.Out=data.Out;if(data.Draw)node.Draw=data.Draw;}return node.Out;}node.Out=this.CallFunctionExplain(funcName,args,node);return node.Out;};this.FUNCTION_INFO_LIST=new _map2.default([["REF",{Name:"REF",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684'+args[0];}}],["REFX",{Name:"REFX",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684'+args[0];}}],["REFV",{Name:"REFV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u524D\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFXV",{Name:"REFXV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u540E\u7684(\u672A\u4F5C\u5E73\u6ED1\u5904\u7406)'+args[0];}}],["REFDATE",{Name:"REFDATE",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5'+args[0];}}],["COUNT",{Name:"COUNT",Param:{Count:2},ToString:function ToString(args){return'\u7EDF\u8BA1'+args[1]+'\u65E5\u4E2D\u6EE1\u8DB3'+args[0]+'\u7684\u5929\u6570';}}],["BARSLASTCOUNT",{Name:"BARSLASTCOUNT",Param:{Count:1},ToString:function ToString(args){return'\u6761\u4EF6'+args[0]+'\u8FDE\u7EED\u6210\u7ACB\u6B21\u6570';}}],["BARSCOUNT",{Name:"BARSCOUNT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u6709\u6548\u6570\u636E\u5468\u671F\u6570';}}],["BARSLAST",{Name:"BARSLAST",Param:{Count:1},ToString:function ToString(args){return'\u4E0A\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSNEXT",{Name:"BARSNEXT",Param:{Count:1},ToString:function ToString(args){return'\u4E0B\u6B21'+args[0]+'\u4E0D\u4E3A0\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCEN",{Name:"BARSSINCEN",Param:{Count:2},ToString:function ToString(args){return'\u5728'+args[1]+'\u5468\u671F\u5185\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["BARSSINCE",{Name:"BARSSINCE",Param:{Count:1},ToString:function ToString(args){return'\u9996\u6B21'+args[0]+'\u8DDD\u4ECA\u5929\u6570';}}],["HHV",{Name:"HHV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u9AD8\u503C';}}],["LLV",{Name:"LLV",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u6700\u4F4E\u503C';}}],["ZTPRICE",{Name:"ZTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算涨停价';}}],["DTPRICE",{Name:"DTPRICE",Param:{Count:2},ToString:function ToString(args){return'计算跌停价';}}],["BACKSET",{Name:"BACKSET",Param:{Count:2},ToString:function ToString(args){return'\u82E5'+args[0]+'\u5219\u5C06\u6700\u8FD1'+args[1]+'\u5468\u671F\u7F6E\u4E3A1';}}],["HOD",{Name:"HOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u9AD8\u503C\u540D\u6B21';}}],["LOD",{Name:"LOD",Param:{Count:2},ToString:function ToString(args){return args[1]+'\u65E5\u5185'+args[0]+'\u7684\u4F4E\u503C\u540D\u6B21';}}],["REVERSE",{Name:"REVERSE",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u76F8\u53CD\u6570';}}],["FILTER",{Name:"FILTER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u8FC7\u6EE4';}}],["FILTERX",{Name:"FILTERX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u53CD\u5411\u8FC7\u6EE4';}}],["TFILTER",{Name:"TFILTER",Param:{Count:3},ToString:function ToString(args){return'\u4FE1\u53F7\u8FC7\u6EE4(\u591A\u5934)';}}],["SUMBARS",{Name:"SUMBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7D2F\u52A0\u81F3'+args[1]+'\u7684\u5929\u6570';}}],["MA",{Name:"MA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7B80\u5355\u79FB\u52A8\u5E73\u5747';}}],["SMA",{Name:"SMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["MEMA",{Name:"MEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["EMA",{Name:"EMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMA",{Name:"EXPMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u79FB\u52A8\u5E73\u5747';}}],["EXPMEMA",{Name:"EXPMEMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6307\u6570\u5E73\u6ED1\u79FB\u52A8\u5E73\u5747';}}],["WMA",{Name:"WMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u52A0\u6743\u79FB\u52A8\u5E73\u5747';}}],["DMA",{Name:"DMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u52A8\u6001\u79FB\u52A8\u5E73\u5747';}}],["XMA",{Name:"XMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u504F\u79FB\u79FB\u52A8\u5E73\u5747';}}],["RANGE",{Name:"RANGE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["CONST",{Name:"CONST",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6700\u540E\u4E00\u65E5\u503C';}}],["TOPRANGE",{Name:"TOPRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5927\u503C';}}],["LOWRANGE",{Name:"LOWRANGE",Param:{Count:1},ToString:function ToString(args){return'\u5F53\u524D\u503C\u662F\u8FD1'+args[0]+'\u5468\u671F\u7684\u6700\u5C0F\u503C';}}],["FINDHIGH",{Name:"FINDHIGH",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7';}}],["FINDHIGHBARS",{Name:"FINDHIGHBARS",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u9AD8\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["FINDLOW",{Name:"FINDLOW",Param:{Count:4},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7';}}],["FINDLOWBARS",{Name:"FINDLOWBARS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u65E5\u524D\u7684'+args[2]+'\u5929\u5185\u7B2C'+args[3]+'\u4E2A\u6700\u4F4E\u4EF7\u5230\u5F53\u524D\u5468\u671F\u7684\u5468\u671F\u6570';}}],["SUM",{Name:"SUM",Param:{Count:2},ToString:function ToString(args){return''+args[0]+args[1]+'\u65E5\u7D2F\u52A0';}}],["MULAR",{Name:"MULAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u65E5\u7D2F\u4E58';}}],["AMA",{Name:"AMA",Param:{Count:2},ToString:function ToString(args){return'\u4EE5'+args[1]+'\u4E3A\u6743\u91CD'+args[0]+'\u7684\u81EA\u9002\u5E94\u5747\u7EBF';}}],["TMA",{Name:"TMA",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5['+args[2]+'\u65E5\u6743\u91CD]\u79FB\u52A8\u5E73\u5747';}}],["CROSS",{Name:"CROSS",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u4E0A\u7A7F'+args[1];}}],["LONGCROSS",{Name:"LONGCROSS",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u5C0F\u4E8E'+args[1]+'\u4FDD\u6301'+args[2]+'\u4E2A\u4EA4\u6613\u65E5\u540E\u4EA4\u53C9\u4E0A\u7A7F';}}],["UPNDAY",{Name:"UPNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u6DA8';}}],["DOWNNDAY",{Name:"DOWNNDAY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5'+args[0]+'\u8FDE\u8DCC';}}],["NDAY",{Name:"NDAY",Param:{Count:3},ToString:function ToString(args){return'\u6700\u8FD1'+args[2]+'\u65E5'+args[0]+'\u4E00\u76F4\u5927\u4E8E'+args[1];}}],["EXIST",{Name:"EXIST",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u5B58\u5728'+args[0];}}],["EXISTR",{Name:"EXISTR",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u5B58\u5728'+args[0];}}],["EVERY",{Name:"EVERY",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[1]+'\u65E5\u4E00\u76F4\u5B58\u5728'+args[0];}}],["LAST",{Name:"LAST",Param:{Count:3},ToString:function ToString(args){return'\u4ECE\u524D'+args[1]+'\u65E5\u5230\u524D'+args[2]+'\u65E5\u6301\u7EED'+args[0];}}],["NOT",{Name:"NOT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u53D6\u53CD';}}],["IF",{Name:"IF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFF",{Name:"IFF",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFN",{Name:"IFN",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["IFC",{Name:"IFC",Param:{Count:3},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE'+args[2];}}],["TESTSKIP",{Name:"TESTSKIP",Param:{Count:1},ToString:function ToString(args){return'\u5982\u679C\u6EE1\u8DB3\u6761\u4EF6'+args[0]+',\u516C\u5F0F\u8FD4\u56DE';}}],["VALUEWHEN",{Name:"VALUEWHEN",Param:{Count:2},ToString:function ToString(args){return'\u5982\u679C'+args[0]+',\u8FD4\u56DE'+args[1]+',\u5426\u5219\u8FD4\u56DE\u4E0A\u4E2A\u8F93\u51FA\u503C ';}}],["MAX",{Name:"MAX",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5927\u503C';}}],["MIN",{Name:"MIN",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684\u8F83\u5C0F\u503C';}}],["ACOS",{Name:"ACOS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u4F59\u5F26';}}],["ASIN",{Name:"ASIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5F26';}}],["ATAN",{Name:"ATAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u53CD\u6B63\u5207';}}],["COS",{Name:"COS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u4F59\u5F26';}}],["SIN",{Name:"SIN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5F26';}}],["TAN",{Name:"TAN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6B63\u5207';}}],["EXP",{Name:"EXP",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6307\u6570';}}],["LN",{Name:"LN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u81EA\u7136\u5BF9\u6570';}}],["LOG",{Name:"LOG",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5BF9\u6570';}}],["SQRT",{Name:"SQRT",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5F00\u65B9';}}],["ABS",{Name:"ABS",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7EDD\u5BF9\u503C';}}],["POW",{Name:"POW",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u4E58\u5E42';}}],["CEILING",{Name:"CEILING",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["FLOOR",{Name:"FLOOR",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5411\u4E0A\u820D\u5165';}}],["INTPART",{Name:"INTPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u6574\u6570\u90E8\u5206';}}],["BETWEEN",{Name:"BETWEEN",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u4F4D\u4E8E'+args[1]+'\u548C'+args[2]+'\u4E4B\u95F4';}}],["FRACPART",{Name:"FRACPART",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u5C0F\u6570\u90E8\u5206';}}],["ROUND",{Name:"ROUND",Param:{Count:1},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["ROUND2",{Name:"ROUND2",Param:{Count:2},ToString:function ToString(args){return'\u5BF9'+args[0]+'(\u8FDB\u884C)\u56DB\u820D\u4E94\u5165';}}],["SIGN",{Name:"SIGN",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u7684\u7B26\u53F7';}}],["MOD",{Name:"MOD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5173\u4E8E'+args[1]+'\u7684\u6A21';}}],["RAND",{Name:"RAND",Param:{Count:1},ToString:function ToString(args){return'\u968F\u673A\u6B63\u6574\u6570';}}],["AVEDEV",{Name:"AVEDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u5E73\u5747\u7EDD\u5BF9\u504F\u5DEE';}}],["DEVSQ",{Name:"DEVSQ",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6570\u636E\u504F\u5DEE\u5E73\u65B9\u548C';}}],["FORCAST",{Name:"FORCAST",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u9884\u6D4B\u503C';}}],["TSMA",{Name:"TSMA",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u5728'+args[1]+'\u4E2A\u5468\u671F\u5185\u7684\u65F6\u95F4\u5E8F\u5217\u4E09\u89D2\u79FB\u52A8\u5E73\u5747';}}],["SLOPE",{Name:"SLOPE",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u7EBF\u6027\u56DE\u5F52\u659C\u7387';}}],["STD",{Name:"STD",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6807\u51C6\u5DEE';}}],["STDP",{Name:"STDP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6807\u51C6\u5DEE';}}],["STDDEV",{Name:"STDDEV",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u6807\u51C6\u504F\u5DEE';}}],["VAR",{Name:"VAR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u4F30\u7B97\u6837\u672C\u65B9\u5DEE';}}],["VARP",{Name:"VARP",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u7684'+args[1]+'\u65E5\u603B\u4F53\u6837\u672C\u65B9\u5DEE';}}],["COVAR",{Name:"COVAR",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u534F\u65B9\u5DEE';}}],["RELATE",{Name:"RELATE",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[0]+'\u5468\u671F\u7684\u76F8\u5173\u7CFB\u6570';}}],["BETA",{Name:"BETA",Param:{Count:1},ToString:function ToString(args){return'\u03B2(Beta)\u7CFB\u6570';}}],["BETAEX",{Name:"BETAEX",Param:{Count:3},ToString:function ToString(args){return args[0]+'\u548C'+args[1]+'\u7684'+args[2]+'\u5468\u671F\u7684\u76F8\u5173\u653E\u5927\u7CFB\u6570';}}],["COST",{Name:"COST",Param:{Count:1},ToString:function ToString(args){return'\u83B7\u5229\u76D8\u4E3A'+args[0]+'%\u7684\u6210\u672C\u5206\u5E03';}}],["WINNER",{Name:"WINNER",Param:{Count:1},ToString:function ToString(args){return'\u4EE5'+args[0]+'\u8BA1\u7B97\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["LWINNER",{Name:"LWINNER",Param:{Count:2},ToString:function ToString(args){return'\u6700\u8FD1'+args[0]+'\u65E5\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["PWINNER",{Name:"PWINNER",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u4EE5'+args[1]+'\u4EF7\u683C\u5356\u51FA\u7684\u83B7\u5229\u76D8\u6BD4\u4F8B';}}],["COSTEX",{Name:"COSTEX",Param:{Count:2},ToString:function ToString(args){return'\u4F4D\u4E8E\u4EF7\u683C'+args[0]+'\u548C'+args[1]+'\u95F4\u7684\u6210\u672C';}}],["PPART",{Name:"PPART",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u65E5\u524D\u90A3\u90E8\u5206\u6210\u672C\u5360\u603B\u6210\u672C\u7684\u6BD4\u4F8B';}}],["SAR",{Name:"SAR",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411';}}],["SARTURN",{Name:"SARTURN",Param:{Count:3},ToString:function ToString(args){return'\u6B65\u957F\u4E3A'+args[1]+'\u6781\u9650\u503C\u4E3A'+args[0]+'\u7684'+args[2]+'\u65E5\u629B\u7269\u8F6C\u5411\u70B9';}}],//字符串函数
|
|
11308
11318
|
["CON2STR",{Name:"CON2STR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u5B57\u7B26\u4E32';}}],["VAR2STR",{Name:"VAR2STR",Param:{Count:2},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u5B57\u7B26\u4E32';}}],["STR2CON",{Name:"STR2CON",Param:{Count:1},ToString:function ToString(args){return args[0]+'\u8F6C\u4E3A\u6570\u5B57';}}],["STRLEN",{Name:"STRLEN",Param:{Count:1},ToString:function ToString(args){return'\u5F97\u5230'+args[0]+'\u5B57\u7B26\u4E32\u957F\u5EA6';}}],["STRCAT",{Name:"STRCAT",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32\u76F8\u52A0';}}],["VARCAT",{Name:"VARCAT",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32\u76F8\u52A0';}}],["STRSPACE",{Name:"STRSPACE",Param:{Count:1},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u52A0\u4E00\u7A7A\u683C';}}],["SUBSTR",{Name:"SUBSTR",Param:{Count:3},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u4E2D\u53D6\u4E00\u90E8\u5206';}}],["STRCMP",{Name:"STRCMP",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u548C\u5B57\u7B26\u4E32'+args[1]+'\u6BD4\u8F83';}}],["FINDSTR",{Name:"FINDSTR",Param:{Count:2},ToString:function ToString(args){return'\u5B57\u7B26\u4E32'+args[0]+'\u4E2D\u67E5\u627E\u5B57\u7B26\u4E32'+args[1];}}],["NAMEINCLUD",{Name:"NAMEINCLUD",Param:{Count:1},ToString:function ToString(args){return'\u67E5\u627E\u54C1\u79CD\u540D\u79F0\u4E2D\u5305\u542B'+args[0];}}],["CODELIKE",{Name:"CODELIKE",Param:{Count:1},ToString:function ToString(args){return'\u67E5\u627E\u54C1\u79CD\u540D\u79F0\u4E2D\u5305\u542B'+args[0];}}],["INBLOCK",{Name:"AVEDEV",Param:{Count:1},ToString:function ToString(args){return'\u5C5E\u4E8E'+args[0]+'\u677F\u5757';}}],["STKINDI",{Name:"STKINDI",Param:{Dynamic:true},ToString:function ToString(args){return"指标引用";}}],["STRFORMAT",{Name:"STRFORMAT",Param:{Dynamic:true},ToString:function ToString(args){return'\u683C\u5F0F\u5316'+args[0]+'\u5B57\u7B26\u4E32';}}],["HHVBARS",{Name:"HHVBARS",Param:{Count:2},ToString:function ToString(args){if(args[1]==0)return'\u5386\u53F2'+args[0]+'\u65B0\u9AD8\u8DDD\u4ECA\u5929\u6570';return args[1]+'\u65E5\u5185'+args[0]+'\u65B0\u9AD8\u8DDD\u4ECA\u5929\u6570';}}],["LLVBARS",{Name:"LLVBARS",Param:{Count:2},ToString:function ToString(args){if(args[1]==0)return'\u5386\u53F2'+args[0]+'\u65B0\u4F4E\u8DDD\u4ECA\u5929\u6570';return args[1]+'\u65E5\u5185'+args[0]+'\u65B0\u4F4E\u8DDD\u4ECA\u5929\u6570';}}]]);this.CallFunctionExplain=function(funcName,args,node){if(this.FUNCTION_INFO_LIST.has(funcName)){var item=this.FUNCTION_INFO_LIST.get(funcName);if(item.Param.Dynamic===true)//动态参数
|
|
11309
11319
|
{}else{if(item.Param.Count!=args.length)this.ThrowUnexpectedNode(node,'\u51FD\u6570'+funcName+'\u53C2\u6570\u4E2A\u6570\u4E0D\u6B63\u786E. \u9700\u8981'+item.Param.Count+'\u4E2A\u53C2\u6570');}return item.ToString(args);}switch(funcName){case"CALCSTOCKINDEX":return'\u5F15\u7528'+args[0]+'\u7684'+args[1]+'\u6307\u6807\u7B2C'+args[2]+'\u4E2A\u8F93\u51FA\u503C';case"PEAK":case"PEAKBARS":case"ZIG":case"ZIGA":case"TROUGH":case"TROUGHBARS":return this.GetZIGExplain(funcName,args);case"FINANCE":return this.GetFinanceExplain(args);case"DYNAINFO":return this.GetDynainfoExplain(args);case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':return this.GetOtherSymbolExplain({FunctionName:funcName,Args:args},node);//绘图函数
|
|
11310
|
-
case"PLOYLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6\u4EE5'+args[1]+'\u4F4D\u7F6E\u4E3A\u9876\u70B9\u753B\u6298\u7EBF\u8FDE\u63A5';case"DRAWLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u8D77\u70B9\uFF0C\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[2]+'\u65F6,\u5728'+args[3]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u7EC8\u70B9,'+args[4]+'\u8868\u793A\u662F\u5426\u5EF6\u957F';case"DRAWSL":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u659C\u7EBF\u7EBF\u6027\u56DE\u5F52,'+args[2]+'\u659C\u7387,'+args[3]+'\u957F\u5EA6,'+args[4]+'\u65B9\u5411';case"DRAWKLINE":case"DRAWKLINE1":return'K线';case"DRAWICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"DRAWTEXT":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWTEXT_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWNUMBER":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"DRAWNUMBER_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"RGB":return'\u81EA\u5B9A\u8272['+args[0]+','+args[1]+','+args[2]+']';case"DRAWBAND":return'画带状线';case"DRAWRECTREL":return"相对位置上画矩形.";case"DRAWGBK":return"填充背景";case"TIPICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"STICKLINE":var barType="";if(args[4]==-1)barType="虚线空心柱";else if(args[4]==0)barType="实心柱";else barType="实线空心柱";return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6, \u5728'+args[1]+'\u548C'+args[2]+'\u4F4D\u7F6E\u4E4B\u95F4\u753B\u67F1\u72B6\u7EBF,\u5BBD\u5EA6\u4E3A'+args[3]+','+barType;case"YMOVE":return;default:this.ThrowUnexpectedNode(node,'\u51FD\u6570'+funcName+'\u4E0D\u5B58\u5728');}};this.GetDynainfoExplain=function(args){var DATA_NAME_MAP=new _map2.default([[3,"前收盘价"],[4,"开盘价"],[5,"最高价"],[6,"最低价"],[7,"现价"],[8,'总量'],[9,"现量"],[10,"总金额"],[11,"均价"],[12,"日涨跌"],[13,"振幅"],[14,"涨幅"],[15,"开盘时的成交金额"],[16,"前5日每分钟均量"],[17,"量比"],[18,"上涨家数"],[19,"下跌家数"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u5373\u65F6\u884C\u60C5['+id+']';};this.GetFinanceExplain=function(args){var DATA_NAME_MAP=new _map2.default([[1,"总股本"],[2,"市场类型"],[3,"沪深品种类型"],[4,"沪深行业代码"],[5,"B股"],[6,"H股"],[7,"流通股本[股]"],[8,"股东人数[户]"],[9,"资产负债率%"],[10,"总资产"],[11,"流动资产"],[12,"固定资产"],[13,"无形资产"],[15,"流动负债"],[16,"少数股东权益"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u8D22\u52A1\u6570\u636E['+id+']';};this.GetZIGExplain=function(funcName,args){var value=args[0];if(value==0)value="开盘价";else if(value==1)value="最高价";else if(value==2)value="最低价";else if(value==3)value="收盘价";switch(funcName){case"PEAK":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u503C';case"PEAKBARS":return value+'\u7684'+args[1]+'5%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u4F4D\u7F6E';case"ZIG":return value+'\u7684'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"ZIGA":return value+'\u53D8\u5316'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"TROUGH":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u503C';case"TROUGHBARS":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u4F4D\u7F6E';}};this.GetColorExplain=function(colorName){var COLOR_MAP=new _map2.default([['COLORBLACK','黑色'],['COLORBLUE','蓝色'],['COLORGREEN','绿色'],['COLORCYAN','青色'],['COLORRED','红色'],['COLORMAGENTA','洋红色'],['COLORBROWN','棕色'],['COLORLIGRAY','淡灰色'],['COLORGRAY','深灰色'],['COLORLIBLUE','淡蓝色'],['COLORLIGREEN','淡绿色'],['COLORLICYAN','淡青色'],['COLORLIRED','淡红色'],['COLORLIMAGENTA','淡洋红色'],['COLORWHITE','白色'],['COLORYELLOW','黄色']]);if(COLOR_MAP.has(colorName))return COLOR_MAP.get(colorName);//COLOR 自定义色
|
|
11320
|
+
case"PLOYLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6\u4EE5'+args[1]+'\u4F4D\u7F6E\u4E3A\u9876\u70B9\u753B\u6298\u7EBF\u8FDE\u63A5';case"DRAWLINE":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u8D77\u70B9\uFF0C\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[2]+'\u65F6,\u5728'+args[3]+'\u4F4D\u7F6E\u753B\u76F4\u7EBF\u7EC8\u70B9,'+args[4]+'\u8868\u793A\u662F\u5426\u5EF6\u957F';case"DRAWSL":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B\u659C\u7EBF\u7EBF\u6027\u56DE\u5F52,'+args[2]+'\u659C\u7387,'+args[3]+'\u957F\u5EA6,'+args[4]+'\u65B9\u5411';case"DRAWKLINE":case"DRAWKLINE1":return'K线';case"DRAWICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"DRAWTEXT":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWTEXT_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6587\u5B57';case"DRAWNUMBER":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"DRAWNUMBER_FIX":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728\u6A2A\u8F74'+args[1]+'\u7EB5\u8F74'+args[2]+'\u4F4D\u7F6E\u4E66\u5199\u6570\u5B57';case"RGB":return'\u81EA\u5B9A\u8272['+args[0]+','+args[1]+','+args[2]+']';case"DRAWBAND":return'画带状线';case"DRAWRECTREL":return"相对位置上画矩形.";case"DRAWGBK":return"填充背景";case"TIPICON":return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6,\u5728'+args[1]+'\u4F4D\u7F6E\u753B'+args[2]+'\u53F7\u56FE\u6807';case"STICKLINE":var barType="";if(args[4]==-1)barType="虚线空心柱";else if(args[4]==0)barType="实心柱";else barType="实线空心柱";return'\u5F53\u6EE1\u8DB3\u6761\u4EF6'+args[0]+'\u65F6, \u5728'+args[1]+'\u548C'+args[2]+'\u4F4D\u7F6E\u4E4B\u95F4\u753B\u67F1\u72B6\u7EBF,\u5BBD\u5EA6\u4E3A'+args[3]+','+barType;case"SELL":return"卖出平仓";case"BUY":return"买入开仓";case"SELLSHORT":return"卖出开仓";case"BUYSHORT":return"买入平仓";case"YMOVE":return;default:this.ThrowUnexpectedNode(node,'\u51FD\u6570'+funcName+'\u4E0D\u5B58\u5728');}};this.GetDynainfoExplain=function(args){var DATA_NAME_MAP=new _map2.default([[3,"前收盘价"],[4,"开盘价"],[5,"最高价"],[6,"最低价"],[7,"现价"],[8,'总量'],[9,"现量"],[10,"总金额"],[11,"均价"],[12,"日涨跌"],[13,"振幅"],[14,"涨幅"],[15,"开盘时的成交金额"],[16,"前5日每分钟均量"],[17,"量比"],[18,"上涨家数"],[19,"下跌家数"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u5373\u65F6\u884C\u60C5['+id+']';};this.GetFinanceExplain=function(args){var DATA_NAME_MAP=new _map2.default([[1,"总股本"],[2,"市场类型"],[3,"沪深品种类型"],[4,"沪深行业代码"],[5,"B股"],[6,"H股"],[7,"流通股本[股]"],[8,"股东人数[户]"],[9,"资产负债率%"],[10,"总资产"],[11,"流动资产"],[12,"固定资产"],[13,"无形资产"],[15,"流动负债"],[16,"少数股东权益"]]);var id=args[0];if(DATA_NAME_MAP.has(id))return DATA_NAME_MAP.get(id);return'\u8D22\u52A1\u6570\u636E['+id+']';};this.GetZIGExplain=function(funcName,args){var value=args[0];if(value==0)value="开盘价";else if(value==1)value="最高价";else if(value==2)value="最低价";else if(value==3)value="收盘价";switch(funcName){case"PEAK":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u503C';case"PEAKBARS":return value+'\u7684'+args[1]+'5%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u5CF0\u4F4D\u7F6E';case"ZIG":return value+'\u7684'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"ZIGA":return value+'\u53D8\u5316'+args[1]+'\u7684\u4E4B\u5B57\u8F6C\u5411';case"TROUGH":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u503C';case"TROUGHBARS":return value+'\u7684'+args[1]+'%\u4E4B\u5B57\u8F6C\u5411\u7684\u524D'+args[2]+'\u4E2A\u6CE2\u8C37\u4F4D\u7F6E';}};this.GetColorExplain=function(colorName){var COLOR_MAP=new _map2.default([['COLORBLACK','黑色'],['COLORBLUE','蓝色'],['COLORGREEN','绿色'],['COLORCYAN','青色'],['COLORRED','红色'],['COLORMAGENTA','洋红色'],['COLORBROWN','棕色'],['COLORLIGRAY','淡灰色'],['COLORGRAY','深灰色'],['COLORLIBLUE','淡蓝色'],['COLORLIGREEN','淡绿色'],['COLORLICYAN','淡青色'],['COLORLIRED','淡红色'],['COLORLIMAGENTA','淡洋红色'],['COLORWHITE','白色'],['COLORYELLOW','黄色']]);if(COLOR_MAP.has(colorName))return COLOR_MAP.get(colorName);//COLOR 自定义色
|
|
11311
11321
|
//格式为COLOR+“RRGGBB”:RR、GG、BB表示红色、绿色和蓝色的分量,每种颜色的取值范围是00-FF,采用了16进制。
|
|
11312
11322
|
//例如:MA5:MA(CLOSE,5),COLOR00FFFF 表示纯红色与纯绿色的混合色:COLOR808000表示淡蓝色和淡绿色的混合色。
|
|
11313
11323
|
if(colorName.indexOf('COLOR')==0)return'#'+colorName.substr(5);return'rgb(30,144,255)';};this.GetLineWidthExplain=function(lineWidth){var width=parseInt(lineWidth.replace("LINETHICK",""));if(IFrameSplitOperator.IsPlusNumber(width))return width;return 1;};this.SymbolPeriodExplain=function(valueName,period){var mapStockDataName=new _map2.default([['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"],['OPEN',"开盘价"],['O',"开盘价"],['HIGH',"最高价"],['H',"最高价"],['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],['VOLINSTK',"持仓量"]]);//MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR
|
|
11314
|
-
var mapPeriodName=new _map2.default([["MIN1","1分钟"],["MIN5","5分钟"],["MIN15","15分钟"],["MIN30","30分钟"],["MIN60","60分钟"],["DAY","日"],["WEEK","周"],["MONTH","月"],['SEASON',"季"],["YEAR","年"],["WEEK2","双周"],["HALFYEAR","半年"]]);var dataName=valueName;if(mapStockDataName.has(valueName))dataName=mapStockDataName.get(valueName);var periodName=period;if(mapPeriodName.has(period))periodName=mapPeriodName.get(period);return dataName+'[\u53D6'+periodName+'\u6570\u636E]';};this.GetOtherSymbolExplain=function(obj,node){var mapStockDataName=new _map2.default([['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"],['OPEN',"开盘价"],['O',"开盘价"],['HIGH',"最高价"],['H',"最高价"],['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],['VOLINSTK',"持仓量"]]);if(obj.FunctionName){var args=obj.Args;var dataName=mapStockDataName.get(obj.FunctionName);return'['+args[0]+']'+dataName;}else if(obj.Literal){var value=obj.Literal.toUpperCase();var args=value.split("$");if(!mapStockDataName.has(args[1]))return"";var symbol=args[0];var dataName=mapStockDataName.get(args[1]);return'['+symbol+']'+dataName;}};this.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE','POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2"]);if(setFunctionName.has(name))return true;return false;};//赋值
|
|
11324
|
+
var mapPeriodName=new _map2.default([["MIN1","1分钟"],["MIN5","5分钟"],["MIN15","15分钟"],["MIN30","30分钟"],["MIN60","60分钟"],["DAY","日"],["WEEK","周"],["MONTH","月"],['SEASON',"季"],["YEAR","年"],["WEEK2","双周"],["HALFYEAR","半年"]]);var dataName=valueName;if(mapStockDataName.has(valueName))dataName=mapStockDataName.get(valueName);var periodName=period;if(mapPeriodName.has(period))periodName=mapPeriodName.get(period);return dataName+'[\u53D6'+periodName+'\u6570\u636E]';};this.GetOtherSymbolExplain=function(obj,node){var mapStockDataName=new _map2.default([['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"],['OPEN',"开盘价"],['O',"开盘价"],['HIGH',"最高价"],['H',"最高价"],['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],['VOLINSTK',"持仓量"]]);if(obj.FunctionName){var args=obj.Args;var dataName=mapStockDataName.get(obj.FunctionName);return'['+args[0]+']'+dataName;}else if(obj.Literal){var value=obj.Literal.toUpperCase();var args=value.split("$");if(!mapStockDataName.has(args[1]))return"";var symbol=args[0];var dataName=mapStockDataName.get(args[1]);return'['+symbol+']'+dataName;}};this.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE','POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2","BUY","BUYSHORT","SELL","SELLSHORT"]);if(setFunctionName.has(name))return true;return false;};//赋值
|
|
11315
11325
|
this.VisitAssignmentExpression=function(node){var left=node.Left;if(left.Type!=Syntax.Identifier)this.ThrowUnexpectedNode(node);var varName=left.Name;var right=node.Right;var value=null;if(right.Type==Syntax.BinaryExpression||right.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(right);else if(right.Type==Syntax.CallExpression)value=this.VisitCallExpression(right);else if(right.Type==Syntax.Literal){value=right.Value;if(IFrameSplitOperator.IsString(value)&&right.Value.indexOf("$")>0)value=this.GetOtherSymbolExplain({Literal:value},node);}else if(right.Type==Syntax.Identifier)//右值是变量
|
|
11316
11326
|
value=this.ReadVariable(right.Name,right);else if(right.Type==Syntax.MemberExpression)value=this.ReadMemberVariable(right);else if(right.Type==Syntax.UnaryExpression){if(right.Operator=='-'){var tempValue=this.GetNodeValue(right.Argument);value='-'+tempValue;}else{value=right.Argument.Value;}}JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]',varName,' = ',value);this.VarTable.set(varName,value);};this.ReadMemberVariable=function(node){var obj=node.Object;var member=node.Property;var maiObj=void 0;if(obj.Type==Syntax.BinaryExpression||obj.Type==Syntax.LogicalExpression)maiObj=this.VisitBinaryExpression(obj);else if(obj.Type==Syntax.CallExpression)maiObj=this.VisitCallExpression(obj);else{if(member.Name.indexOf('#')>0){var aryValue=member.Name.split("#");var value=obj.Name+'\u7684'+aryValue[0]+'[\u5468\u671F'+aryValue[1]+']';}else{var value=obj.Name+'\u7684'+member.Name;}return value;}if(!maiObj)return null;var value=maiObj[member.Name];if(value)return value;return null;};//逻辑运算
|
|
11317
11327
|
this.VisitBinaryExpression=function(node){var stack=[];stack.push(node);var temp=null;while(stack.length!=0){temp=stack[stack.length-1];if(temp.Left&&node!=temp.Left&&node!=temp.Right){stack.push(temp.Left);}else if(temp.Right&&node!=temp.Right){stack.push(temp.Right);}else{var value=stack.pop();if(value.Type==Syntax.BinaryExpression)//只遍历操作符就可以
|
|
@@ -11320,7 +11330,9 @@ value.Out='('+leftValue+' '+value.Operator+' '+rightValue+')';if(leftValue=="收
|
|
|
11320
11330
|
switch(value.Operator){case'&&':case'AND':value.Out='('+_leftValue2+' \u5E76\u4E14 '+_rightValue2+')';break;case'||':case'OR':value.Out='('+_leftValue2+' \u6216\u8005 '+_rightValue2+')';break;}JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] LogicalExpression',value);}node=temp;}}return node.Out;};this.GetNodeValue=function(node){switch(node.Type){case Syntax.Literal://数字
|
|
11321
11331
|
return node.Value;case Syntax.UnaryExpression:if(node.Operator=='-'){var _value23=this.GetNodeValue(node.Argument);return'-'+_value23;}return node.Argument.Value;case Syntax.Identifier:var value=this.ReadVariable(node.Name,node);return value;case Syntax.BinaryExpression:case Syntax.LogicalExpression:return node.Out;case Syntax.CallExpression:return this.VisitCallExpression(node);default:this.ThrowUnexpectedNode(node);}};//读取变量
|
|
11322
11332
|
this.ReadVariable=function(name,node){if(this.ConstVarTable.has(name)){var data=this.ConstVarTable.get(name);return data;}if(g_JSComplierResource.IsCustomVariant(name))return this.ReadCustomVariant(name,node);//读取自定义变量
|
|
11323
|
-
if(this.VarTable.has(name))return this.VarTable.get(name);if(name.indexOf('#')>0){var aryPeriod=name.split('#');return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);}
|
|
11333
|
+
if(this.VarTable.has(name))return this.VarTable.get(name);if(name.indexOf('#')>0){var aryPeriod=name.split('#');return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);}if(name=="AUTOFILTER")//信号过滤
|
|
11334
|
+
{return this.AUTOFILTER();}this.ThrowUnexpectedNode(node,'变量'+name+'不存在');return name;};this.AUTOFILTER=function(){//TODO:过滤信号
|
|
11335
|
+
return null;};this.ThrowUnexpectedNode=function(node,message){var marker=node.Marker;var msg=message||"执行异常";return this.ErrorHandler.ThrowError(marker.Index,marker.Line,marker.Column,msg);};this.ThrowError=function(){};}//对外导出类
|
|
11324
11336
|
function JSComplier(){}//词法分析
|
|
11325
11337
|
JSComplier.Tokenize=function(code){JSConsole.Complier.Log('[JSComplier.Tokenize]',code);var tokenizer=new Tokenizer(code);var tokens=[];try{while(true){var token=tokenizer.GetNextToken();if(!token)break;tokens.push(token);}}catch(e){}return tokens;};//语法解析 生成抽象语法树(Abstract Syntax Tree)
|
|
11326
11338
|
JSComplier.Parse=function(code){JSConsole.Complier.Log('[JSComplier.Parse]',code);var parser=new JSParser(code);parser.Initialize();var program=parser.ParseScript();var ast=program;return ast;};/*
|
|
@@ -11450,7 +11462,9 @@ if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK","
|
|
|
11450
11462
|
hqChart.ChartPaint.push(line);};this.CreateChartSlopeLine=function(hqChart,windowIndex,varItem,id){var line=new ChartSlopeLine();line.Canvas=hqChart.Canvas;line.Name=varItem.Name;line.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;line.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Color)line.Color=this.GetColor(varItem.Color);else line.Color=this.GetDefaultColor(id);if(varItem.IsDotLine)line.IsDotLine=true;//虚线
|
|
11451
11463
|
if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)line.LineWidth=width;}var titleIndex=windowIndex+1;line.Data.Data=varItem.Draw.DrawData.Data;line.Option=varItem.Draw.DrawData.Option;hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(line.Data,null,line.Color);//给一个空的标题
|
|
11452
11464
|
hqChart.ChartPaint.push(line);};this.CreateChartVericaltLine=function(hqChart,windowIndex,varItem,id){var chart=new ChartVericaltLine();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}this.SetChartLineDash(chart,varItem.Draw.DrawData);chart.Data.Data=varItem.Draw.DrawData.Data;hqChart.ChartPaint.push(chart);};this.SetChartLineDash=function(chart,option){if(IFrameSplitOperator.IsNumber(option.LineType)){var lineType=option.LineType;var pixelRatio=GetDevicePixelRatio();switch(lineType){case 1:chart.LineType=[10*pixelRatio,10*pixelRatio];break;case 2:chart.LineType=[0,10*pixelRatio];chart.LineCap="square";break;case 3:chart.LineType=[10*pixelRatio,3*pixelRatio,3*pixelRatio,3*pixelRatio];break;case 4:chart.LineType=[10*pixelRatio,3*pixelRatio,3*pixelRatio,3*pixelRatio,3*pixelRatio,3*pixelRatio];break;}}else if(IFrameSplitOperator.IsString(option.LineType)){var aryString=option.LineType.split(',');var aryLinType=[];for(var i=0;i<aryString.length;++i){aryLinType.push(parseInt(aryString[i]));}chart.LineType=aryLinType;}};this.CreateChartHorizontalLine=function(hqChart,windowIndex,varItem,id){var chart=new ChartHorizontalLine();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Color)chart.Color=this.GetColor(varItem.Color);else chart.Color=this.GetDefaultColor(id);if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK",""));if(!isNaN(width)&&width>0)chart.LineWidth=width;}this.SetChartLineDash(chart,varItem.Draw.DrawData);chart.ExtendType=varItem.Draw.DrawData.Extend;chart.Data.Data=varItem.Draw.DrawData.Data;hqChart.ChartPaint.push(chart);};this.CreateBackgroud=function(hqChart,windowIndex,varItem,id){var chart=new ChartBackground();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Draw&&varItem.Draw.DrawData){var drawData=varItem.Draw.DrawData;chart.Color=drawData.Color;chart.ColorAngle=drawData.Angle;if(drawData.Data)chart.Data.Data=drawData.Data;}hqChart.ChartPaint.push(chart);};this.CreateBackgroundDiv=function(hqChart,windowIndex,varItem,id){var chart=new ChartBackgroundDiv();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Draw&&varItem.Draw.DrawData){var drawData=varItem.Draw.DrawData;chart.AryColor=drawData.AryColor;chart.ColorType=drawData.ColorType;if(drawData.Data)chart.Data.Data=drawData.Data;}hqChart.ChartPaint.push(chart);};this.CreateLineMultiData=function(hqChart,windowIndex,varItem,id){var chart=new ChartLineMultiData();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Draw&&varItem.Draw.DrawData){var drawData=varItem.Draw.DrawData;chart.Color=drawData.Color;if(drawData.PointColor)chart.PointColor=drawData.PointColor;if(IFrameSplitOperator.IsPlusNumber(drawData.PointRadius))chart.PointRadius=drawData.PointRadius;if(IFrameSplitOperator.IsPlusNumber(drawData.LineWidth))chart.LineWidth=drawData.LineWidth;if(drawData.Data)chart.Data.Data=drawData.Data;}var titleIndex=windowIndex+1;var titleData=new DynamicTitleData(chart.Data,varItem.Name,chart.Color);//标题
|
|
11453
|
-
titleData.DataType="MULTI_POINT_LINE";hqChart.TitlePaint[titleIndex].Data[id]=titleData;hqChart.ChartPaint.push(chart);};this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id){var chart=new ChartTradeIcon();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data.Data=varItem.Draw.DrawData.Data;chart.AryIcon=varItem.Draw.DrawData.Icons;chart.TradeType=varItem.Draw.DrawType
|
|
11465
|
+
titleData.DataType="MULTI_POINT_LINE";hqChart.TitlePaint[titleIndex].Data[id]=titleData;hqChart.ChartPaint.push(chart);};this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id){var chart=new ChartTradeIcon();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chart.Data.Data=varItem.Draw.DrawData.Data;chart.AryIcon=varItem.Draw.DrawData.Icons;chart.TradeType=varItem.Draw.DrawType;//修改颜色
|
|
11466
|
+
if(varItem.Color&&IFrameSplitOperator.IsNonEmptyArray(chart.AryIcon)){for(var i=0;i<chart.AryIcon.length;++i){var item=chart.AryIcon[i];if(!item||!item.Color)continue;item.Color=varItem.Color;}}//图片大小
|
|
11467
|
+
if(varItem.DrawFontSize>0)chart.SVG.Size=varItem.DrawFontSize*GetDevicePixelRatio();//图标大小
|
|
11454
11468
|
hqChart.ChartPaint.push(chart);};this.CreateTextLine=function(hqChart,windowIndex,varItem,id){var chart=new ChartTextLine();chart.Canvas=hqChart.Canvas;chart.Name=varItem.Name;chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;if(varItem.Draw&&varItem.Draw.DrawData){var drawData=varItem.Draw.DrawData;chart.Text=drawData.Text;chart.Line=drawData.Line;chart.Price=drawData.Price;}hqChart.ChartPaint.push(chart);};this.CreateNumberText=function(hqChart,windowIndex,varItem,id){var chartText=new ChartSingleText();chartText.Canvas=hqChart.Canvas;chartText.Name=varItem.Name;chartText.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chartText.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chartText.ReloadResource();chartText.TextAlign="center";if(varItem.Color)chartText.Color=this.GetColor(varItem.Color);else chartText.Color=this.GetDefaultColor(id);if(varItem.IsDrawAbove)chartText.Direction=1;else chartText.Direction=2;if(varItem.Draw.Position)chartText.Position=varItem.Draw.Position;//赋值坐标
|
|
11455
11469
|
var titleIndex=windowIndex+1;chartText.Data.Data=varItem.Draw.DrawData.Value;chartText.Text=varItem.Draw.DrawData.Text;//hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
|
|
11456
11470
|
hqChart.ChartPaint.push(chartText);};this.CreateDrawText=function(hqChart,windowIndex,varItem,id){var chartText=new ChartSingleText();chartText.Canvas=hqChart.Canvas;chartText.Name=varItem.Name;chartText.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;chartText.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;chartText.ReloadResource();if(varItem.Color)chartText.Color=this.GetColor(varItem.Color);else chartText.Color=this.GetDefaultColor(id);if(varItem.IsDrawAbove)chartText.Direction=1;else chartText.Direction=0;if(varItem.DrawFontSize>0)chartText.TextFont=varItem.DrawFontSize*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1';//临时用下吧
|
|
@@ -12782,7 +12796,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
|
|
|
12782
12796
|
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);};}/********************************************************************************
|
|
12783
12797
|
* 版本信息输出
|
|
12784
12798
|
*
|
|
12785
|
-
*/var HQCHART_VERSION="1.1.
|
|
12799
|
+
*/var HQCHART_VERSION="1.1.12650";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();//把给外界调用的方法暴露出来
|
|
12786
12800
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
12787
12801
|
// BaseIndex:BaseIndex,
|
|
12788
12802
|
// ChartLine:ChartLine,
|
package/package.json
CHANGED
|
@@ -10826,25 +10826,31 @@ function JSDraw(errorHandler,symbolData)
|
|
|
10826
10826
|
|
|
10827
10827
|
if (Array.isArray(condition))
|
|
10828
10828
|
{
|
|
10829
|
-
|
|
10829
|
+
var item=null;
|
|
10830
|
+
if (IFrameSplitOperator.IsNonEmptyArray(condition))
|
|
10831
|
+
item=condition[condition.length-1]; //取最后一个数值
|
|
10832
|
+
|
|
10833
|
+
if (item)
|
|
10830
10834
|
{
|
|
10831
|
-
|
|
10832
|
-
|
|
10833
|
-
|
|
10834
|
-
if (Array.isArray(price)) drawData.Price=price[i];
|
|
10835
|
-
else drawData.Price=price;
|
|
10836
|
-
result.DrawData=drawData;
|
|
10837
|
-
|
|
10838
|
-
break;
|
|
10839
|
-
}
|
|
10835
|
+
if (Array.isArray(price)) drawData.Price=price[condition.length-1];
|
|
10836
|
+
else drawData.Price=price;
|
|
10837
|
+
result.DrawData=drawData;
|
|
10840
10838
|
}
|
|
10841
10839
|
}
|
|
10842
10840
|
else
|
|
10843
10841
|
{
|
|
10844
10842
|
if (condition)
|
|
10845
10843
|
{
|
|
10846
|
-
if (Array.isArray(price))
|
|
10847
|
-
|
|
10844
|
+
if (Array.isArray(price))
|
|
10845
|
+
{
|
|
10846
|
+
var value=null;
|
|
10847
|
+
if (price.length>0) value=price[price.length-1];
|
|
10848
|
+
drawData.Price=value;
|
|
10849
|
+
}
|
|
10850
|
+
else
|
|
10851
|
+
{
|
|
10852
|
+
drawData.Price=price;
|
|
10853
|
+
}
|
|
10848
10854
|
result.DrawData=drawData;
|
|
10849
10855
|
}
|
|
10850
10856
|
}
|
|
@@ -13249,6 +13255,46 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
13249
13255
|
return result;
|
|
13250
13256
|
}
|
|
13251
13257
|
|
|
13258
|
+
//求真实波幅, (最高-最低),(最高-昨收),(最低-昨收)三者绝对值中的最大值.
|
|
13259
|
+
//用法:
|
|
13260
|
+
//TR,求真实波幅.
|
|
13261
|
+
//例如:ATR:=MA(TR,10);
|
|
13262
|
+
//表示求真实波幅的10周期均值
|
|
13263
|
+
this.GetTRData=function(node)
|
|
13264
|
+
{
|
|
13265
|
+
var result=[];
|
|
13266
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return result;
|
|
13267
|
+
|
|
13268
|
+
let lCount=this.Data.Data.length;
|
|
13269
|
+
for(var i=0 ;i<lCount;++i)
|
|
13270
|
+
{
|
|
13271
|
+
var item=this.Data.Data[i];
|
|
13272
|
+
var max=null;
|
|
13273
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.Low))
|
|
13274
|
+
{
|
|
13275
|
+
var value=Math.abs(item.High-item.Low);
|
|
13276
|
+
if (max==null || max<value) max=value;
|
|
13277
|
+
}
|
|
13278
|
+
|
|
13279
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.YClose))
|
|
13280
|
+
{
|
|
13281
|
+
var value=Math.abs(item.High-item.YClose);
|
|
13282
|
+
if (max==null || max<value) max=value;
|
|
13283
|
+
}
|
|
13284
|
+
|
|
13285
|
+
if (IFrameSplitOperator.IsNumber(item.YClose) && IFrameSplitOperator.IsNumber(item.Low))
|
|
13286
|
+
{
|
|
13287
|
+
var value=Math.abs(item.Low-item.YClose);
|
|
13288
|
+
if (max==null || max<value) max=value;
|
|
13289
|
+
}
|
|
13290
|
+
|
|
13291
|
+
result[i]=max;
|
|
13292
|
+
}
|
|
13293
|
+
|
|
13294
|
+
|
|
13295
|
+
return result;
|
|
13296
|
+
}
|
|
13297
|
+
|
|
13252
13298
|
//融资融券函数
|
|
13253
13299
|
this.GetMarginCacheData=function(id, node)
|
|
13254
13300
|
{
|
|
@@ -16388,7 +16434,10 @@ function JSExecute(ast,option)
|
|
|
16388
16434
|
['DRAWNULL',null],
|
|
16389
16435
|
["NULL",null],
|
|
16390
16436
|
|
|
16391
|
-
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null]
|
|
16437
|
+
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null],
|
|
16438
|
+
|
|
16439
|
+
["TR", null], //真实波幅
|
|
16440
|
+
["AUTOFILTER", null]
|
|
16392
16441
|
|
|
16393
16442
|
]);
|
|
16394
16443
|
|
|
@@ -16556,6 +16605,9 @@ function JSExecute(ast,option)
|
|
|
16556
16605
|
case 'VOLR':
|
|
16557
16606
|
return this.SymbolData.GetVolRateCacheData(node);
|
|
16558
16607
|
|
|
16608
|
+
case "TR": //TR,求真实波幅.
|
|
16609
|
+
return this.SymbolData.GetTRData(node);
|
|
16610
|
+
|
|
16559
16611
|
//大盘数据
|
|
16560
16612
|
case 'INDEXA':
|
|
16561
16613
|
case 'INDEXC':
|
|
@@ -17986,7 +18038,8 @@ function JSExplainer(ast,option)
|
|
|
17986
18038
|
["HYSYL","指数市盈率或个股所属行业的市盈率"],
|
|
17987
18039
|
["HYSJL","指数市净率或个股所属行业的市净率"],
|
|
17988
18040
|
|
|
17989
|
-
['DRAWNULL',"无效数据"]
|
|
18041
|
+
['DRAWNULL',"无效数据"],
|
|
18042
|
+
["TR", "求真实波幅"],
|
|
17990
18043
|
|
|
17991
18044
|
]);
|
|
17992
18045
|
|
|
@@ -18603,6 +18656,15 @@ function JSExplainer(ast,option)
|
|
|
18603
18656
|
else barType="实线空心柱";
|
|
18604
18657
|
return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
|
|
18605
18658
|
|
|
18659
|
+
case "SELL":
|
|
18660
|
+
return "卖出平仓";
|
|
18661
|
+
case "BUY":
|
|
18662
|
+
return "买入开仓";
|
|
18663
|
+
case "SELLSHORT":
|
|
18664
|
+
return "卖出开仓";
|
|
18665
|
+
case "BUYSHORT":
|
|
18666
|
+
return "买入平仓";
|
|
18667
|
+
|
|
18606
18668
|
case "YMOVE":
|
|
18607
18669
|
return;
|
|
18608
18670
|
|
|
@@ -18748,7 +18810,8 @@ function JSExplainer(ast,option)
|
|
|
18748
18810
|
[
|
|
18749
18811
|
"STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE',
|
|
18750
18812
|
'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
|
|
18751
|
-
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2"
|
|
18813
|
+
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2",
|
|
18814
|
+
"BUY","BUYSHORT","SELL","SELLSHORT",
|
|
18752
18815
|
]);
|
|
18753
18816
|
if (setFunctionName.has(name)) return true;
|
|
18754
18817
|
|
|
@@ -18948,10 +19011,21 @@ function JSExplainer(ast,option)
|
|
|
18948
19011
|
return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);
|
|
18949
19012
|
}
|
|
18950
19013
|
|
|
19014
|
+
if (name=="AUTOFILTER") //信号过滤
|
|
19015
|
+
{
|
|
19016
|
+
return this.AUTOFILTER();
|
|
19017
|
+
}
|
|
19018
|
+
|
|
18951
19019
|
this.ThrowUnexpectedNode(node, '变量'+name+'不存在');
|
|
18952
19020
|
return name;
|
|
18953
19021
|
}
|
|
18954
19022
|
|
|
19023
|
+
this.AUTOFILTER=function()
|
|
19024
|
+
{
|
|
19025
|
+
//TODO:过滤信号
|
|
19026
|
+
return null;
|
|
19027
|
+
}
|
|
19028
|
+
|
|
18955
19029
|
this.ThrowUnexpectedNode=function(node,message)
|
|
18956
19030
|
{
|
|
18957
19031
|
let marker=node.Marker;
|
|
@@ -20420,7 +20494,20 @@ function ScriptIndex(name,script,args,option)
|
|
|
20420
20494
|
chart.AryIcon=varItem.Draw.DrawData.Icons;
|
|
20421
20495
|
chart.TradeType=varItem.Draw.DrawType;
|
|
20422
20496
|
|
|
20423
|
-
|
|
20497
|
+
//修改颜色
|
|
20498
|
+
if (varItem.Color && IFrameSplitOperator.IsNonEmptyArray(chart.AryIcon))
|
|
20499
|
+
{
|
|
20500
|
+
for(var i=0;i<chart.AryIcon.length;++i)
|
|
20501
|
+
{
|
|
20502
|
+
var item=chart.AryIcon[i];
|
|
20503
|
+
if (!item || !item.Color) continue;
|
|
20504
|
+
|
|
20505
|
+
item.Color=varItem.Color;
|
|
20506
|
+
}
|
|
20507
|
+
}
|
|
20508
|
+
|
|
20509
|
+
//图片大小
|
|
20510
|
+
if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize*GetDevicePixelRatio(); //图标大小
|
|
20424
20511
|
|
|
20425
20512
|
hqChart.ChartPaint.push(chart);
|
|
20426
20513
|
}
|
package/src/jscommon/umychart.js
CHANGED
|
@@ -30542,29 +30542,35 @@ function ChartTradeIcon()
|
|
|
30542
30542
|
if(!this.Data || !this.Data.Data) return;
|
|
30543
30543
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
|
|
30544
30544
|
|
|
30545
|
+
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
30545
30546
|
this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
|
|
30546
30547
|
this.Canvas.textAlign=this.TextAlign;
|
|
30547
30548
|
this.Canvas.textBaseline='middle';
|
|
30548
30549
|
var yOffset=0;
|
|
30549
30550
|
if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
|
|
30550
30551
|
{
|
|
30551
|
-
this.Canvas.textBaseline="
|
|
30552
|
-
yOffset
|
|
30552
|
+
this.Canvas.textBaseline="top";
|
|
30553
|
+
yOffset+=(bHScreen?-2:2);
|
|
30553
30554
|
}
|
|
30554
30555
|
else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
|
|
30555
30556
|
{
|
|
30556
|
-
this.Canvas.textBaseline="
|
|
30557
|
-
yOffset
|
|
30557
|
+
this.Canvas.textBaseline="bottom";
|
|
30558
|
+
yOffset=(bHScreen?2:-2);
|
|
30558
30559
|
}
|
|
30559
|
-
|
|
30560
|
-
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
30560
|
+
|
|
30561
30561
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
30562
30562
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
30563
30563
|
var chartright=this.ChartBorder.GetRight();
|
|
30564
|
-
if (bHScreen) chartright=this.ChartBorder.GetBottom();
|
|
30565
30564
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
30566
30565
|
var border=this.ChartFrame.GetBorder();
|
|
30567
30566
|
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
30567
|
+
if (bHScreen)
|
|
30568
|
+
{
|
|
30569
|
+
chartright=this.ChartBorder.GetBottom();
|
|
30570
|
+
//top=this.ChartBorder.GetRightEx();
|
|
30571
|
+
//bottom=this.ChartBorder.GetLeftEx();
|
|
30572
|
+
xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
30573
|
+
}
|
|
30568
30574
|
|
|
30569
30575
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
30570
30576
|
{
|
|
@@ -30579,12 +30585,30 @@ function ChartTradeIcon()
|
|
|
30579
30585
|
var right=xOffset+dataWidth;
|
|
30580
30586
|
if (right>chartright) break;
|
|
30581
30587
|
|
|
30582
|
-
|
|
30583
30588
|
var x=left+(right-left)/2;
|
|
30584
30589
|
var y=this.GetYFromData(iconItem.Value, false);
|
|
30585
30590
|
|
|
30586
30591
|
this.Canvas.fillStyle=iconItem.Color;
|
|
30587
|
-
|
|
30592
|
+
|
|
30593
|
+
if (dataWidth>2) x=ToFixedPoint(x);
|
|
30594
|
+
|
|
30595
|
+
this.DrawTradeIcon(iconItem.Icon,x,y+yOffset, bHScreen);
|
|
30596
|
+
}
|
|
30597
|
+
}
|
|
30598
|
+
|
|
30599
|
+
this.DrawTradeIcon=function(text,x,y,isHScreen)
|
|
30600
|
+
{
|
|
30601
|
+
if (isHScreen)
|
|
30602
|
+
{
|
|
30603
|
+
this.Canvas.save();
|
|
30604
|
+
this.Canvas.translate(y, x);
|
|
30605
|
+
this.Canvas.rotate(90 * Math.PI / 180);
|
|
30606
|
+
this.Canvas.fillText(text,0,0);
|
|
30607
|
+
this.Canvas.restore();
|
|
30608
|
+
}
|
|
30609
|
+
else
|
|
30610
|
+
{
|
|
30611
|
+
this.Canvas.fillText(text,x,y);
|
|
30588
30612
|
}
|
|
30589
30613
|
}
|
|
30590
30614
|
|
|
@@ -48594,7 +48618,7 @@ function DynamicKLineTitlePainting()
|
|
|
48594
48618
|
var item=this.OverlayChartPaint[i];
|
|
48595
48619
|
if (!item.Symbol || !item.Title) continue;
|
|
48596
48620
|
|
|
48597
|
-
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data });
|
|
48621
|
+
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data, Color:item.Color });
|
|
48598
48622
|
}
|
|
48599
48623
|
}
|
|
48600
48624
|
|
|
@@ -135,7 +135,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
|
135
135
|
'COLORSTICK':DRAW_NAME,'CIRCLEDOT':DRAW_NAME,'POINTDOT':DRAW_NAME,'LINESTICK':DRAW_NAME,'STICK':DRAW_NAME,'NODRAW':DRAW_NAME,
|
|
136
136
|
"LINEAREA":DRAW_NAME,
|
|
137
137
|
|
|
138
|
-
"BUY":DRAW_NAME,"SELL":DRAW_NAME,"SELLSHORT":DRAW_NAME,"BUYSHORT":DRAW_NAME,"TIPICON":DRAW_NAME,
|
|
138
|
+
"BUY":DRAW_NAME,"SELL":DRAW_NAME,"SELLSHORT":DRAW_NAME,"BUYSHORT":DRAW_NAME,"TIPICON":DRAW_NAME,"AUTOFILTER":FUNCTION_NAME,
|
|
139
139
|
|
|
140
140
|
//颜色
|
|
141
141
|
'COLORYELLOW':COLORYELLOW,'COLORBLACK':COLORBLACK,'COLORBLUE':COLORBLUE,'COLORGREEN':COLORGREEN,'COLORCYAN':COLORCYAN,'COLORRED':COLORRED,
|
|
@@ -34622,29 +34622,35 @@ function ChartTradeIcon()
|
|
|
34622
34622
|
if(!this.Data || !this.Data.Data) return;
|
|
34623
34623
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
|
|
34624
34624
|
|
|
34625
|
+
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
34625
34626
|
this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
|
|
34626
34627
|
this.Canvas.textAlign=this.TextAlign;
|
|
34627
34628
|
this.Canvas.textBaseline='middle';
|
|
34628
34629
|
var yOffset=0;
|
|
34629
34630
|
if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
|
|
34630
34631
|
{
|
|
34631
|
-
this.Canvas.textBaseline="
|
|
34632
|
-
yOffset
|
|
34632
|
+
this.Canvas.textBaseline="top";
|
|
34633
|
+
yOffset+=(bHScreen?-2:2);
|
|
34633
34634
|
}
|
|
34634
34635
|
else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
|
|
34635
34636
|
{
|
|
34636
|
-
this.Canvas.textBaseline="
|
|
34637
|
-
yOffset
|
|
34637
|
+
this.Canvas.textBaseline="bottom";
|
|
34638
|
+
yOffset=(bHScreen?2:-2);
|
|
34638
34639
|
}
|
|
34639
|
-
|
|
34640
|
-
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
34640
|
+
|
|
34641
34641
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
34642
34642
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
34643
34643
|
var chartright=this.ChartBorder.GetRight();
|
|
34644
|
-
if (bHScreen) chartright=this.ChartBorder.GetBottom();
|
|
34645
34644
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
34646
34645
|
var border=this.ChartFrame.GetBorder();
|
|
34647
34646
|
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
34647
|
+
if (bHScreen)
|
|
34648
|
+
{
|
|
34649
|
+
chartright=this.ChartBorder.GetBottom();
|
|
34650
|
+
//top=this.ChartBorder.GetRightEx();
|
|
34651
|
+
//bottom=this.ChartBorder.GetLeftEx();
|
|
34652
|
+
xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
34653
|
+
}
|
|
34648
34654
|
|
|
34649
34655
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
34650
34656
|
{
|
|
@@ -34659,12 +34665,30 @@ function ChartTradeIcon()
|
|
|
34659
34665
|
var right=xOffset+dataWidth;
|
|
34660
34666
|
if (right>chartright) break;
|
|
34661
34667
|
|
|
34662
|
-
|
|
34663
34668
|
var x=left+(right-left)/2;
|
|
34664
34669
|
var y=this.GetYFromData(iconItem.Value, false);
|
|
34665
34670
|
|
|
34666
34671
|
this.Canvas.fillStyle=iconItem.Color;
|
|
34667
|
-
|
|
34672
|
+
|
|
34673
|
+
if (dataWidth>2) x=ToFixedPoint(x);
|
|
34674
|
+
|
|
34675
|
+
this.DrawTradeIcon(iconItem.Icon,x,y+yOffset, bHScreen);
|
|
34676
|
+
}
|
|
34677
|
+
}
|
|
34678
|
+
|
|
34679
|
+
this.DrawTradeIcon=function(text,x,y,isHScreen)
|
|
34680
|
+
{
|
|
34681
|
+
if (isHScreen)
|
|
34682
|
+
{
|
|
34683
|
+
this.Canvas.save();
|
|
34684
|
+
this.Canvas.translate(y, x);
|
|
34685
|
+
this.Canvas.rotate(90 * Math.PI / 180);
|
|
34686
|
+
this.Canvas.fillText(text,0,0);
|
|
34687
|
+
this.Canvas.restore();
|
|
34688
|
+
}
|
|
34689
|
+
else
|
|
34690
|
+
{
|
|
34691
|
+
this.Canvas.fillText(text,x,y);
|
|
34668
34692
|
}
|
|
34669
34693
|
}
|
|
34670
34694
|
|
|
@@ -52674,7 +52698,7 @@ function DynamicKLineTitlePainting()
|
|
|
52674
52698
|
var item=this.OverlayChartPaint[i];
|
|
52675
52699
|
if (!item.Symbol || !item.Title) continue;
|
|
52676
52700
|
|
|
52677
|
-
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data });
|
|
52701
|
+
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data, Color:item.Color });
|
|
52678
52702
|
}
|
|
52679
52703
|
}
|
|
52680
52704
|
|
|
@@ -104874,25 +104898,31 @@ function JSDraw(errorHandler,symbolData)
|
|
|
104874
104898
|
|
|
104875
104899
|
if (Array.isArray(condition))
|
|
104876
104900
|
{
|
|
104877
|
-
|
|
104901
|
+
var item=null;
|
|
104902
|
+
if (IFrameSplitOperator.IsNonEmptyArray(condition))
|
|
104903
|
+
item=condition[condition.length-1]; //取最后一个数值
|
|
104904
|
+
|
|
104905
|
+
if (item)
|
|
104878
104906
|
{
|
|
104879
|
-
|
|
104880
|
-
|
|
104881
|
-
|
|
104882
|
-
if (Array.isArray(price)) drawData.Price=price[i];
|
|
104883
|
-
else drawData.Price=price;
|
|
104884
|
-
result.DrawData=drawData;
|
|
104885
|
-
|
|
104886
|
-
break;
|
|
104887
|
-
}
|
|
104907
|
+
if (Array.isArray(price)) drawData.Price=price[condition.length-1];
|
|
104908
|
+
else drawData.Price=price;
|
|
104909
|
+
result.DrawData=drawData;
|
|
104888
104910
|
}
|
|
104889
104911
|
}
|
|
104890
104912
|
else
|
|
104891
104913
|
{
|
|
104892
104914
|
if (condition)
|
|
104893
104915
|
{
|
|
104894
|
-
if (Array.isArray(price))
|
|
104895
|
-
|
|
104916
|
+
if (Array.isArray(price))
|
|
104917
|
+
{
|
|
104918
|
+
var value=null;
|
|
104919
|
+
if (price.length>0) value=price[price.length-1];
|
|
104920
|
+
drawData.Price=value;
|
|
104921
|
+
}
|
|
104922
|
+
else
|
|
104923
|
+
{
|
|
104924
|
+
drawData.Price=price;
|
|
104925
|
+
}
|
|
104896
104926
|
result.DrawData=drawData;
|
|
104897
104927
|
}
|
|
104898
104928
|
}
|
|
@@ -107297,6 +107327,46 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
107297
107327
|
return result;
|
|
107298
107328
|
}
|
|
107299
107329
|
|
|
107330
|
+
//求真实波幅, (最高-最低),(最高-昨收),(最低-昨收)三者绝对值中的最大值.
|
|
107331
|
+
//用法:
|
|
107332
|
+
//TR,求真实波幅.
|
|
107333
|
+
//例如:ATR:=MA(TR,10);
|
|
107334
|
+
//表示求真实波幅的10周期均值
|
|
107335
|
+
this.GetTRData=function(node)
|
|
107336
|
+
{
|
|
107337
|
+
var result=[];
|
|
107338
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return result;
|
|
107339
|
+
|
|
107340
|
+
let lCount=this.Data.Data.length;
|
|
107341
|
+
for(var i=0 ;i<lCount;++i)
|
|
107342
|
+
{
|
|
107343
|
+
var item=this.Data.Data[i];
|
|
107344
|
+
var max=null;
|
|
107345
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.Low))
|
|
107346
|
+
{
|
|
107347
|
+
var value=Math.abs(item.High-item.Low);
|
|
107348
|
+
if (max==null || max<value) max=value;
|
|
107349
|
+
}
|
|
107350
|
+
|
|
107351
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.YClose))
|
|
107352
|
+
{
|
|
107353
|
+
var value=Math.abs(item.High-item.YClose);
|
|
107354
|
+
if (max==null || max<value) max=value;
|
|
107355
|
+
}
|
|
107356
|
+
|
|
107357
|
+
if (IFrameSplitOperator.IsNumber(item.YClose) && IFrameSplitOperator.IsNumber(item.Low))
|
|
107358
|
+
{
|
|
107359
|
+
var value=Math.abs(item.Low-item.YClose);
|
|
107360
|
+
if (max==null || max<value) max=value;
|
|
107361
|
+
}
|
|
107362
|
+
|
|
107363
|
+
result[i]=max;
|
|
107364
|
+
}
|
|
107365
|
+
|
|
107366
|
+
|
|
107367
|
+
return result;
|
|
107368
|
+
}
|
|
107369
|
+
|
|
107300
107370
|
//融资融券函数
|
|
107301
107371
|
this.GetMarginCacheData=function(id, node)
|
|
107302
107372
|
{
|
|
@@ -110436,7 +110506,10 @@ function JSExecute(ast,option)
|
|
|
110436
110506
|
['DRAWNULL',null],
|
|
110437
110507
|
["NULL",null],
|
|
110438
110508
|
|
|
110439
|
-
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null]
|
|
110509
|
+
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null],
|
|
110510
|
+
|
|
110511
|
+
["TR", null], //真实波幅
|
|
110512
|
+
["AUTOFILTER", null]
|
|
110440
110513
|
|
|
110441
110514
|
]);
|
|
110442
110515
|
|
|
@@ -110604,6 +110677,9 @@ function JSExecute(ast,option)
|
|
|
110604
110677
|
case 'VOLR':
|
|
110605
110678
|
return this.SymbolData.GetVolRateCacheData(node);
|
|
110606
110679
|
|
|
110680
|
+
case "TR": //TR,求真实波幅.
|
|
110681
|
+
return this.SymbolData.GetTRData(node);
|
|
110682
|
+
|
|
110607
110683
|
//大盘数据
|
|
110608
110684
|
case 'INDEXA':
|
|
110609
110685
|
case 'INDEXC':
|
|
@@ -112034,7 +112110,8 @@ function JSExplainer(ast,option)
|
|
|
112034
112110
|
["HYSYL","指数市盈率或个股所属行业的市盈率"],
|
|
112035
112111
|
["HYSJL","指数市净率或个股所属行业的市净率"],
|
|
112036
112112
|
|
|
112037
|
-
['DRAWNULL',"无效数据"]
|
|
112113
|
+
['DRAWNULL',"无效数据"],
|
|
112114
|
+
["TR", "求真实波幅"],
|
|
112038
112115
|
|
|
112039
112116
|
]);
|
|
112040
112117
|
|
|
@@ -112651,6 +112728,15 @@ function JSExplainer(ast,option)
|
|
|
112651
112728
|
else barType="实线空心柱";
|
|
112652
112729
|
return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
|
|
112653
112730
|
|
|
112731
|
+
case "SELL":
|
|
112732
|
+
return "卖出平仓";
|
|
112733
|
+
case "BUY":
|
|
112734
|
+
return "买入开仓";
|
|
112735
|
+
case "SELLSHORT":
|
|
112736
|
+
return "卖出开仓";
|
|
112737
|
+
case "BUYSHORT":
|
|
112738
|
+
return "买入平仓";
|
|
112739
|
+
|
|
112654
112740
|
case "YMOVE":
|
|
112655
112741
|
return;
|
|
112656
112742
|
|
|
@@ -112796,7 +112882,8 @@ function JSExplainer(ast,option)
|
|
|
112796
112882
|
[
|
|
112797
112883
|
"STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE',
|
|
112798
112884
|
'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
|
|
112799
|
-
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2"
|
|
112885
|
+
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2",
|
|
112886
|
+
"BUY","BUYSHORT","SELL","SELLSHORT",
|
|
112800
112887
|
]);
|
|
112801
112888
|
if (setFunctionName.has(name)) return true;
|
|
112802
112889
|
|
|
@@ -112996,10 +113083,21 @@ function JSExplainer(ast,option)
|
|
|
112996
113083
|
return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);
|
|
112997
113084
|
}
|
|
112998
113085
|
|
|
113086
|
+
if (name=="AUTOFILTER") //信号过滤
|
|
113087
|
+
{
|
|
113088
|
+
return this.AUTOFILTER();
|
|
113089
|
+
}
|
|
113090
|
+
|
|
112999
113091
|
this.ThrowUnexpectedNode(node, '变量'+name+'不存在');
|
|
113000
113092
|
return name;
|
|
113001
113093
|
}
|
|
113002
113094
|
|
|
113095
|
+
this.AUTOFILTER=function()
|
|
113096
|
+
{
|
|
113097
|
+
//TODO:过滤信号
|
|
113098
|
+
return null;
|
|
113099
|
+
}
|
|
113100
|
+
|
|
113003
113101
|
this.ThrowUnexpectedNode=function(node,message)
|
|
113004
113102
|
{
|
|
113005
113103
|
let marker=node.Marker;
|
|
@@ -114468,7 +114566,20 @@ function ScriptIndex(name,script,args,option)
|
|
|
114468
114566
|
chart.AryIcon=varItem.Draw.DrawData.Icons;
|
|
114469
114567
|
chart.TradeType=varItem.Draw.DrawType;
|
|
114470
114568
|
|
|
114471
|
-
|
|
114569
|
+
//修改颜色
|
|
114570
|
+
if (varItem.Color && IFrameSplitOperator.IsNonEmptyArray(chart.AryIcon))
|
|
114571
|
+
{
|
|
114572
|
+
for(var i=0;i<chart.AryIcon.length;++i)
|
|
114573
|
+
{
|
|
114574
|
+
var item=chart.AryIcon[i];
|
|
114575
|
+
if (!item || !item.Color) continue;
|
|
114576
|
+
|
|
114577
|
+
item.Color=varItem.Color;
|
|
114578
|
+
}
|
|
114579
|
+
}
|
|
114580
|
+
|
|
114581
|
+
//图片大小
|
|
114582
|
+
if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize*GetDevicePixelRatio(); //图标大小
|
|
114472
114583
|
|
|
114473
114584
|
hqChart.ChartPaint.push(chart);
|
|
114474
114585
|
}
|
|
@@ -130080,7 +130191,7 @@ function ScrollBarBGChart()
|
|
|
130080
130191
|
|
|
130081
130192
|
|
|
130082
130193
|
|
|
130083
|
-
var HQCHART_VERSION="1.1.
|
|
130194
|
+
var HQCHART_VERSION="1.1.12650";
|
|
130084
130195
|
|
|
130085
130196
|
function PrintHQChartVersion()
|
|
130086
130197
|
{
|
|
@@ -34666,29 +34666,35 @@ function ChartTradeIcon()
|
|
|
34666
34666
|
if(!this.Data || !this.Data.Data) return;
|
|
34667
34667
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
|
|
34668
34668
|
|
|
34669
|
+
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
34669
34670
|
this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
|
|
34670
34671
|
this.Canvas.textAlign=this.TextAlign;
|
|
34671
34672
|
this.Canvas.textBaseline='middle';
|
|
34672
34673
|
var yOffset=0;
|
|
34673
34674
|
if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
|
|
34674
34675
|
{
|
|
34675
|
-
this.Canvas.textBaseline="
|
|
34676
|
-
yOffset
|
|
34676
|
+
this.Canvas.textBaseline="top";
|
|
34677
|
+
yOffset+=(bHScreen?-2:2);
|
|
34677
34678
|
}
|
|
34678
34679
|
else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
|
|
34679
34680
|
{
|
|
34680
|
-
this.Canvas.textBaseline="
|
|
34681
|
-
yOffset
|
|
34681
|
+
this.Canvas.textBaseline="bottom";
|
|
34682
|
+
yOffset=(bHScreen?2:-2);
|
|
34682
34683
|
}
|
|
34683
|
-
|
|
34684
|
-
var bHScreen=(this.ChartFrame.IsHScreen===true);
|
|
34684
|
+
|
|
34685
34685
|
var dataWidth=this.ChartFrame.DataWidth;
|
|
34686
34686
|
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
34687
34687
|
var chartright=this.ChartBorder.GetRight();
|
|
34688
|
-
if (bHScreen) chartright=this.ChartBorder.GetBottom();
|
|
34689
34688
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
34690
34689
|
var border=this.ChartFrame.GetBorder();
|
|
34691
34690
|
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
34691
|
+
if (bHScreen)
|
|
34692
|
+
{
|
|
34693
|
+
chartright=this.ChartBorder.GetBottom();
|
|
34694
|
+
//top=this.ChartBorder.GetRightEx();
|
|
34695
|
+
//bottom=this.ChartBorder.GetLeftEx();
|
|
34696
|
+
xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
34697
|
+
}
|
|
34692
34698
|
|
|
34693
34699
|
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
34694
34700
|
{
|
|
@@ -34703,12 +34709,30 @@ function ChartTradeIcon()
|
|
|
34703
34709
|
var right=xOffset+dataWidth;
|
|
34704
34710
|
if (right>chartright) break;
|
|
34705
34711
|
|
|
34706
|
-
|
|
34707
34712
|
var x=left+(right-left)/2;
|
|
34708
34713
|
var y=this.GetYFromData(iconItem.Value, false);
|
|
34709
34714
|
|
|
34710
34715
|
this.Canvas.fillStyle=iconItem.Color;
|
|
34711
|
-
|
|
34716
|
+
|
|
34717
|
+
if (dataWidth>2) x=ToFixedPoint(x);
|
|
34718
|
+
|
|
34719
|
+
this.DrawTradeIcon(iconItem.Icon,x,y+yOffset, bHScreen);
|
|
34720
|
+
}
|
|
34721
|
+
}
|
|
34722
|
+
|
|
34723
|
+
this.DrawTradeIcon=function(text,x,y,isHScreen)
|
|
34724
|
+
{
|
|
34725
|
+
if (isHScreen)
|
|
34726
|
+
{
|
|
34727
|
+
this.Canvas.save();
|
|
34728
|
+
this.Canvas.translate(y, x);
|
|
34729
|
+
this.Canvas.rotate(90 * Math.PI / 180);
|
|
34730
|
+
this.Canvas.fillText(text,0,0);
|
|
34731
|
+
this.Canvas.restore();
|
|
34732
|
+
}
|
|
34733
|
+
else
|
|
34734
|
+
{
|
|
34735
|
+
this.Canvas.fillText(text,x,y);
|
|
34712
34736
|
}
|
|
34713
34737
|
}
|
|
34714
34738
|
|
|
@@ -52718,7 +52742,7 @@ function DynamicKLineTitlePainting()
|
|
|
52718
52742
|
var item=this.OverlayChartPaint[i];
|
|
52719
52743
|
if (!item.Symbol || !item.Title) continue;
|
|
52720
52744
|
|
|
52721
|
-
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data });
|
|
52745
|
+
data.OverlayStock.push({ Symbol:item.Symbol, Name:item.Title, Data:item.Data, Color:item.Color });
|
|
52722
52746
|
}
|
|
52723
52747
|
}
|
|
52724
52748
|
|
|
@@ -104918,25 +104942,31 @@ function JSDraw(errorHandler,symbolData)
|
|
|
104918
104942
|
|
|
104919
104943
|
if (Array.isArray(condition))
|
|
104920
104944
|
{
|
|
104921
|
-
|
|
104945
|
+
var item=null;
|
|
104946
|
+
if (IFrameSplitOperator.IsNonEmptyArray(condition))
|
|
104947
|
+
item=condition[condition.length-1]; //取最后一个数值
|
|
104948
|
+
|
|
104949
|
+
if (item)
|
|
104922
104950
|
{
|
|
104923
|
-
|
|
104924
|
-
|
|
104925
|
-
|
|
104926
|
-
if (Array.isArray(price)) drawData.Price=price[i];
|
|
104927
|
-
else drawData.Price=price;
|
|
104928
|
-
result.DrawData=drawData;
|
|
104929
|
-
|
|
104930
|
-
break;
|
|
104931
|
-
}
|
|
104951
|
+
if (Array.isArray(price)) drawData.Price=price[condition.length-1];
|
|
104952
|
+
else drawData.Price=price;
|
|
104953
|
+
result.DrawData=drawData;
|
|
104932
104954
|
}
|
|
104933
104955
|
}
|
|
104934
104956
|
else
|
|
104935
104957
|
{
|
|
104936
104958
|
if (condition)
|
|
104937
104959
|
{
|
|
104938
|
-
if (Array.isArray(price))
|
|
104939
|
-
|
|
104960
|
+
if (Array.isArray(price))
|
|
104961
|
+
{
|
|
104962
|
+
var value=null;
|
|
104963
|
+
if (price.length>0) value=price[price.length-1];
|
|
104964
|
+
drawData.Price=value;
|
|
104965
|
+
}
|
|
104966
|
+
else
|
|
104967
|
+
{
|
|
104968
|
+
drawData.Price=price;
|
|
104969
|
+
}
|
|
104940
104970
|
result.DrawData=drawData;
|
|
104941
104971
|
}
|
|
104942
104972
|
}
|
|
@@ -107341,6 +107371,46 @@ function JSSymbolData(ast,option,jsExecute)
|
|
|
107341
107371
|
return result;
|
|
107342
107372
|
}
|
|
107343
107373
|
|
|
107374
|
+
//求真实波幅, (最高-最低),(最高-昨收),(最低-昨收)三者绝对值中的最大值.
|
|
107375
|
+
//用法:
|
|
107376
|
+
//TR,求真实波幅.
|
|
107377
|
+
//例如:ATR:=MA(TR,10);
|
|
107378
|
+
//表示求真实波幅的10周期均值
|
|
107379
|
+
this.GetTRData=function(node)
|
|
107380
|
+
{
|
|
107381
|
+
var result=[];
|
|
107382
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return result;
|
|
107383
|
+
|
|
107384
|
+
let lCount=this.Data.Data.length;
|
|
107385
|
+
for(var i=0 ;i<lCount;++i)
|
|
107386
|
+
{
|
|
107387
|
+
var item=this.Data.Data[i];
|
|
107388
|
+
var max=null;
|
|
107389
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.Low))
|
|
107390
|
+
{
|
|
107391
|
+
var value=Math.abs(item.High-item.Low);
|
|
107392
|
+
if (max==null || max<value) max=value;
|
|
107393
|
+
}
|
|
107394
|
+
|
|
107395
|
+
if (IFrameSplitOperator.IsNumber(item.High) && IFrameSplitOperator.IsNumber(item.YClose))
|
|
107396
|
+
{
|
|
107397
|
+
var value=Math.abs(item.High-item.YClose);
|
|
107398
|
+
if (max==null || max<value) max=value;
|
|
107399
|
+
}
|
|
107400
|
+
|
|
107401
|
+
if (IFrameSplitOperator.IsNumber(item.YClose) && IFrameSplitOperator.IsNumber(item.Low))
|
|
107402
|
+
{
|
|
107403
|
+
var value=Math.abs(item.Low-item.YClose);
|
|
107404
|
+
if (max==null || max<value) max=value;
|
|
107405
|
+
}
|
|
107406
|
+
|
|
107407
|
+
result[i]=max;
|
|
107408
|
+
}
|
|
107409
|
+
|
|
107410
|
+
|
|
107411
|
+
return result;
|
|
107412
|
+
}
|
|
107413
|
+
|
|
107344
107414
|
//融资融券函数
|
|
107345
107415
|
this.GetMarginCacheData=function(id, node)
|
|
107346
107416
|
{
|
|
@@ -110480,7 +110550,10 @@ function JSExecute(ast,option)
|
|
|
110480
110550
|
['DRAWNULL',null],
|
|
110481
110551
|
["NULL",null],
|
|
110482
110552
|
|
|
110483
|
-
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null]
|
|
110553
|
+
["MACHINEDATE",null],["MACHINETIME",null],["MACHINEWEEK",null],
|
|
110554
|
+
|
|
110555
|
+
["TR", null], //真实波幅
|
|
110556
|
+
["AUTOFILTER", null]
|
|
110484
110557
|
|
|
110485
110558
|
]);
|
|
110486
110559
|
|
|
@@ -110648,6 +110721,9 @@ function JSExecute(ast,option)
|
|
|
110648
110721
|
case 'VOLR':
|
|
110649
110722
|
return this.SymbolData.GetVolRateCacheData(node);
|
|
110650
110723
|
|
|
110724
|
+
case "TR": //TR,求真实波幅.
|
|
110725
|
+
return this.SymbolData.GetTRData(node);
|
|
110726
|
+
|
|
110651
110727
|
//大盘数据
|
|
110652
110728
|
case 'INDEXA':
|
|
110653
110729
|
case 'INDEXC':
|
|
@@ -112078,7 +112154,8 @@ function JSExplainer(ast,option)
|
|
|
112078
112154
|
["HYSYL","指数市盈率或个股所属行业的市盈率"],
|
|
112079
112155
|
["HYSJL","指数市净率或个股所属行业的市净率"],
|
|
112080
112156
|
|
|
112081
|
-
['DRAWNULL',"无效数据"]
|
|
112157
|
+
['DRAWNULL',"无效数据"],
|
|
112158
|
+
["TR", "求真实波幅"],
|
|
112082
112159
|
|
|
112083
112160
|
]);
|
|
112084
112161
|
|
|
@@ -112695,6 +112772,15 @@ function JSExplainer(ast,option)
|
|
|
112695
112772
|
else barType="实线空心柱";
|
|
112696
112773
|
return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
|
|
112697
112774
|
|
|
112775
|
+
case "SELL":
|
|
112776
|
+
return "卖出平仓";
|
|
112777
|
+
case "BUY":
|
|
112778
|
+
return "买入开仓";
|
|
112779
|
+
case "SELLSHORT":
|
|
112780
|
+
return "卖出开仓";
|
|
112781
|
+
case "BUYSHORT":
|
|
112782
|
+
return "买入平仓";
|
|
112783
|
+
|
|
112698
112784
|
case "YMOVE":
|
|
112699
112785
|
return;
|
|
112700
112786
|
|
|
@@ -112840,7 +112926,8 @@ function JSExplainer(ast,option)
|
|
|
112840
112926
|
[
|
|
112841
112927
|
"STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF','PLOYLINE',
|
|
112842
112928
|
'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
|
|
112843
|
-
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2"
|
|
112929
|
+
'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2",
|
|
112930
|
+
"BUY","BUYSHORT","SELL","SELLSHORT",
|
|
112844
112931
|
]);
|
|
112845
112932
|
if (setFunctionName.has(name)) return true;
|
|
112846
112933
|
|
|
@@ -113040,10 +113127,21 @@ function JSExplainer(ast,option)
|
|
|
113040
113127
|
return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);
|
|
113041
113128
|
}
|
|
113042
113129
|
|
|
113130
|
+
if (name=="AUTOFILTER") //信号过滤
|
|
113131
|
+
{
|
|
113132
|
+
return this.AUTOFILTER();
|
|
113133
|
+
}
|
|
113134
|
+
|
|
113043
113135
|
this.ThrowUnexpectedNode(node, '变量'+name+'不存在');
|
|
113044
113136
|
return name;
|
|
113045
113137
|
}
|
|
113046
113138
|
|
|
113139
|
+
this.AUTOFILTER=function()
|
|
113140
|
+
{
|
|
113141
|
+
//TODO:过滤信号
|
|
113142
|
+
return null;
|
|
113143
|
+
}
|
|
113144
|
+
|
|
113047
113145
|
this.ThrowUnexpectedNode=function(node,message)
|
|
113048
113146
|
{
|
|
113049
113147
|
let marker=node.Marker;
|
|
@@ -114512,7 +114610,20 @@ function ScriptIndex(name,script,args,option)
|
|
|
114512
114610
|
chart.AryIcon=varItem.Draw.DrawData.Icons;
|
|
114513
114611
|
chart.TradeType=varItem.Draw.DrawType;
|
|
114514
114612
|
|
|
114515
|
-
|
|
114613
|
+
//修改颜色
|
|
114614
|
+
if (varItem.Color && IFrameSplitOperator.IsNonEmptyArray(chart.AryIcon))
|
|
114615
|
+
{
|
|
114616
|
+
for(var i=0;i<chart.AryIcon.length;++i)
|
|
114617
|
+
{
|
|
114618
|
+
var item=chart.AryIcon[i];
|
|
114619
|
+
if (!item || !item.Color) continue;
|
|
114620
|
+
|
|
114621
|
+
item.Color=varItem.Color;
|
|
114622
|
+
}
|
|
114623
|
+
}
|
|
114624
|
+
|
|
114625
|
+
//图片大小
|
|
114626
|
+
if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize*GetDevicePixelRatio(); //图标大小
|
|
114516
114627
|
|
|
114517
114628
|
hqChart.ChartPaint.push(chart);
|
|
114518
114629
|
}
|
|
@@ -130238,7 +130349,7 @@ function HQChartScriptWorker()
|
|
|
130238
130349
|
|
|
130239
130350
|
|
|
130240
130351
|
|
|
130241
|
-
var HQCHART_VERSION="1.1.
|
|
130352
|
+
var HQCHART_VERSION="1.1.12650";
|
|
130242
130353
|
|
|
130243
130354
|
function PrintHQChartVersion()
|
|
130244
130355
|
{
|