提交 05a6e121 编写于 作者: HQChart's avatar HQChart

ver 8900

8899 ConverPeriod() 修正跨天的品种计算错误
8897 K线Y轴坐标支持指定设置最小显示范围 DefaultYMaxMin={ Max:null, Min:null };    //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
上级 08f21b41
......@@ -12,6 +12,9 @@ HQChart是第1个基于国内传统PC股票客户端软件(C++)移植到js/py平
js版本的K线图形库支持原生js,VUE, uniapp,小程序. <br>
麦语法(分析家语法)指标执行器支持js, nodejs, py. 其中py的**FastHQChart**版本是由c++底层开发,通过cpython来对接py, 能高效的完成指标执行. 可以应用于回测, 选股等.<br>
源码地址:[https://github.com/jones2000/HQChart](https://github.com/jones2000/HQChart)<br>
镜像地址:[https://gitee.com/jones2000/HQChart](https://gitee.com/jones2000/HQChart)<br>
如果你觉得我们的行情模块对你有帮助, 请给我们点下star. (●ˇ∀ˇ●) <br>
**教程列表和demo效果图在下面,下拉页面就可以看到!!!!!!!!!!!!**
......
......@@ -4077,7 +4077,7 @@ function JSChart(divElement)
if (item.YCoordinateType>0) chart.Frame.SubFrame[0].Frame.YSplitOperator.CoordinateType=item.YCoordinateType;
if (item.IsYReverse==true) chart.Frame.SubFrame[0].Frame.CoordinateType=1; //反转坐标
if (item.DefaultYMaxMin) chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultYMaxMin=item.DefaultYMaxMin;
}
}
......@@ -12953,7 +12953,7 @@ function ChartData()
if (isMimToMin) //都是分钟数据
{
if (periodItem.Date==item.Date && periodItem.Time>=item.Time)
if ( (periodItem.Date>item.Date) || (periodItem.Date==item.Date && periodItem.Time>=item.Time) )
{
tempItem=periodItem;
break;
......@@ -12979,7 +12979,7 @@ function ChartData()
else newItem=new HistoryData();
newItem.Date=item.Date;
if (isMimToMin && isMinToDay) newItem.Time=item.Time;
if (isMimToMin || isMinToDay) newItem.Time=item.Time;
result.push(newItem);
}
......@@ -22847,12 +22847,30 @@ function FrameSplitKLinePriceY()
this.Custom=[]; //[{Type:0}]; 定制刻度 0=显示最后的价格刻度
this.SplitType=0; //0=自动分割 1=固定分割
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.Operator=function()
{
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
splitData.Count=this.SplitCount;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
var width=this.Frame.ChartBorder.GetChartWidth(); //画布的宽度
......@@ -23182,6 +23200,7 @@ function FrameSplitY()
this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];
this.SplitType=0; //0=自动分割 1=固定分割
this.Custom=[]; //[{Type:0}]; 定制刻度
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.GetFloatPrecision=function(value,floatPrecision)
{
......@@ -23200,6 +23219,23 @@ function FrameSplitY()
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
if(this.Frame.YSpecificMaxMin)
{
splitData.Count=this.Frame.YSpecificMaxMin.Count;
......@@ -268,7 +268,7 @@ function JSChart(divElement)
if (item.YCoordinateType>0) chart.Frame.SubFrame[0].Frame.YSplitOperator.CoordinateType=item.YCoordinateType;
if (item.IsYReverse==true) chart.Frame.SubFrame[0].Frame.CoordinateType=1; //反转坐标
if (item.DefaultYMaxMin) chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultYMaxMin=item.DefaultYMaxMin;
}
}
......@@ -9144,7 +9144,7 @@ function ChartData()
if (isMimToMin) //都是分钟数据
{
if (periodItem.Date==item.Date && periodItem.Time>=item.Time)
if ( (periodItem.Date>item.Date) || (periodItem.Date==item.Date && periodItem.Time>=item.Time) )
{
tempItem=periodItem;
break;
......@@ -9170,7 +9170,7 @@ function ChartData()
else newItem=new HistoryData();
newItem.Date=item.Date;
if (isMimToMin && isMinToDay) newItem.Time=item.Time;
if (isMimToMin || isMinToDay) newItem.Time=item.Time;
result.push(newItem);
}
......@@ -19038,12 +19038,30 @@ function FrameSplitKLinePriceY()
this.Custom=[]; //[{Type:0}]; 定制刻度 0=显示最后的价格刻度
this.SplitType=0; //0=自动分割 1=固定分割
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.Operator=function()
{
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
splitData.Count=this.SplitCount;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
var width=this.Frame.ChartBorder.GetChartWidth(); //画布的宽度
......@@ -19373,6 +19391,7 @@ function FrameSplitY()
this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];
this.SplitType=0; //0=自动分割 1=固定分割
this.Custom=[]; //[{Type:0}]; 定制刻度
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.GetFloatPrecision=function(value,floatPrecision)
{
......@@ -19391,6 +19410,23 @@ function FrameSplitY()
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
if(this.Frame.YSpecificMaxMin)
{
splitData.Count=this.Frame.YSpecificMaxMin.Count;
......@@ -4121,7 +4121,7 @@ function JSChart(divElement)
if (item.YCoordinateType>0) chart.Frame.SubFrame[0].Frame.YSplitOperator.CoordinateType=item.YCoordinateType;
if (item.IsYReverse==true) chart.Frame.SubFrame[0].Frame.CoordinateType=1; //反转坐标
if (item.DefaultYMaxMin) chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultYMaxMin=item.DefaultYMaxMin;
}
}
......@@ -12997,7 +12997,7 @@ function ChartData()
if (isMimToMin) //都是分钟数据
{
if (periodItem.Date==item.Date && periodItem.Time>=item.Time)
if ( (periodItem.Date>item.Date) || (periodItem.Date==item.Date && periodItem.Time>=item.Time) )
{
tempItem=periodItem;
break;
......@@ -13023,7 +13023,7 @@ function ChartData()
else newItem=new HistoryData();
newItem.Date=item.Date;
if (isMimToMin && isMinToDay) newItem.Time=item.Time;
if (isMimToMin || isMinToDay) newItem.Time=item.Time;
result.push(newItem);
}
......@@ -22891,12 +22891,30 @@ function FrameSplitKLinePriceY()
this.Custom=[]; //[{Type:0}]; 定制刻度 0=显示最后的价格刻度
this.SplitType=0; //0=自动分割 1=固定分割
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.Operator=function()
{
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
splitData.Count=this.SplitCount;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
var width=this.Frame.ChartBorder.GetChartWidth(); //画布的宽度
......@@ -23226,6 +23244,7 @@ function FrameSplitY()
this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];
this.SplitType=0; //0=自动分割 1=固定分割
this.Custom=[]; //[{Type:0}]; 定制刻度
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.GetFloatPrecision=function(value,floatPrecision)
{
......@@ -23244,6 +23263,23 @@ function FrameSplitY()
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
if(this.Frame.YSpecificMaxMin)
{
splitData.Count=this.Frame.YSpecificMaxMin.Count;
......@@ -268,7 +268,7 @@ function JSChart(divElement)
if (item.YCoordinateType>0) chart.Frame.SubFrame[0].Frame.YSplitOperator.CoordinateType=item.YCoordinateType;
if (item.IsYReverse==true) chart.Frame.SubFrame[0].Frame.CoordinateType=1; //反转坐标
if (item.DefaultYMaxMin) chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultYMaxMin=item.DefaultYMaxMin;
}
}
......@@ -9144,7 +9144,7 @@ function ChartData()
if (isMimToMin) //都是分钟数据
{
if (periodItem.Date==item.Date && periodItem.Time>=item.Time)
if ( (periodItem.Date>item.Date) || (periodItem.Date==item.Date && periodItem.Time>=item.Time) )
{
tempItem=periodItem;
break;
......@@ -9170,7 +9170,7 @@ function ChartData()
else newItem=new HistoryData();
newItem.Date=item.Date;
if (isMimToMin && isMinToDay) newItem.Time=item.Time;
if (isMimToMin || isMinToDay) newItem.Time=item.Time;
result.push(newItem);
}
......@@ -19038,12 +19038,30 @@ function FrameSplitKLinePriceY()
this.Custom=[]; //[{Type:0}]; 定制刻度 0=显示最后的价格刻度
this.SplitType=0; //0=自动分割 1=固定分割
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.Operator=function()
{
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
splitData.Count=this.SplitCount;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
var width=this.Frame.ChartBorder.GetChartWidth(); //画布的宽度
......@@ -19373,6 +19391,7 @@ function FrameSplitY()
this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];
this.SplitType=0; //0=自动分割 1=固定分割
this.Custom=[]; //[{Type:0}]; 定制刻度
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.GetFloatPrecision=function(value,floatPrecision)
{
......@@ -19391,6 +19410,23 @@ function FrameSplitY()
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
if(this.Frame.YSpecificMaxMin)
{
splitData.Count=this.Frame.YSpecificMaxMin.Count;
......@@ -268,7 +268,7 @@ function JSChart(divElement)
if (item.YCoordinateType>0) chart.Frame.SubFrame[0].Frame.YSplitOperator.CoordinateType=item.YCoordinateType;
if (item.IsYReverse==true) chart.Frame.SubFrame[0].Frame.CoordinateType=1; //反转坐标
if (item.DefaultYMaxMin) chart.Frame.SubFrame[i].Frame.YSplitOperator.DefaultYMaxMin=item.DefaultYMaxMin;
}
}
......@@ -9144,7 +9144,7 @@ function ChartData()
if (isMimToMin) //都是分钟数据
{
if (periodItem.Date==item.Date && periodItem.Time>=item.Time)
if ( (periodItem.Date>item.Date) || (periodItem.Date==item.Date && periodItem.Time>=item.Time) )
{
tempItem=periodItem;
break;
......@@ -9170,7 +9170,7 @@ function ChartData()
else newItem=new HistoryData();
newItem.Date=item.Date;
if (isMimToMin && isMinToDay) newItem.Time=item.Time;
if (isMimToMin || isMinToDay) newItem.Time=item.Time;
result.push(newItem);
}
......@@ -19038,12 +19038,30 @@ function FrameSplitKLinePriceY()
this.Custom=[]; //[{Type:0}]; 定制刻度 0=显示最后的价格刻度
this.SplitType=0; //0=自动分割 1=固定分割
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.Operator=function()
{
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
splitData.Count=this.SplitCount;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
var width=this.Frame.ChartBorder.GetChartWidth(); //画布的宽度
......@@ -19373,6 +19391,7 @@ function FrameSplitY()
this.FLOATPRECISION_RANGE=[1,0.1,0.01,0.001,0.0001];
this.SplitType=0; //0=自动分割 1=固定分割
this.Custom=[]; //[{Type:0}]; 定制刻度
this.DefaultYMaxMin; //{ Max:null, Min:null }; //指定最大,最小, Y轴范围必须比最大值大, 比最小值小
this.GetFloatPrecision=function(value,floatPrecision)
{
......@@ -19391,6 +19410,23 @@ function FrameSplitY()
var splitData={};
splitData.Max=this.Frame.HorizontalMax;
splitData.Min=this.Frame.HorizontalMin;
if (this.DefaultYMaxMin) //指定最小的Y轴范围
{
var range=this.DefaultYMaxMin;
if (IFrameSplitOperator.IsNumber(range.Max))
{
if (splitData.Min>range.Max) splitData.Min=range.Max;
else if (splitData.Max<range.Max) splitData.Max=range.Max;
}
if (IFrameSplitOperator.IsNumber(range.Min))
{
if (splitData.Max<range.Min) splitData.Max=range.Min;
else if (splitData.Min>range.Min) splitData.Min=range.Min;
}
}
if(this.Frame.YSpecificMaxMin)
{
splitData.Count=this.Frame.YSpecificMaxMin.Count;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册