hqchart 1.1.12614 → 1.1.12627

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.
@@ -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; //派生
@@ -55311,7 +55413,7 @@ function IChartDrawPicture()
55311
55413
  //xStep,yStep 移动的偏移量
55312
55414
  this.Move=function(xStep,yStep)
55313
55415
  {
55314
- if (this.Status!=20) return fasle;
55416
+ if (this.Status!=20) return false;
55315
55417
  if (!this.Frame) return false;
55316
55418
  var data=this.Frame.Data;
55317
55419
  if (!data) return false;
@@ -58736,7 +58838,7 @@ function ChartDrawPictureParallelChannel()
58736
58838
  //xStep,yStep 移动的偏移量
58737
58839
  this.Move=function(xStep,yStep)
58738
58840
  {
58739
- if (this.Status!=20) return fasle;
58841
+ if (this.Status!=20) return false;
58740
58842
  if (!this.Frame) return false;
58741
58843
  var data=this.Frame.Data;
58742
58844
  if (!data) return false;
@@ -78175,34 +78277,55 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
78175
78277
  this.RequestData();
78176
78278
  }
78177
78279
 
78178
- //叠加股票
78280
+ //叠加股票 symbol支持数据 ["600000.sh", "0000001.sz"]
78179
78281
  this.OverlaySymbol=function(symbol,option)
78180
78282
  {
78181
- for(var i=0; i<this.OverlayChartPaint.length; ++i)
78283
+ var arySymbol=null;
78284
+ if (IFrameSplitOperator.IsString(symbol)) arySymbol=[symbol];
78285
+ else if (Array.isArray(symbol)) arySymbol=symbol;
78286
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return false;
78287
+
78288
+ var aryNewSymbol=[];
78289
+ for(var i=0, j=0;i<arySymbol.length;++i)
78182
78290
  {
78183
- var item=this.OverlayChartPaint[i];
78184
- if (item.Symbol==symbol)
78291
+ var strSymbol=arySymbol[i];
78292
+ var bFind=false;
78293
+ for(j=0;j<this.OverlayChartPaint.length; ++j)
78185
78294
  {
78186
- console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${symbol} exist.`);
78187
- return false;
78295
+ var item=this.OverlayChartPaint[j];
78296
+ if (item.Symbol==strSymbol)
78297
+ {
78298
+ bFind=true;
78299
+ console.warn(`[MinuteChartContainer::OverlaySymbol] overlay symbol=${strSymbol} exist.`);
78300
+ break;
78301
+ }
78188
78302
  }
78303
+
78304
+ if (!bFind) aryNewSymbol.push(strSymbol);
78189
78305
  }
78190
78306
 
78191
- var paint=new ChartOverlayMinutePriceLine();
78192
- paint.Canvas=this.Canvas;
78193
- paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78194
- paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78195
- paint.Name="Overlay-Minute";
78196
- paint.Symbol=symbol;
78197
- paint.Identify=`Overlay-Minute-${symbol}`;
78198
- if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78199
- else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78200
- ++g_JSChartResource.OverlaySymbol.Random;
78201
- paint.MainData=this.SourceData; //绑定主图数据
78307
+ if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return true;
78202
78308
 
78203
- if (paint.SetOption) paint.SetOption(option);
78309
+ for(var i=0;i<aryNewSymbol.length;++i)
78310
+ {
78311
+ var strSymbol=aryNewSymbol[i];
78204
78312
 
78205
- this.OverlayChartPaint.push(paint);
78313
+ var paint=new ChartOverlayMinutePriceLine();
78314
+ paint.Canvas=this.Canvas;
78315
+ paint.ChartBorder=this.Frame.SubFrame[0].Frame.ChartBorder;
78316
+ paint.ChartFrame=this.Frame.SubFrame[0].Frame;
78317
+ paint.Name="Overlay-Minute";
78318
+ paint.Symbol=strSymbol;
78319
+ paint.Identify=`Overlay-Minute-${strSymbol}`;
78320
+ if (option && option.Color) paint.Color=option.Color; //外部设置颜色
78321
+ else paint.Color=g_JSChartResource.OverlaySymbol.Color[g_JSChartResource.OverlaySymbol.Random%g_JSChartResource.OverlaySymbol.Color.length];
78322
+ ++g_JSChartResource.OverlaySymbol.Random;
78323
+ paint.MainData=this.SourceData; //绑定主图数据
78324
+
78325
+ if (paint.SetOption) paint.SetOption(option);
78326
+
78327
+ this.OverlayChartPaint.push(paint);
78328
+ }
78206
78329
 
78207
78330
  if (this.DayCount<=1) this.RequestOverlayMinuteData(); //请求数据
78208
78331
  else this.RequestOverlayHistoryMinuteData();
@@ -102485,10 +102608,10 @@ function JSAlgorithm(errorHandler,symbolData)
102485
102608
  }
102486
102609
 
102487
102610
 
102488
- //格式化字符串 "{0}-{1}", C, O;
102611
+ //格式化字符串 "{0}-{1}", C, O; 小数位数 {0:0.00}
102489
102612
  this.STRFORMAT=function(strFormat,args,node)
102490
102613
  {
102491
- var aryParam=strFormat.match(/{\d+}/g);
102614
+ var aryParam=strFormat.match(/{[0-9.:]+}/g);
102492
102615
 
102493
102616
  if (!IFrameSplitOperator.IsNonEmptyArray(aryParam)) return null;
102494
102617
 
@@ -102500,9 +102623,47 @@ function JSAlgorithm(errorHandler,symbolData)
102500
102623
  if (item.length<3) continue;
102501
102624
 
102502
102625
  var value=item.slice(1, item.length-1);
102503
- var index=parseInt(value);
102626
+ var index=-1,decimal=-1;
102627
+ if (value.indexOf(":")>0)
102628
+ {
102629
+ var aryTemp=value.split(":");
102630
+ if (aryTemp)
102631
+ {
102632
+ if (aryTemp[0])
102633
+ index=parseInt(aryTemp[0]);
102504
102634
 
102505
- var paramItem={ Src:item, Index:index, Text:null};
102635
+ if (aryTemp[1])
102636
+ {
102637
+ if (aryTemp[1].indexOf(".")>=0)
102638
+ {
102639
+ var zeroCount=0;
102640
+ var strTemp=aryTemp[1];
102641
+ for(var j=strTemp.length-1; j>=0; --j)
102642
+ {
102643
+ if (strTemp[j]=="0") ++zeroCount;
102644
+ else break;
102645
+ }
102646
+
102647
+ if (zeroCount>0) decimal=zeroCount;
102648
+ }
102649
+ else if (aryTemp[1]=="0")
102650
+ {
102651
+ decimal=0;
102652
+ }
102653
+ }
102654
+
102655
+ }
102656
+
102657
+ }
102658
+ else
102659
+ {
102660
+ index=parseInt(value);
102661
+ }
102662
+
102663
+ if (index<0) continue;
102664
+
102665
+ var paramItem={ Src:item, Index:index, Text:null, Decimal:null };
102666
+ if (decimal>=0) paramItem.Decimal=decimal;
102506
102667
 
102507
102668
  if (maxIndex<index) maxIndex=index;
102508
102669
 
@@ -102539,7 +102700,13 @@ function JSAlgorithm(errorHandler,symbolData)
102539
102700
  if (Array.isArray(paramItem))
102540
102701
  {
102541
102702
  var value=paramItem[i];
102542
- if (value) text=`${value}`;
102703
+ if (value)
102704
+ {
102705
+ if (IFrameSplitOperator.IsNumber(paramInfo.Decimal))
102706
+ text=`${value.toFixed(paramInfo.Decimal)}`;
102707
+ else
102708
+ text=`${value}`;
102709
+ }
102543
102710
  }
102544
102711
  else
102545
102712
  {
@@ -104930,6 +105097,82 @@ function JSDraw(errorHandler,symbolData)
104930
105097
 
104931
105098
  return drawData;
104932
105099
  }
105100
+
105101
+
105102
+ //多头建仓(买入开仓).
105103
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
105104
+ //例如: BUY(CROSS(A,B),LOW),当A上穿B时,在LOW处画标记,同时突出提示或直接下单,如果LOW改为DRAWNULL,就不画标记.(分时图上不支持)
105105
+ this.BUY=function(condition, data, iconSymbol, color)
105106
+ {
105107
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
105108
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105109
+ if (color) iconInfo.Color=color;
105110
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105111
+ result.DrawType='BUY';
105112
+ return result;
105113
+ }
105114
+
105115
+ this.BUYSHORT=function(condition, data, iconSymbol, color)
105116
+ {
105117
+ var iconInfo={ Color:"rgb(0,255,0)", Type:"SVG", Icon:'\ue660' };
105118
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105119
+ if (color) iconInfo.Color=color;
105120
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105121
+ result.DrawType='BUYSHORT';
105122
+ return result;
105123
+ }
105124
+
105125
+ //多头平仓(卖出平仓).
105126
+ //参数1为触发条件,参数2为标记放置位置.此函数只适用于特定版本交易模式下.
105127
+ //例如: SELL(CROSS(A,B),HIGH),当A上穿B时,在HIGH处画标记,同时突出提示或直接下单,如果HIGH改为DRAWNULL,就不画标记.(分时图上不支持)
105128
+ this.SELL=function(condition, data, iconSymbol,color)
105129
+ {
105130
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105131
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105132
+ if (color) iconInfo.Color=color;
105133
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105134
+ result.DrawType='SELL';
105135
+ return result;
105136
+ }
105137
+
105138
+ this.SELLSHORT=function(condition, data, iconSymbol,color)
105139
+ {
105140
+ var iconInfo={ Color:"rgb(255,0,0)", Type:"SVG", Icon:'\ue661' };
105141
+ if (IFrameSplitOperator.IsString(iconSymbol)) iconInfo.Icon=iconSymbol;
105142
+ if (color) iconInfo.Color=color;
105143
+ var result=this.CalculateTradeData(condition, data, iconInfo);
105144
+ result.DrawType='SELLSHORT';
105145
+ return result;
105146
+ }
105147
+
105148
+ this.CalculateTradeData=function(condition, data, IconInfo)
105149
+ {
105150
+ var aryData=[];
105151
+ var aryIcon=[];
105152
+ var result={ DrawData:{ Data:aryData, Icons:aryIcon } };
105153
+
105154
+ if (Array.isArray(condition))
105155
+ {
105156
+ var isAryPosition=Array.isArray(data);
105157
+ for(var i=0;i<condition.length;++i)
105158
+ {
105159
+ aryData[i]=0;
105160
+ aryIcon[i]=null
105161
+ if (!condition[i]) continue;
105162
+
105163
+ aryData[i]=1;
105164
+
105165
+ if (isAryPosition) aryIcon[i]={ Value:data[i], Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105166
+ else aryIcon[i]={ Value:data, Type:IconInfo.Type, Color:IconInfo.Color, Icon:IconInfo.Icon };
105167
+ }
105168
+ }
105169
+ else if (IFrameSplitOperator.IsNumber(condition) && condition>0)
105170
+ {
105171
+
105172
+ }
105173
+
105174
+ return result;
105175
+ }
104933
105176
  }
104934
105177
 
104935
105178
 
@@ -104982,7 +105225,8 @@ JSDraw.prototype.IsDrawFunction=function(name)
104982
105225
  "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE',"DRAWKLINE1",'DRAWKLINE_IF',"DRAWCOLORKLINE",'PLOYLINE',"DRAWOVERLAYKLINE",
104983
105226
  'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS","DRAWTEXTREL",
104984
105227
  'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2","DRAWGBK_DIV",
104985
- "VERTLINE","HORLINE","TIPICON"
105228
+ "VERTLINE","HORLINE","TIPICON",
105229
+ "BUY","SELL","SELLSHORT","BUYSHORT",
104986
105230
  ]);
104987
105231
  if (setFunctionName.has(name)) return true;
104988
105232
 
@@ -111456,6 +111700,24 @@ function JSExecute(ast,option)
111456
111700
  }
111457
111701
  break;
111458
111702
 
111703
+ //交易函数
111704
+ case "BUY":
111705
+ node.Draw=this.Draw.BUY(args[0],args[1],args[2],args[3]);
111706
+ node.Out=node.Draw.DrawData.Data;
111707
+ break;
111708
+ case "SELL":
111709
+ node.Draw=this.Draw.SELL(args[0],args[1],args[2],args[3]);
111710
+ node.Out=node.Draw.DrawData.Data;
111711
+ break;
111712
+ case "SELLSHORT":
111713
+ node.Draw=this.Draw.SELLSHORT(args[0],args[1],args[2],args[3]);
111714
+ node.Out=node.Draw.DrawData.Data;
111715
+ break;
111716
+ case "BUYSHORT":
111717
+ node.Draw=this.Draw.BUYSHORT(args[0],args[1],args[2],args[3]);
111718
+ node.Out=node.Draw.DrawData.Data;
111719
+ break;
111720
+
111459
111721
  default:
111460
111722
  node.Out=this.Algorithm.CallFunction(funcName, args, node, this.SymbolData);
111461
111723
  break;
@@ -114118,6 +114380,23 @@ function ScriptIndex(name,script,args,option)
114118
114380
  hqChart.ChartPaint.push(chart);
114119
114381
  }
114120
114382
 
114383
+ this.CreateTradeIcon=function(hqChart,windowIndex,varItem,id)
114384
+ {
114385
+ var chart=new ChartTradeIcon();
114386
+ chart.Canvas=hqChart.Canvas;
114387
+ chart.Name=varItem.Name;
114388
+ chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
114389
+ chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
114390
+
114391
+ chart.Data.Data=varItem.Draw.DrawData.Data;
114392
+ chart.AryIcon=varItem.Draw.DrawData.Icons;
114393
+ chart.TradeType=varItem.Draw.DrawType;
114394
+
114395
+ if (varItem.DrawFontSize>0) chart.SVG.Size=varItem.DrawFontSize; //图标大小
114396
+
114397
+ hqChart.ChartPaint.push(chart);
114398
+ }
114399
+
114121
114400
  this.CreateTextLine=function(hqChart,windowIndex,varItem,id)
114122
114401
  {
114123
114402
  let chart=new ChartTextLine();
@@ -114843,6 +115122,13 @@ function ScriptIndex(name,script,args,option)
114843
115122
  case "MULTI_POINT_LINE":
114844
115123
  this.CreateLineMultiData(hqChart,windowIndex,item,i);
114845
115124
  break;
115125
+ case "BUY":
115126
+ case "SELL":
115127
+ case "SELLSHORT":
115128
+ case "BUYSHORT":
115129
+ this.CreateTradeIcon(hqChart,windowIndex,item,i);
115130
+ break;
115131
+
114846
115132
  case SCRIPT_CHART_NAME.OVERLAY_BARS:
114847
115133
  this.CreateStackedBar(hqChart,windowIndex,item,i);
114848
115134
  break;
@@ -129818,7 +130104,7 @@ function HQChartScriptWorker()
129818
130104
 
129819
130105
 
129820
130106
 
129821
- var HQCHART_VERSION="1.1.12613";
130107
+ var HQCHART_VERSION="1.1.12627";
129822
130108
 
129823
130109
  function PrintHQChartVersion()
129824
130110
  {