2 次代码提交 0244fbf2a6 ... f0e48a457d

作者 SHA1 备注 提交日期
  zhirongwu f0e48a457d 20260531 3 天之前
  zhirongwu 83b5c43035 20250824 9 月之前
共有 27 个文件被更改,包括 171409 次插入80184 次删除
  1. 23 3
      uniapp/pages/index/index.vue
  2. 1 0
      uniapp/pages/my/my.vue
  3. 21 19
      uniapp/pages/stock/stockprogram.vue
  4. 1859 0
      uniapp/uni_modules/jones-hqchart2/changelog.md
  5. 290 56
      uniapp/uni_modules/jones-hqchart2/js_sdk/HQChartControl.vue
  6. 8453 3411
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.chartpaint.wechat.js
  7. 1114 372
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.charttitle.wechat.js
  8. 8869 4168
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.complier.wechat.js
  9. 1 8
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.console.wechat.js
  10. 1457 156
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.coordinatedata.wechat.js
  11. 875 35
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.data.wechat.js
  12. 110 14
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.explainer.wechat.js
  13. 1485 326
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.extendchart.wechat.js
  14. 674 200
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.framesplit.wechat.js
  15. 8 1
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.hqIndexformula.wechat.js
  16. 272 288
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.index.data.wechat.js
  17. 3801 265
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.index.wechat.js
  18. 155 21
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.klineinfo.wechat.js
  19. 7 5
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.regressiontest.wechat.js
  20. 723 103
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.resource.wechat.js
  21. 387 249
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.style.wechat.js
  22. 46 10
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.uniapp.canvas.helper.js
  23. 131716 61156
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.uniapp.h5.js
  24. 8958 9240
      uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.wechat.3.0.js
  25. 57 40
      uniapp/uni_modules/jones-hqchart2/package.json
  26. 46 38
      uniapp/uni_modules/jones-hqchart2/readme.md
  27. 1 0
      uniapp/uview-ui/theme.scss

+ 23 - 3
uniapp/pages/index/index.vue

@@ -16,6 +16,25 @@
 		<view class="" v-if="is_show">
 			<u-swiper :title="true" border-radius="0" height="320" :list="bannerList" @click="openPage"></u-swiper>
 		</view>
+		
+		<!-- 分类 -->
+		<view class="u-border-top" v-if="isTab">
+			<!-- #ifdef MP-BAIDU -->
+			<fa-u-tabs
+				:list="tabList"
+				:active-color="theme.bgColor"
+				:bar-width="tabwidth"
+				name="title"
+				:is-scroll="true"
+				:current="current"
+				@change="change"
+			></fa-u-tabs>
+			<!-- #endif -->
+			<!-- #ifndef MP-BAIDU -->
+			<u-tabs :list="tabList" :active-color="theme.bgColor" :bar-width="tabwidth" name="title" :is-scroll="true" :current="current" @change="change"></u-tabs>
+			<!-- #endif -->
+		</view>
+		
 		<!-- 列表 -->
 		<fa-article-item :archives-list="archivesList"></fa-article-item>
 		<!-- 为空 -->
@@ -63,7 +82,8 @@ export default {
 			isTab: false,
 			tabList: [],
 			is_empty:false,
-			channel:{}
+			channel:{},
+			tabList: [],
 		};
 	},
 	onLoad(e) {
@@ -75,8 +95,8 @@ export default {
 			this.params = query;
 		}else{
 			this.params = {
-				channel:-1,
-				model:-1
+				channel:27,
+				model:1
 			}
 		}
 		this.getCategory();		

+ 1 - 0
uniapp/pages/my/my.vue

@@ -79,6 +79,7 @@
 				<!-- <u-cell-item icon="edit-pen" title="发布文章" @click="goPage('/pages/publish/channel', true)"></u-cell-item> -->
 				<!-- <u-cell-item icon="info-circle" title="关于我们" @click="goPage('/pages/my/about')"></u-cell-item>
 				<u-cell-item icon="file-text-fill" title="自定义表单列表" @click="goPage('/pages/diyform/lists')"></u-cell-item> -->
+				
 				<u-cell-item icon="backspace" v-if="vuex_token" title="退出登录" @click="goPage('out')"></u-cell-item>
 			</u-cell-group>
 		</view>

+ 21 - 19
uniapp/pages/stock/stockprogram.vue

@@ -2,7 +2,21 @@
 	<view>
 		<!-- 顶部导航 -->
 		<fa-navbar :title="pagetitle || '编程工具'"></fa-navbar>
-		
+		<view class="button-sp-area">
+			<!-- <button class="mini-btn" type="default" size="mini" @click="ChangeMinutePeriod(1)">分时</button> -->
+			<!-- <button class="mini-btn" type="default" size="mini" @click="ChangeMinutePeriod(5)">5日</button> -->
+			<u-button size="mini" shape="circle" type="info" @click="ToChangeSymbol()">标的切换</u-button>
+			<u-button size="mini" shape="circle" type="info" @click="ChangeKLinePeriod(0)">日线</u-button>
+			<u-button size="mini" shape="circle" type="info" @click="ChangeKLinePeriod(1)">周线</u-button>
+			<!-- <button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(1)">周K</button> -->
+			<!-- <button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(4)">1K</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(5)">5K</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(6)">15K</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(7)">30K</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(8)">60K</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('600999.sh')">招商证券</button>
+			<button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('000002.sz')">万科A</button> -->
+		</view> 
 		<view >
 			<HQChartControl ref="HQChartCtrl" DefaultChart="{Type:'KLine'}" DefaultSymbol="000001.sz"> </HQChartControl>
 		</view>
@@ -10,19 +24,7 @@
 		<!--   控制图1 !-->
 		
 		
-		<!-- <view class="button-sp-area">
-			<button class="mini-btn" type="default" size="mini" @click="ChangeMinutePeriod(1)">分时</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeMinutePeriod(5)">5日</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(0)">日K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(1)">周K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(4)">1K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(5)">5K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(6)">15K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(7)">30K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeKLinePeriod(8)">60K</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('600999.sh')">招商证券</button>
-			<button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('000002.sz')">万科A</button>
-		</view> -->
+		
 		
 		
 		<view class="ptip" v-if="showtip">点此按钮重新打开编程框</view>
@@ -52,10 +54,7 @@
 	</view>
 </template>
 
-<script>
-
-
-	
+<script>	
 	import mpHtml  from '@/node_modules/mp-html/dist/uni-app/components/mp-html/mp-html'
 	import HQChartControl from '@/uni_modules/jones-hqchart2/js_sdk/HQChartControl.vue' 
 	import JSHQData from "./hq.data.js"
@@ -75,6 +74,7 @@ import {JSCommon} from '@/uni_modules/jones-hqchart2/js_sdk/umychart.wechat.3.0.
 import {JSConsole} from '@/uni_modules/jones-hqchart2/js_sdk/umychart.console.wechat.js'
 import {JSCommonCoordinateData} from '@/uni_modules/jones-hqchart2/js_sdk/umychart.coordinatedata.wechat.js'
 import {JSCommonComplier} from "@/uni_modules/jones-hqchart2/js_sdk/umychart.complier.wechat.js"
+import { JSCommonHQStyle} from '../../uni_modules/jones-hqchart2/js_sdk/umychart.style.wechat.js'
 import { } from "@/uni_modules/jones-hqchart2/js_sdk/umychart.explainer.wechat.js"
 
 JSCommonCoordinateData.MinuteTimeStringData.CreateSHSZData=()=>{ return JSHQData.HQData.CreateSHSZData(JSCommonCoordinateData.MinuteTimeStringData); }   
@@ -458,7 +458,9 @@ export default
 <style lang="scss">
 	@import "~ng-codemirror/index.scss";
 
-
+	.button-sp-area{
+		background-color: black;
+	}
 	.ptip {
 		background-color: #0066CC;width: 80%;height: 40px;
 		position: fixed;

文件差异内容过多而无法显示
+ 1859 - 0
uniapp/uni_modules/jones-hqchart2/changelog.md


+ 290 - 56
uniapp/uni_modules/jones-hqchart2/js_sdk/HQChartControl.vue

@@ -1,11 +1,16 @@
 <template>
 	
 	<!--  #ifdef  H5 -->
-	<div class='kline' v-bind:id='KLineID' v-bind:style="{width: ChartWidth+'px', height: ChartHeight+'px'}" ref='kline'></div>
+	<div class='kline' v-bind:id='KLineID' v-bind:style="{width: ChartWidth+'px', height: ChartHeight+'px', position: relative }" ref='kline'></div>
 	<!--  #endif -->
 	
-	<!--  #ifndef  H5 -->
+	<!--  #ifdef  MP-WEIXIN -->
+	<canvas class="kline" v-bind:id='KLineID' type="2d"  
+		v-bind:style="{width: ChartWidth+'px', height: ChartHeight+'px'}"
+	    @touchstart="KLineTouchStart" @touchmove='KLineTouchMove' @touchend='KLineTouchEnd' />
+	<!--  #endif -->
 	
+	<!--  #ifndef  H5 || MP-WEIXIN -->
 	<canvas v-bind:id='KLineID' v-bind:canvas-id='KLineID' class='kline2' v-bind:style="{width: ChartWidth+'px', height: ChartHeight+'px'}" 
 		  @touchstart="KLineTouchStart" @touchmove='KLineTouchMove' @touchend='KLineTouchEnd' ></canvas>  
 	
@@ -29,6 +34,8 @@
 	
 // #ifdef H5
 import HQChart from './umychart.uniapp.h5.js'
+import './umychart.resource/font/iconfont.css'
+import "./umychart.resource/css/tools.css"
 // #endif
 	
 // #ifndef H5
@@ -37,8 +44,25 @@ import {JSCommonHQStyle} from './umychart.style.wechat.js'
 import {JSConsole} from './umychart.console.wechat.js'
 
 //禁用日志
-//JSConsole.Complier.Log=()=>{ };
-//JSConsole.Chart.Log=()=>{ };
+JSConsole.Complier.Log=()=>{ };
+JSConsole.Chart.Log=()=>{ };
+// #endif
+
+
+//插件帮助函数
+function HQChartHelper() { }
+//把Vue3的markRow包装下,支持vue2
+HQChartHelper.MarkRaw=function(value)
+{
+	return value;
+}
+
+// #ifdef VUE3
+import { markRaw } from 'vue' 
+HQChartHelper.MarkRaw=function(value)
+{
+	return markRaw(value);
+}
 // #endif
 
 function DefaultData() { }
@@ -52,7 +76,8 @@ DefaultData.GetKLineOption = function ()
         Windows: //窗口指标
         [
             {Index:"MA",Modify: false, Change: false}, 
-			{Index:"VOL",Modify: false, Change: false}
+			{Index:"VOL",Modify: false, Change: false},
+			//{Index:"AMO",Modify: false, Change: false}
 			/*
             { 
 				Index:'多线段指标',Modify: false, Change: false,
@@ -87,12 +112,19 @@ DefaultData.GetKLineOption = function ()
 			DragMode:1, 
             Right:1,                            //复权 0 不复权 1 前复权 2 后复权
             Period:0,                           //周期: 0 日线 1 周线 2 月线 3 年线 
-            PageSize:30,
+            PageSize:6,
             IsShowTooltip:false,
 			DrawType:0, 
 			DataWidth:10
         },
 		
+		KLineTitle:		//K线标题栏设置
+		{
+			DateTimeSpace:1,
+			PeriodSpace:1,
+			NameSpace:1,
+		},
+		
 		ExtendChart:
 		[
 			{Name:'KLineTooltip' },	//开启手机端tooltip
@@ -127,6 +159,7 @@ DefaultData.GetMinuteOption=function()
         CorssCursorTouchEnd:true,
 		IsClickShowCorssCursor:true,
 		//IsFullDraw:true,
+		CorssCursorInfo:{ Left:2, Right:2, Bottom:1 },  //十字光标刻度设置
 		
         MinuteLine:
         {
@@ -176,7 +209,7 @@ export default
 	props: 
 	[
 		'DefaultSymbol',
-		'DefaultChart'
+		'DefaultChart',	//{ Type:, IsHScreen:}
 	],
 	
 	
@@ -185,8 +218,8 @@ export default
 		let data=
 		{
 			Symbol:'600000.sh',
-			ChartWidth:350,
-			ChartHeight:500,
+			ChartWidth:550,
+			ChartHeight:1000,
 			KLineID:"HQChart_"+DefaultData.CreateGuid(),
 			
 			KLine:
@@ -199,7 +232,10 @@ export default
 				Option:DefaultData.GetMinuteOption(),
 			},
 			
-			ChartType:"KLine",
+			ChartType:"Minute",
+			IsHScreen:false, 		//横屏
+			
+			CanvasNode:null,
 		};
 		
 		return data;
@@ -219,6 +255,9 @@ export default
 			{
 				this.ChartType="KLine";
 			}
+			
+			//横屏
+			if (this.DefaultChart.IsHScreen) this.IsHScreen=this.DefaultChart.IsHScreen
 		}
 	},
 	
@@ -248,7 +287,7 @@ export default
 			var jsChart=this.GetJSChart();
 			if (jsChart)
 			{
-				jsChart.ChartDestory();
+				jsChart.ChartDestroy();
 				this.SetJSChart(null);
 			}
 			
@@ -261,14 +300,27 @@ export default
 			// #endif
 		},
 		
-		OnSize()
+		Draw(option)
+		{
+			console.log("[HQChartControl::Draw]");
+			var jsChart=this.GetJSChart();
+			if (!jsChart || !jsChart.JSChartContainer) return;
+			
+			jsChart.JSChartContainer.Draw();
+		},
+		
+		OnSize(option)
 		{
 			// #ifdef H5
-			this.OnSize_h5();
+			this.OnSize_h5(option);
+			// #endif
+			
+			// #ifndef H5
+			this.OnSize_app(option);
 			// #endif
 		},
 		
-		OnSize_h5()
+		OnSize_h5(option)
 		{
 			var chartHeight = this.ChartHeight;
 			var chartWidth = this.ChartWidth;
@@ -278,28 +330,63 @@ export default
 			kline.style.height=chartHeight+'px';
 			
 			var jsChart=this.GetJSChart();
-			if (jsChart) jsChart.OnSize();
+			if (jsChart) jsChart.OnSize(option);
+		},
+		
+		OnSize_app(option)
+		{
+			var jsChart=this.GetJSChart();
+			if (jsChart)
+			{
+				jsChart.CanvasElement.Width=this.ChartWidth;
+				jsChart.CanvasElement.Height=this.ChartHeight;
+				jsChart.OnSize(option);
+			}			
+		},
+		
+		SetHQChartStyle()
+		{
+			// #ifdef H5
+			this.SetHQChartStyle_h5();
+			// #endif
+			
+			// #ifndef H5
+			this.SetHQChartStyle_app();
+			// #endif
+			
+		},
+		
+		SetHQChartStyle_h5()
+		{
+			var blackStyle=HQChart.HQChartStyle.GetStyleConfig(HQChart.STYLE_TYPE_ID.BLACK_ID);
+			HQChart.JSChart.SetStyle(blackStyle);
+			this.$refs.kline.style.backgroundColor=blackStyle.BGColor;	//div背景色设置黑色
+		},
+		
+		SetHQChartStyle_app()
+		{
+			var blackStyle=JSCommonHQStyle.GetStyleConfig(JSCommonHQStyle.STYLE_TYPE_ID.BLACK_ID);
+			JSCommon.JSChart.SetStyle(blackStyle);
 		},
 		
 		CreateHQChart()
 		{
-			if (this.ChartType=="Minute") this.CreateMinuteChart();
-			else this.CreateKLineChart();
+			this.SetHQChartStyle();
+			
+			if (this.ChartType=="Minute") 
+				return this.CreateMinuteChart();
+			else 
+				return this.CreateKLineChart();
 		},
 		
 		CreateKLineChart_h5()  //创建K线图
 		{
 		    this.ClearChart();
 			
-			var whiteStyle=HQChart.HQChartStyle.GetStyleConfig(HQChart.STYLE_TYPE_ID.WHITE_ID);
-			HQChart.JSChart.SetStyle(whiteStyle);
-			//this.$refs.kline.style.backgroundColor=whiteStyle.BGColor;	//div背景色设置黑色
-			
 			var chart=HQChart.JSChart.Init(this.$refs.kline);
-			
 		    this.KLine.Option.Symbol=this.Symbol;
 			this.KLine.Option.NetworkFilter=this.NetworkFilter;
-			this.KLine.Option.IsShowMaxMinPrice=false;
+			
 		    chart.SetOption(this.KLine.Option);
 			
 		    this.SetJSChart(chart);
@@ -315,36 +402,85 @@ export default
 			// #ifdef APP-PLUS
 			element.IsUniApp=true;	//canvas需要指定下 是uniapp的app
 			// #endif
+			
+			// #ifdef APP-HARMONY
+			element.IsUniApp=true;	//canvas需要指定下 是uniapp的app
+			// #endif
+			
 			element.ID = this.KLineID;
 			element.Height = this.ChartHeight;  //高度宽度需要手动绑定!!
 			element.Width = this.ChartWidth;
-			
-			var whiteStyle=JSCommonHQStyle.GetStyleConfig(JSCommonHQStyle.STYLE_TYPE_ID.WHITE_ID);
-			
-			JSCommon.JSChart.SetStyle(whiteStyle);
 				
 			var chart = JSCommon.JSChart.Init(element);
 			this.KLine.Option.NetworkFilter=this.NetworkFilter;
 			this.KLine.Option.Symbol=this.Symbol;
-			this.KLine.Option.IsClickShowCorssCursor=true;
+			//this.KLine.Option.IsClickShowCorssCursor=true;
 			this.KLine.Option.IsFullDraw=true; 	//每次手势移动全屏重绘
-			this.KLine.Option.IsShowMaxMinPrice=false;
 			chart.SetOption(this.KLine.Option);
 			
 			this.SetJSChart(chart);
 			
 			return chart;
 		},
+		ChangeScriptIndex (windowIndex, indexData)
+		{
+		    //{Name:指标名字, Script:指标脚本, Args:指标参数(数组) }
+		   	//console.log(indexdata);
+		   	var jsChart=this.GetJSChart();
+		   	if (this.IsKLineChart() && jsChart) jsChart.ChangeScriptIndex(windowIndex,indexData);
+
+		},
+		
+		CreateKLineChart_WeChat()
+		{
+			this.ClearChart();
+			
+			var id=`#${this.KLineID}`;
+			wx.createSelectorQuery().in(this)
+				.select(id)
+				.fields({
+					node: true,
+					size: true,
+				})
+				.exec((res)=>
+				{
+					console.log("[HQChartControl::CreateKLineChart_WeChat] 2")
+					this.CanvasNode= HQChartHelper.MarkRaw(res[0]);
+					var element = new JSCommon.JSCanvasElement();
+					element.ID = this.KLineID;
+					element.CanvasNode =this.CanvasNode;
+					element.Height = this.ChartHeight;  //高度宽度需要手动绑定!!
+					element.Width = this.ChartWidth;
+			
+					console.log("[HQChartControl::CreateKLineChart_WeChat] 3",this.ChartHeight,this.ChartWidth, res)
+			
+					var chart = JSCommon.JSChart.Init(element); //把画布绑定到行情模块中
+					this.KLine.Option.NetworkFilter=this.NetworkFilter;
+					this.KLine.Option.Symbol=this.Symbol;
+					//this.KLine.Option.IsClickShowCorssCursor=true;
+					this.KLine.Option.IsFullDraw=true; 	//每次手势移动全屏重绘
+					chart.SetOption(this.KLine.Option);
+	
+					this.SetJSChart(chart);				   
+				});
+		},
 		
 		CreateKLineChart()
 		{
 			this.ChartType="KLine";
 			
+			if (this.IsHScreen) this.KLine.Option.Type="历史K线图横屏";
+			else this.KLine.Option.Type="历史K线图";
+			
 			// #ifdef H5
 			return this.CreateKLineChart_h5();
 			// #endif
 			
-			// #ifndef H5
+			//  #ifdef MP-WEIXIN
+			return this.CreateKLineChart_WeChat();
+			// #endif
+			
+			// #ifndef H5 || MP-WEIXIN
 			return this.CreateKLineChart_app();
 			// #endif
 		},
@@ -353,10 +489,6 @@ export default
 		{
 			this.ClearChart();
 			
-			var whiteStyle=HQChart.HQChartStyle.GetStyleConfig(HQChart.STYLE_TYPE_ID.WHITE_ID);
-			HQChart.JSChart.SetStyle(whiteStyle);
-			//this.$refs.kline.style.backgroundColor=whiteStyle.BGColor;	//div背景色设置黑色
-			
 			var chart=HQChart.JSChart.Init(this.$refs.kline);
 			this.Minute.Option.Symbol=this.Symbol;
 			this.Minute.Option.NetworkFilter=this.NetworkFilter;
@@ -375,15 +507,14 @@ export default
 			// #ifdef APP-PLUS
 			element.IsUniApp=true;	//canvas需要指定下 是uniapp的app
 			// #endif
+			
+			// #ifdef APP-HARMONY
+			element.IsUniApp=true;	//canvas需要指定下 是uniapp的app
+			// #endif
+			
 			element.ID = this.KLineID;
 			element.Height = this.ChartHeight;  //高度宽度需要手动绑定!!
 			element.Width = this.ChartWidth;
-				
-			//用黑色风格
-			//var whiteStyle=JSCommonHQStyle.GetStyleConfig(JSCommonHQStyle.STYLE_TYPE_ID.WHITE_ID);	
-			//JSCommon.JSChart.SetStyle(whiteStyle);
-			//var testttt=JSCommon.MARKET_SUFFIX_NAME.GetSHODecimal();
-			//JSCommon.MARKET_SUFFIX_NAME.GetSHODecimal=(symbol)=>{ return 4; };	//设置期权代码
 					
 			var chart = JSCommon.JSChart.Init(element);
 			
@@ -397,15 +528,54 @@ export default
 			return chart;
 		},
 		
+		CreateMinuteChart_WeChat()
+		{
+			this.ClearChart();
+			
+			var id=`#${this.KLineID}`;
+			wx.createSelectorQuery().in(this)
+				.select(id)
+				.fields({
+					node: true,
+					size: true,
+				})
+				.exec((res)=>
+				{
+					this.CanvasNode= HQChartHelper.MarkRaw(res[0]);
+					var element = new JSCommon.JSCanvasElement();
+					element.ID = this.KLineID;
+					element.CanvasNode =this.CanvasNode;
+					element.Height = this.ChartHeight;  //高度宽度需要手动绑定!!
+					element.Width = this.ChartWidth;
+			
+					console.log("[HQChartControl::CreateMinuteChart_WeChat] 3",this.ChartHeight,this.ChartWidth, res)
+			
+					var chart = JSCommon.JSChart.Init(element); //把画布绑定到行情模块中
+					this.Minute.Option.NetworkFilter=this.NetworkFilter;
+					this.Minute.Option.Symbol=this.Symbol;
+					this.Minute.Option.IsFullDraw=true; 	//每次手势移动全屏重绘
+					chart.SetOption(this.Minute.Option);
+				
+					this.SetJSChart(chart);				   
+				});
+		},
+		
 		CreateMinuteChart()
 		{
 			this.ChartType="Minute";
 			
+			if (this.IsHScreen) this.Minute.Option.Type="分钟走势图横屏";
+			else this.Minute.Option.Type="分钟走势图";
+			
 			// #ifdef H5
 			return this.CreateMinuteChart_h5();
 			// #endif
 			
-			// #ifndef H5
+			//  #ifdef MP-WEIXIN
+			return this.CreateMinuteChart_WeChat();
+			// #endif
+			
+			// #ifndef H5 || MP-WEIXIN
 			return this.CreateMinuteChart_app();
 			// #endif
 		},
@@ -423,6 +593,7 @@ export default
 		IsMinuteChart()
 		{
 			var jsChart=this.GetJSChart();
+			if (!jsChart) return false;
 			var className=jsChart.JSChartContainer.ClassName;
 			if (className=="MinuteChartContainer" || className=="MinuteChartHScreenContainer") return true;
 			
@@ -465,18 +636,7 @@ export default
 			var jsChart=this.GetJSChart();
 			if (this.IsKLineChart() && jsChart) jsChart.ChangeIndex(windowId,name);
 		},
-		ChangeScriptIndex(windowId,indexdata){
-			//{Name:指标名字, Script:指标脚本, Args:指标参数(数组) }
-			//console.log(indexdata);
-			var jsChart=this.GetJSChart();
-			if (this.IsKLineChart() && jsChart) jsChart.ChangeScriptIndex(windowId,indexdata);
-		},
-		ChangeInstructionScriptIndex(indexdata){
-			//{Name:指标名字, Script:指标脚本, Args:指标参数(数组) }
-			//console.log(indexdata);
-			var jsChart=this.GetJSChart();
-			if (this.IsKLineChart() && jsChart) jsChart.ChangeInstructionScriptIndex(indexdata);
-		},
+		
 		//切换股票
 		ChangeSymbol(symbol)
 		{
@@ -485,25 +645,99 @@ export default
 			if (jsChart) jsChart.ChangeSymbol(symbol);
 		},
 		
+		ChangeRight(right)
+		{
+			var jsChart=this.GetJSChart();
+			
+			if (this.IsKLineChart() && jsChart)	jsChart.ChangeRight(right);
+		},
+		
+		ChangeKLineDrawType(id)
+		{
+			var jsChart=this.GetJSChart();
+			
+			if (this.IsKLineChart() && jsChart)	jsChart.ChangeKLineDrawType(id);
+		},
+		
 		///////////////////////////////////////////////
 		//手势事件 app/小程序才有
 		//KLine事件
 		KLineTouchStart(event) 
 		{
 			var jsChart=this.GetJSChart();
-			if (jsChart) jsChart.OnTouchStart(event);
+			if (jsChart) 
+			{
+				var backup=this.ConvertTouchEventData(event);
+				jsChart.OnTouchStart(event);
+				this.RestoreTouchEventData(backup, event);
+			}
 		},
 		
 		KLineTouchMove (event) 
 		{
 			var jsChart=this.GetJSChart();
-			if (jsChart) jsChart.OnTouchMove(event);
+			if (jsChart) 
+			{
+				var backup=this.ConvertTouchEventData(event);
+				jsChart.OnTouchMove(event);
+				this.RestoreTouchEventData(backup, event);
+			}
 		},
 		
 		KLineTouchEnd (event) 
 		{
 			var jsChart=this.GetJSChart();
-			if (jsChart) jsChart.OnTouchEnd(event);
+			if (jsChart) 
+			{
+				var backup=this.ConvertTouchEventData(event);
+				jsChart.OnTouchEnd(event);
+				this.RestoreTouchEventData(backup, event);
+			}
+		},
+		
+		ConvertTouchEventData(event)
+		{
+			if (Array.isArray(event.touches)) return null;
+			
+			var touches=event.touches;	//备份下
+			var aryTouches=[];
+			for(var i=0;i<10;++i)
+			{
+				var key=i.toString();
+				var item=event.touches[key];
+				if (!item) break;
+				
+				aryTouches[i]=item;
+			}
+			
+			event.touches=aryTouches;
+			
+			var changedTouches=event.changedTouches;
+			var aryChangedTouches=[];
+			for(var i=0;i<10;++i)
+			{
+				var key=i.toString();
+				var item=event.changedTouches[key];
+				if (!item) break;
+				
+				aryChangedTouches[i]=item;
+			}
+			
+			event.changedTouches=aryChangedTouches;
+			
+			//console.log('ConvertTouchEventData' ,event )
+			
+			return {Touches:touches, ChangedTouches:changedTouches };
+		},
+		
+		RestoreTouchEventData(backup, event)
+		{
+			if (!backup) return;
+			
+			event.touches=backup.Touches;	//还原原来的touches结构
+			event.changedTouches=backup.ChangedTouches
+			
+			//console.log('RestoreTouchEventData' ,event )
 		},
 		
 		/////////////////////////////////////////////////////////////////////////////////////////

文件差异内容过多而无法显示
+ 8453 - 3411
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.chartpaint.wechat.js


文件差异内容过多而无法显示
+ 1114 - 372
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.charttitle.wechat.js


文件差异内容过多而无法显示
+ 8869 - 4168
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.complier.wechat.js


+ 1 - 8
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.console.wechat.js

@@ -5,11 +5,4 @@ var JSConsole=
     Complier:{ Log:console.log, Warn:console.warn },   //编译器日志
 };
 
-module.exports =
-{
-    JSConsole:
-    {
-        Chart: JSConsole.Chart,
-        Complier:JSConsole.Complier
-    }
-};
+export { JSConsole };

文件差异内容过多而无法显示
+ 1457 - 156
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.coordinatedata.wechat.js


文件差异内容过多而无法显示
+ 875 - 35
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.data.wechat.js


+ 110 - 14
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.explainer.wechat.js

@@ -13,17 +13,17 @@
 import { JSConsole } from "./umychart.console.wechat.js"
 
 import {
-    JSCommonComplier_ErrorHandler as ErrorHandler,
-    JSCommonComplier_JSComplier as JSComplier,
-    JSCommonComplier_JSParser as JSParser,
-    JSCommonComplier_Syntax as Syntax,
-    JS_EXECUTE_JOB_ID as JS_EXECUTE_JOB_ID,
-    g_JSComplierResource as g_JSComplierResource,
+    ErrorHandler,
+    JSComplier,
+    JSParser,
+    Syntax,
+    JS_EXECUTE_JOB_ID,
+    g_JSComplierResource,
 } from "./umychart.complier.wechat";
 
 import 
 { 
-    JSCommonSplit_IFrameSplitOperator as IFrameSplitOperator,
+    IFrameSplitOperator,
 } from './umychart.framesplit.wechat.js'
 
 
@@ -38,6 +38,7 @@ function JSExplainer(ast,option)
     this.JobList=[];                //执行的任务队列
     this.VarTable=new Map();        //变量表
     this.OutVarTable=[];            //输出变量
+    this.MaxValueLength=100;        //最长的字符
 
     //脚本自动变量表, 只读
     this.ConstVarTable=new Map(
@@ -89,7 +90,25 @@ function JSExplainer(ast,option)
         ["HYSYL","指数市盈率或个股所属行业的市盈率"],
         ["HYSJL","指数市净率或个股所属行业的市净率"],
 
-        ['DRAWNULL',"无效数据"]
+        ['DRAWNULL',"无效数据"],
+
+        ["LARGEINTRDVOL","逐笔买入大单成交量"],
+        ["LARGEOUTTRDVOL","逐笔卖出大单成交量"],
+        ["TRADENUM", "逐笔成交总单数"],         
+        ["TRADEINNUM", "逐笔买入成交单数"],       
+        ["TRADEOUTNUM", "逐笔卖出成交单数"],      
+        ["LARGETRDINNUM", "逐笔买入大单成交单数"],   
+        ["LARGETRDOUTNUM", "逐笔卖出大单成交单数"],  
+        ["CUR_BUYORDER", "总委买量"],    
+        ["CUR_SELLORDER", "总委卖量"],   
+        ["ACTINVOL", "主动买成交量"],         
+        ["ACTOUTVOL", "主动卖成交量"],        
+        ["BIDORDERVOL", "累计总有效委买量"],     
+        ["BIDCANCELVOL", "累计总有效撤买量"],    
+        ["AVGBIDPX", "最新委买均价"],         
+        ["OFFERORDERVOL", "累计总有效委卖量"],   
+        ["OFFERCANCELVOL", "累计总有效撤卖量"],   
+        ["AVGOFFERPX", "最新委卖均价"],
 
     ]);   
 
@@ -137,7 +156,7 @@ function JSExplainer(ast,option)
         if (!this.AST) this.ThrowError();
         if (!this.AST.Body) this.ThrowError();
 
-        for(let i in this.AST.Body)
+        for(let i=0; i<this.AST.Body.length; ++i)
         {
             let item =this.AST.Body[i];
             this.VisitNode(item);
@@ -234,7 +253,7 @@ function JSExplainer(ast,option)
                         {
                             varName=itemExpression.Left.Name;
                             let varValue=this.VarTable.get(varName);
-                            this.VarTable.set(varName,varValue);            //把常量放到变量表里
+                            this.VarTable.set(varName,this.ConvertToShortValue(varValue));            //把常量放到变量表里
                         }
                         else if (itemExpression.Type==Syntax.Identifier)
                         {
@@ -258,7 +277,7 @@ function JSExplainer(ast,option)
                                 let varValue=this.ReadVariable(varName,itemExpression);
                                 varName="__temp_si_"+i+"__";
                                 isNoneName=true;
-                                this.VarTable.set(varName,varValue);            //放到变量表里
+                                this.VarTable.set(varName,this.ConvertToShortValue(varValue));            //放到变量表里
                             }
                         }
                         else if(itemExpression.Type==Syntax.Literal)    //常量
@@ -450,12 +469,16 @@ function JSExplainer(ast,option)
             ["BARSSINCE",   { Name:"BARSSINCE", Param:{ Count:1 }, ToString:function(args) { return `首次${args[0]}距今天数`; } } ],
             ["HHV", { Name:"HHV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最高值`; } } ],
             ["LLV", { Name:"LLV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最低值`; } } ],
+            ["ZTPRICE", { Name:"ZTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算涨停价'; } } ],
+            ["DTPRICE", { Name:"DTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算跌停价'; } } ],
+            ["BACKSET", { Name:"BACKSET", Param:{ Count:2 }, ToString:function(args) { return `若${args[0]}则将最近${args[1]}周期置为1`; } } ],
 
             ["HOD", { Name:"HOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的高值名次`; } } ],
             ["LOD", { Name:"LOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的低值名次`; } } ],
             ["REVERSE", { Name:"REVERSE", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的相反数`; } } ],
             ["FILTER", { Name:"FILTER", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日过滤`; } } ],
             ["FILTERX", { Name:"FILTERX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日反向过滤`; } } ],
+            ["TFILTER", { Name:"TFILTER", Param:{Count:3}, ToString:function(args) { return `信号过滤(多头)`; } }],
             ["SUMBARS", { Name:"SUMBARS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}累加至${args[1]}的天数`; } } ],
             ["MA", { Name:"MA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日简单移动平均`; } } ],
             ["SMA", { Name:"SMA", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}的${args[1]}日[${args[2]}日权重]移动平均`; } } ],
@@ -491,6 +514,9 @@ function JSExplainer(ast,option)
             ["IF", { Name:"IF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
             ["IFF", { Name:"IFF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
             ["IFN", { Name:"IFN", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
+            ["IFC", { Name:"IFC", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
+            ["TESTSKIP", { Name:"TESTSKIP", Param:{ Count:1 }, ToString:function(args) { return `如果满足条件${args[0]},公式返回`; } } ],
+            ["VALUEWHEN", { Name:"VALUEWHEN", Param:{ Count:2 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回上个输出值 `; } } ],
 
             ["MAX", { Name:"MAX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较大值`; } } ],
             ["MIN", { Name:"MIN", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较小值`; } } ],
@@ -548,7 +574,9 @@ function JSExplainer(ast,option)
             ["STR2CON", { Name:"STR2CON", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}转为数字`; } } ],
             ["STRLEN", { Name:"STRLEN", Param:{ Count:1 }, ToString:function(args) { return `得到${args[0]}字符串长度`; } } ],
             ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
+            ["STRCAT6",{ Name:"STRCAT6", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
             ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
+            ["VARCAT6", { Name:"VARCAT", Param:{ Dynamic:true }, ToString:function(args) { return `字符串相加`; } } ],
             ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
             ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
             ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
@@ -556,6 +584,8 @@ function JSExplainer(ast,option)
             ["NAMEINCLUD", { Name:"NAMEINCLUD", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
             ["CODELIKE", { Name:"CODELIKE", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
             ["INBLOCK", { Name:"AVEDEV", Param:{ Count:1 }, ToString:function(args) { return `属于${args[0]}板块`; } } ],
+
+            ["STKINDI",{ Name:"STKINDI", Param:{ Dynamic:true }, ToString:function(args) { return "指标引用"; } }],
             
 
             [
@@ -580,7 +610,14 @@ function JSExplainer(ast,option)
                         return `${args[1]}日内${args[0]}新低距今天数`; 
                     } 
                 } 
-            ]
+            ],
+
+            ["L2_VOLNUM", { Name:"L2_VOLNUM", Param:{ Count:2 }, ToString:function(args) { return `单数分档`; } }],
+            ["L2_VOL", { Name:"L2_VOL", Param:{ Count:2 }, ToString:function(args) { return `成交量分档`; } }],
+            ["L2_AMO", { Name:"L2_AMO", Param:{ Count:2 }, ToString:function(args) { return `成交额分档`; } }],
+
+            ["MAX6", { Name:"MAX6", Param:{ Dynamic:true }, ToString:function(args) { return "较大值"} } ],
+            ["MIN6", { Name:"MIN6", Param:{ Dynamic:true }, ToString:function(args) { return "较小值"} } ],
         ]
     );
 
@@ -589,8 +626,15 @@ function JSExplainer(ast,option)
         if (this.FUNCTION_INFO_LIST.has(funcName))
         {
             var item=this.FUNCTION_INFO_LIST.get(funcName);
-            if (item.Param.Count!=args.length)
+            if (item.Param.Dynamic===true)  //动态参数
+            {
+
+            }
+            else
+            {
+                if (item.Param.Count!=args.length)
                 this.ThrowUnexpectedNode(node,`函数${funcName}参数个数不正确. 需要${item.Param.Count}个参数`);
+            }
             return item.ToString(args);
         }
 
@@ -660,6 +704,14 @@ function JSExplainer(ast,option)
                 else barType="实线空心柱";
                 return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
 
+            case "UPCOLOR":
+                return `上涨颜色${args[0]}`;
+            case "DOWNCOLOR":
+                return `下跌颜色${args[0]}`;
+            case "STICKTYPE":
+            case "FIRSTDRAW":
+                return "";
+
             default:
                 this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
         }
@@ -847,7 +899,51 @@ function JSExplainer(ast,option)
         }
 
         JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]' , varName, ' = ',value);
-        this.VarTable.set(varName,value);
+        this.VarTable.set(varName,this.ConvertToShortValue(value));
+    }
+
+    this.ConvertToShortValue=function(value)
+    {
+        var maxLength=this.MaxValueLength;
+        if (value && value.length>=maxLength)
+        {
+            var shortValue=value.slice(0, maxLength-10);
+            shortValue+="......";
+            return shortValue;
+        }
+       
+        return value;
+    }
+
+    this.ReadMemberVariable=function(node)
+    {
+        var obj=node.Object;
+        var member=node.Property;
+
+        let maiObj;
+        if (obj.Type==Syntax.BinaryExpression || obj.Type==Syntax.LogicalExpression ) 
+            maiObj=this.VisitBinaryExpression(obj);
+        else if (obj.Type==Syntax.CallExpression)
+            maiObj=this.VisitCallExpression(obj);
+        else
+        {
+            if (member.Name.indexOf('#')>0)
+            {
+                var aryValue=member.Name.split("#");
+                var value=`${obj.Name}的${aryValue[0]}[周期${aryValue[1]}]`;
+            }
+            else
+            {
+                var value=`${obj.Name}的${member.Name}`;
+            }
+            return value;
+        }
+
+        if (!maiObj) return null;
+        var value=maiObj[member.Name];
+        if (value) return value;
+
+        return null;
     }
 
     //逻辑运算

文件差异内容过多而无法显示
+ 1485 - 326
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.extendchart.wechat.js


文件差异内容过多而无法显示
+ 674 - 200
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.framesplit.wechat.js


+ 8 - 1
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.hqIndexformula.wechat.js

@@ -927,8 +927,15 @@ HQIndexFormula.STICKLINE=function(data,price1,price2)
 }
 
 //导出统一使用JSCommon命名空间名
+export
+{
+    HQIndexFormula
+};
+
+/*
 module.exports =
 {
     //单个类导出
     JSCommon_HQIndexFormula: HQIndexFormula
-};
+};
+*/

+ 272 - 288
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.index.data.wechat.js

@@ -10,6 +10,11 @@
     系统录入的指标
 */
 
+import 
+{ 
+    IFrameSplitOperator,
+} from './umychart.framesplit.wechat.js'
+
 /*
     指标数据脚本 系统内置指标都写在这里
     Name:指标名字
@@ -23,6 +28,7 @@
     YSplitScale:  Y固定刻度 [1,8,10]
     YSpecificMaxMin: 固定Y轴最大最小值 { Max: 9, Min: 0, Count: 3 };
     OutName:动态输出变量名字 [{Name:原始变量名, DynamicName:动态名字格式}] 如 {Name:"MA1", DynamicName:"MA{M1}"};
+    YAxis:{ FloatPrecision:小数位数, StringFormat:, EnableRemoveZero }    //Y轴刻度输出格式
 */
 
 //周期条件枚举
@@ -67,11 +73,11 @@ function JSIndexScript()
 {
     this.DataMap = new Map(
         [
-            ['MA', this.MA], ['均线', this.MA], ['BOLL', this.BOLL], ['BBI', this.BBI],
+            ['MA', this.MA], ['均线', this.MA], ['BOLL', this.BOLL], ['BBI', this.BBI],['BOLL副图', this.BOLL2],
             ["MA4", this.MA4], ["MA5", this.MA5], ["MA6", this.MA6], ["MA7", this.MA7], ["MA8", this.MA8],
             ['DKX', this.DKX], ['MIKE', this.MIKE], ['PBX', this.PBX],
             ['ENE', this.ENE], ['MACD', this.MACD], ['KDJ', this.KDJ],["MACD2", this.MACD2],
-            ['VOL', this.VOL], ['成交量', this.VOL], ['RSI', this.RSI], ['BRAR', this.BRAR],
+            ['VOL', this.VOL],  ['VOL2', this.VOL2],['成交量', this.VOL], ['RSI', this.RSI], ['BRAR', this.BRAR],
             ['WR', this.WR], ['BIAS', this.BIAS], ['OBV', this.OBV],
             ['DMI', this.DMI], ['CR', this.CR], ['PSY', this.PSY],
             ['CCI', this.CCI], ['DMA', this.DMA], ['TRIX', this.TRIX],
@@ -100,12 +106,14 @@ function JSIndexScript()
 
             ['EMPTY', this.EMPTY],  //什么都不显示的指标
             ['操盘BS点', this.FXG_BSPoint],
+            ['EMA', this.EMA3], ['EMA4', this.EMA4], ['EMA5', this.EMA5],['EMA6', this.EMA6],
 
             ['CJL2', this.CJL],  //期货持仓量
+            ["持仓量", this.VOL_POSITION],  //成交量+持仓量
+
+            //指南针
+            ["ZNZ_CBAND", this.ZNZ_CBAND],["ZNZ_RPY2",this.ZNZ_RPY2],["ZNZ_RPY1", this.ZNZ_RPY1],
 
-            ['Zealink-资金吸筹', this.Zealink_Index1], ['Zealink-牛熊区间', this.Zealink_Index2], ['Zealink-持仓信号', this.Zealink_Index3],
-            ['Zealink-增减持', this.Zealink_Index4], ['Zealink-大宗交易', this.Zealink_Index5], ['Zealink-信托持股', this.Zealink_Index6],
-            ['Zealink-官网新闻', this.Zealink_Index7], ['Zealink-高管要闻', this.Zealink_Index8], ['Zealink-股权质押', this.Zealink_Index9],
 
             ['飞龙四式', this.Dragon4_Main], ['飞龙四式-附图', this.Dragon4_Fig],
             ['资金分析', this.FundsAnalysis], ['融资占比', this.MarginProportion],
@@ -149,13 +157,44 @@ JSIndexScript.AddIndex = function (aryIndex)  //添加自定义指标
     }
 }
 
+//修改指标属性
+JSIndexScript.ModifyAttribute=function(indexInfo, attribute)
+{
+    if (!attribute) return;
+
+    if (attribute.Args) indexInfo.Args=attribute.Args;    //外部可以设置参数
+    if (IFrameSplitOperator.IsNumber(attribute.FloatPrecision)) indexInfo.FloatPrecision=attribute.FloatPrecision;
+    if (IFrameSplitOperator.IsNumber(attribute.StringFormat)) indexInfo.StringFormat=attribute.StringFormat;
+    if (IFrameSplitOperator.IsBool(attribute.IsSync)) indexInfo.IsSync=attribute.IsSync;
+    if (IFrameSplitOperator.IsBool(attribute.IsShortTitle)) indexInfo.IsShortTitle=attribute.IsShortTitle;
+    if (attribute.TitleFont) indexInfo.TitleFont=attribute.TitleFont;
+    if (attribute.Lock) indexInfo.Lock=attribute.Lock;
+    if (IFrameSplitOperator.IsNumber(attribute.YSplitType)) indexInfo.YSplitType=attribute.YSplitType;
+    if (IFrameSplitOperator.IsBool(attribute.IsShowIndexTitle)) indexInfo.IsShowIndexTitle=attribute.IsShowIndexTitle;
+    if (IFrameSplitOperator.IsNumber(attribute.KLineType)) indexInfo.KLineType=attribute.KLineType;
+
+    if (attribute.YAxis)
+    {
+        var item=attribute.YAxis;
+        if (!indexInfo.YAxis) indexInfo.YAxis={ };
+        if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) indexInfo.YAxis.FloatPrecision=item.FloatPrecision;
+        if (IFrameSplitOperator.IsNumber(item.StringFormat)) indexInfo.YAxis.StringFormat=item.StringFormat;
+        if (IFrameSplitOperator.IsBool(item.EnableRemoveZero)) indexInfo.YAxis.EnableRemoveZero=item.EnableRemoveZero;
+    }
+}
+
 JSIndexScript.prototype.Get=function(id)
 {
     var data = g_CustomIndex.Get(id);
     if (data) return data;
 
     var func=this.DataMap.get(id);
-    if (func) return func();
+    if (func)
+    {
+        var data=func();
+        data.ID=id;
+        return data;
+    } 
 
     console.log(`[JSIndexScript::Get] can't find index by id=${id}`);
     return null;
@@ -297,11 +336,120 @@ MA8:MA(CLOSE,M8);'
     return data;
 }
 
+JSIndexScript.prototype.EMA3=function()
+{
+    let data=
+    {
+        Name:'EMA', Description:'指数移动平均值', IsMainIndex:true, StringFormat:2,
+        Args:
+        [ 
+            { Name:'M1', Value:5}, { Name:'M2', Value:10 }, { Name:'M3', Value:20}
+        ],
+        OutName:[ {Name:'MA1',DynamicName:"MA{M1}" },  {Name:'MA2',DynamicName:"MA{M2}" },{Name:'MA3',DynamicName:"MA{M3}" } ],
+        Script: //脚本
+'MA1:EMA(CLOSE,M1);\n\
+MA2:EMA(CLOSE,M2);\n\
+MA3:EMA(CLOSE,M3);'
+
+    };
+
+    return data;
+}
+
+
+JSIndexScript.prototype.EMA4=function()
+{
+    let data=
+    {
+        Name:'EMA', Description:'指数移动平均值', IsMainIndex:true, StringFormat:2,
+        Args:
+        [ 
+            { Name:'M1', Value:5}, { Name:'M2', Value:10 }, { Name:'M3', Value:20} , { Name:'M4', Value:60} 
+        ],
+        OutName:[ {Name:'MA1',DynamicName:"MA{M1}" },  {Name:'MA2',DynamicName:"MA{M2}" },{Name:'MA3',DynamicName:"MA{M3}" },{Name:'MA4',DynamicName:"MA{M4}" } ],
+        Script: //脚本
+'MA1:EMA(CLOSE,M1);\n\
+MA2:EMA(CLOSE,M2);\n\
+MA3:EMA(CLOSE,M3);\n\
+MA4:EMA(CLOSE,M4);'
+
+    };
+
+    return data;
+}
+
+
+JSIndexScript.prototype.EMA5=function()
+{
+    let data=
+    {
+        Name:'EMA', Description:'指数移动平均值', IsMainIndex:true, StringFormat:2,
+        Args:
+        [ 
+            { Name:'M1', Value:5}, { Name:'M2', Value:10 }, { Name:'M3', Value:20} , { Name:'M4', Value:60} ,
+            { Name:'M5', Value:0}
+        ],
+        OutName:[ {Name:'MA1',DynamicName:"MA{M1}" },  {Name:'MA2',DynamicName:"MA{M2}" },{Name:'MA3',DynamicName:"MA{M3}" },{Name:'MA4',DynamicName:"MA{M4}" },
+        {Name:'MA5',DynamicName:"MA{M5}" } ],
+        Script: //脚本
+'MA1:EMA(CLOSE,M1);\n\
+MA2:EMA(CLOSE,M2);\n\
+MA3:EMA(CLOSE,M3);\n\
+MA4:EMA(CLOSE,M4);\n\
+MA5:EMA(CLOSE,M5);'
+
+    };
+
+    return data;
+}
+
+
+JSIndexScript.prototype.EMA6=function()
+{
+    let data=
+    {
+        Name:'EMA', Description:'指数移动平均值', IsMainIndex:true, StringFormat:2,
+        Args:
+        [ 
+            { Name:'M1', Value:5}, { Name:'M2', Value:10 }, { Name:'M3', Value:20} , { Name:'M4', Value:60} ,
+            { Name:'M5', Value:0},{ Name:'M6', Value:0}
+        ],
+        OutName:[ {Name:'MA1',DynamicName:"MA{M1}" },  {Name:'MA2',DynamicName:"MA{M2}" },{Name:'MA3',DynamicName:"MA{M3}" },{Name:'MA4',DynamicName:"MA{M4}" },
+        {Name:'MA5',DynamicName:"MA{M5}" } ,{ Name:'MA6',DynamicName:"MA{M6}" } ],
+        Script: //脚本
+'MA1:EMA(CLOSE,M1);\n\
+MA2:EMA(CLOSE,M2);\n\
+MA3:EMA(CLOSE,M3);\n\
+MA4:EMA(CLOSE,M4);\n\
+MA5:EMA(CLOSE,M5);\n\
+MA6:EMA(CLOSE,M6);'
+
+    };
+
+    return data;
+}
+
 JSIndexScript.prototype.BOLL=function()
 {
     let data=
     {
-        Name: 'BOLL', Description: '布林线', IsMainIndex: true, KLineType: 2,
+        Name: 'BOLL', Description: '布林线', IsMainIndex: true,
+        Args:[ { Name:'M', Value:20} ],
+        Script: //脚本
+'BOLL:MA(CLOSE,M);\n\
+UB:BOLL+2*STD(CLOSE,M);\n\
+LB:BOLL-2*STD(CLOSE,M);'
+
+    };
+
+    return data;
+}
+
+JSIndexScript.prototype.BOLL2=function()
+{
+    let data=
+    {
+        Name: 'BOLL副图', Description: '布林线', IsMainIndex: false, KLineType: 2,
         Args:[ { Name:'M', Value:20} ],
         Script: //脚本
 'BOLL:MA(CLOSE,M);\n\
@@ -475,6 +623,23 @@ MA2:MA(VOLUME,M2);'
     return data;
 }
 
+JSIndexScript.prototype.VOL2=function()
+{
+    let data=
+    {
+        Name:'VOL', Description:'成交量', IsMainIndex:false,FloatPrecision:0,
+        Args:[ { Name:'M1', Value:5}, { Name:'M2', Value:10} ],
+        OutName:[ {Name:'MA1',DynamicName:"MA{M1}" },  {Name:'MA2',DynamicName:"MA{M2}" }],
+        Script: //脚本
+'VOL:VOL,VOLSTICK,STICKTYPE(1);\n\
+MA1:MA(VOL,M1);\n\
+MA2:MA(VOL,M2);'
+
+    };
+
+    return data;
+}
+
 JSIndexScript.prototype.RSI=function()
 {
     let data=
@@ -1379,7 +1544,7 @@ JSIndexScript.prototype.AMO = function ()
 {
     let data =
     {
-        Name: 'AMO', Description: '成交金额', IsMainIndex: false,
+        Name: 'AMO', Description: '成交金额', IsMainIndex: false, YAxis:{ FloatPrecision:0, StringFormat:2 }, StringFormat:2,
         Args: [{ Name: 'M1', Value: 5 }, { Name: 'M2', Value: 10 }],
         Script: //脚本
             'AMOW:AMOUNT/10000.0,VOLSTICK;\n\
@@ -1942,7 +2107,7 @@ JSIndexScript.prototype.SAR = function ()
         Name: 'SAR', Description: '抛物转向', IsMainIndex: true,
         Args: [{ Name: 'P', Value: 10 },{ Name: 'STEP', Value: 2 },{ Name: 'MAXP', Value: 20 }],
         Script: //脚本
-'S:SAR(P,STEP,MAXP),CIRCLEDOT;'
+'S:SAR(P,STEP,MAXP),UPDOWNDOT;'
 
     };
 
@@ -3071,306 +3236,60 @@ JSIndexScript.prototype.TEST = function ()
 {
     let data =
         {
-            Name: 'TEST', Description: '测试脚本', IsMainIndex: false,
-            Args: [{ Name: 'N', Value: 10 }],
+            Name: 'TEST', Description: '测试脚本', IsMainIndex: true,
+            Args: [{ Name: 'M1', Value: 5 },{ Name: 'M2', Value: 10 },{ Name: 'M3', Value: 15 }],
+            
             Script: //脚本
-                "买入压力:=H-REF(C,1)+(C-L);\n\
-                卖出压力:=REF(C,1)-L+(H-C);\n\
-                K1:=买入压力/(买入压力+卖出压力)/10;\n\
-                K2:=卖出压力/(买入压力+卖出压力)/10;\n\
-                A01:=(2*C+O+L+H)/5;\n\
-                A02:=(WINNER((A01 * 1.04)) * 100);\n\
-                套牢角度:=57.2958*ATAN(A02-REF(A02,1));\n\
-                A03:=(WINNER((A01 * 0.96)) * 100);\n\
-                盈利筹码:A03;\n\
-                A04:=A03;\n\
-                A08:=A02-A03;\n\
-                A06:=(100 - A02);\n\
-                套牢筹码:=A06;\n\
-                STICKLINE( 1,0,A04, 2,0),COLOR0000FF;\n\
-                STICKLINE( 1, 100,A02, 2,0),COLOR00FF00;\n\
-                STICKLINE( 1,A04,(100-A06), 2,0),COLORYELLOW;"
-        };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index1 = function () 
-{
-    let data =
-    {
-        Name: '资金吸筹', Description: '资金吸筹', IsMainIndex: false,
-        Args: [],
-        Script: //脚本
-'VAR1:=REF((LOW+OPEN+CLOSE+HIGH)/4,1);  \n\
-VAR2:= SMA(ABS(LOW - VAR1), 13, 1) / SMA(MAX(LOW - VAR1, 0), 10, 1);\n\
-VAR3:= EMA(VAR2, 10);\n\
-VAR4:= LLV(LOW, 33);\n\
-VAR5:= EMA(IF(LOW <= VAR4, VAR3, 0), 3) * 0.2;\n\
-主力进场: IF(VAR5 > REF(VAR5, 1), VAR5,0), COLORRED, NODRAW;\n\
-洗盘: IF(VAR5 < REF(VAR5, 1), VAR5,0), COLORYELLOW, NODRAW;\n\
-STICKLINE(VAR5> REF(VAR5, 1),0, VAR5, 50, 0), COLORRED;\n\
-STICKLINE(VAR5 < REF(VAR5, 1), 0, VAR5, 50, 0), COLORYELLOW;'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index2 = function () 
-{
-    let data =
-    {
-        Name: '牛熊区间', Description: '牛熊区间', IsMainIndex: false, YSpecificMaxMin: { Max: 100, Min: 1, Count: 4 }, YSplitScale: [1, 50, 100],
-        Args: [],
-        Script: //脚本
-'短高H:=(20*H+19*REF(H,1)+18*REF(H,2)+17*REF(H,3)+16*REF(H,4)+15*REF(H,5)+14*REF(H,6)\n\
-+ 13 * REF(H, 7) + 12 * REF(H, 8) + 11 * REF(H, 9) + 10 * REF(H, 10) + 9 * REF(H, 11) + 8 * REF(H, 12)\n\
-+ 7 * REF(H, 13) + 6 * REF(H, 14) + 5 * REF(H, 15) + 4 * REF(H, 16) + 3 * REF(H, 17) + 2 * REF(H, 18) +\n\
-REF(H, 20))/ 210, COLORBLUE, LINETHICK1;\n\
-短低L:= (20 * L + 19 * REF(L, 1) + 18 * REF(L, 2) + 17 * REF(L, 3) + 16 * REF(L, 4) + 15 * REF(L, 5) + 14 * REF(L, 6)\n\
-+ 13 * REF(L, 7) + 12 * REF(L, 8) + 11 * REF(L, 9) + 10 * REF(L, 10) + 9 * REF(L, 11) + 8 * REF(L, 12)\n\
-+ 7 * REF(L, 13) + 6 * REF(L, 14) + 5 * REF(L, 15) + 4 * REF(L, 16) + 3 * REF(L, 17) + 2 * REF(L, 18) +\n\
-REF(L, 20)) / 210, COLORBLUE, LINETHICK1;\n\
-D90H:= EMA(短高H, 90), COLORRED, LINETHICK1;\n\
-D90L:= EMA(短低L, 90), COLORRED, LINETHICK1;\n\
-D90差:= D90H - D90L;\n\
-D90顶:= D90H + D90差 * 2, COLORRED, LINETHICK1;\n\
-D90底:= D90L - D90差 * 2, COLORRED, LINETHICK1;\n\
-高0:= (EMA(EMA(H, 25), 25) - EMA(EMA(L, 25), 25)) * 1 + EMA(EMA(H, 25), 25), LINETHICK1, COLORWHITE;\n\
-低0:= EMA(EMA(L, 25), 25) - (EMA(EMA(H, 25), 25) - EMA(EMA(L, 25), 25)) * 1, LINETHICK1, COLORWHITE;\n\
-多头定位:= 低0 >= D90底 AND 高0 >= D90顶;\n\
-空头定位:= 高0 <= D90顶 AND 低0 <= D90底;\n\
-震荡定位:= 低0 >= D90底 AND 高0 <= D90顶;\n\
-牛市: IF(多头定位 == 1, 100, 1), COLORRED, NODRAW;\n\
-熊市: IF(空头定位 == 1, 100, 1), COLORGREEN, NODRAW;\n\
-震荡: IF(震荡定位 == 1, 100, 1), COLORGRAY, NODRAW;\n\
-STICKLINE(多头定位 == 1, 100, 1, 100, 0), COLORRED;\n\
-STICKLINE(空头定位 == 1, 100, 1, 100, 0), COLORGREEN;\n\
-STICKLINE(震荡定位 == 1, 100, 1, 100, 0), COLORGRAY;'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index3 = function () 
-{
-    let data =
-    {
-        Name: '持仓信号', Description: '持仓信号', IsMainIndex: true,
-        Args: [],
-        Script: //脚本
-'买线:=EMA(C,2);\n\
-卖线:=EMA(SLOPE(C,30)*5+C,20); \n\
-BU:=CROSS(买线,卖线);\n\
-SEL:=CROSS(卖线,买线);\n\
-\n\
-STICKLINE(买线>=卖线 AND CLOSE>OPEN,LOW,HIGH,0,1),COLORRED;\n\
-STICKLINE(买线>=卖线 AND CLOSE<OPEN,LOW,HIGH,0,1),COLORRED;\n\
-STICKLINE(买线>=卖线 AND CLOSE>OPEN,CLOSE,OPEN,50,1),COLORRED;\n\
-STICKLINE(买线>=卖线 AND CLOSE<OPEN,CLOSE,OPEN,50,0),COLORRED;\n\
-STICKLINE(买线<卖线 AND CLOSE<OPEN,LOW,HIGH,0,1),COLORGREEN;\n\
-STICKLINE(买线<卖线 AND CLOSE>OPEN,LOW,HIGH,0,1),COLORGREEN;\n\
-STICKLINE(买线<卖线 AND CLOSE<OPEN,CLOSE,OPEN,50,0),COLORGREEN;\n\
-STICKLINE(买线<卖线 AND CLOSE>OPEN,CLOSE,OPEN,50,1),COLORGREEN;\n\
-\n\
-HHJSJDA:=(3*CLOSE+OPEN+LOW+HIGH)/6;\n\
-HHJSJDB:=(19*HHJSJDA+19*REF(HHJSJDA,1)+18*REF(HHJSJDA,2)+17*REF(HHJSJDA,3)+16*REF(HHJSJDA,4)+15*REF(HHJSJDA,5)+14*REF(HHJSJDA,6)\n\
-+13*REF(HHJSJDA,7)+12*REF(HHJSJDA,8)+11*REF(HHJSJDA,9)+10*REF(HHJSJDA,10)+9*REF(HHJSJDA,11)+8*REF(HHJSJDA,12)+7*REF(HHJSJDA,13)+6*REF(HHJSJDA,14)+5*REF(HHJSJDA,15)+4*REF(HHJSJDA,16)+3*REF(HHJSJDA,17)+2*REF\n\
-(HHJSJDA,20)+REF(HHJSJDA,19))/210,COLORYELLOW;\n\
-HHJSJDC:=MA(HHJSJDB,5),COLORRED;\n\
-快线:HHJSJDB,COLORYELLOW;\n\
-慢线:HHJSJDC,COLORRED;\n\
-\n\
-SVAR11:=HHV(HIGH,34);\n\
-SVAR14:=CLOSE-REF(CLOSE,1);\n\
-SVAR15:=MAX(SVAR14,0);\n\
-SVAR16:=ABS(SVAR14);\n\
-SVAR17:=SMA(SVAR15,7,1)/SMA(SVAR16,7,1)*100;\n\
-SVAR18:=SMA(SVAR15,13,1)/SMA(SVAR16,13,1)*100;\n\
-SVAR19:=BARSCOUNT(CLOSE);\n\
-SVAR20:=SMA(MAX(SVAR14,0),6,1)/SMA(ABS(SVAR14),6,1)*100;\n\
-SVAR21:=(-200)*(HHV(HIGH,60)-CLOSE)/(HHV(HIGH,60)-LLV(LOW,60))+100;\n\
-SVAR1A:=(CLOSE-LLV(LOW,15))/(HHV(HIGH,15)-LLV(LOW,15))*100;\n\
-SVAR1B:=SMA((SMA(SVAR1A,4,1)-50)*2,3,1);\n\
-SVAR1C:=(INDEXC-LLV(INDEXL,14))/(HHV(INDEXH,14)-LLV(INDEXL,14))*100;\n\
-SVAR1D:=SMA(SVAR1C,4,1);\n\
-SVAR1E:=SMA(SVAR1D,3,1);\n\
-SVAR1F:=(HHV(HIGH,30)-CLOSE)/CLOSE*100;\n\
-SVAR22:=SVAR20<=25 AND SVAR21<-95 AND SVAR1F>20 AND SVAR1B<-30 AND SVAR1E<30 AND SVAR11-CLOSE>=-0.25 AND SVAR17<22 AND SVAR18<28 AND SVAR19>50;\n\
-BUY3:=CROSS(SVAR22,0.5) AND COUNT(SVAR22==1,10)==1;\n\
-\n\
-SVARF:=LOW*0.9;\n\
-SVAR10X:=100-3*SMA((OPEN-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1)+2*SMA(SMA((OPEN-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1),15,1);\n\
-SVAR11X:=SVARF<REF(SVAR10X,1) AND VOL>REF(VOL,1) AND CLOSE>REF(CLOSE,1);\n\
-BUY2:=SVAR11X AND COUNT(SVAR11X,30)==1;\n\
-\n\
-VAR1:=(CLOSE+HIGH+LOW+OPEN)/4;\n\
-VAR2:=SUMBARS(VOL,CAPITAL);\n\
-VAR3:=HHV(VAR1,VAR2);\n\
-VAR4:=LLV(VAR1,VAR2);\n\
-VAR5:=(2*VAR1-VAR4-REF(VAR4,1))/(VAR3-VAR4);\n\
-VAR6:=(VAR1-VAR4)/(VAR3-VAR4);\n\
-VAR7:=IF(VAR1<=VAR4,VAR5*60,VAR6*60);\n\
-VAR8:=600*(EMA(CLOSE,3)-EMA(LOW,30))/EMA(LOW,30);\n\
-VAR9:=EMA(VAR8,7);\n\
-VARC:=HHV(HIGH,9)-LLV(LOW,9);\n\
-VARD:=HHV(HIGH,9)-CLOSE;\n\
-VARE:=CLOSE-LLV(LOW,9);\n\
-VARF:=VARD/VARC*100-70;\n\
-VAR10:=(CLOSE-LLV(LOW,60))/(HHV(HIGH,60)-LLV(LOW,60))*100;\n\
-VAR11:=(2*CLOSE+HIGH+LOW)/4;\n\
-VAR12:=SMA(VARE/VARC*100,3,1);\n\
-VAR13:=LLV(LOW,34);\n\
-VAR14:=SMA(VAR12,3,1)-SMA(VARF,9,1);\n\
-VAR15:=IF(VAR14>100,VAR14-100,0);\n\
-VAR16:=HHV(HIGH,34);\n\
-VAR17:=EMA((VAR11-VAR13)/(VAR16-VAR13)*100,8);\n\
-VAR18:=EMA(VAR17,5);\n\
-BUY:=STICKLINE(VAR17-VAR18>0,VAR17,VAR18,8,1),COLORRED;\n\
-SELL:=STICKLINE(VAR17-VAR18<0,VAR17,VAR18,8,1),COLORGREEN;\n\
-BUY1:=VAR17>VAR18 AND REF(VAR17,1)<REF(VAR18,1);\n\
-SELL1:=VAR17<VAR18 AND REF(VAR17,1)>REF(VAR18,1);\n\
-\n\
-短高H:=(20*H+19*REF(H,1)+18*REF(H,2)+17*REF(H,3)+16*REF(H,4)+15*REF(H,5)+14*REF(H,6)\n\
-+13*REF(H,7)+12*REF(H,8)+11*REF(H,9)+10*REF(H,10)+9*REF(H,11)+8*REF(H,12)\n\
-+7*REF(H,13)+6*REF(H,14)+5*REF(H,15)+4*REF(H,16)+3*REF(H,17)+2*REF(H,18)+\n\
-REF(H,20))/210,COLORBLUE,LINETHICK1;\n\
-短低L:=(20*L+19*REF(L,1)+18*REF(L,2)+17*REF(L,3)+16*REF(L,4)+15*REF(L,5)+14*REF(L,6)\n\
-+13*REF(L,7)+12*REF(L,8)+11*REF(L,9)+10*REF(L,10)+9*REF(L,11)+8*REF(L,12)\n\
-+7*REF(L,13)+6*REF(L,14)+5*REF(L,15)+4*REF(L,16)+3*REF(L,17)+2*REF(L,18)+\n\
-REF(L,20))/210,COLORBLUE,LINETHICK1;\n\
-D90H:=EMA(短高H,90),COLORRED,LINETHICK1;\n\
-D90L:=EMA(短低L,90),COLORRED,LINETHICK1;\n\
-D90差:=D90H-D90L;\n\
-D90顶:=D90H+D90差*2,COLORRED,LINETHICK1;\n\
-D90底:=D90L-D90差*2,COLORRED,LINETHICK1;\n\
-高0:=(EMA(EMA(H,25),25)-EMA(EMA(L,25),25))*1+EMA(EMA(H,25),25),LINETHICK1,COLORWHITE;\n\
-低0:=EMA(EMA(L,25),25)-(EMA(EMA(H,25),25)-EMA(EMA(L,25),25))*1,LINETHICK1,COLORWHITE;\n\
-多头定位:=低0>=D90底 AND 高0>=D90顶;\n\
-空头定位:=高0<=D90顶 AND 低0<=D90底;\n\
-震荡定位:=低0>=D90底 AND 高0<=D90顶;\n\
-\n\
-牛市:=多头定位==1;\n\
-熊市:=空头定位==1;\n\
-震荡:=震荡定位==1;\n\
-\n\
-非牛市:=熊市 OR 震荡;\n\
-非熊市:=牛市 OR 震荡;\n\
-\n\
-BUY11:=BUY1 AND 非熊市;\n\
-SELL11:=SELL1 AND 震荡定位==0;\n\
-\n\
-BUY111:=BUY11 AND COUNT(BUY11,10)<2;\n\
-BUY0:=BUY111 AND COUNT(BUY111,21)==1;\n\
-SELL111:=SELL11 AND COUNT(SELL11,10)<2;\n\
-SELL0:=SELL111 AND COUNT(SELL111,10)==1;\n\
-\n\
-XK1:=EMA(100*(CLOSE-LLV(LOW,34))/(HHV(HIGH,34)-LLV(LOW,34)),3)/4;\n\
-上穿:=REF(XK1,1)<5 AND XK1>=5;\n\
-BUY4:=上穿 AND COUNT(XK1<2,12)<1;\n\
-\n\
-SELL2:=REF(XK1,1)<=22.5 AND XK1>22.5 AND COUNT(REF(XK1,1)>=22.5 AND XK1<22.5,5)>0;\n\
-SELL3:=REF(XK1,1)>=21.5 AND XK1<21.5 AND COUNT(REF(XK1,1)>=22.5 AND XK1<22.5,12)>1;\n\
-SELL4:=SELL2 OR SELL3 AND COUNT((SELL2 OR SELL3)==1,5)==1;\n\
-\n\
-SUPERDRAWTEXT(BUY0,L,"机会",2,10),COLORRED;\n\
-SUPERDRAWTEXT(SELL0,H,"风险",1,10),COLORGREEN;\n\
-SUPERDRAWTEXT(BUY2,L,"机会",2,10),COLORRED;\n\
-SUPERDRAWTEXT(BUY4,L,"机会",2,10),COLORRED;\n\
-SUPERDRAWTEXT(SELL4,H,"风险",1,10),COLORGREEN;'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index4 = function () 
-{
-    let data =
-    {
-        Name: '股东实际增减持', Description: '股东实际增减持', IsMainIndex: false, FloatPrecision: 0,
-        Args: [],
-        Script: //脚本
-'增持:NEWS(4),NODRAW,COLORRED;\n\
-减持:NEWS(5),NODRAW,COLORGREEN;\n\
-STICKLINE(增持>0,0,增持,1,0),COLORRED;\n\
-STICKLINE(减持<0,0,减持,1,0),COLORGREEN;'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index5 = function () 
-{
-    let data =
-    {
-        Name: '大宗交易', Description: '大宗交易', IsMainIndex: false, FloatPrecision: 0,
-        Args: [],
-        Script: //脚本
-            '交易次数:NEWS(7);'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index6 = function () 
-{
-    let data =
-    {
-        Name: '信托持股', Description: '信托持股', IsMainIndex: false, FloatPrecision: 0,
-        Args: [],
-        Script: //脚本
-            '家数:NEWS(6);'
-    };
-
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index7 = function () {
-    let data =
-    {
-        Name: '官网新闻', Description: '官网新闻', IsMainIndex: false, FloatPrecision: 0,
-        Args: [],
-        Script: //脚本
-            '个数:NEWS(8);'
-    };
+                //"T2:KDJ.J;"+
+                //"收盘价:C;成交量:VOL, SINGLELINE, RGB(100,100,100);"
+                `PARTLINE(CLOSE,CLOSE>OPEN,RGB(255,0,0),CLOSE<OPEN,RGB(0,255,0),1,RGB(0,0,255)),LINETHICK2,DOTLINE,LINEDASH(10,5);`
+                //"T2:IF(KDJ.J>-10,KDJ.J#WEEK,0);"
+                
 
-    return data;
-}
-
-JSIndexScript.prototype.Zealink_Index8 = function () {
-    let data =
-    {
-        Name: '高管要闻', Description: '高管要闻', IsMainIndex: false, FloatPrecision: 0,
-        Args: [],
-        Script: //脚本
-            '个数:NEWS(9);'
-    };
+                /*
+            Script:'收:=C("000001.SH");' +
+            '开:=O("000001.SH");\n' +
+            '低:=L("000001.SH");'+
+            '高:=H("000001.SH");'+
+            "DRAWKLINE(高,开,低,收), COLORYELLOW;"
+            */
+            
+            //"DRAWGBK_DIV(C>O,RGB(221 ,160 ,221),RGB(100 ,250, 250),1,1);"
+            /*
+            'TEXT:IF(PERIOD=5,"","不支持");\n'+
+           'DRAWTEXTREL(500,500,TEXT),FONTSIZE20;\n'+
+            'TESTSKIP(PERIOD!=5);\n'+
+            'T:C;\n'+
+            'T2:O;\n'
+            */
+        };
 
     return data;
 }
 
-JSIndexScript.prototype.Zealink_Index9 = function () 
+JSIndexScript.prototype.CJL = function () 
 {
     let data =
     {
-        Name: '股权质押', Description: '股权质押', IsMainIndex: false, FloatPrecision: 0,
+        Name: 'CJL', Description: '期货持仓量', IsMainIndex: false,
         Args: [],
         Script: //脚本
-            '次数:NEWS(10);'
+            "成交量:VOL,VOLSTICK;\n\
+持仓量:VOLINSTK,LINEOVERLAY;"
     };
 
     return data;
 }
 
-JSIndexScript.prototype.CJL = function () 
+JSIndexScript.prototype.VOL_POSITION=function()
 {
     let data =
     {
-        Name: 'CJL', Description: '期货持仓量', IsMainIndex: false,
+        Name: '持仓量', Description: '持仓量', IsMainIndex: false,
         Args: [],
         Script: //脚本
             "成交量:VOL,VOLSTICK;\n\
-持仓量:VOLINSTK,LINEOVERLAY;"
+持仓量:VOLINSTK,SINGLELINE;"
     };
 
     return data;
@@ -3501,14 +3420,79 @@ JSIndexScript.prototype.WAVE = function ()
     return data;
 }
 
+JSIndexScript.prototype.ZNZ_CBAND = function() 
+{
+    let data =
+    {
+        Name: 'ZNZ_CBAND', Description: '优化成本布林带宽', IsMainIndex: false,
+        Args: [{ Name: 'N', Value: 20 }],
+        Script: //脚本
+`A:=AMOUNT/(100*VOL);
+BBI1:=MA(A,N);
+UPR0:=BBI1+STD(A,N);
+DWN0:=BBI1-STD(A,N);
+UPR1:=BBI1+1.7*STD(A,N);
+DWN1:=BBI1-1.7*STD(A,N);
+优化成本布林带宽:100*1.7*STD(A,N);`
+    };
+
+    return data;
+}
 
+JSIndexScript.prototype.ZNZ_RPY2 = function() 
+{
+    let data =
+    {
+        Name: 'ZNZ_RPY2', Description: '两年相对价位', IsMainIndex: false,
+        Script: //脚本
+`A:=REF(HHV(CLOSE,480),1);
+B:=REF(LLV(CLOSE,480),1);
+100*(CLOSE-B)/(A-B);`
+    };
+
+    return data;
+}
+
+JSIndexScript.prototype.ZNZ_RPY1 = function() 
+{
+    let data =
+    {
+        Name: 'ZNZ_RPY1', Description: '年相对价位', IsMainIndex: false,
+        Args: [{ Name: 'N', Value: 240 }],
+        Script: //脚本
+`A:=REF(HHV(CLOSE,N),1);
+B:=REF(LLV(CLOSE,N),1);
+100*(CLOSE-B)/(A-B);`
+    };
+
+    return data;
+}
+
+
+///////////////////////////////////////////////////////////////////
+//导出
+var JSCommonIndexScript=
+{
+    JSIndexScript: JSIndexScript
+};
+
+export
+{
+    JSCommonIndexScript,
+    JSIndexScript
+};
+
+/*
 module.exports =
 {
     JSCommonIndexScript:
     {
         JSIndexScript: JSIndexScript
-    }
+    },
+
+    JSCommon_JSIndexScript:JSIndexScript,
 };
+*/
 
 
 

文件差异内容过多而无法显示
+ 3801 - 265
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.index.wechat.js


+ 155 - 21
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.klineinfo.wechat.js

@@ -11,9 +11,14 @@
 */
 
 import {
-    JSCommonResource_Global_JSChartResource as g_JSChartResource,
+    g_JSChartResource,
 } from './umychart.resource.wechat.js'
 
+import 
+{
+    IFrameSplitOperator,
+} from './umychart.framesplit.wechat.js'
+
 var KLINE_INFO_TYPE=
 {
     INVESTOR:1,         //互动易
@@ -68,9 +73,11 @@ JSKLineInfoMap.Get=function(id)
 
 function IKLineInfo()
 {
-    this.MaxReqeustDataCount=1000;
+    this.MaxRequestDataCount=1000;
     this.StartDate=20160101;
     this.Data;
+    this.ClassName='IKLineInfo';
+    this.Explain="IKLineInfo";
 
     this.GetToday=function()
     {
@@ -78,6 +85,68 @@ function IKLineInfo()
         var today=date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
         return today;
     }
+
+    this.GetRequestData=function(hqChart)
+    {
+        var obj=
+        { 
+            Symbol:hqChart.Symbol ,
+            MaxRequestDataCount: hqChart.MaxRequestDataCount,            //日线数据个数
+            MaxRequestMinuteDayCount:hqChart.MaxRequestMinuteDayCount,    //分钟数据请求的天数
+            Period:hqChart.Period       //周期
+        };
+
+        //K线数据范围
+        var hisData=null;
+        if (hqChart.ChartOperator_Temp_GetHistroyData)  hisData=hqChart.ChartOperator_Temp_GetHistroyData();
+        if (hisData)
+            obj.DateRange=hisData.GetDateRange();
+        
+        return obj;
+    }
+
+    this.NetworkFilter=function(hqChart,callInfo)
+    {
+        if (!hqChart.NetworkFilter) return false;
+
+        var self=this;
+
+        var param=
+        {
+            HQChart:hqChart,
+        };
+
+        var obj=
+        {
+            Name:`${this.ClassName}::RequestData`, //类名::函数
+            Explain:this.Explain,
+            Request:this.GetRequestData(hqChart), 
+            Self:this,
+            HQChart:hqChart,
+            CallInfo:callInfo,
+            PreventDefault:false
+        };
+
+        if (callInfo) 
+        {
+            if (callInfo.Update==true) 
+            {
+                obj.Update={ Start:{ Date: callInfo.StartDate } };
+                param.Update={ Start:{ Date: callInfo.StartDate } };
+            }
+
+            obj.CallFunctionName=callInfo.FunctionName; //内部调用函数名
+        }
+
+        hqChart.NetworkFilter(obj, function(data) 
+        { 
+            self.RecvData(data,param);
+        });
+
+        if (obj.PreventDefault==true) return true;   //已被上层替换,不调用默认的网络请求
+        
+        return false;
+    }
 }
 
 /*
@@ -89,12 +158,17 @@ function InvestorInfo()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName="InvestorInfo";
+    this.Explain="互动易";
+
+    this.RequestData=function(hqChart, obj)
     {
         var self = this;
         var param={ HQChart:hqChart };
         this.Data=[];
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Investor.ApiUrl,
@@ -104,7 +178,7 @@ function InvestorInfo()
                 "symbol": [param.HQChart.Symbol],
                 "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -146,12 +220,25 @@ function AnnouncementInfo()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName='AnnouncementInfo';
+    this.Explain="公告";
+
+    this.RequestData=function(hqChart, obj)
     {
         var self = this;
         var param={ HQChart:hqChart };
-        this.Data=[];
 
+        if (obj && obj.Update===true)   //更新模式 不清内存数据
+        {
+
+        }
+        else
+        {
+            this.Data=[];
+        }
+
+        if (this.NetworkFilter(hqChart, obj)) return; //已被上层替换,不调用默认的网络请求
+        
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Announcement.ApiUrl,
@@ -161,7 +248,7 @@ function AnnouncementInfo()
                 "symbol": [param.HQChart.Symbol],
                 "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -224,12 +311,17 @@ function PforecastInfo()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName='PforecastInfo';
+    this.Explain='业绩预告';
+
+    this.RequestData=function(hqChart,obj)
     {
         var self = this;
         this.Data = [];
         var param={ HQChart:hqChart };
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Pforecast.ApiUrl,
@@ -242,7 +334,7 @@ function PforecastInfo()
                 ],
                 "symbol": [param.HQChart.Symbol],
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -295,13 +387,18 @@ function ResearchInfo()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName='ResearchInfo';
+    this.Explain='投资者关系';
+
+    this.RequestData=function(hqChart,obj)
     {
         var self = this;
         var param= { HQChart:hqChart };
 
         this.Data=[];
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Research.ApiUrl,
@@ -311,7 +408,7 @@ function ResearchInfo()
                 "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
                 "symbol": [param.HQChart.Symbol],
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -356,12 +453,17 @@ function BlockTrading()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName='BlockTrading';
+    this.Explain='大宗交易';
+
+    this.RequestData=function(hqChart,obj)
     {
         var self = this;
         var param={ HQChart:hqChart,};
         this.Data=[];
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.BlockTrading.ApiUrl,
@@ -375,7 +477,7 @@ function BlockTrading()
                 ],
                 "symbol": [param.HQChart.Symbol],
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -433,13 +535,18 @@ function TradeDetail()
     this.newMethod();
     delete this.newMethod;
 
-    this.RequestData=function(hqChart)
+    this.ClassName='TradeDetail';
+    this.Explain='龙虎榜';
+
+    this.RequestData=function(hqChart,obj)
     {
         var self = this;
         var param={ HQChart:hqChart };
 
         this.Data=[];
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
             url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.TradeDetail.ApiUrl,
@@ -453,7 +560,7 @@ function TradeDetail()
                 ],
                 "symbol": [param.HQChart.Symbol],
                 "start":0,
-                "end":this.MaxReqeustDataCount,
+                "end":this.MaxRequestDataCount,
             },
             method:"post",
             dataType: "json",
@@ -509,6 +616,8 @@ function PolicyInfo()
     this.newMethod();
     delete this.newMethod;
 
+    this.ClassName='PolicyInfo';
+    this.Explain='策略信息';
     this.PolicyList = []; //筛选的策略名字 {Name:策略名, Guid:策略的GUID}
 
     this.SetPolicyList=function(aryPolicy)
@@ -519,7 +628,7 @@ function PolicyInfo()
         }
     }
 
-    this.RequestData = function (hqChart) 
+    this.RequestData = function (hqChart,obj) 
     {
         var self = this;
         this.Data = [];
@@ -527,6 +636,8 @@ function PolicyInfo()
 
         // setTimeout(function () { self.RecvData(null, param); }, 2000); //模拟数据到达
 
+        if (this.NetworkFilter(hqChart,obj)) return; //已被上层替换,不调用默认的网络请求
+
         //请求数据
         wx.request({
           url: g_JSChartResource.Domain + g_JSChartResource.KLine.Info.Policy.ApiUrl,
@@ -536,7 +647,7 @@ function PolicyInfo()
             "condition": [
               { "item": ["date", "int32", "gte", this.StartDate, "lte", this.GetToday()] }],
             "start": 0,
-            "end": this.MaxReqeustDataCount
+            "end": this.MaxRequestDataCount
           },
           method: "post",
           dataType: "json",
@@ -674,9 +785,23 @@ function MarketEventInfo()
             for (var j in event.data) 
             {
                 var item = event.data[j];
-                if (item.length < 2) continue;
-                var info = { Date: event.date, Time: item[0], Title: item[1], Type: 0 };
-                this.Data.push(info);
+                if (Array.isArray(item))
+                {
+                    if (item.length < 2) continue;
+                    var info = { Date: event.date, Time: item[0], Title: item[1], Type: 0 };
+                    this.Data.push(info);
+                }
+                else    //2.0 格式
+                {
+                    if (!IFrameSplitOperator.IsNumber(item.Date) || !IFrameSplitOperator.IsNumber(item.Time) || !item.Title) continue;
+                    var info={ Date:item.Date, Time:item.Time, Title:item.Title, Type:0 };
+                    if (item.Color) info.Color=item.Color;
+                    if (item.BGColor) info.BGColor=item.BGColor;
+                    if (IFrameSplitOperator.IsNumber(item.Price)) info.Price=item.Price;
+                    if (item.Content) info.Content=item.Content;
+                    if (item.Link) info.Link=item.Link;
+                    this.Data.push(info);
+                }
             }
         }
 
@@ -686,6 +811,14 @@ function MarketEventInfo()
 }
 
 //导出统一使用JSCommon命名空间名
+export
+{
+    JSKLineInfoMap,
+    KLINE_INFO_TYPE,
+    JSMinuteInfoMap,
+};
+
+/*
 module.exports =
 {
     JSCommonKLineInfo:
@@ -699,4 +832,5 @@ module.exports =
     JSCommon_JSKLineInfoMap: JSKLineInfoMap,
     JSCommon_KLINE_INFO_TYPE: KLINE_INFO_TYPE,
     JSCommon_JSMinuteInfoMap: JSMinuteInfoMap,
-};
+};
+*/

+ 7 - 5
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.regressiontest.wechat.js

@@ -401,10 +401,12 @@ RegressionTest.GetPolicyData=function(data)     //获取指标数据里面需要
 
 
 //导出
-module.exports =
+var JSCommonTest=
 {
-    JSCommonTest:
-    {
-        RegressionTest: RegressionTest, //个股单策略回测
-    },
+    RegressionTest: RegressionTest, //个股单策略回测
 };
+
+export
+{
+    JSCommonTest
+};

文件差异内容过多而无法显示
+ 723 - 103
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.resource.wechat.js


+ 387 - 249
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.style.wechat.js

@@ -9,271 +9,412 @@
 
     不同风格行情配置文件 (微信小程序版本)
 */
-
-var BLACK_STYLE =    //黑色风格
+function GetBlackStyle()
 {
-    BGColor:'rgb(0,0,0)',
-    TooltipBGColor: "rgb(255, 255, 255)", //背景色
-    TooltipAlpha: 0.92,                  //透明度
+    var BLACK_STYLE =    //黑色风格
+    {
+        BGColor:'rgb(0,0,0)',
+        TooltipBGColor: "rgb(255, 255, 255)", //背景色
+        TooltipAlpha: 0.92,                  //透明度
+
+        SelectRectBGColor: "rgba(1,130,212,0.06)", //背景色
+        //  SelectRectAlpha: 0.06;                  //透明度
+
+        UpBarColor: "rgb(238,21,21)",
+        DownBarColor: "rgb(25,158,0)",
+        UnchagneBarColor: "rgb(199,199,199)",
+        EmptyBarBGColor:'rgb(0,0,0)',   //空心柱子背景色
+        
+        Minute: {
+        VolBarColor: null,
+        PriceColor: "rgb(25,180,231)",
+        AvPriceColor: "rgb(255,236,0)",
+        },
+
+
+        DefaultTextColor: "rgb(101,104,112)",
+        DefaultTextFont: '14px 微软雅黑',
+        IndexTitleBGColor:'rgb(211,211,211)',
+        IndexTitleColor:"rgb(101,104,112)",
+        OverlayIndexTitleBGColor:'rgba(0,0,0,0.7)', //叠加指标背景色
+        DynamicTitleFont: '12px 微软雅黑', //指标动态标题字体
+
+
+        UpTextColor: "rgb(238,21,21)",
+        DownTextColor: "rgb(25,158,0)",
+        UnchagneTextColor: "rgb(101,104,112)",
+        CloseLineColor: 'rgb(178,34,34)',
+
+        IndexTitle:
+        {
+            UpDownArrow:    //数值涨跌箭头
+            {
+                //UpColor:"rgb(238,21,21)",   //上涨
+                //DownColor:"rgb(25,158,0)",  //下跌
+                UnchangeColor:"rgb(190, 190 ,190)"  //不变
+            },
 
-    SelectRectBGColor: "rgba(1,130,212,0.06)", //背景色
-    //  SelectRectAlpha: 0.06;                  //透明度
+            //NameArrow:{ Color:"rgb(190, 190 ,190)", Space:2, Symbol:'▼' },
+        },
 
-    UpBarColor: "rgb(238,21,21)",
-    DownBarColor: "rgb(25,158,0)",
-    UnchagneBarColor: "rgb(199,199,199)",
+        Title:
+        {
+            TradeIndexColor:'rgb(105,105,105)', //交易指标颜色
+            ColorIndexColor:'rgb(112,128,144)',  //五彩K线颜色
+
+            VolColor:"rgb(101,104,112)",       //标题成交量
+            AmountColor:"rgb(101,104,112)",    //成交金额 
+            DateTimeColor:"rgb(101,104,112)",  //时间,日期  
+            SettingColor:"rgb(101,104,112)",   //周期,复权
+            NameColor:"rgb(101,104,112)" ,     //股票名称
+            TurnoverRateColor:'rgb(101,104,112)',       //换手率
+            PositionColor:"rgb(101,104,112)"       //持仓
+        },
+
+        FrameBorderPen: "rgba(236,236,236,0.13)",     //边框
+        FrameSplitPen: "rgba(236,236,236,0.13)",          //分割线
+        FrameSplitTextColor: "rgb(101,104,112)",     //刻度文字颜色
+        FrameSplitTextFont: "12px 微软雅黑",        //坐标刻度文字字体
+        FrameTitleBGColor: "rgb(246,251,253)",      //标题栏背景色
+        Frame: { XBottomOffset: 0 },   //X轴文字向下偏移
+
+        FrameLatestPrice: {
+            TextColor: 'rgb(255,255,255)',   //最新价格文字颜色
+            UpBarColor: "rgb(238,21,21)",    //上涨
+            DownBarColor: "rgb(25,158,0)",   //下跌
+            UnchagneBarColor: "rgb(190,190,190)",   //平盘
+            BGAlpha: 0.6
+        },
+
+        CorssCursorBGColor: "rgb(43,54,69)",            //十字光标背景
+        CorssCursorTextColor: "rgb(255,255,255)",
+        CorssCursorTextFont: "12px 微软雅黑",
+        CorssCursorHPenColor: "rgb(130,130,130)",           //十字光标线段颜色
+        CorssCursorVPenColor: "rgb(130,130,130)",           //十字光标线段颜色
+
+        CorssCursor:
+        {
+            CorssPoint:{ Center:{ Color:"rgb(50,171,205)" }, Border:{ Color:'rgba(0,0,0,0.8)', Width:1 } }
+        },
 
-    Minute: {
-      VolBarColor: null,
-      PriceColor: "rgb(25,180,231)",
-      AvPriceColor: "rgb(255,236,0)",
-    },
+        KLine:
+        {
+            MaxMin: { Font: '12px 微软雅黑', Color: 'rgb(111,111,111)', RightArrow:"→", LeftArrow:"←", HighYOffset:0, LowYOffset:0 },   //K线最大最小值显示
+            Info:  //信息地雷
+            {
+                Color: 'rgb(205,149,12)',
+                TextColor: '#afc0da',
+                TextBGColor: '#1a283e',
+                Investor:
+                {
+                    ApiUrl: '/API/NewsInteract', //互动易
+                },
+                Announcement:                                           //公告
+                {
+                    ApiUrl: '/API/ReportList',
+                },
+                Pforecast:  //业绩预告
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                Research:   //调研
+                {
+                    ApiUrl: '/API/InvestorRelationsList',
+                },
+                BlockTrading:   //大宗交易
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                TradeDetail:    //龙虎榜
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                Policy: //策略
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                }
+            }
+        },
 
+        PriceGapStyple:
+        { 
+            Line:{ Color:"rgb(128,128,128)" }, 
+            Text:{ Color:"rgb(219,220,220)", Font:`12px 微软雅黑` } 
+        },
 
-    DefaultTextColor: "rgb(101,104,112)",
-    DefaultTextFont: '12px 微软雅黑',
-    IndexTitleBGColor:'rgb(211,211,211)',
+        Index: {      //指标线段颜色
+        LineColor: [
+            "rgb(255,189,09)",
+            "rgb(22,198,255)",
+            "rgb(174,35,161)",
+            "rgb(236,105,65)",
+            "rgb(68,114,196)",
+            "rgb(229,0,79)",
+            "rgb(0,128,255)",
+            "rgb(252,96,154)",
+            "rgb(42,230,215)",
+            "rgb(24,71,178)",
 
-    DynamicTitleFont: '12px 微软雅黑', //指标动态标题字体
+        ],
+        NotSupport: { Font: "14px 微软雅黑", TextColor: "rgb(52,52,52)" }
+        },
+        
+        ColorArray:       //自定义指标默认颜色
+        [
+            "rgb(255,174,0)",
+            "rgb(25,199,255)",
+            "rgb(175,95,162)",
+            "rgb(236,105,65)",
+            "rgb(68,114,196)",
+            "rgb(229,0,79)",
+            "rgb(0,128,255)",
+            "rgb(252,96,154)",
+            "rgb(42,230,215)",
+            "rgb(24,71,178)",
+        ],
+        //画图工具
+        DrawPicture: 
+        {
+            LineColor: 
+            [
+                "rgb(41,98,255)" 
+            ],
+    
+            PointColor: 
+            [
+                "rgb(41,98,255)",           //选中颜色
+                "rgb(89,135,255)",          //moveon颜色
+                "rgb(0,0,0)"                //空心点背景色
+            ],
+        },
+
+        StockChip:
+        {
+            InfoColor:'rgb(255,255,255)', //文字颜色
+            Color:"rgb(255,255,255)",
+            Border:{ BGColor:"rgb(40,42,44)" },
+            DayInfoColor:'rgb(0,0,0)', //周期颜色内文字颜色
+        },
 
+        TooltipPaint:   //Tooltip
+        {
+            BGColor: 'rgba(20,20,20,0.8)',          //背景色
+            BorderColor: 'rgb(210,210,210)',        //边框颜色
+            TitleColor: 'rgb(210,210,210)',         //标题颜色
+            TitleFont:'13px 微软雅黑'               //字体
+        },
+
+        //深度图
+        DepthChart:
+        {
+            BidColor: { Line:"rgb(82,176,123)", Area:"rgba(82,176,123,0.5)"},  //卖
+            AskColor: { Line:"rgb(207,76,89)", Area:"rgba(207,76,89, 0.5)"},   //买
+            LineWidth:4
+        },
 
-    UpTextColor: "rgb(238,21,21)",
-    DownTextColor: "rgb(25,158,0)",
-    UnchagneTextColor: "rgb(101,104,112)",
-    CloseLineColor: 'rgb(178,34,34)',
+        DepthCorss:
+        {
+            BidColor: { Line:"rgb(82,176,123)" },  //卖
+            AskColor: { Line:"rgb(207,76,89)" },   //买
+            LineWidth:2,    //线段宽度
+            LineDash:[3,3],
+            Tooltip:
+            { 
+                BGColor:'rgba(54,54,54, 0.8)', TextColor:"rgb(203,215,224)",
+                Border:{ Top:5, Left:20, Bottom:5, Center: 5},
+                Font:"14px 微软雅黑",
+                LineHeight:16   //单行高度
+            }
+        },
 
-    Title:
-    {
-        TradeIndexColor:'rgb(105,105,105)', //交易指标颜色
-        ColorIndexColor:'rgb(112,128,144)',  //五彩K线颜色
-
-        VolColor:"rgb(101,104,112)",       //标题成交量
-        AmountColor:"rgb(101,104,112)",    //成交金额 
-        DateTimeColor:"rgb(101,104,112)",  //时间,日期  
-        SettingColor:"rgb(101,104,112)",   //周期,复权
-        NameColor:"rgb(101,104,112)" ,     //股票名称
-        TurnoverRateColor:'rgb(101,104,112)',       //换手率
-        PositionColor:"rgb(101,104,112)"       //持仓
-    },
-
-    FrameBorderPen: "rgba(236,236,236,0.13)",     //边框
-    FrameSplitPen: "rgba(236,236,236,0.13)",          //分割线
-    FrameSplitTextColor: "rgb(101,104,112)",     //刻度文字颜色
-    FrameSplitTextFont: "12px 微软雅黑",        //坐标刻度文字字体
-    FrameTitleBGColor: "rgb(246,251,253)",      //标题栏背景色
-    Frame: { XBottomOffset: 0 },   //X轴文字向下偏移
-
-    FrameLatestPrice: {
-        TextColor: 'rgb(255,255,255)',   //最新价格文字颜色
-        UpBarColor: "rgb(238,21,21)",    //上涨
-        DownBarColor: "rgb(25,158,0)",   //下跌
-        UnchagneBarColor: "rgb(190,190,190)",   //平盘
-        BGAlpha: 0.6
-    },
-
-    CorssCursorBGColor: "rgb(43,54,69)",            //十字光标背景
-    CorssCursorTextColor: "rgb(255,255,255)",
-    CorssCursorTextFont: "12px 微软雅黑",
-    CorssCursorHPenColor: "rgb(130,130,130)",           //十字光标线段颜色
-    CorssCursorVPenColor: "rgb(130,130,130)",           //十字光标线段颜色
-
-    KLine:
-    {
-        MaxMin: { Font: '12px 微软雅黑', Color: 'rgb(111,111,111)', RightArrow:"→", LeftArrow:"←", HighYOffset:0, LowYOffset:0 },   //K线最大最小值显示
-        Info:  //信息地雷
+        //报价列表
+        Report:
         {
-            Color: 'rgb(205,149,12)',
-            TextColor: '#afc0da',
-            TextBGColor: '#1a283e',
-            Investor:
-            {
-                ApiUrl: '/API/NewsInteract', //互动易
-            },
-            Announcement:                                           //公告
+            BorderColor:'rgb(38,38,41)',    //边框线
+            SelectedColor:"rgb(49,48,56)",  //选中行
+            Header:
             {
-                ApiUrl: '/API/ReportList',
+                Color:"rgb(245,245,245)",
+                SortColor:"rgb(255,0,0)",
+                Mergin:{ Left:5, Right:5, Top:4, Bottom:2 },
+                Font:{ Size:15, Name:"微软雅黑" }
             },
-            Pforecast:  //业绩预告
+    
+            Item:
             {
-                ApiUrl: '/API/StockHistoryDay',
+                Mergin:{ Top:2, Bottom:0,Left:5, Right:5 },
+                Font:{ Size:15, Name:"微软雅黑"},
+                BarMergin:{ Top:2, Left:3, Right:3, Bottom:2 },
+                NameFont:{ Size:14, Name:"微软雅黑" },
+                SymbolFont:{ Size:12, Name:"微软雅黑" }
             },
-            Research:   //调研
+
+             //固定行
+            FixedItem:
             {
-                ApiUrl: '/API/InvestorRelationsList',
+                Font:{ Size:15, Name:"微软雅黑"},
             },
-            BlockTrading:   //大宗交易
+    
+            LimitBorder:
             {
-                ApiUrl: '/API/StockHistoryDay',
+                Color:"rgb(64,64,64)",
+                Mergin:{ Top:1, Bottom:1,Left:0, Right:0 },
             },
-            TradeDetail:    //龙虎榜
+    
+            FieldColor:
             {
-                ApiUrl: '/API/StockHistoryDay',
+                Index:"rgb(245,245,245)",  //序号
+                Symbol:"rgb(255,255,255)",
+                Name:"rgb(255,255,255)",
+                Amount:"rgb(2,226,244)",    //成交金额
+                Vol:"rgb(192,192,0)",       //成交量
+                BarTitle:'rgb(245,245,245)',   //柱子文字
+                Text:"rgb(245,245,245)",    //默认文本
             },
-            Policy: //策略
+    
+            UpTextColor:"rgb(238,21,21)",           //上涨文字颜色
+            DownTextColor:"rgb(25,158,0)",          //下跌文字颜色
+            UnchagneTextColor:"rgb(228,228,228)",    //平盘文字颜色 
+    
+            PageInfo:
             {
-                ApiUrl: '/API/StockHistoryDay',
+                Font:{ Size:15, Name:"微软雅黑"},
+                TextColor:"rgb(255,255,255)",
+                BGColor:"rgba(49,48,56,0.8)",
+                Mergin:{ Left:5, Right:5, Top:4, Bottom:2 },
             }
         }
-    },
-
-    Index: {      //指标线段颜色
-      LineColor: [
-        "rgb(255,189,09)",
-        "rgb(22,198,255)",
-        "rgb(174,35,161)",
-        "rgb(236,105,65)",
-        "rgb(68,114,196)",
-        "rgb(229,0,79)",
-        "rgb(0,128,255)",
-        "rgb(252,96,154)",
-        "rgb(42,230,215)",
-        "rgb(24,71,178)",
-
-      ],
-      NotSupport: { Font: "12px 微软雅黑", TextColor: "rgb(52,52,52)" }
-    },
-    
-    ColorArray:       //自定义指标默认颜色
-      [
-        "rgb(255,174,0)",
-        "rgb(25,199,255)",
-        "rgb(175,95,162)",
-        "rgb(236,105,65)",
-        "rgb(68,114,196)",
-        "rgb(229,0,79)",
-        "rgb(0,128,255)",
-        "rgb(252,96,154)",
-        "rgb(42,230,215)",
-        "rgb(24,71,178)",
-      ],
-    //画图工具
-    DrawPicture: 
-    {
-      LineColor: "rgb(30,144,255)",
-      PointColor: "rgb(105,105,105)",
-    },
+    };
 
-    TooltipPaint:   //Tooltip
-    {
-        BGColor: 'rgba(20,20,20,0.8)',          //背景色
-        BorderColor: 'rgb(210,210,210)',        //边框颜色
-        TitleColor: 'rgb(210,210,210)',         //标题颜色
-        TitleFont:'12px 微软雅黑'               //字体
-    },
-
-    //深度图
-    DepthChart:
-    {
-        BidColor: { Line:"rgb(82,176,123)", Area:"rgba(82,176,123,0.5)"},  //卖
-        AskColor: { Line:"rgb(207,76,89)", Area:"rgba(207,76,89, 0.5)"},   //买
-        LineWidth:4
-    },
+    return BLACK_STYLE;
+}
 
-    DepthCorss:
+function GetWhiteStyle()
+{
+    var WHITE_STYLE=    //白色风格
     {
-        BidColor: { Line:"rgb(82,176,123)" },  //卖
-        AskColor: { Line:"rgb(207,76,89)" },   //买
-        LineWidth:2,    //线段宽度
-        LineDash:[3,3],
-        Tooltip:
-        { 
-            BGColor:'rgba(54,54,54, 0.8)', TextColor:"rgb(203,215,224)",
-            Border:{ Top:5, Left:20, Bottom:5, Center: 5},
-            Font:"12px 微软雅黑",
-            LineHeight:16   //单行高度
-        }
-    }
-};
+        BGColor:'rgb(255,255,255)',
+        TooltipBGColor: "rgb(255, 255, 255)", //背景色
+        TooltipAlpha: 0.92,                  //透明度
 
+        SelectRectBGColor:"rgba(1,130,212,0.06)", //背景色
+        //   this.SelectRectAlpha=0.06;                  //透明度
 
-var WHITE_STYLE=    //白色风格
-{
-    BGColor:'rgb(255,255,255)',
-    TooltipBGColor: "rgb(255, 255, 255)", //背景色
-    TooltipAlpha: 0.92,                  //透明度
+        UpBarColor: "rgb(238,21,21)",
+        DownBarColor: "rgb(25,158,0)",
+        UnchagneBarColor: "rgb(0,0,0)",
 
-    SelectRectBGColor:"rgba(1,130,212,0.06)", //背景色
-    //   this.SelectRectAlpha=0.06;                  //透明度
+        Minute:
+        {
+            VolBarColor : "rgb(238,127,9)",
+            PriceColor : "rgb(50,171,205)",
+            AvPriceColor : "rgb(238,127,9)",
+
+            NightDay:
+            { 
+                NightBGColor:"rgb(22,22,22)",
+                Font:`12px 微软雅黑`,
+                Day: { Color:"rgb(153,153,153)", BGColor:"rgb(51,51,51)", BorderColor:"rgb(51,51,51)", Margin:{ Left:5, Top:2, Bottom:2, Right:5 } },
+                Night: { Color:"rgb(153,153,153)", BGColor:"rgb(51,51,51)", BorderColor:"rgb(51,51,51)", Margin:{ Left:5, Top:2, Bottom:2, Right:5 } },
+            }
+        },
 
-    UpBarColor: "rgb(238,21,21)",
-    DownBarColor: "rgb(25,158,0)",
-    UnchagneBarColor: "rgb(0,0,0)",
+        DefaultTextColor: "rgb(43,54,69)",
+        DefaultTextFont: '14px 微软雅黑',
 
-    Minute:
-    {
-        VolBarColor : "rgb(238,127,9)",
-        PriceColor : "rgb(50,171,205)",
-        AvPriceColor : "rgb(238,127,9)",
-    },
+        DynamicTitleFont: '12px 微软雅黑', //指标动态标题字体
 
-    DefaultTextColor: "rgb(43,54,69)",
-    DefaultTextFont: '12px 微软雅黑',
 
-    DynamicTitleFont: '12px 微软雅黑', //指标动态标题字体
+        UpTextColor: "rgb(238,21,21)",
+        DownTextColor: "rgb(25,158,0)",
+        UnchagneTextColor: "rgb(0,0,0)",
+        CloseLineColor: 'rgb(178,34,34)',
 
+        IndexTitle:
+        {
+            UpDownArrow:    //数值涨跌箭头
+            {
+                UpColor:"rgb(238,21,21)",   //上涨
+                DownColor:"rgb(25,158,0)",  //下跌
+                UnchangeColor:"rgb(0, 0 ,0)"  //不变
+            },
 
-    UpTextColor: "rgb(238,21,21)",
-    DownTextColor: "rgb(25,158,0)",
-    UnchagneTextColor: "rgb(0,0,0)",
-    CloseLineColor: 'rgb(178,34,34)',
+            NameArrow:{ Color:"rgb(190, 190 ,190)", Space:2, Symbol:'▼' },
+        },
 
-    FrameBorderPen: "rgb(225,236,242)",     //边框
-    FrameSplitPen: "rgb(225,236,242)",          //分割线
-    FrameSplitTextColor: "rgb(51,51,51)",     //刻度文字颜色
-    FrameSplitTextFont: "12px 微软雅黑",        //坐标刻度文字字体
-    FrameTitleBGColor: "rgb(246,251,253)",      //标题栏背景色
+        FrameBorderPen: "rgb(225,236,242)",     //边框
+        FrameSplitPen: "rgb(225,236,242)",          //分割线
+        FrameSplitTextColor: "rgb(51,51,51)",     //刻度文字颜色
+        FrameSplitTextFont: "12px 微软雅黑",        //坐标刻度文字字体
+        FrameTitleBGColor: "rgb(246,251,253)",      //标题栏背景色
 
-    CorssCursorBGColor: "rgb(255, 255, 255)",            //十字光标背景
-    CorssCursorTextColor: "rgb(0, 0, 0)",
-    CorssCursorTextFont: "12px 微软雅黑",
-    CorssCursorPenColor: "rgb(130,130,130)",           //十字光标线段颜色
+        CorssCursorBGColor: "rgb(43,54,69)",            //十字光标背景
+        CorssCursorTextColor: "rgb(255,255,255)",
+        CorssCursorTextFont: "12px 微软雅黑",
+        CorssCursorPenColor: "rgb(130,130,130)",           //十字光标线段颜色
 
-    KLine:
-    {
-        MaxMin: { Font: '12px 微软雅黑', Color: 'rgb(111,111,111)', RightArrow:"→", LeftArrow:"←", HighYOffset:0, LowYOffset:0 },   //K线最大最小值显示
-        Info:  //信息地雷
+        KLine:
         {
-            Color: 'rgb(205,149,12)',
-            TextColor: '#197de9',
-            TextBGColor: '#e1e4ef',
-            Investor:
-            {
-                ApiUrl: '/API/NewsInteract', //互动易
-            },
-            Announcement:                                           //公告
+            MaxMin: { Font: '12px 微软雅黑', Color: 'rgb(111,111,111)', RightArrow:"→", LeftArrow:"←", HighYOffset:0, LowYOffset:0 },   //K线最大最小值显示
+            Info:  //信息地雷
             {
-                ApiUrl: '/API/ReportList',
-            },
-            Pforecast:  //业绩预告
-            {
-                ApiUrl: '/API/StockHistoryDay',
-            },
-            Research:   //调研
-            {
-                ApiUrl: '/API/InvestorRelationsList',
-            },
-            BlockTrading:   //大宗交易
-            {
-                ApiUrl: '/API/StockHistoryDay',
-            },
-            TradeDetail:    //龙虎榜
-            {
-                ApiUrl: '/API/StockHistoryDay',
-            },
-            Policy: //策略
-            {
-                ApiUrl: '/API/StockHistoryDay',
+                Color: 'rgb(205,149,12)',
+                TextColor: '#197de9',
+                TextBGColor: '#e1e4ef',
+                Investor:
+                {
+                    ApiUrl: '/API/NewsInteract', //互动易
+                },
+                Announcement:                                           //公告
+                {
+                    ApiUrl: '/API/ReportList',
+                },
+                Pforecast:  //业绩预告
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                Research:   //调研
+                {
+                    ApiUrl: '/API/InvestorRelationsList',
+                },
+                BlockTrading:   //大宗交易
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                TradeDetail:    //龙虎榜
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                },
+                Policy: //策略
+                {
+                    ApiUrl: '/API/StockHistoryDay',
+                }
             }
-        }
-    },
-
-    Index: 
-    {      //指标线段颜色
-        LineColor: 
+        },
+
+        Index: 
+        {      //指标线段颜色
+            LineColor: 
+            [
+                "rgb(255,189,09)",
+                "rgb(22,198,255)",
+                "rgb(174,35,161)",
+                "rgb(236,105,65)",
+                "rgb(68,114,196)",
+                "rgb(229,0,79)",
+                "rgb(0,128,255)",
+                "rgb(252,96,154)",
+                "rgb(42,230,215)",
+                "rgb(24,71,178)",
+            ],
+            NotSupport: { Font: "14px 微软雅黑", TextColor: "rgb(52,52,52)" }
+        },
+
+        ColorArray:       //自定义指标默认颜色
         [
-            "rgb(255,189,09)",
-            "rgb(22,198,255)",
-            "rgb(174,35,161)",
+            "rgb(255,174,0)",
+            "rgb(25,199,255)",
+            "rgb(175,95,162)",
             "rgb(236,105,65)",
             "rgb(68,114,196)",
             "rgb(229,0,79)",
@@ -282,29 +423,16 @@ var WHITE_STYLE=    //白色风格
             "rgb(42,230,215)",
             "rgb(24,71,178)",
         ],
-        NotSupport: { Font: "12px 微软雅黑", TextColor: "rgb(52,52,52)" }
-    },
-
-    ColorArray:       //自定义指标默认颜色
-    [
-        "rgb(255,174,0)",
-        "rgb(25,199,255)",
-        "rgb(175,95,162)",
-        "rgb(236,105,65)",
-        "rgb(68,114,196)",
-        "rgb(229,0,79)",
-        "rgb(0,128,255)",
-        "rgb(252,96,154)",
-        "rgb(42,230,215)",
-        "rgb(24,71,178)",
-    ],
-
-    //画图工具
-    DrawPicture:
-    {
-        LineColor: "rgb(30,144,255)",
-        PointColor: "rgb(105,105,105)",
-    },
+
+        //画图工具
+        DrawPicture:
+        {
+            LineColor: "rgb(30,144,255)",
+            PointColor: "rgb(105,105,105)",
+        },
+    }
+
+    return WHITE_STYLE;
 }
 
 var STYLE_TYPE_ID=
@@ -319,17 +447,26 @@ function GetStyleConfig(styleid)    //获取一个风格的配置变量
   switch (styleid)
     {
         case STYLE_TYPE_ID.BLACK_ID:
-            return BLACK_STYLE;
-            break;
+            return GetBlackStyle();
         case STYLE_TYPE_ID.WHITE_ID:
-            return WHITE_STYLE;
-            break;  
+            return GetWhiteStyle();
         default:
             return null;
     }
 }
 
+var JSCommonHQStyle=
+{
+    GetStyleConfig:GetStyleConfig,
+    STYLE_TYPE_ID:STYLE_TYPE_ID
+};
 
+export
+{
+    JSCommonHQStyle
+}
+
+/*
 module.exports =
   {
     JSCommonHQStyle:
@@ -338,5 +475,6 @@ module.exports =
         STYLE_TYPE_ID:STYLE_TYPE_ID
     }
   };
+  */
 
 

+ 46 - 10
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.uniapp.canvas.helper.js

@@ -12,9 +12,14 @@ copyright (c) 2018 jones
 
 function JSUniAppCanvasHelper() { }
 
+JSUniAppCanvasHelper.GetCanvasFont=function(canvas)
+{
+    return canvas.font;
+}
+
 JSUniAppCanvasHelper.MeasureText=function(text, canvas) 
 {
-    var font = canvas.font;
+    var font= JSUniAppCanvasHelper.GetCanvasFont(canvas);
 	var fontSize = 12;
     var pos=font.search('px');
     if (pos>0) 
@@ -31,28 +36,48 @@ JSUniAppCanvasHelper.MeasureText=function(text, canvas)
 		if (/[a-zA-Z]/.test(item)) 
 		{
 			width += 7;
-		} else if (/[0-9]/.test(item)) 
+		} 
+		else if (/[0-9]/.test(item)) 
 		{
 			width += 5.5;
-		} else if (/\./.test(item)) 
+		} 
+		else if (/\./.test(item)) 
 		{
 			width += 2.7;
-		} else if (/-/.test(item)) 
+        } 
+        else if (/,/.test(item)) 
+		{
+			width += 2.7;
+		}
+		else if (/-/.test(item)) 
 		{
 			width += 3.25;
-		} else if (/[\u4e00-\u9fa5]/.test(item)) 
+        } 
+        else if (/_/.test(item)) 
+		{
+			width += 4.5;
+		} 
+		else if (/[\u4e00-\u9fa5]/.test(item)) 
 		{
 			width += 10;
-		} else if (/\(|\)/.test(item)) 
+		} 
+		else if (/\(|\)/.test(item)) 
 		{
 			width += 3.73;
-		} else if (/\s/.test(item)) 
+		} 
+		else if (/\s/.test(item))   //空格
 		{
-			width += 2.5;
-		} else if (/%/.test(item)) 
+			width += 3.25;
+		} 
+		else if (/%/.test(item)) 
 		{
 			width += 8;
-		} else 
+		}
+		else if (/:/.test(item))
+		{
+			width += 3.25;
+		} 
+		else 
 		{
 			width += 10;
 		}
@@ -61,6 +86,16 @@ JSUniAppCanvasHelper.MeasureText=function(text, canvas)
 }
 
 //导出统一使用JSCommon命名空间名
+var JSCommonUniApp=
+{
+    JSUniAppCanvasHelper: JSUniAppCanvasHelper,
+};
+
+export
+{
+    JSCommonUniApp
+}
+/*
 module.exports =
 {
     JSCommonUniApp:
@@ -68,4 +103,5 @@ module.exports =
         JSUniAppCanvasHelper: JSUniAppCanvasHelper,
     }
 };
+*/
 	

文件差异内容过多而无法显示
+ 131716 - 61156
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.uniapp.h5.js


文件差异内容过多而无法显示
+ 8958 - 9240
uniapp/uni_modules/jones-hqchart2/js_sdk/umychart.wechat.3.0.js


+ 57 - 40
uniapp/uni_modules/jones-hqchart2/package.json

@@ -1,20 +1,18 @@
 {
   "id": "jones-hqchart2",
-  "displayName": "jones-hqchart2",
-  "version": "1.1.10354",
+  "displayName": "K线 分时 通达信指标 深度图 报价列表 订单流 筹码分布 hqchart.v2",
+  "version": "1.1.15399",
   "description": "HQChart - H5, 微信小程序 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据替换接口",
   "keywords": [
     "jones-hqchart2"
 ],
   "repository": "https://github.com/jones2000/HQChart",
   "engines": {
-    "HBuilderX": "^3.1.0"
+    "HBuilderX": "^3.1.0",
+    "uni-app": "^4.45",
+    "uni-app-x": ""
   },
   "dcloudext": {
-    "category": [
-        "JS SDK",
-        "通用 SDK"
-    ],
     "sale": {
       "regular": {
         "price": "0.00"
@@ -31,48 +29,67 @@
       "data": "无",
       "permissions": "无"
     },
-    "npmurl": "https://www.npmjs.com/package/hqchart"
+    "npmurl": "https://www.npmjs.com/package/hqchart",
+    "type": "sdk-js",
+    "darkmode": "√",
+    "i18n": "√",
+    "widescreen": "√"
   },
   "uni_modules": {
     "dependencies": [],
     "encrypt": [],
     "platforms": {
       "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
+        "tcb": "√",
+        "aliyun": "√",
+        "alipay": "x"
       },
       "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "n"
+        "uni-app": {
+          "vue": {
+            "vue2": "√",
+            "vue3": "√"
+          },
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "vue": "√",
+            "nvue": "-",
+            "android": "√",
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√",
+            "alipay": "√",
+            "toutiao": "√",
+            "baidu": "-",
+            "kuaishou": "-",
+            "jd": "-",
+            "harmony": "-",
+            "qq": "√",
+            "lark": "√"
+          },
+          "quickapp": {
+            "huawei": "-",
+            "union": "-"
+          }
         },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
+        "uni-app-x": {
+          "web": {
+            "safari": "-",
+            "chrome": "-"
+          },
+          "app": {
+            "android": "-",
+            "ios": "-",
+            "harmony": "-"
+          },
+          "mp": {
+            "weixin": "-"
+          }
         }
       }
     }

+ 46 - 38
uniapp/uni_modules/jones-hqchart2/readme.md

@@ -10,20 +10,25 @@
   
 # 用户协议
 - [用户协议](https://gitee.com/jones2000/HQChart/blob/master/%E7%94%A8%E6%88%B7%E5%8D%8F%E8%AE%AE.txt)
+- [HQChart商业使用说明及用户使用协议](https://blog.csdn.net/jones2000/article/details/123170153)
+
+# 交流
+前端技术交流群:在github首页里  
+有问题也可以直接github上发issue.  
+
 
 # demo说明
-* hqchart2_test3 内置组件模式
-* hqchart2_test  单画布模式
-* hqchart2_test2 多画布模式
-* hqchart2_template  如何在外部封装hqchart模板
+* 示例DEMO都是Vue2的版本, 如果需要Vue3的示例demo,可以去QQ群文件下载。
+* hqchart2_test3 内置组件模式 支持H5, APP, 微信小程序
+* hqchart2_test  单画布模式  支持H5, APP, 微信小程序
+* hqchart2_test2 多画布模式  支持H5, APP,
+* hqchart2_template  如何在外部封装hqchart模板  支持H5, APP, 微信小程序
 * hqchart2_renderjs 使用renderjs创建hqchart, 直接使用npm hqchart
 
-# app demo apk下载
-- [股票数据对接 app demo下载](https://opensource2.zealink.com/uniapp_demoapk/hqchart_shsz_uniapp_20210301.apk)
-- [火币安卓app demo下载](https://opensource2.zealink.com/uniapp_demoapk/hqchart_huobi_uniapp.20210301.apk)
-- [A股真实数据(新浪+腾讯行情源)app demo下载](https://opensource2.zealink.com/uniapp_demoapk/hqchart_astock_demo.20210505.01.apk)
-
 
+第3放数据对接案例:  
+- 源码地址:[https://github.com/jones2000/HQChart-Super](https://github.com/jones2000/HQChart-Super)  
+- 镜像地址:[https://gitee.com/jones2000/HQChart-Super](https://gitee.com/jones2000/HQChart-Super)  
 
 > 功能:
 # 1. K线图
@@ -47,25 +52,6 @@
 - 分钟数据显示 
 - 支持多日分钟数据显示
 - 
-# 3. 网页demo
-* [K线图](https://opensource2.zealink.com/hqweb/demo/phone7.html)  
-* [走势图](https://opensource2.zealink.com/hqweb/demo/phone8.html)  
-* [走势图手机页面](https://opensource2.zealink.com/hqweb/demo/phone2.html)  
-* [K线图手机页面](https://opensource2.zealink.com/hqweb/demo/phone.html) 
-* [横版走势图手机页面](https://opensource2.zealink.com/hqweb/demo/phone10.html)  
-* [横版K线图手机页面](https://opensource2.zealink.com/hqweb/demo/phone9.html)  
-* [多日走势图](https://opensource2.zealink.com/hqweb/demo/phone15.html) 
-* [个股筹码图](https://opensource2.zealink.com/hqweb/demo/phone18.html) 
-* [指标回测(手机版)](https://opensource2.zealink.com/hqweb/operatebsh5/index.html?symbol=000001.sz) 
-* [手机K线训练](https://opensource2.zealink.com/hqweb/demo/demo_ktrain.html) 
-* [手机K线训练横屏](https://opensource2.zealink.com/hqweb/demo/demo_ktrain2.html) 
-* [弹幕功能](https://opensource2.zealink.com/hqweb/demo/phone21.html) 
-* [多指标叠加](https://opensource2.zealink.com/hqweb/demo/phone22.html) 
-* [截面数据(财务数据)计算器](https://opensource2.zealink.com/hqweb/demo/sectiondatatest.html) 
-* [走势图-大盘异动](https://opensource2.zealink.com/hqweb/demo/phone23.html) 
-* [分笔K线图](https://opensource2.zealink.com/hqweb/demo/phone24.html) 
-
-
 
 # 4.使用教程
 ## H5教程
@@ -143,11 +129,15 @@
 74. [HQChart使用教程82-动态修改叠加指标参数](https://jones2000.blog.csdn.net/article/details/118681399)<br>
 75. [HQChart使用教程83-K线图最高最低价显示配置](https://jones2000.blog.csdn.net/article/details/118856130)<br>
 
-## 小程序教程
+## 微信小程序教程
 1. [HQChart小程序教程1-如何快速的创建一个K线图](https://developers.weixin.qq.com/community/develop/article/doc/0006c451ac81589915b89d1c55bc13) 
 2. [HQChart小程序教程2-如何使用新版2D画布创建一个K线图](https://blog.csdn.net/jones2000/article/details/105632095)
 3. [HQChart小程序教程3-新版2D单画布如何切换K线图和分时图](https://blog.csdn.net/jones2000/article/details/108378355)
 
+## 钉钉小程序
+1. [HQChart钉钉小程序教程1-创建K线图](https://blog.csdn.net/jones2000/article/details/125226287)<br>
+
+
 ## uni-app教程
 1. [HQChart使用教程35-如何在uni-app创建K线图(h5)](https://blog.csdn.net/jones2000/article/details/101039026) 
 2. [HQChart使用教程36-如何在uni-app创建走势图(h5)](https://blog.csdn.net/jones2000/article/details/101039673) 
@@ -157,6 +147,8 @@
 6. [HQChart使用教程60-解决uniapp-app页面隐藏后在显示白屏的问题](https://blog.csdn.net/jones2000/article/details/105484202) 
 7. [HQChart使用教程63-uniapp使用renderjs+hqchart(h5)](https://blog.csdn.net/jones2000/article/details/106933985)
 8. [HQChart实战教程40-如何制作hqchart组件(uniapp版本)](https://blog.csdn.net/jones2000/article/details/116034602)
+9. [HQChart实战教程40-如何制作hqchart组件(uniapp版本)](https://blog.csdn.net/jones2000/article/details/116034602)   
+10. [HQChart使用教程100-uniapp如何在vue3运行微信小程序](https://jones2000.blog.csdn.net/article/details/139309202)  
 
 ## 第3方数据前端接入教程(走势图)
 1. [HQChart使用教程29-走势图如何对接第3方数据1](https://blog.csdn.net/jones2000/article/details/100132357) 
@@ -199,6 +191,16 @@
 28. [HQChart使用教程30-K线图如何对接第3方数据28-大盘数据](https://blog.csdn.net/jones2000/article/details/117712105)
 29. [HQChart使用教程30-K线图如何对接第3方数据29-板块字符串函数数据](https://jones2000.blog.csdn.net/article/details/118887416)
 
+## 第3方数据前端接入教程(分笔明细)
+1. [HQChart使用教程93-分笔明细表对接第3方数据1-全量分笔明细数据](https://blog.csdn.net/jones2000/article/details/124362666)<br>
+2. [HQChart使用教程93-分笔明细表对接第3方数据2-增量分笔明细数据](https://jones2000.blog.csdn.net/article/details/124362858)<br>
+
+## 第3方数据前端接入教程(报价列表)
+1. [HQChart使用教程95-报价列表对接第3方数据1-码表数据](https://jones2000.blog.csdn.net/article/details/124567637)<br>
+2. [HQChart使用教程95-报价列表对接第3方数据2-板块成分数据](https://jones2000.blog.csdn.net/article/details/124572386)<br>
+3. [HQChart使用教程95-报价列表对接第3方数据3-股票数据](https://jones2000.blog.csdn.net/article/details/124578516)<br>
+4. [HQChart使用教程95-报价列表对接第3方数据4-股票排序数据](https://jones2000.blog.csdn.net/article/details/124579725)<br>
+
 
 ## 实战教程
 1. [HQChart实战教程1-外汇分时图](https://blog.csdn.net/jones2000/article/details/103254501) 
@@ -214,17 +216,14 @@
 11. [HQChart实战教程17-K线沙盘推演](https://blog.csdn.net/jones2000/article/details/106776837) 
 12. [HQChart实战教程18-多股同列](https://blog.csdn.net/jones2000/article/details/107193410)
 
-## 火币对接完整教程(付费文章)
-1. [HQChart实战教程10-全ws数据对接HQChart(数字货币对接实战)](https://blog.csdn.net/jones2000/article/details/105698038) 
-2. [HQChart实战教程11-火币网ws数据对接](https://blog.csdn.net/jones2000/article/details/105721190) 
-3. [HQChart实战教程12-火币网ws数据对接分时图](https://blog.csdn.net/jones2000/article/details/105756659) 
-4. [HQChart实战教程13-火币网ws数据对接K线(uniapp)](https://blog.csdn.net/jones2000/article/details/105804461)
-5. [HQChart实战教程15-火币网ws数据对接拖拽下载历史K线图](https://blog.csdn.net/jones2000/article/details/106205584)
-6. [HQChart实战教程16-K线图风格配色篇-仿火币网H5配色](https://blog.csdn.net/jones2000/article/details/106226272)
+## 付费教程
+1. [HQChart对接火币完整教程](https://jones2000.github.io/HQChart/document/huobi_demo.html)   
+2. [HQChart对接欧易完整教程](https://jones2000.github.io/HQChart/document/okx_demo.html)   
 
 ## 币安对接(源码收费)
-1. [HQChart实战教程36-数字货币安币对接-uniapp版本](https://blog.csdn.net/jones2000/article/details/114468807)
-2. [HQChart实战教程41-新浪+腾讯A股数据源对接-uniapp版本](https://blog.csdn.net/jones2000/article/details/117139756)
+1. [HQChart实战教程36-数字货币安币对接-uniapp版本](https://jones2000.github.io/HQChart/document/uniapp_binance.html)  
+2. [HQChart实战教程41-新浪+腾讯A股数据源对接-uniapp版本](https://blog.csdn.net/jones2000/article/details/117139756)  
+3. [HQChart实战教程42-新浪期货数据源对接-uniapp版本](https://blog.csdn.net/jones2000/article/details/117757956)  
 
 ## httpA股数据对接教程(付费文章)
 ### 日K线
@@ -258,6 +257,15 @@
 12. [HQChart实战教程28 - 动态切换颜色风格](https://blog.csdn.net/jones2000/article/details/112563596)
 13. [HQChart实战教程29 - 指标参数保存到本地缓存](https://blog.csdn.net/jones2000/article/details/113349967)
 14. [HQChart实战教程39 - K线图键盘事件重载](https://blog.csdn.net/jones2000/article/details/115921430)
+15. [HQChart实战教程43 - K线面积图最后一个数据增加动画点](https://jones2000.blog.csdn.net/article/details/118774299)<br>
+16. [HQChart实战教程44 - 多指标窗口动态增长高度](https://jones2000.blog.csdn.net/article/details/119188383)<br>
+17. [HQChart实战教程46 - 十字光标右侧按钮点击增加刻度线](https://jones2000.blog.csdn.net/article/details/120563461)<br>
+18. [HQChart实战教程48 - 远程指标获取当前屏K线的范围](https://jones2000.blog.csdn.net/article/details/121913369)<br>
+19. [HQChart实战教程49 - 点击修改K线颜色及背景色](https://jones2000.blog.csdn.net/article/details/121938122)<br>
+20. [HQChart实战教程50 - 自定义指标栏工具按钮](https://blog.csdn.net/jones2000/article/details/122950050)<br>
+21. [HQChart实战教程51 - 自定义指标列表](https://blog.csdn.net/jones2000/article/details/123538617)<br>
+22. [HQChart实战教程52 - APP中使用DRAWICON绘制图标](https://jones2000.blog.csdn.net/article/details/124142225)<br>
+23. [HQChart实战教程53 - 动态指定标识K线区间段背景颜色](https://blog.csdn.net/jones2000/article/details/124558493)<br>
 
 
 

+ 1 - 0
uniapp/uview-ui/theme.scss

@@ -36,3 +36,4 @@ $u-type-info-light: #f4f4f5;
 
 $u-form-item-height: 70rpx;
 $u-form-item-border-color: #dcdfe6;
+$uni-font-size-base:24rpx;