hqchart 1.1.12614 → 1.1.12622

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.
@@ -3941,7 +3941,9 @@ FontName:g_JSChartResource.DRAWNUMBER.FontName,YOffset:g_JSChartResource.DRAWNUM
3941
3941
  {if(!this.Text)return;var isHScreen=this.ChartFrame.IsHScreen===true;if(isHScreen){var y=this.ChartBorder.GetRightEx()-this.ChartBorder.GetWidthEx()*this.Position.Y;var x=this.ChartBorder.GetTop()+this.ChartBorder.GetHeight()*this.Position.X;}else{var x=this.ChartBorder.GetLeft()+this.ChartBorder.GetWidth()*this.Position.X;var y=this.ChartBorder.GetTopEx()+this.ChartBorder.GetHeightEx()*this.Position.Y;}this.Canvas.fillStyle=this.Color;if(this.Name=="DRAWTEXT_FIX")this.Canvas.font=this.Font.DRAWTEXT_FIX;else if(this.Name=="DRAWNUMBER_FIX")this.Canvas.font=this.Font.DRAWNUMBER_FIX;//TYPE:0为左对齐,1为右对齐.
3942
3942
  if(this.Position.Type==0)this.Canvas.textAlign='left';else if(this.Position.Type==1)this.Canvas.textAlign='right';else this.Canvas.textAlign='center';if(this.Direction==1)this.Canvas.textBaseline='bottom';else if(this.Direction==2)this.Canvas.textBaseline='top';else this.Canvas.textBaseline='middle';if(Array.isArray(this.Text)){if(!this.Data||!this.Data.Data)return;var xPointCount=this.ChartFrame.XPointCount;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var text=this.Text[i];if(text){this.DrawText(text,x,y,isHScreen);break;}}}else{this.DrawText(this.Text,x,y,isHScreen);}};this.DrawText=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.DrawTextV2=function(text,drawInfo,isHScreen){var textWidth=this.Canvas.measureText(text).width;if(isHScreen){var x=drawInfo.Y;var y=drawInfo.X;if(drawInfo.Text.Align=="right")y=y-textWidth;else if(drawInfo.Text.Align=="center")y=y-textWidth/2;if(drawInfo.Text.Baseline=="top")x-=drawInfo.Font.Height;else if(drawInfo.Text.Baseline=="middle")x-=drawInfo.Font.Height/2;if(this.TextBG&&(this.TextBG.Color||this.TextBG.Border)){var margin=this.TextBG.Margin;//0=上 1=下 2=左 3=右
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
- 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 ChartDrawText(){this.newMethod=IChartPainting;//派生
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
+ 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="bottom";yOffset=-2;}else if(this.TradeType=="SELL"||this.TradeType=="SELLSHORT"){this.Canvas.textBaseline="top";yOffset+2;}var bHScreen=this.ChartFrame.IsHScreen===true;var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var chartright=this.ChartBorder.GetRight();if(bHScreen)chartright=this.ChartBorder.GetBottom();var xPointCount=this.ChartFrame.XPointCount;var border=this.ChartFrame.GetBorder();var xOffset=border.LeftEx+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;this.Canvas.fillText(iconItem.Icon,x,y+yOffset);}};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;//派生
3945
3947
  this.newMethod();delete this.newMethod;this.ClassName='ChartDrawText';//类名
3946
3948
  this.Color="rgb(255,193,37)";//线段颜色
3947
3949
  this.TextFont="14px 微软雅黑";//线段宽度
@@ -10595,10 +10597,16 @@ this.HORLINE=function(condition,data,type,extend){var drawData={Data:[],LineType
10595
10597
  //{ Color:背景色, Border:边框颜色, Margin=[上,下,左, 右] }
10596
10598
  this.BACKGROUND=function(color,borderColor,left,right,top,bottom){var bg={Margin:[0,1,1,1]};if(color)bg.Color=color;if(borderColor)bg.Border=borderColor;if(IFrameSplitOperator.IsNumber(left))bg.Margin[2]=left;if(IFrameSplitOperator.IsNumber(right))bg.Margin[3]=right;if(IFrameSplitOperator.IsNumber(top))bg.Margin[0]=top;if(IFrameSplitOperator.IsNumber(bottom))bg.Margin[1]=bottom;return bg;};//该函数和DRAWTEXT, DRAWICON连用
10597
10599
  //{ color:线段颜色, lineWidth:宽度 lineType:线段样式0=直线 1=虚线}
10598
- this.CKLINE=function(color,lineWidth,lineType,lineDotted){var drawData={Color:color,LineWidth:1,LineType:0,LineDot:[3,3]};if(IFrameSplitOperator.IsPlusNumber(lineWidth))drawData.LineWidth=lineWidth;if(IFrameSplitOperator.IsPlusNumber(lineType))drawData.LineType=lineType;if(lineDotted){var ary=lineDotted.split(',');var dotted=[];for(var i in ary){var item=ary[i];if(!item)continue;var value=parseInt(ary[i]);if(value<=0)continue;dotted.push(value);}if(dotted.length>0)drawData.LineDotted=dotted;}drawData.Data=[];for(var i=0;i<this.SymbolData.Data.Data.length;++i){var item=this.SymbolData.Data.Data[i];drawData.Data[i]={High:item.High,Low:item.Low};}return drawData;};}JSDraw.prototype.CalculateDrawLine=function(lineCache){lineCache.List=[];for(var _i119=lineCache.Start.ID;_i119<=lineCache.End.ID;++_i119){lineCache.List.push(_i119);}var height=Math.abs(lineCache.Start.Value-lineCache.End.Value);var width=lineCache.List.length-1;var result=[];result.push({ID:lineCache.Start.ID,Value:lineCache.Start.Value});//第1个点
10600
+ this.CKLINE=function(color,lineWidth,lineType,lineDotted){var drawData={Color:color,LineWidth:1,LineType:0,LineDot:[3,3]};if(IFrameSplitOperator.IsPlusNumber(lineWidth))drawData.LineWidth=lineWidth;if(IFrameSplitOperator.IsPlusNumber(lineType))drawData.LineType=lineType;if(lineDotted){var ary=lineDotted.split(',');var dotted=[];for(var i in ary){var item=ary[i];if(!item)continue;var value=parseInt(ary[i]);if(value<=0)continue;dotted.push(value);}if(dotted.length>0)drawData.LineDotted=dotted;}drawData.Data=[];for(var i=0;i<this.SymbolData.Data.Data.length;++i){var item=this.SymbolData.Data.Data[i];drawData.Data[i]={High:item.High,Low:item.Low};}return drawData;};//多头建仓(买入开仓).
10601
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
10602
+ //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
10603
+ this.BUY=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUY';return result;};this.BUYSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(0,255,0)",Type:"SVG",Icon:'\uE660'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='BUYSHORT';return result;};//多头平仓(卖出平仓).
10604
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
10605
+ //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
10606
+ this.SELL=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELL';return result;};this.SELLSHORT=function(condition,data,iconSymbol,color){var iconInfo={Color:"rgb(255,0,0)",Type:"SVG",Icon:'\uE661'};if(IFrameSplitOperator.IsString(iconSymbol))iconInfo.Icon=iconSymbol;if(color)iconInfo.Color=color;var result=this.CalculateTradeData(condition,data,iconInfo);result.DrawType='SELLSHORT';return result;};this.CalculateTradeData=function(condition,data,IconInfo){var aryData=[];var aryIcon=[];var result={DrawData:{Data:aryData,Icons:aryIcon}};if(Array.isArray(condition)){var isAryPosition=Array.isArray(data);for(var i=0;i<condition.length;++i){aryData[i]=0;aryIcon[i]=null;if(!condition[i])continue;aryData[i]=1;if(isAryPosition)aryIcon[i]={Value:data[i],Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};else aryIcon[i]={Value:data,Type:IconInfo.Type,Color:IconInfo.Color,Icon:IconInfo.Icon};}}else if(IFrameSplitOperator.IsNumber(condition)&&condition>0){}return result;};}JSDraw.prototype.CalculateDrawLine=function(lineCache){lineCache.List=[];for(var _i119=lineCache.Start.ID;_i119<=lineCache.End.ID;++_i119){lineCache.List.push(_i119);}var height=Math.abs(lineCache.Start.Value-lineCache.End.Value);var width=lineCache.List.length-1;var result=[];result.push({ID:lineCache.Start.ID,Value:lineCache.Start.Value});//第1个点
10599
10607
  if(lineCache.Start.Value>lineCache.End.Value){for(var _i120=1;_i120<lineCache.List.length-1;++_i120){var value=height*(lineCache.List.length-1-_i120)/width+lineCache.End.Value;result.push({ID:lineCache.List[_i120],Value:value});}}else{for(var _i121=1;_i121<lineCache.List.length-1;++_i121){var value=height*_i121/width+lineCache.Start.Value;result.push({ID:lineCache.List[_i121],Value:value});}}result.push({ID:lineCache.End.ID,Value:lineCache.End.Value});//最后一个点
10600
10608
  return result;};//是否有是有效的数字
10601
- JSDraw.prototype.IsNumber=function(value){if(value==null)return false;if(isNaN(value))return false;return true;};JSDraw.prototype.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2","DRAWGBK_DIV","VERTLINE","HORLINE","TIPICON"]);if(setFunctionName.has(name))return true;return false;};JSDraw.prototype.RemoveZero=function(strValue){while(strValue.length>0){var index=strValue.length-1;var ch=strValue[index];if(ch=="0"){strValue=strValue.substr(0,index);}else if(ch=="."){strValue=strValue.substr(0,index);break;}else{break;}}return strValue;};//http://www.newone.com.cn/helpcontroller/index?code=zszy_pc
10609
+ JSDraw.prototype.IsNumber=function(value){if(value==null)return false;if(isNaN(value))return false;return true;};JSDraw.prototype.IsDrawFunction=function(name){var setFunctionName=new _set2.default(["STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",'DRAWOVERLAYLINE',"FILLRGN","FILLRGN2","FILLTOPRGN","FILLBOTTOMRGN","FILLVERTICALRGN","FLOATRGN","DRAWSL","DRAWGBK2","DRAWGBK_DIV","VERTLINE","HORLINE","TIPICON","BUY","SELL","SELLSHORT","BUYSHORT"]);if(setFunctionName.has(name))return true;return false;};JSDraw.prototype.RemoveZero=function(strValue){while(strValue.length>0){var index=strValue.length-1;var ch=strValue[index];if(ch=="0"){strValue=strValue.substr(0,index);}else if(ch=="."){strValue=strValue.substr(0,index);break;}else{break;}}return strValue;};//http://www.newone.com.cn/helpcontroller/index?code=zszy_pc
10602
10610
  var DYNAINFO_ARGUMENT_ID={YCLOSE:3,OPEN:4,HIGH:5,LOW:6,CLOSE:7,VOL:8,AMOUNT:10,AMPLITUDE:13,//振幅
10603
10611
  INCREASE:14,//涨幅
10604
10612
  EXCHANGERATE:37//换手率
@@ -11197,7 +11205,8 @@ this.VisitCallExpression=function(node){var funcName=node.Callee.Name;var args=[
11197
11205
  if(item.Type==Syntax.BinaryExpression||item.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(item);else if(item.Type==Syntax.CallExpression)value=this.VisitCallExpression(item);else value=this.GetNodeValue(item);args.push(value);}if(funcName==="IFC"){//IFC(X,A,B)若X不为0则执行A,否则执行B.IFC与IF函数的区别:根据X的值来选择性执行A、B表达式.
11198
11206
  var bResult=this.Algorithm.IFC(args[0]);var item=bResult?node.Arguments[1]:node.Arguments[2];var value;if(item.Type==Syntax.BinaryExpression||item.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(item);else if(item.Type==Syntax.CallExpression)value=this.VisitCallExpression(item);else value=this.GetNodeValue(item);node.Out=value;if(item.Draw)node.Draw=item.Draw;return node.Out;}//JSConsole.Complier.Log('[JSExecute::VisitCallExpression]' , funcName, '(', args.toString() ,')');
11199
11207
  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;}switch(funcName){case'DYNAINFO'://行情最新数据
11200
- node.Out=this.SymbolData.GetLatestCacheData(args[0]);break;case'STICKLINE':node.Draw=this.Draw.STICKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT':node.Draw=this.Draw.DRAWTEXT(args[0],args[1],args[2]);node.Out=[];break;case'DRAWTEXT_FIX':node.Draw=this.Draw.DRAWTEXT_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'SUPERDRAWTEXT':node.Draw=this.Draw.SUPERDRAWTEXT(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWICON':node.Draw=this.Draw.DRAWICON(args[0],args[1],args[2]);node.Out=[];break;case"ICON":node.Draw=this.Draw.ICON(args[0],args[1]);node.Out=[];break;case"TIPICON":node.Draw=this.Draw.TIPICON(args[0],args[1],args[2],args[3]);node.Out=[];break;case"BACKGROUND":node.Draw=this.Draw.BACKGROUND(args[0],args[1],args[2],args[3],args[4],args[5]);node.Out=[];break;case"CKLINE":node.Draw=this.Draw.CKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWLINE':node.Draw=this.Draw.DRAWLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData;break;case'DRAWBAND':node.Draw=this.Draw.DRAWBAND(args[0],args[1],args[2],args[3]);node.Out=[];break;case"FILLRGN":if(args.length>=4)node.Draw=this.Draw.FILLRGN2(args);else node.Draw=this.Draw.FILLRGN(args[0],args[1],args[2]);node.Out=[];break;case"FLOATRGN":node.Draw=this.Draw.FLOATRGN(args);node.Out=[];break;case"FILLTOPRGN":node.Draw=this.Draw.FILLBGRGN(1,args);node.Out=[];break;case"FILLBOTTOMRGN":node.Draw=this.Draw.FILLBGRGN(0,args);node.Out=[];break;case"FILLVERTICALRGN":node.Draw=this.Draw.FILLVERTICALRGN(args);node.Out=[];break;case'DRAWKLINE':case"DRAWKLINE1":node.Draw=this.Draw.DRAWKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWKLINE_IF':node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWOVERLAYKLINE":node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWCOLORKLINE":node.Draw=this.Draw.DRAWCOLORKLINE(args[0],args[1],args[2]);node.Out=[];break;case'PLOYLINE':case'POLYLINE':node.Draw=this.Draw.POLYLINE(args[0],args[1]);node.Out=node.Draw.DrawData;break;case'DRAWNUMBER':node.Draw=this.Draw.DRAWNUMBER(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Value;break;case"DRAWNUMBER_FIX":node.Draw=this.Draw.DRAWNUMBER_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData.Value;break;case"DRAWCHANNEL":node.Draw=this.Draw.DRAWCHANNEL(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'RGB':node.Out=this.Draw.RGB(args[0],args[1],args[2]);break;case"RGBA":node.Out=this.Draw.RGBA(args[0],args[1],args[2],args[3]);break;case"UPCOLOR":node.Out=this.Draw.UPCOLOR(args[0]);break;case"DOWNCOLOR":node.Out=this.Draw.DOWNCOLOR(args[0]);break;case"XMOVE":node.Out=this.Draw.XMOVE(args[0]);break;case"YMOVE":node.Out=this.Draw.YMOVE(args[0]);break;case'PARTLINE':node.Draw=this.Draw.PARTLINE(args);node.Out=[];break;case'DRAWGBK':node.Draw=this.Draw.DRAWGBK(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWGBK2':node.Draw=this.Draw.DRAWGBK2(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWGBK_DIV":node.Draw=this.Draw.DRAWGBK_DIV(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT_LINE':node.Draw=this.Draw.DRAWTEXT_LINE(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'DRAWRECTREL':node.Draw=this.Draw.DRAWRECTREL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWTEXTREL":node.Draw=this.Draw.DRAWTEXTREL(args[0],args[1],args[2]);node.Out=[];break;case"DRAWTEXTABS":node.Draw=this.Draw.DRAWTEXTABS(args[0],args[1],args[2]);node.Out=[];break;case"DRAWOVERLAYLINE":node.Draw=this.Draw.DRAWOVERLAYLINE(args[0],args[1],args[2]);node.Out=node.Draw.DrawData.Data;break;case"DRAWSL":node.Draw=this.Draw.DRAWSL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"VERTLINE":node.Draw=this.Draw.VERTLINE(args[0],args[1]);node.Out=node.Draw.DrawData.Data;break;case"HORLINE":node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case'CODELIKE':node.Out=this.SymbolData.CODELIKE(args[0]);break;case'NAMELIKE':case"NAMEINCLUDE":node.Out=this.SymbolData.NAMELIKE(args[1]);break;case'REFDATE':node.Out=this.SymbolData.REFDATE(args[0],args[1]);break;case'FINANCE':node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINONE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"GPJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"SCJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"MARGIN":node.Out=this.SymbolData.GetMarginCacheData(args[0],node);break;case"HK2SHSZ":node.Out=this.SymbolData.GetHKToSHSZCacheData(args[0],node);break;case"NEWS":node.Out=this.SymbolData.GetNewsAnalysisCacheData(args[0],node);break;case'UPCOUNT':case'DOWNCOUNT':node.Out=this.SymbolData.GetIndexIncreaseCacheData(funcName,args[0],node);break;case'SF':node.Out=this.SymbolData.GetSectionFinanceCacheData(args[0],args[1],args[2],node);break;case'LOADAPIDATA':node.Out=this.SymbolData.GetCustomApiData(args);break;case"STKINDI":case"CALCSTOCKINDEX":node.Out=this.SymbolData.GetScriptIndexOutData(args,node,funcName);break;case"SOUND":node.Draw=this.Draw.SOUND(args[0]);node.Out=[];break;case"PLAYSOUND":node.Draw=this.Draw.PLAYSOUND(args[0],args[1]);node.Out=[];break;case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':node.Out=this.SymbolData.GetOtherSymolCacheData({FunctionName:funcName,Args:args});break;case"INBLOCK":node.Out=this.SymbolData.IsInBlock(args[0],node);break;case'COVER_C':case'COVER_O':case'COVER_H':case'COVER_L':case'COVER_A':case'COVER_V':if(args.length==2)return this.SymbolData.GetSymbolPeriodCacheData2(JSComplierHelper.GetConvertValueName(funcName),args[0],args[1]);return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);case"SYSPARAM":return this.SymbolData.SysParam(args[0],this);case"TESTSKIP":var bExit=this.Algorithm.TESTSKIP(args[0],node);node.Out=null;if(bExit){this.Interrupt.Exit=true;if(node&&node.Marker){var marker=node.Marker;this.Interrupt.Line=marker.Line;this.Interrupt.Index=marker.Index;this.Interrupt.Column=marker.Column;}}break;default:node.Out=this.Algorithm.CallFunction(funcName,args,node,this.SymbolData);break;}return node.Out;};//赋值
11208
+ node.Out=this.SymbolData.GetLatestCacheData(args[0]);break;case'STICKLINE':node.Draw=this.Draw.STICKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT':node.Draw=this.Draw.DRAWTEXT(args[0],args[1],args[2]);node.Out=[];break;case'DRAWTEXT_FIX':node.Draw=this.Draw.DRAWTEXT_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'SUPERDRAWTEXT':node.Draw=this.Draw.SUPERDRAWTEXT(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWICON':node.Draw=this.Draw.DRAWICON(args[0],args[1],args[2]);node.Out=[];break;case"ICON":node.Draw=this.Draw.ICON(args[0],args[1]);node.Out=[];break;case"TIPICON":node.Draw=this.Draw.TIPICON(args[0],args[1],args[2],args[3]);node.Out=[];break;case"BACKGROUND":node.Draw=this.Draw.BACKGROUND(args[0],args[1],args[2],args[3],args[4],args[5]);node.Out=[];break;case"CKLINE":node.Draw=this.Draw.CKLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWLINE':node.Draw=this.Draw.DRAWLINE(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData;break;case'DRAWBAND':node.Draw=this.Draw.DRAWBAND(args[0],args[1],args[2],args[3]);node.Out=[];break;case"FILLRGN":if(args.length>=4)node.Draw=this.Draw.FILLRGN2(args);else node.Draw=this.Draw.FILLRGN(args[0],args[1],args[2]);node.Out=[];break;case"FLOATRGN":node.Draw=this.Draw.FLOATRGN(args);node.Out=[];break;case"FILLTOPRGN":node.Draw=this.Draw.FILLBGRGN(1,args);node.Out=[];break;case"FILLBOTTOMRGN":node.Draw=this.Draw.FILLBGRGN(0,args);node.Out=[];break;case"FILLVERTICALRGN":node.Draw=this.Draw.FILLVERTICALRGN(args);node.Out=[];break;case'DRAWKLINE':case"DRAWKLINE1":node.Draw=this.Draw.DRAWKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWKLINE_IF':node.Draw=this.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWOVERLAYKLINE":node.Draw=this.Draw.DRAWOVERLAYKLINE(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWCOLORKLINE":node.Draw=this.Draw.DRAWCOLORKLINE(args[0],args[1],args[2]);node.Out=[];break;case'PLOYLINE':case'POLYLINE':node.Draw=this.Draw.POLYLINE(args[0],args[1]);node.Out=node.Draw.DrawData;break;case'DRAWNUMBER':node.Draw=this.Draw.DRAWNUMBER(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Value;break;case"DRAWNUMBER_FIX":node.Draw=this.Draw.DRAWNUMBER_FIX(args[0],args[1],args[2],args[3],args[4]);node.Out=node.Draw.DrawData.Value;break;case"DRAWCHANNEL":node.Draw=this.Draw.DRAWCHANNEL(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'RGB':node.Out=this.Draw.RGB(args[0],args[1],args[2]);break;case"RGBA":node.Out=this.Draw.RGBA(args[0],args[1],args[2],args[3]);break;case"UPCOLOR":node.Out=this.Draw.UPCOLOR(args[0]);break;case"DOWNCOLOR":node.Out=this.Draw.DOWNCOLOR(args[0]);break;case"XMOVE":node.Out=this.Draw.XMOVE(args[0]);break;case"YMOVE":node.Out=this.Draw.YMOVE(args[0]);break;case'PARTLINE':node.Draw=this.Draw.PARTLINE(args);node.Out=[];break;case'DRAWGBK':node.Draw=this.Draw.DRAWGBK(args[0],args[1],args[2],args[3]);node.Out=[];break;case'DRAWGBK2':node.Draw=this.Draw.DRAWGBK2(args[0],args[1],args[2],args[3]);node.Out=[];break;case"DRAWGBK_DIV":node.Draw=this.Draw.DRAWGBK_DIV(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case'DRAWTEXT_LINE':node.Draw=this.Draw.DRAWTEXT_LINE(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);node.Out=[];break;case'DRAWRECTREL':node.Draw=this.Draw.DRAWRECTREL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"DRAWTEXTREL":node.Draw=this.Draw.DRAWTEXTREL(args[0],args[1],args[2]);node.Out=[];break;case"DRAWTEXTABS":node.Draw=this.Draw.DRAWTEXTABS(args[0],args[1],args[2]);node.Out=[];break;case"DRAWOVERLAYLINE":node.Draw=this.Draw.DRAWOVERLAYLINE(args[0],args[1],args[2]);node.Out=node.Draw.DrawData.Data;break;case"DRAWSL":node.Draw=this.Draw.DRAWSL(args[0],args[1],args[2],args[3],args[4]);node.Out=[];break;case"VERTLINE":node.Draw=this.Draw.VERTLINE(args[0],args[1]);node.Out=node.Draw.DrawData.Data;break;case"HORLINE":node.Draw=this.Draw.HORLINE(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case'CODELIKE':node.Out=this.SymbolData.CODELIKE(args[0]);break;case'NAMELIKE':case"NAMEINCLUDE":node.Out=this.SymbolData.NAMELIKE(args[1]);break;case'REFDATE':node.Out=this.SymbolData.REFDATE(args[0],args[1]);break;case'FINANCE':node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:1,Node:node});break;case"FINONE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"GPJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"SCJYVALUE":node.Out=this.SymbolData.GetStockCacheData({FunctionName:funcName,Args:args,ArgCount:3,Node:node});break;case"MARGIN":node.Out=this.SymbolData.GetMarginCacheData(args[0],node);break;case"HK2SHSZ":node.Out=this.SymbolData.GetHKToSHSZCacheData(args[0],node);break;case"NEWS":node.Out=this.SymbolData.GetNewsAnalysisCacheData(args[0],node);break;case'UPCOUNT':case'DOWNCOUNT':node.Out=this.SymbolData.GetIndexIncreaseCacheData(funcName,args[0],node);break;case'SF':node.Out=this.SymbolData.GetSectionFinanceCacheData(args[0],args[1],args[2],node);break;case'LOADAPIDATA':node.Out=this.SymbolData.GetCustomApiData(args);break;case"STKINDI":case"CALCSTOCKINDEX":node.Out=this.SymbolData.GetScriptIndexOutData(args,node,funcName);break;case"SOUND":node.Draw=this.Draw.SOUND(args[0]);node.Out=[];break;case"PLAYSOUND":node.Draw=this.Draw.PLAYSOUND(args[0],args[1]);node.Out=[];break;case'CLOSE':case'C':case'VOL':case'V':case'OPEN':case'O':case'HIGH':case'H':case'LOW':case'L':case'AMOUNT':case'AMO':node.Out=this.SymbolData.GetOtherSymolCacheData({FunctionName:funcName,Args:args});break;case"INBLOCK":node.Out=this.SymbolData.IsInBlock(args[0],node);break;case'COVER_C':case'COVER_O':case'COVER_H':case'COVER_L':case'COVER_A':case'COVER_V':if(args.length==2)return this.SymbolData.GetSymbolPeriodCacheData2(JSComplierHelper.GetConvertValueName(funcName),args[0],args[1]);return this.SymbolData.GetSymbolPeriodCacheData(JSComplierHelper.GetConvertValueName(funcName),args[0]);case"SYSPARAM":return this.SymbolData.SysParam(args[0],this);case"TESTSKIP":var bExit=this.Algorithm.TESTSKIP(args[0],node);node.Out=null;if(bExit){this.Interrupt.Exit=true;if(node&&node.Marker){var marker=node.Marker;this.Interrupt.Line=marker.Line;this.Interrupt.Index=marker.Index;this.Interrupt.Column=marker.Column;}}break;//交易函数
11209
+ case"BUY":node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"SELL":node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"SELLSHORT":node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;case"BUYSHORT":node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);node.Out=node.Draw.DrawData.Data;break;default:node.Out=this.Algorithm.CallFunction(funcName,args,node,this.SymbolData);break;}return node.Out;};//赋值
11201
11210
  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,drawValue=null;if(right.Type==Syntax.BinaryExpression||right.Type==Syntax.LogicalExpression)value=this.VisitBinaryExpression(right);else if(right.Type==Syntax.CallExpression){value=this.VisitCallExpression(right);if(right.Draw)drawValue=right.Draw;}else if(right.Type==Syntax.Literal){value=right.Value;if(IFrameSplitOperator.IsString(value)&&right.Value.indexOf("$")>0)value=this.SymbolData.GetOtherSymolCacheData({Literal:value});}else if(right.Type==Syntax.Identifier)//右值是变量
11202
11211
  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=this.Algorithm.Subtract(0,tempValue);}else{value=right.Argument.Value;}}if(JS_EXECUTE_DEBUG_LOG)JSConsole.Complier.Log('[JSExecute::VisitAssignmentExpression]',varName,' = ',value);if(drawValue)this.VarDrawTable.set(varName,drawValue);this.VarTable.set(varName,value);};//逻辑运算
11203
11212
  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)//只遍历操作符就可以
@@ -11394,7 +11403,8 @@ if(varItem.LineWidth){var width=parseInt(varItem.LineWidth.replace("LINETHICK","
11394
11403
  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;//虚线
11395
11404
  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);//给一个空的标题
11396
11405
  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);//标题
11397
- titleData.DataType="MULTI_POINT_LINE";hqChart.TitlePaint[titleIndex].Data[id]=titleData;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;//赋值坐标
11406
+ 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;if(varItem.DrawFontSize>0)chart.SVG.Size=varItem.DrawFontSize;//图标大小
11407
+ 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;//赋值坐标
11398
11408
  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);
11399
11409
  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';//临时用下吧
11400
11410
  var titleIndex=windowIndex+1;chartText.DrawData=varItem.Draw.DrawData;//hqChart.TitlePaint[titleIndex].Data[id]=new DynamicTitleData(bar.Data,varItem.Name,bar.Color);
@@ -11436,7 +11446,7 @@ if(this.YSplitScale)hqChart.Frame.SubFrame[windowIndex].Frame.YSplitScale=this.Y
11436
11446
  }
11437
11447
  */for(var _i150 in this.OutVar){var _item32=this.OutVar[_i150];if(_item32.IsExData===true)continue;//扩展数据不显示图形
11438
11448
  if(_item32.Type==1000||_item32.Type==1001)continue;//数据集合, 字符串
11439
- if(_item32.Type==0){if(_item32.IsOverlayLine)this.CreateOverlayLine(hqChart,windowIndex,_item32,_i150,_item32.Type);else this.CreateLine(hqChart,windowIndex,_item32,_i150,_item32.Type);}else if(_item32.Type==1){switch(_item32.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item32,_i150);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item32,_i150);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item32,_i150);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item32,_i150);break;case"FILLRGN":this.CreateFillRGN(hqChart,windowIndex,_item32,_i150);break;case"FILLRGN2":this.CreateFillRGN2(hqChart,windowIndex,_item32,_i150);break;case"FILLTOPRGN":case"FILLBOTTOMRGN":case"FILLVERTICALRGN":this.CreateFillBGRGN(hqChart,windowIndex,_item32,_i150);break;case"FLOATRGN":this.CreateFLOATRGN(hqChart,windowIndex,_item32,_i150);break;case'DRAWKLINE':case"DRAWKLINE1":this.CreateKLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWOVERLAYKLINE":this.CreateOverlayKLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWCOLORKLINE":this.CreateDrawColorKLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item32,_i150);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWGBK':case"DRAWGBK2":this.CreateBackgroud(hqChart,windowIndex,_item32,_i150);break;case"DRAWGBK_DIV":this.CreateBackgroundDiv(hqChart,windowIndex,_item32,_i150);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWNUMBER':this.CreateDrawNumber(hqChart,windowIndex,_item32,_i150);break;case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item32,_i150);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item32,_i150);break;case"ICON":this.CreateIcon(hqChart,windowIndex,_item32,_i150);break;case"TIPICON":this.CreateTipIcon(hqChart,windowIndex,_item32,_i150);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item32,_i150);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWRECTREL':this.CreateRectangle(hqChart,windowIndex,_item32,_i150);break;case"DRAWTEXTABS":case"DRAWTEXTREL":this.CreateDrawText(hqChart,windowIndex,_item32,_i150);break;case"DRAWOVERLAYLINE":this.CreateScriptOverlayLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWSL":this.CreateChartSlopeLine(hqChart,windowIndex,_item32,_i150);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item32,_i150);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item32,_i150);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item32,_i150);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item32,_i150);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item32,_i150);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item32,_i150);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item32,_i150);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item32,_i150);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item32,_i150);break;case"COLOR_KLINE":this.CreateColorKLine(hqChart,windowIndex,_item32,_i150);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item32,_i150);break;case"MULTI_POINT_LINE":this.CreateLineMultiData(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.KLINE_TABLE:this.CreateKLineTable(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.SCATTER_PLOT:this.CreateScatterPlot(hqChart,windowIndex,_item32,_i150);break;default:{var find=g_ScriptIndexChartFactory.Get(_item32.Draw.DrawType);//外部挂接
11449
+ if(_item32.Type==0){if(_item32.IsOverlayLine)this.CreateOverlayLine(hqChart,windowIndex,_item32,_i150,_item32.Type);else this.CreateLine(hqChart,windowIndex,_item32,_i150,_item32.Type);}else if(_item32.Type==1){switch(_item32.Draw.DrawType){case'STICKLINE':this.CreateBar(hqChart,windowIndex,_item32,_i150);break;case'DRAWTEXT':this.CreateDrawTextV2(hqChart,windowIndex,_item32,_i150);break;case'SUPERDRAWTEXT':this.CreateText(hqChart,windowIndex,_item32,_i150);break;case'DRAWLINE':this.CreateStraightLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWBAND':this.CreateBand(hqChart,windowIndex,_item32,_i150);break;case"FILLRGN":this.CreateFillRGN(hqChart,windowIndex,_item32,_i150);break;case"FILLRGN2":this.CreateFillRGN2(hqChart,windowIndex,_item32,_i150);break;case"FILLTOPRGN":case"FILLBOTTOMRGN":case"FILLVERTICALRGN":this.CreateFillBGRGN(hqChart,windowIndex,_item32,_i150);break;case"FLOATRGN":this.CreateFLOATRGN(hqChart,windowIndex,_item32,_i150);break;case'DRAWKLINE':case"DRAWKLINE1":this.CreateKLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWOVERLAYKLINE":this.CreateOverlayKLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWCOLORKLINE":this.CreateDrawColorKLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWKLINE_IF':this.CreateKLine(hqChart,windowIndex,_item32,_i150);break;case'POLYLINE':this.CreatePolyLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWGBK':case"DRAWGBK2":this.CreateBackgroud(hqChart,windowIndex,_item32,_i150);break;case"DRAWGBK_DIV":this.CreateBackgroundDiv(hqChart,windowIndex,_item32,_i150);break;case'DRAWTEXT_LINE':this.CreateTextLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWNUMBER':this.CreateDrawNumber(hqChart,windowIndex,_item32,_i150);break;case"DRAWNUMBER_FIX":case'DRAWTEXT_FIX':this.CreateNumberText(hqChart,windowIndex,_item32,_i150);break;case'DRAWICON':this.CreateIcon(hqChart,windowIndex,_item32,_i150);break;case"ICON":this.CreateIcon(hqChart,windowIndex,_item32,_i150);break;case"TIPICON":this.CreateTipIcon(hqChart,windowIndex,_item32,_i150);break;case'DRAWCHANNEL':this.CreateChannel(hqChart,windowIndex,_item32,_i150);break;case'PARTLINE':this.CreatePartLine(hqChart,windowIndex,_item32,_i150);break;case'DRAWRECTREL':this.CreateRectangle(hqChart,windowIndex,_item32,_i150);break;case"DRAWTEXTABS":case"DRAWTEXTREL":this.CreateDrawText(hqChart,windowIndex,_item32,_i150);break;case"DRAWOVERLAYLINE":this.CreateScriptOverlayLine(hqChart,windowIndex,_item32,_i150);break;case"DRAWSL":this.CreateChartSlopeLine(hqChart,windowIndex,_item32,_i150);break;case"VERTLINE":this.CreateChartVericaltLine(hqChart,windowIndex,_item32,_i150);break;case"HORLINE":this.CreateChartHorizontalLine(hqChart,windowIndex,_item32,_i150);break;case'MULTI_LINE':this.CreateMultiLine(hqChart,windowIndex,_item32,_i150);break;case"MULTI_POINT":this.CreateMultiPoint(hqChart,windowIndex,_item32,_i150);break;case'MULTI_BAR':this.CreateMultiBar(hqChart,windowIndex,_item32,_i150);break;case'MULTI_TEXT':this.CreateMultiText(hqChart,windowIndex,_item32,_i150);break;case'MULTI_SVGICON':this.CreateMultiSVGIcon(hqChart,windowIndex,_item32,_i150);break;case"DRAWSVG":this.CreateChartDrawSVG(hqChart,windowIndex,_item32,_i150);break;case"MULTI_HTMLDOM":this.CreateMulitHtmlDom(hqChart,windowIndex,_item32,_i150);break;case"COLOR_KLINE":this.CreateColorKLine(hqChart,windowIndex,_item32,_i150);break;case"KLINE_BG":this.CreateBackgroud(hqChart,windowIndex,_item32,_i150);break;case"MULTI_POINT_LINE":this.CreateLineMultiData(hqChart,windowIndex,_item32,_i150);break;case"BUY":case"SELL":case"SELLSHORT":case"BUYSHORT":this.CreateTradeIcon(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.OVERLAY_BARS:this.CreateStackedBar(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.KLINE_TABLE:this.CreateKLineTable(hqChart,windowIndex,_item32,_i150);break;case SCRIPT_CHART_NAME.SCATTER_PLOT:this.CreateScatterPlot(hqChart,windowIndex,_item32,_i150);break;default:{var find=g_ScriptIndexChartFactory.Get(_item32.Draw.DrawType);//外部挂接
11440
11450
  if(find&&find.CreateChartCallback)find.CreateChartCallback(hqChart,windowIndex,_item32,_i150,this);}break;}}else if(_item32.Type==2){this.CreateMACD(hqChart,windowIndex,_item32,_i150);}else if(_item32.Type==3){this.CreatePointDot(hqChart,windowIndex,_item32,_i150,hisData);}else if(_item32.Type==4){this.CreateLineStick(hqChart,windowIndex,_item32,_i150);}else if(_item32.Type==5){this.CreateStick(hqChart,windowIndex,_item32,_i150);}else if(_item32.Type==6){this.CreateVolStick(hqChart,windowIndex,_item32,_i150,hisData);}else if(_item32.Type==7){this.CreateLine(hqChart,windowIndex,_item32,_i150,_item32.Type);}else if(_item32.Type==8){this.CreateLine(hqChart,windowIndex,_item32,_i150,_item32.Type);}else if(_item32.Type==9){this.CreateArea(hqChart,windowIndex,_item32,_i150);}var titlePaint=hqChart.TitlePaint[windowIndex+1];if(titlePaint&&titlePaint.Data&&_i150<titlePaint.Data.length)//设置标题数值 小数位数和格式
11441
11451
  {if(this.StringFormat>0)titlePaint.Data[_i150].StringFormat=this.StringFormat;if(this.FloatPrecision>=0)titlePaint.Data[_i150].FloatPrecision=this.FloatPrecision;if(this.OutName&&this.OutName.length>0&&this.Arguments&&this.Arguments.length>0){titlePaint.SetDynamicTitle(this.OutName,this.Arguments);}}}var titleIndex=windowIndex+1;hqChart.TitlePaint[titleIndex].Title=this.Name;hqChart.TitlePaint[titleIndex].Identify=this.Guid;//指标ID
11442
11452
  hqChart.TitlePaint[titleIndex].ArgumentsText=null;hqChart.TitlePaint[titleIndex].Script=this;if(!this.IsShortTitle){var indexParam='';for(var _i151=0;_i151<this.Arguments.length;++_i151){var _item33=this.Arguments[_i151];if(indexParam.length>0)indexParam+=',';indexParam+=_item33.Value.toString();}if(indexParam.length>0)hqChart.TitlePaint[titleIndex].ArgumentsText='('+indexParam+')';}if(this.TitleFont)hqChart.TitlePaint[titleIndex].Font=this.TitleFont;return true;};//给一个默认的颜色
@@ -12724,7 +12734,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
12724
12734
  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);};}/********************************************************************************
12725
12735
  * 版本信息输出
12726
12736
  *
12727
- */var HQCHART_VERSION="1.1.12613";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();//把给外界调用的方法暴露出来
12737
+ */var HQCHART_VERSION="1.1.12621";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();//把给外界调用的方法暴露出来
12728
12738
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
12729
12739
  // BaseIndex:BaseIndex,
12730
12740
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "hqchart",
3
3
  "description": "stock chart",
4
4
  "author": "jones2000",
5
- "version": "1.1.12614",
5
+ "version": "1.1.12622",
6
6
  "main": "lib/main.js",
7
7
  "private": false,
8
8
  "license": "Apache License 2.0",
@@ -11056,6 +11056,82 @@ function JSDraw(errorHandler,symbolData)
11056
11056
 
11057
11057
  return drawData;
11058
11058
  }
11059
+
11060
+
11061
+ //多头建仓(买入开仓).
11062
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
11063
+ //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
11064
+ this.BUY=function(condition, data, iconSymbol, color)
11065
+ {
11066
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
11067
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
11068
+ if (color) iconInfo.Color=color;
11069
+ var result=this.CalculateTradeData(condition, data, iconInfo);
11070
+ result.DrawType='BUY';
11071
+ return result;
11072
+ }
11073
+
11074
+ this.BUYSHORT=function(condition, data, iconSymbol, color)
11075
+ {
11076
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
11077
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
11078
+ if (color) iconInfo.Color=color;
11079
+ var result=this.CalculateTradeData(condition, data, iconInfo);
11080
+ result.DrawType='BUYSHORT';
11081
+ return result;
11082
+ }
11083
+
11084
+ //多头平仓(卖出平仓).
11085
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
11086
+ //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
11087
+ this.SELL=function(condition, data, iconSymbol,color)
11088
+ {
11089
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
11090
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
11091
+ if (color) iconInfo.Color=color;
11092
+ var result=this.CalculateTradeData(condition, data, iconInfo);
11093
+ result.DrawType='SELL';
11094
+ return result;
11095
+ }
11096
+
11097
+ this.SELLSHORT=function(condition, data, iconSymbol,color)
11098
+ {
11099
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
11100
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
11101
+ if (color) iconInfo.Color=color;
11102
+ var result=this.CalculateTradeData(condition, data, iconInfo);
11103
+ result.DrawType='SELLSHORT';
11104
+ return result;
11105
+ }
11106
+
11107
+ this.CalculateTradeData=function(condition, data, IconInfo)
11108
+ {
11109
+ var aryData=[];
11110
+ var aryIcon=[];
11111
+ var result={ DrawData:{ Data:aryData, Icons:aryIcon } };
11112
+
11113
+ if (Array.isArray(condition))
11114
+ {
11115
+ var isAryPosition=Array.isArray(data);
11116
+ for(var i=0;i<condition.length;++i)
11117
+ {
11118
+ aryData[i]=0;
11119
+ aryIcon[i]=null
11120
+ if (!condition[i]) continue;
11121
+
11122
+ aryData[i]=1;
11123
+
11124
+ if (isAryPosition) aryIcon[i]={ Value:data[i], Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
11125
+ else aryIcon[i]={ Value:data, Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
11126
+ }
11127
+ }
11128
+ else if (IFrameSplitOperator.IsNumber(condition) && condition>0)
11129
+ {
11130
+
11131
+ }
11132
+
11133
+ return result;
11134
+ }
11059
11135
  }
11060
11136
 
11061
11137
 
@@ -11108,7 +11184,8 @@ JSDraw.prototype.IsDrawFunction=function(name)
11108
11184
  "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
11109
11185
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
11110
11186
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
11111
- "VERTLINE","HORLINE","TIPICON"
11187
+ "VERTLINE","HORLINE","TIPICON",
11188
+ "BUY","SELL","SELLSHORT","BUYSHORT",
11112
11189
  ]);
11113
11190
  if (setFunctionName.has(name)) return true;
11114
11191
 
@@ -17582,6 +17659,24 @@ function JSExecute(ast,option)
17582
17659
  }
17583
17660
  break;
17584
17661
 
17662
+ //交易函数
17663
+ case "BUY":
17664
+ node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);
17665
+ node.Out=node.Draw.DrawData.Data;
17666
+ break;
17667
+ case "SELL":
17668
+ node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);
17669
+ node.Out=node.Draw.DrawData.Data;
17670
+ break;
17671
+ case "SELLSHORT":
17672
+ node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);
17673
+ node.Out=node.Draw.DrawData.Data;
17674
+ break;
17675
+ case "BUYSHORT":
17676
+ node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);
17677
+ node.Out=node.Draw.DrawData.Data;
17678
+ break;
17679
+
17585
17680
  default:
17586
17681
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
17587
17682
  break;
@@ -20244,6 +20339,23 @@ function ScriptIndex(name,script,args,option)
20244
20339
  hqChart.ChartPaint.push(chart);
20245
20340
  }
20246
20341
 
20342
+ this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
20343
+ {
20344
+ var chart=new ChartTradeIcon();
20345
+ chart.Canvas=hqChart.Canvas;
20346
+ chart.Name=varItem.Name;
20347
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
20348
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
20349
+
20350
+ chart.Data.Data=varItem.Draw.DrawData.Data;
20351
+ chart.AryIcon=varItem.Draw.DrawData.Icons;
20352
+ chart.TradeType=varItem.Draw.DrawType;
20353
+
20354
+ if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize; //图标大小
20355
+
20356
+ hqChart.ChartPaint.push(chart);
20357
+ }
20358
+
20247
20359
  this.CreateTextLine=function(hqChart,windowIndex,varItem,id)
20248
20360
  {
20249
20361
  let chart=new ChartTextLine();
@@ -20969,6 +21081,13 @@ function ScriptIndex(name,script,args,option)
20969
21081
  case "MULTI_POINT_LINE":
20970
21082
  this.CreateLineMultiData(hqChart,windowIndex,item,i);
20971
21083
  break;
21084
+ case "BUY":
21085
+ case "SELL":
21086
+ case "SELLSHORT":
21087
+ case "BUYSHORT":
21088
+ this.CreateTradeIcon(hqChart,windowIndex,item,i);
21089
+ break;
21090
+
20972
21091
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
20973
21092
  this.CreateStackedBar(hqChart,windowIndex,item,i);
20974
21093
  break;
@@ -30520,6 +30520,108 @@ function ChartSingleText()
30520
30520
  }
30521
30521
 
30522
30522
 
30523
+ function ChartTradeIcon()
30524
+ {
30525
+ this.newMethod=IChartPainting; //派生
30526
+ this.newMethod();
30527
+ delete this.newMethod;
30528
+
30529
+ this.ClassName='ChartTradeIcon'; //类名
30530
+ this.TextAlign='center';
30531
+ this.TextBaseline='middle';
30532
+ this.SVG={ Family:"iconfont", Size:12 };
30533
+ this.AryIcon;
30534
+
30535
+ this.Draw=function()
30536
+ {
30537
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
30538
+ if (this.IsShowIndexTitleOnly()) return;
30539
+ if (this.IsHideScriptIndex()) return;
30540
+
30541
+ if(!this.Data || !this.Data.Data) return;
30542
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
30543
+
30544
+ this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
30545
+ this.Canvas.textAlign=this.TextAlign;
30546
+ this.Canvas.textBaseline='middle';
30547
+ var yOffset=0;
30548
+ if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
30549
+ {
30550
+ this.Canvas.textBaseline="bottom";
30551
+ yOffset=-2;
30552
+ }
30553
+ else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
30554
+ {
30555
+ this.Canvas.textBaseline="top";
30556
+ yOffset+2;
30557
+ }
30558
+
30559
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
30560
+ var dataWidth=this.ChartFrame.DataWidth;
30561
+ var distanceWidth=this.ChartFrame.DistanceWidth;
30562
+ var chartright=this.ChartBorder.GetRight();
30563
+ if (bHScreen) chartright=this.ChartBorder.GetBottom();
30564
+ var xPointCount=this.ChartFrame.XPointCount;
30565
+ var border=this.ChartFrame.GetBorder();
30566
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
30567
+
30568
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
30569
+ {
30570
+ var value=this.Data.Data[i];
30571
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
30572
+ if (value<=0) continue;
30573
+
30574
+ var iconItem=this.AryIcon[i];
30575
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
30576
+
30577
+ var left=xOffset;
30578
+ var right=xOffset+dataWidth;
30579
+ if (right>chartright) break;
30580
+
30581
+
30582
+ var x=left+(right-left)/2;
30583
+ var y=this.GetYFromData(iconItem.Value, false);
30584
+
30585
+ this.Canvas.fillStyle=iconItem.Color;
30586
+ this.Canvas.fillText(iconItem.Icon,x,y+yOffset);
30587
+ }
30588
+ }
30589
+
30590
+ this.GetMaxMin=function()
30591
+ {
30592
+ var range={Max:null, Min:null };
30593
+ if(!this.Data || !this.Data.Data) return range;
30594
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return range;
30595
+
30596
+ var xPointCount=this.ChartFrame.XPointCount;
30597
+ var start=this.Data.DataOffset;
30598
+ if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange)
30599
+ {
30600
+ start=0;
30601
+ xPointCount=this.Data.Data.length;
30602
+ }
30603
+
30604
+ for(var i=start,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
30605
+ {
30606
+ var value=this.Data.Data[i];
30607
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
30608
+ if (value<=0) continue;
30609
+
30610
+ var iconItem=this.AryIcon[i];
30611
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
30612
+
30613
+ if (range.Max==null) range.Max=iconItem.Value;
30614
+ else if (range.Max<iconItem.Value) range.Max=iconItem.Value;
30615
+
30616
+ if (range.Min==null) range.Min=iconItem.Value;
30617
+ else if (range.Min>iconItem.Value) range.Min=iconItem.Value;
30618
+ }
30619
+
30620
+ return range;
30621
+ }
30622
+ }
30623
+
30624
+
30523
30625
  function ChartDrawText()
30524
30626
  {
30525
30627
  this.newMethod=IChartPainting; //派生
@@ -78,7 +78,14 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
78
78
  'VARP':FUNCTION_NAME,'NDAY':FUNCTION_NAME,'UPNDAY':FUNCTION_NAME,'DOWNNDAY':FUNCTION_NAME,'LONGCROSS':FUNCTION_NAME,'EXISTR':FUNCTION_NAME,
79
79
  'RELATE':FUNCTION_NAME,'COVAR':FUNCTION_NAME,'HHVBARS':FUNCTION_NAME,'LLVBARS':FUNCTION_NAME,'BETA':FUNCTION_NAME,
80
80
  'DRAWKLINE_IF':FUNCTION_NAME,'BACKSET':FUNCTION_NAME,'SARTURN':FUNCTION_NAME,'SAR':FUNCTION_NAME,'REVERSE':FUNCTION_NAME,'SUMBARS':FUNCTION_NAME,
81
- 'MEMA':FUNCTION_NAME,'WMA':FUNCTION_NAME,"STRLEN":FUNCTION_NAME,
81
+ 'MEMA':FUNCTION_NAME,'WMA':FUNCTION_NAME,"STRLEN":FUNCTION_NAME,"TMA":FUNCTION_NAME,"HV":FUNCTION_NAME,"HOD":FUNCTION_NAME,"LV":FUNCTION_NAME,
82
+ "VALUEWHEN":FUNCTION_NAME,"TESTSKIP":FUNCTION_NAME,"IFC":FUNCTION_NAME,"IFN":FUNCTION_NAME,"RGB":FUNCTION_NAME,"RGBX":FUNCTION_NAME,
83
+ "SYSPARAM":FUNCTION_NAME,"CALCSTOCKINDEX":FUNCTION_NAME,"STKINDI":FUNCTION_NAME,"RGBA":FUNCTION_NAME,
84
+
85
+ "ISUP":DATA_NAME,"ISEQUAL":DATA_NAME,"ISDOWN":DATA_NAME,
86
+
87
+ "XMOVE":FUNCTION_NAME,"YMOVE":FUNCTION_NAME,"UPCOLOR":FUNCTION_NAME,"DOWNCOLOR":FUNCTION_NAME,
88
+ "STRFORMAT":FUNCTION_NAME,
82
89
 
83
90
  //动态行情函数
84
91
  "DYNAINFO":FUNCTION_NAME,
@@ -93,16 +100,20 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
93
100
  'NEWS':FUNCTION_NAME,
94
101
 
95
102
  //日期类
96
- 'DATE':DATA_NAME,'MONTH':DATA_NAME,'YEAR':DATA_NAME,
103
+ 'DATE':DATA_NAME,'MONTH':DATA_NAME,'YEAR':DATA_NAME,"PERIOD":DATA_NAME,'TIME':DATA_NAME,'TIME2':DATA_NAME, "WEEKDAY":DATA_NAME,
104
+ "WEEKOFYEAR":DATA_NAME,"MACHINEDATE":DATA_NAME,"MACHINETIME":DATA_NAME,"MACHINEWEEK":DATA_NAME,"DAYSTOTODAY":DATA_NAME,
105
+ "FROMOPEN":DATA_NAME,"TOTALFZNUM":DATA_NAME,
106
+ "DATETODAY":FUNCTION_NAME,"DAYTODATE":FUNCTION_NAME,"TIMETOSEC":FUNCTION_NAME,"SECTOTIME":FUNCTION_NAME,
97
107
 
98
108
  //绘图函数
99
109
  'DRAWTEXT':FUNCTION_NAME,'STICKLINE':FUNCTION_NAME,'DRAWBAND':FUNCTION_NAME,'DRAWKLINE':FUNCTION_NAME,
100
110
  'PLOYLINE':FUNCTION_NAME,'POLYLINE':FUNCTION_NAME,'DRAWNUMBER':FUNCTION_NAME,'DRAWICON':FUNCTION_NAME,'SUPERDRAWTEXT':FUNCTION_NAME,
111
+
101
112
 
102
113
  //个股行情数据
103
114
  "CLOSE":DATA_NAME, "C":DATA_NAME,"VOL":DATA_NAME, "V":DATA_NAME,
104
115
  "OPEN":DATA_NAME, "O":DATA_NAME, "HIGH":DATA_NAME, "H":DATA_NAME, "LOW":DATA_NAME,"L":DATA_NAME,"AMOUNT":DATA_NAME,
105
- "CURRBARSCOUNT":DATA_NAME,
116
+ "CURRBARSCOUNT":DATA_NAME, "VOLINSTK":DATA_NAME, "ZSTJJ":DATA_NAME, "OPI":DATA_NAME,
106
117
 
107
118
  //大盘数据
108
119
  "INDEXA":DATA_NAME,"INDEXC":DATA_NAME,"INDEXH":DATA_NAME,"INDEXL":DATA_NAME,"INDEXO":DATA_NAME,"INDEXV":DATA_NAME,'INDEXADV':DATA_NAME,'INDEXDEC':DATA_NAME,
@@ -112,7 +123,17 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
112
123
  'LINETHICK1':LINE_WIDTH_NAME,'LINETHICK2':LINE_WIDTH_NAME,'LINETHICK3':LINE_WIDTH_NAME,'LINETHICK4':LINE_WIDTH_NAME,'LINETHICK5':LINE_WIDTH_NAME,
113
124
  'LINETHICK6':LINE_WIDTH_NAME,'LINETHICK7':LINE_WIDTH_NAME,'LINETHICK8':LINE_WIDTH_NAME,'LINETHICK9':LINE_WIDTH_NAME,'LINETHICK10':LINE_WIDTH_NAME,
114
125
 
126
+ //字体大小
127
+ "FONTSIZE10":LINE_WIDTH_NAME,"FONTSIZE11":LINE_WIDTH_NAME,"FONTSIZE12":LINE_WIDTH_NAME,"FONTSIZE4":LINE_WIDTH_NAME,"FONTSIZE15":LINE_WIDTH_NAME,
128
+ "FONTSIZE16":LINE_WIDTH_NAME,"FONTSIZE17":LINE_WIDTH_NAME,"FONTSIZE18":LINE_WIDTH_NAME,"FONTSIZE9":LINE_WIDTH_NAME,"FONTSIZE20":LINE_WIDTH_NAME,
129
+ "FONTSIZE21":LINE_WIDTH_NAME,"FONTSIZE22":LINE_WIDTH_NAME,"FONTSIZE23":LINE_WIDTH_NAME,"FONTSIZE24":LINE_WIDTH_NAME,"FONTSIZE25":LINE_WIDTH_NAME,
130
+
131
+ "VALIGN0":LINE_WIDTH_NAME,"VALIGN1":LINE_WIDTH_NAME,"VALIGN2":LINE_WIDTH_NAME,
132
+
115
133
  'COLORSTICK':DRAW_NAME,'CIRCLEDOT':DRAW_NAME,'POINTDOT':DRAW_NAME,'LINESTICK':DRAW_NAME,'STICK':DRAW_NAME,'NODRAW':DRAW_NAME,
134
+ "LINEAREA":DRAW_NAME,
135
+
136
+ "BUY":DRAW_NAME,"SELL":DRAW_NAME,"SELLSHORT":DRAW_NAME,"BUYSHORT":DRAW_NAME,"TIPICON":DRAW_NAME,
116
137
 
117
138
  //颜色
118
139
  'COLORYELLOW':COLORYELLOW,'COLORBLACK':COLORBLACK,'COLORBLUE':COLORBLUE,'COLORGREEN':COLORGREEN,'COLORCYAN':COLORCYAN,'COLORRED':COLORRED,
@@ -34600,6 +34600,108 @@ function ChartSingleText()
34600
34600
  }
34601
34601
 
34602
34602
 
34603
+ function ChartTradeIcon()
34604
+ {
34605
+ this.newMethod=IChartPainting; //派生
34606
+ this.newMethod();
34607
+ delete this.newMethod;
34608
+
34609
+ this.ClassName='ChartTradeIcon'; //类名
34610
+ this.TextAlign='center';
34611
+ this.TextBaseline='middle';
34612
+ this.SVG={ Family:"iconfont", Size:12 };
34613
+ this.AryIcon;
34614
+
34615
+ this.Draw=function()
34616
+ {
34617
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
34618
+ if (this.IsShowIndexTitleOnly()) return;
34619
+ if (this.IsHideScriptIndex()) return;
34620
+
34621
+ if(!this.Data || !this.Data.Data) return;
34622
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
34623
+
34624
+ this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
34625
+ this.Canvas.textAlign=this.TextAlign;
34626
+ this.Canvas.textBaseline='middle';
34627
+ var yOffset=0;
34628
+ if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
34629
+ {
34630
+ this.Canvas.textBaseline="bottom";
34631
+ yOffset=-2;
34632
+ }
34633
+ else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
34634
+ {
34635
+ this.Canvas.textBaseline="top";
34636
+ yOffset+2;
34637
+ }
34638
+
34639
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
34640
+ var dataWidth=this.ChartFrame.DataWidth;
34641
+ var distanceWidth=this.ChartFrame.DistanceWidth;
34642
+ var chartright=this.ChartBorder.GetRight();
34643
+ if (bHScreen) chartright=this.ChartBorder.GetBottom();
34644
+ var xPointCount=this.ChartFrame.XPointCount;
34645
+ var border=this.ChartFrame.GetBorder();
34646
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
34647
+
34648
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
34649
+ {
34650
+ var value=this.Data.Data[i];
34651
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
34652
+ if (value<=0) continue;
34653
+
34654
+ var iconItem=this.AryIcon[i];
34655
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
34656
+
34657
+ var left=xOffset;
34658
+ var right=xOffset+dataWidth;
34659
+ if (right>chartright) break;
34660
+
34661
+
34662
+ var x=left+(right-left)/2;
34663
+ var y=this.GetYFromData(iconItem.Value, false);
34664
+
34665
+ this.Canvas.fillStyle=iconItem.Color;
34666
+ this.Canvas.fillText(iconItem.Icon,x,y+yOffset);
34667
+ }
34668
+ }
34669
+
34670
+ this.GetMaxMin=function()
34671
+ {
34672
+ var range={Max:null, Min:null };
34673
+ if(!this.Data || !this.Data.Data) return range;
34674
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return range;
34675
+
34676
+ var xPointCount=this.ChartFrame.XPointCount;
34677
+ var start=this.Data.DataOffset;
34678
+ if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange)
34679
+ {
34680
+ start=0;
34681
+ xPointCount=this.Data.Data.length;
34682
+ }
34683
+
34684
+ for(var i=start,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
34685
+ {
34686
+ var value=this.Data.Data[i];
34687
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
34688
+ if (value<=0) continue;
34689
+
34690
+ var iconItem=this.AryIcon[i];
34691
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
34692
+
34693
+ if (range.Max==null) range.Max=iconItem.Value;
34694
+ else if (range.Max<iconItem.Value) range.Max=iconItem.Value;
34695
+
34696
+ if (range.Min==null) range.Min=iconItem.Value;
34697
+ else if (range.Min>iconItem.Value) range.Min=iconItem.Value;
34698
+ }
34699
+
34700
+ return range;
34701
+ }
34702
+ }
34703
+
34704
+
34603
34705
  function ChartDrawText()
34604
34706
  {
34605
34707
  this.newMethod=IChartPainting; //派生
@@ -104886,6 +104988,82 @@ function JSDraw(errorHandler,symbolData)
104886
104988
 
104887
104989
  return drawData;
104888
104990
  }
104991
+
104992
+
104993
+ //多头建仓(买入开仓).
104994
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
104995
+ //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
104996
+ this.BUY=function(condition, data, iconSymbol, color)
104997
+ {
104998
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
104999
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105000
+ if (color) iconInfo.Color=color;
105001
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105002
+ result.DrawType='BUY';
105003
+ return result;
105004
+ }
105005
+
105006
+ this.BUYSHORT=function(condition, data, iconSymbol, color)
105007
+ {
105008
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
105009
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105010
+ if (color) iconInfo.Color=color;
105011
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105012
+ result.DrawType='BUYSHORT';
105013
+ return result;
105014
+ }
105015
+
105016
+ //多头平仓(卖出平仓).
105017
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
105018
+ //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
105019
+ this.SELL=function(condition, data, iconSymbol,color)
105020
+ {
105021
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105022
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105023
+ if (color) iconInfo.Color=color;
105024
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105025
+ result.DrawType='SELL';
105026
+ return result;
105027
+ }
105028
+
105029
+ this.SELLSHORT=function(condition, data, iconSymbol,color)
105030
+ {
105031
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105032
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105033
+ if (color) iconInfo.Color=color;
105034
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105035
+ result.DrawType='SELLSHORT';
105036
+ return result;
105037
+ }
105038
+
105039
+ this.CalculateTradeData=function(condition, data, IconInfo)
105040
+ {
105041
+ var aryData=[];
105042
+ var aryIcon=[];
105043
+ var result={ DrawData:{ Data:aryData, Icons:aryIcon } };
105044
+
105045
+ if (Array.isArray(condition))
105046
+ {
105047
+ var isAryPosition=Array.isArray(data);
105048
+ for(var i=0;i<condition.length;++i)
105049
+ {
105050
+ aryData[i]=0;
105051
+ aryIcon[i]=null
105052
+ if (!condition[i]) continue;
105053
+
105054
+ aryData[i]=1;
105055
+
105056
+ if (isAryPosition) aryIcon[i]={ Value:data[i], Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105057
+ else aryIcon[i]={ Value:data, Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105058
+ }
105059
+ }
105060
+ else if (IFrameSplitOperator.IsNumber(condition) && condition>0)
105061
+ {
105062
+
105063
+ }
105064
+
105065
+ return result;
105066
+ }
104889
105067
  }
104890
105068
 
104891
105069
 
@@ -104938,7 +105116,8 @@ JSDraw.prototype.IsDrawFunction=function(name)
104938
105116
  "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
104939
105117
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
104940
105118
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
104941
- "VERTLINE","HORLINE","TIPICON"
105119
+ "VERTLINE","HORLINE","TIPICON",
105120
+ "BUY","SELL","SELLSHORT","BUYSHORT",
104942
105121
  ]);
104943
105122
  if (setFunctionName.has(name)) return true;
104944
105123
 
@@ -111412,6 +111591,24 @@ function JSExecute(ast,option)
111412
111591
  }
111413
111592
  break;
111414
111593
 
111594
+ //交易函数
111595
+ case "BUY":
111596
+ node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);
111597
+ node.Out=node.Draw.DrawData.Data;
111598
+ break;
111599
+ case "SELL":
111600
+ node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);
111601
+ node.Out=node.Draw.DrawData.Data;
111602
+ break;
111603
+ case "SELLSHORT":
111604
+ node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);
111605
+ node.Out=node.Draw.DrawData.Data;
111606
+ break;
111607
+ case "BUYSHORT":
111608
+ node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);
111609
+ node.Out=node.Draw.DrawData.Data;
111610
+ break;
111611
+
111415
111612
  default:
111416
111613
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
111417
111614
  break;
@@ -114074,6 +114271,23 @@ function ScriptIndex(name,script,args,option)
114074
114271
  hqChart.ChartPaint.push(chart);
114075
114272
  }
114076
114273
 
114274
+ this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
114275
+ {
114276
+ var chart=new ChartTradeIcon();
114277
+ chart.Canvas=hqChart.Canvas;
114278
+ chart.Name=varItem.Name;
114279
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
114280
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
114281
+
114282
+ chart.Data.Data=varItem.Draw.DrawData.Data;
114283
+ chart.AryIcon=varItem.Draw.DrawData.Icons;
114284
+ chart.TradeType=varItem.Draw.DrawType;
114285
+
114286
+ if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize; //图标大小
114287
+
114288
+ hqChart.ChartPaint.push(chart);
114289
+ }
114290
+
114077
114291
  this.CreateTextLine=function(hqChart,windowIndex,varItem,id)
114078
114292
  {
114079
114293
  let chart=new ChartTextLine();
@@ -114799,6 +115013,13 @@ function ScriptIndex(name,script,args,option)
114799
115013
  case "MULTI_POINT_LINE":
114800
115014
  this.CreateLineMultiData(hqChart,windowIndex,item,i);
114801
115015
  break;
115016
+ case "BUY":
115017
+ case "SELL":
115018
+ case "SELLSHORT":
115019
+ case "BUYSHORT":
115020
+ this.CreateTradeIcon(hqChart,windowIndex,item,i);
115021
+ break;
115022
+
114802
115023
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
114803
115024
  this.CreateStackedBar(hqChart,windowIndex,item,i);
114804
115025
  break;
@@ -129660,7 +129881,7 @@ function ScrollBarBGChart()
129660
129881
 
129661
129882
 
129662
129883
 
129663
- var HQCHART_VERSION="1.1.12613";
129884
+ var HQCHART_VERSION="1.1.12621";
129664
129885
 
129665
129886
  function PrintHQChartVersion()
129666
129887
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.12613";
8
+ var HQCHART_VERSION="1.1.12621";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {
@@ -34644,6 +34644,108 @@ function ChartSingleText()
34644
34644
  }
34645
34645
 
34646
34646
 
34647
+ function ChartTradeIcon()
34648
+ {
34649
+ this.newMethod=IChartPainting; //派生
34650
+ this.newMethod();
34651
+ delete this.newMethod;
34652
+
34653
+ this.ClassName='ChartTradeIcon'; //类名
34654
+ this.TextAlign='center';
34655
+ this.TextBaseline='middle';
34656
+ this.SVG={ Family:"iconfont", Size:12 };
34657
+ this.AryIcon;
34658
+
34659
+ this.Draw=function()
34660
+ {
34661
+ if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
34662
+ if (this.IsShowIndexTitleOnly()) return;
34663
+ if (this.IsHideScriptIndex()) return;
34664
+
34665
+ if(!this.Data || !this.Data.Data) return;
34666
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return;
34667
+
34668
+ this.Canvas.font=`${this.SVG.Size}px ${this.SVG.Family}`;
34669
+ this.Canvas.textAlign=this.TextAlign;
34670
+ this.Canvas.textBaseline='middle';
34671
+ var yOffset=0;
34672
+ if (this.TradeType=="BUY" || this.TradeType=="BUYSHORT")
34673
+ {
34674
+ this.Canvas.textBaseline="bottom";
34675
+ yOffset=-2;
34676
+ }
34677
+ else if (this.TradeType=="SELL" || this.TradeType=="SELLSHORT")
34678
+ {
34679
+ this.Canvas.textBaseline="top";
34680
+ yOffset+2;
34681
+ }
34682
+
34683
+ var bHScreen=(this.ChartFrame.IsHScreen===true);
34684
+ var dataWidth=this.ChartFrame.DataWidth;
34685
+ var distanceWidth=this.ChartFrame.DistanceWidth;
34686
+ var chartright=this.ChartBorder.GetRight();
34687
+ if (bHScreen) chartright=this.ChartBorder.GetBottom();
34688
+ var xPointCount=this.ChartFrame.XPointCount;
34689
+ var border=this.ChartFrame.GetBorder();
34690
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
34691
+
34692
+ for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
34693
+ {
34694
+ var value=this.Data.Data[i];
34695
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
34696
+ if (value<=0) continue;
34697
+
34698
+ var iconItem=this.AryIcon[i];
34699
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
34700
+
34701
+ var left=xOffset;
34702
+ var right=xOffset+dataWidth;
34703
+ if (right>chartright) break;
34704
+
34705
+
34706
+ var x=left+(right-left)/2;
34707
+ var y=this.GetYFromData(iconItem.Value, false);
34708
+
34709
+ this.Canvas.fillStyle=iconItem.Color;
34710
+ this.Canvas.fillText(iconItem.Icon,x,y+yOffset);
34711
+ }
34712
+ }
34713
+
34714
+ this.GetMaxMin=function()
34715
+ {
34716
+ var range={Max:null, Min:null };
34717
+ if(!this.Data || !this.Data.Data) return range;
34718
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIcon)) return range;
34719
+
34720
+ var xPointCount=this.ChartFrame.XPointCount;
34721
+ var start=this.Data.DataOffset;
34722
+ if (this.ChartFrame.GlobalOption && this.ChartFrame.GlobalOption.IsValueFullRange)
34723
+ {
34724
+ start=0;
34725
+ xPointCount=this.Data.Data.length;
34726
+ }
34727
+
34728
+ for(var i=start,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
34729
+ {
34730
+ var value=this.Data.Data[i];
34731
+ if (!IFrameSplitOperator.IsNumber(value)) continue;
34732
+ if (value<=0) continue;
34733
+
34734
+ var iconItem=this.AryIcon[i];
34735
+ if (!IFrameSplitOperator.IsNumber(iconItem.Value) || !iconItem.Icon) continue;
34736
+
34737
+ if (range.Max==null) range.Max=iconItem.Value;
34738
+ else if (range.Max<iconItem.Value) range.Max=iconItem.Value;
34739
+
34740
+ if (range.Min==null) range.Min=iconItem.Value;
34741
+ else if (range.Min>iconItem.Value) range.Min=iconItem.Value;
34742
+ }
34743
+
34744
+ return range;
34745
+ }
34746
+ }
34747
+
34748
+
34647
34749
  function ChartDrawText()
34648
34750
  {
34649
34751
  this.newMethod=IChartPainting; //派生
@@ -104930,6 +105032,82 @@ function JSDraw(errorHandler,symbolData)
104930
105032
 
104931
105033
  return drawData;
104932
105034
  }
105035
+
105036
+
105037
+ //多头建仓(买入开仓).
105038
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
105039
+ //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
105040
+ this.BUY=function(condition, data, iconSymbol, color)
105041
+ {
105042
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
105043
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105044
+ if (color) iconInfo.Color=color;
105045
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105046
+ result.DrawType='BUY';
105047
+ return result;
105048
+ }
105049
+
105050
+ this.BUYSHORT=function(condition, data, iconSymbol, color)
105051
+ {
105052
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
105053
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105054
+ if (color) iconInfo.Color=color;
105055
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105056
+ result.DrawType='BUYSHORT';
105057
+ return result;
105058
+ }
105059
+
105060
+ //多头平仓(卖出平仓).
105061
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
105062
+ //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
105063
+ this.SELL=function(condition, data, iconSymbol,color)
105064
+ {
105065
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105066
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105067
+ if (color) iconInfo.Color=color;
105068
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105069
+ result.DrawType='SELL';
105070
+ return result;
105071
+ }
105072
+
105073
+ this.SELLSHORT=function(condition, data, iconSymbol,color)
105074
+ {
105075
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105076
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105077
+ if (color) iconInfo.Color=color;
105078
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105079
+ result.DrawType='SELLSHORT';
105080
+ return result;
105081
+ }
105082
+
105083
+ this.CalculateTradeData=function(condition, data, IconInfo)
105084
+ {
105085
+ var aryData=[];
105086
+ var aryIcon=[];
105087
+ var result={ DrawData:{ Data:aryData, Icons:aryIcon } };
105088
+
105089
+ if (Array.isArray(condition))
105090
+ {
105091
+ var isAryPosition=Array.isArray(data);
105092
+ for(var i=0;i<condition.length;++i)
105093
+ {
105094
+ aryData[i]=0;
105095
+ aryIcon[i]=null
105096
+ if (!condition[i]) continue;
105097
+
105098
+ aryData[i]=1;
105099
+
105100
+ if (isAryPosition) aryIcon[i]={ Value:data[i], Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105101
+ else aryIcon[i]={ Value:data, Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105102
+ }
105103
+ }
105104
+ else if (IFrameSplitOperator.IsNumber(condition) && condition>0)
105105
+ {
105106
+
105107
+ }
105108
+
105109
+ return result;
105110
+ }
104933
105111
  }
104934
105112
 
104935
105113
 
@@ -104982,7 +105160,8 @@ JSDraw.prototype.IsDrawFunction=function(name)
104982
105160
  "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
104983
105161
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
104984
105162
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
104985
- "VERTLINE","HORLINE","TIPICON"
105163
+ "VERTLINE","HORLINE","TIPICON",
105164
+ "BUY","SELL","SELLSHORT","BUYSHORT",
104986
105165
  ]);
104987
105166
  if (setFunctionName.has(name)) return true;
104988
105167
 
@@ -111456,6 +111635,24 @@ function JSExecute(ast,option)
111456
111635
  }
111457
111636
  break;
111458
111637
 
111638
+ //交易函数
111639
+ case "BUY":
111640
+ node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);
111641
+ node.Out=node.Draw.DrawData.Data;
111642
+ break;
111643
+ case "SELL":
111644
+ node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);
111645
+ node.Out=node.Draw.DrawData.Data;
111646
+ break;
111647
+ case "SELLSHORT":
111648
+ node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);
111649
+ node.Out=node.Draw.DrawData.Data;
111650
+ break;
111651
+ case "BUYSHORT":
111652
+ node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);
111653
+ node.Out=node.Draw.DrawData.Data;
111654
+ break;
111655
+
111459
111656
  default:
111460
111657
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
111461
111658
  break;
@@ -114118,6 +114315,23 @@ function ScriptIndex(name,script,args,option)
114118
114315
  hqChart.ChartPaint.push(chart);
114119
114316
  }
114120
114317
 
114318
+ this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
114319
+ {
114320
+ var chart=new ChartTradeIcon();
114321
+ chart.Canvas=hqChart.Canvas;
114322
+ chart.Name=varItem.Name;
114323
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
114324
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
114325
+
114326
+ chart.Data.Data=varItem.Draw.DrawData.Data;
114327
+ chart.AryIcon=varItem.Draw.DrawData.Icons;
114328
+ chart.TradeType=varItem.Draw.DrawType;
114329
+
114330
+ if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize; //图标大小
114331
+
114332
+ hqChart.ChartPaint.push(chart);
114333
+ }
114334
+
114121
114335
  this.CreateTextLine=function(hqChart,windowIndex,varItem,id)
114122
114336
  {
114123
114337
  let chart=new ChartTextLine();
@@ -114843,6 +115057,13 @@ function ScriptIndex(name,script,args,option)
114843
115057
  case "MULTI_POINT_LINE":
114844
115058
  this.CreateLineMultiData(hqChart,windowIndex,item,i);
114845
115059
  break;
115060
+ case "BUY":
115061
+ case "SELL":
115062
+ case "SELLSHORT":
115063
+ case "BUYSHORT":
115064
+ this.CreateTradeIcon(hqChart,windowIndex,item,i);
115065
+ break;
115066
+
114846
115067
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
114847
115068
  this.CreateStackedBar(hqChart,windowIndex,item,i);
114848
115069
  break;
@@ -129818,7 +130039,7 @@ function HQChartScriptWorker()
129818
130039
 
129819
130040
 
129820
130041
 
129821
- var HQCHART_VERSION="1.1.12613";
130042
+ var HQCHART_VERSION="1.1.12621";
129822
130043
 
129823
130044
  function PrintHQChartVersion()
129824
130045
  {