UNPKG

hqchart

Version:

HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接

1,402 lines (1,168 loc) 53.8 kB
/* Copyright (c) 2018 jones http://www.apache.org/licenses/LICENSE-2.0 开源项目 https://github.com/jones2000/HQChart jones_2000@163.com 内置指标搜索对话框 修改指标参数对话框 */ function JSDialogSearchIndex() { this.DivDialog=null; this.DragTitle=null; this.TitleBox=null; //{ DivTitle, DivName, DivName } this.InputDom=null; this.Style=0; //样式 预留 this.HQChart=null; //{ WindowIndex:窗口索引, OpType:1=切换主图指标 2=添加叠加指标 3=新增指标窗口, Title: }; this.OpData=null; this.MaxRowCount=30; //行 this.ColCount=3; //列 this.MaxGroupCount=20; //分类最多个数 this.AryData=[]; this.AryGroup=[]; //分类 this.IndexData=JSDialogSearchIndex.GetDefaultIndexData(); this.RestoreFocusDelay=800; this.Inital=function(hqchart, option) { this.HQChart=hqchart; if (option) { if (IFrameSplitOperator.IsNumber(option.Style)) this.Style=option.Style; if (option.IndexData) this.IndexData=option.IndexData; if (IFrameSplitOperator.IsNumber(option.MaxRowCount)) this.MaxRowCount=option.MaxRowCount; } } this.Destroy=function() { this.AryData=[]; this.AryGroup=[]; this.IndexData=null; this.InputDom=null; this.HQChart=null; if (this.DivDialog) { if (document && document.body && document.body.removeChild) document.body.removeChild(this.DivDialog); this.DivDialog=null; } } this.OnClickColseButton=function(e) { this.Close(e); } //设置当前窗口数据 this.SetOpData=function(data) { this.OpData=data; } this.Close=function(e) { this.OpData=null; if (!this.DivDialog) return; this.DivDialog.style.visibility='hidden'; if (this.HQChart) this.HQChart.RestoreFocus(this.RestoreFocusDelay); } this.OnMouseDownTitle=function(e) { if (!this.DivDialog) return; var dragData={ X:e.clientX, Y:e.clientY }; dragData.YOffset=e.clientX - this.DivDialog.offsetLeft; dragData.XOffset=e.clientY - this.DivDialog.offsetTop; this.DragTitle=dragData; document.onmousemove=(e)=>{ this.DocOnMouseMoveTitle(e); } document.onmouseup=(e)=>{ this.DocOnMouseUpTitle(e); } } this.DocOnMouseMoveTitle=function(e) { if (!this.DragTitle) return; var left = e.clientX - this.DragTitle.YOffset; var top = e.clientY - this.DragTitle.XOffset; var right=left+this.DivDialog.offsetWidth; var bottom=top+ this.DivDialog.offsetHeight; var scrollPos=GetScrollPosition(); if ((right+5)>=window.innerWidth) left=window.innerWidth-this.DivDialog.offsetWidth-5; if ((bottom+5)>=window.innerHeight+scrollPos.Top) top=(window.innerHeight-this.DivDialog.offsetHeight-5)+scrollPos.Top; this.DivDialog.style.left = left + 'px'; this.DivDialog.style.top = top + 'px'; if(e.preventDefault) e.preventDefault(); } this.DocOnMouseUpTitle=function(e) { this.DragTitle=null; document.onmousemove = null; document.onmouseup = null; } this.Show=function(x, y, groupID) { if (!this.DivDialog) return; if (this.HQChart) this.HQChart.ClearRestoreFocusTimer(); if (!groupID) groupID=this.IndexData.Data[0].Group.ID; this.UpdateGroupData(); this.ChangeGroup(groupID); if (this.OpData && this.OpData.Title) this.TitleBox.DivName.innerText=this.OpData.Title; if (!IFrameSplitOperator.IsNumber(x) || !IFrameSplitOperator.IsNumber(y)) //默认居中显示 { var rtClient=this.HQChart.UIElement.getBoundingClientRect(); var scrollPos=GetScrollPosition(); x=rtClient.left+(rtClient.right-rtClient.left-this.DivDialog.offsetWidth)/2; y=rtClient.top+(rtClient.bottom-rtClient.top-this.DivDialog.offsetHeight)/2+scrollPos.Top; } this.InputDom.value=""; this.DivDialog.style.visibility='visible'; this.DivDialog.style.top = y + "px"; this.DivDialog.style.left = x + "px"; } this.Create=function() { var divDom=document.createElement("div"); divDom.className='UMyChart_SearchIndex_Dialog_Div'; //对话框标题栏 var divTitle=document.createElement("div"); divTitle.className='UMyChart_SearchIndex_Title_Div'; divTitle.onmousedown=(e)=>{ this.OnMouseDownTitle(e);} divDom.appendChild(divTitle); var divName=document.createElement("div"); divName.className='UMyChart_SearchIndex_Name_Div'; divName.innerText="指标搜索"; divTitle.appendChild(divName); var divClose=document.createElement("div"); divClose.className='UMyChart_SearchIndex_Close_Div'; divClose.innerText="x"; divClose.onmousedown=(e)=>{ this.OnClickColseButton(e); } divTitle.appendChild(divClose); //整个框子 var divFrame=document.createElement("div"); divFrame.className="UMyChart_SearchIndex_Frome_Div"; divDom.appendChild(divFrame); //搜索框 var divInput=document.createElement("div"); divInput.className="UMyChart_SearchIndex_Input_Div"; divFrame.appendChild(divInput); var input=document.createElement("input"); input.className='UMyChart_SearchIndex_Input'; input.type="text"; input.placeholder="输入指标名称" input.addEventListener("input", (e)=>{this.OnInputSearch(e); }) divInput.appendChild(input); this.InputDom=input; //分类+指标内容 var divContainer=document.createElement("div"); divContainer.className="UMyChart_SearchIndex_Container_Div"; divDom.appendChild(divContainer); //分类 var divGroup=document.createElement("div"); divGroup.className="UMyChart_SearchIndex_GroupList_Div"; divContainer.appendChild(divGroup); for(var i=0, j=0;i<this.MaxGroupCount;++i) { var groupItem={ Div:null, Span:null }; var divItem=document.createElement("div"); divItem.className="UMyChart_SearchIndex_Group_Div"; divGroup.appendChild(divItem); groupItem.Div=divItem; var spanDom=document.createElement("span"); spanDom.className='UMyChart_SearchIndex_Group_Span'; spanDom.innerText='分类名称'; divItem.appendChild(spanDom); groupItem.Span=spanDom; spanDom.onmousedown=(e)=>{ this.OnClickGroup(e); } this.AryGroup.push(groupItem); } //表格 var divTable=document.createElement("div"); divTable.className='UMyChart_SearchIndex_Table_Div'; divContainer.appendChild(divTable); var table=document.createElement("table"); table.className="UMyChart_SearchIndex_Table"; divTable.appendChild(table); var tbody=document.createElement("tbody"); tbody.className="UMyChart_SearchIndex_Tbody"; table.appendChild(tbody); this.AryData=[]; for(var i=0, j=0;i<this.MaxRowCount;++i) { var rowItem={ Tr:null, AryCell:[] }; var trDom=document.createElement("tr"); trDom.className='UMyChart_SearchIndex_Group_Tr'; tbody.appendChild(trDom); rowItem.Tr=trDom; for(j=0; j<this.ColCount;++j) { var cellItem=this.CreateCellDOM(i,j,trDom); rowItem.AryCell.push(cellItem); } this.AryData.push(rowItem); } document.body.appendChild(divDom); this.DivName=divName; this.DivDialog=divDom; this.TitleBox={ DivTitle:divTitle, DivName:divName, DivColor:divClose }; this.UpdateStyle(); } this.CreateCellDOM=function(rowID, colID, trDom) { var cellItem={ Td:null, Span:null, RowID:rowID, ColID:colID, IndexItem:null }; var tdDom=document.createElement("td"); tdDom.className="UMyChart_SearchIndex_Text_Td"; //指标名称 trDom.appendChild(tdDom); cellItem.Td=tdDom; var spanDom=document.createElement("span"); spanDom.className='UMyChart_SearchIndex_Text_Span'; spanDom.innerText='指标名称'; spanDom.onmousedown=(e)=>{ this.OnClickIndex(e, cellItem); } tdDom.appendChild(spanDom); cellItem.Span=spanDom; return cellItem; } this.OnClickIndex=function(e, cellItem) { if (!this.OpData) return; if (!cellItem || !cellItem.IndexItem) return; var event=this.HQChart.GetEventCallback(JSCHART_EVENT_ID.SEARCH_DIALOG_ON_CLICK_INDEX); if (event && event.Callback) { var sendData={ OpData:this.OpData, IndexData:cellItem.IndexItem, HQChart:this.HQChart, PreventDefault:false }; event.Callback(event, sendData, this); if (sendData.PreventDefault==true) return; //已被上层处理了 } if (this.OpData.OpType==1) { if (!IFrameSplitOperator.IsNumber(this.OpData.WindowIndex)) return; var indexItem=cellItem.IndexItem; if (indexItem.Type==0 ) //系统指标 { this.HQChart.ChangeIndex(this.OpData.WindowIndex, indexItem.ID, indexItem); } else if(indexItem.Type==4 || indexItem.Type==5) //五彩K线 { this.HQChart.ChangeInstructionIndex(indexItem.ID); } else if (indexItem.Type==1) //自定义脚本指标 { var indexData={ ID:indexItem.ID, Name:indexItem.Name, Script:indexItem.Script, Args:indexItem.Args }; if (indexItem.Lock) indexData.Lock=indexItem.Lock; this.HQChart.ChangeScriptIndex(this.OpData.WindowIndex, indexData); } else if (indexItem.Type==2) //api指标 { var indexData={ API: { ID:indexItem.ID, Name:indexItem.Name, Args:indexItem.Args, Url:'local'} }; if (indexItem.Lock) indexData.Lock=indexItem.Lock; this.HQChart.ChangeAPIIndex(this.OpData.WindowIndex, indexData); } else if (indexItem.Type==3) //指标模板 { this.HQChart.ChangeIndexTemplate(indexItem.TemplateData) } } else if (this.OpData.OpType==2) { if (!IFrameSplitOperator.IsNumber(this.OpData.WindowIndex)) return; var indexItem=cellItem.IndexItem; if (indexItem.Type==0) //系统指标 { var obj={ WindowIndex:this.OpData.WindowIndex, IndexName:indexItem.ID }; if (indexItem.Lock) obj.Lock=indexItem.Lock; this.HQChart.AddOverlayIndex(obj); } else if (indexItem.Type==1) //自定义脚本指标 { var obj={ WindowIndex:this.OpData.WindowIndex, IndexName:indexItem.ID, Name:indexItem.Name, Script:indexItem.Script, Args:indexItem.Args }; if (indexItem.Lock) obj.Lock=indexItem.Lock; this.HQChart.AddOverlayIndex(obj); } else if (indexItem.Type==2) //api指标 { var obj={ WindowIndex:this.OpData.WindowIndex, API: { ID:indexItem.ID, Name:indexItem.Name, Args:indexItem.Args, Url:'local'} }; if (indexItem.Lock) obj.Lock=indexItem.Lock; this.HQChart.AddOverlayIndex(obj); } else if (indexItem.Type==3) //指标模板 { this.HQChart.ChangeIndexTemplate(indexItem.TemplateData) } else if(indexItem.Type==4 || indexItem.Type==5) //五彩K线 { this.HQChart.ChangeInstructionIndex(indexItem.ID); } } else if (this.OpData.OpType==3) //新增加指标窗口 { var indexItem=cellItem.IndexItem; if (indexItem.Type==0) //系统指标 { this.HQChart.AddIndexWindow(indexItem.ID, this.OpData); } else if (indexItem.Type==1) //自定义脚本指标 { var indexData={ ID:indexItem.ID, Name:indexItem.Name, Script:indexItem.Script, Args:indexItem.Args }; this.HQChart.AddScriptIndexWindow(indexData, this.OpData); } else if (indexItem.Type==2) //api指标 { var indexData={ API: { ID:indexItem.ID, Name:indexItem.Name, Args:indexItem.Args, Url:'local'} }; if (indexItem.Lock) indexData.Lock=indexItem.Lock; this.HQChart.AddAPIIndexWindow(indexData, this.OpData); } else if (indexItem.Type==3) //指标模板 { this.HQChart.ChangeIndexTemplate(indexItem.TemplateData) } } } this.OnClickGroup=function(e) { if (!e.target) return false; var groupID=e.target.dataset.groupid; if (!groupID) return false; this.ChangeGroup(groupID); } this.UpdateStyle=function() { }; this.ChangeGroup=function(groupID) { if (!this.IndexData) return; if (!IFrameSplitOperator.IsNonEmptyArray(this.IndexData.Data)) return; var findItem=null; for(var i=0; i<this.IndexData.Data.length; ++i) { var item=this.IndexData.Data[i]; if (item.Group.ID==groupID) { findItem=item; break; } } if (!findItem) return; this.UpdateTableData(findItem); } //左侧分类 this.UpdateGroupData=function() { var index=0; for(index=0; index<this.IndexData.Data.length && index<this.AryGroup.length; ++index) { var item=this.IndexData.Data[index]; var cell=this.AryGroup[index]; cell.Span.innerText=item.Group.Name; cell.Span.dataset.groupid=item.Group.ID; cell.Span.dataset.groupname=item.Group.Name; if (cell.Div.style.display=="none") cell.Div.style.display=""; } for(; index<this.AryGroup.length; ++index) { var cell=this.AryGroup[index]; cell.Div.style.display="none"; } } this.UpdateTableData=function(data) { var rowIndex=0; for(var j=0, index=0;rowIndex<this.AryData.length && index<data.AryIndex.length ;++rowIndex) { var row=this.AryData[rowIndex]; var cellCount=0; for(j=0;j<row.AryCell.length;++j) { var cell=row.AryCell[j]; if (index<data.AryIndex.length) { var indexItem=data.AryIndex[index]; cell.Span.innerText=indexItem.Name; if (cell.Td.style.display=="none") cell.Td.style.display=""; cell.IndexItem=indexItem; ++index; ++cellCount; } else { cell.Td.style.display="none"; } } if (cellCount>0) { if (row.Tr.style.display=="none") row.Tr.style.display=""; } else { row.Tr.style.display=="none"; } } for(; rowIndex<this.AryData.length; ++rowIndex) { var row=this.AryData[rowIndex]; row.Tr.style.display="none"; } } //搜索 this.OnInputSearch=function(e) { var strSearh=e.target.value; var aryIndex=[]; var aryData=this.SeachIndex(strSearh); var setIndex=new Set(); for(var i=0;i<aryData.length;++i) { var item=aryData[i]; var key=`${item.ID}-${item.Type}`; setIndex.add(key); aryIndex.push(item); } //内置指标 var scriptData = new JSIndexScript(); var result=scriptData.Search(strSearh); if (IFrameSplitOperator.IsNonEmptyArray(result)) { for(var i=0;i<result.length;++i) { var id=result[i]; var key=`${id}-0`; if (setIndex.has(key)) continue; var item={Name:id, ID:id, Type:0 }; aryIndex.push(item); } } this.UpdateTableData({ AryIndex:aryIndex }) } this.SeachIndex=function(strSearch) { if (!this.IndexData || !IFrameSplitOperator.IsNonEmptyArray(this.IndexData.Data)) return []; var aryData=[]; var upperSearch=strSearch.toUpperCase(); for(var i=0,j=0;i<this.IndexData.Data.length;++i) { var groupItem=this.IndexData.Data[i]; for(j=0;j<groupItem.AryIndex.length;++j) { var item=groupItem.AryIndex[j]; if (item.Name.indexOf(strSearch)>=0 || item.Name.indexOf(upperSearch)>=0) { aryData.push(item); } } } return aryData; } //配色修改 this.ReloadResource=function(option) { } } JSDialogSearchIndex.GetDefaultIndexData=function() { var data= { Name:"内置指标分类", Data: [ { Group:{ ID:"超买超卖型", Name:"超买超卖型"} , AryIndex: [ {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0 }, //Type:0=系统指标 1=自定义通达信脚本 2=api指标 3=指标模板 4=交易系统 5=五彩K线 {Name:"BIAS 乖离率", ID:"BIAS", Type:0}, {Name:"BIAS36 三六乖离", ID:"BIAS36", Type:0 }, {Name:"BIAS_QL 乖离率-传统版", ID:"BIAS_QL", Type:0 }, {Name:"CCI 商品路径指标",ID:"CCI", Type:0 }, {Name:"FSL 分水岭",ID:"FSL", Type:0}, {Name:"KDJ 随机指标",ID:"KDJ", Type:0}, {Name:"MTM 动量线", ID:"MTM", Type:0}, {Name:"OSC 变动速率线", ID:"OSC", Type:0}, {Name:"RSI 相对强弱指标", ID:"RSI", Type:0}, {Name:"ROC 变动率指标", ID:"ROC", Type:0}, {Name:"WR 威廉指标", ID:"WR", Type:0}, {Name:"UDL 引力线", ID:"UDL", Type:0}, {Name:"LWR 威廉指标", ID:"LWR", Type:0}, {Name:"MARSI 相对强弱平均线", ID:"MARSI", Type:0}, {Name:"ACCER 幅度涨速", ID:"ACCER", Type:0}, {Name:"CYD 承接因子", ID:"CYD", Type:0}, {Name:"CYF 市场能量", ID:"CYF", Type:0}, {Name:"ADTM 动态买卖气指标", ID:"ADTM", Type:0}, {Name:"ATR 真实波幅", ID:"ATR", Type:0}, {Name:"DKX 多空线", ID:"DKX", Type:0}, {Name:"TAPI 加权指数成交值", ID:"TAPI", Type:0}, ] }, { Group:{ ID:"趋势型", Name:"趋势型"}, AryIndex: [ {Name:"CHO 济坚指数", ID:"CHO", Type:0 }, {Name:"DMA 平均差", ID:"DMA", Type:0 }, {Name:"DMI 趋向指标", ID:"DMI", Type:0 }, {Name:"EMV 简易波动指标", ID:"EMV", Type:0 }, {Name:"MACD 平滑异同平均", ID:"MACD", Type:0 }, {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 }, {Name:"UOS 终极指标", ID:"UOS", Type:0 }, {Name:"TRIX 三重指数平均线", ID:"TRIX", Type:0 }, {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 }, {Name:"VMACD 量平滑异同平均", ID:"VMACD", Type:0 }, {Name:"SMACD 单线平滑异同平均线", ID:"SMACD", Type:0 }, {Name:"QACD 快速异同平均", ID:"QACD", Type:0 }, {Name:"VPT 量价曲线", ID:"VPT", Type:0 }, {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 }, {Name:"DBQR 对比强弱", ID:"DBQR", Type:0 }, {Name:"WVAD 威廉变异离散量", ID:"WVAD", Type:0 }, {Name:"JS 加速线", ID:"JS", Type:0 }, {Name:"CYE 市场趋势", ID:"CYE", Type:0 }, {Name:"QR 强弱指标", ID:"QR", Type:0 }, {Name:"GDX 轨道线", ID:"GDX", Type:0 }, {Name:"JLHB 绝路航标", ID:"JLHB", Type:0 }, ] }, { Group:{ ID:"成交量型", Name:"成交量型"}, AryIndex: [ {Name:"HSL 换手率", ID:"HSL", Type:0}, {Name:"OBV 累积能量线", ID:"OBV", Type:0}, {Name:"NVI 负成交量", ID:"NVI", Type:0}, {Name:"PVI 正成交量", ID:"PVI", Type:0}, {Name:"VOL 成交量", ID:"VOL", Type:0}, {Name:"VOL-TDX 成交量(虚拟)", ID:"VOL-TDX", Type:0}, {Name:"AMO 成交金额", ID:"AMO", Type:0}, {Name:"AMO-TDX 成交金额(虚拟)", ID:"AMO-TDX", Type:0}, {Name:"VRSI 相对强弱量", ID:"VRSI", Type:0}, {Name:"HSCOL 换手柱", ID:"HSCOL", Type:0}, {Name:"DBQRV 对比强弱量", ID:"DBQRV", Type:0}, {Name:"DBLB 对比量比", ID:"DBLB", Type:0}, {Name:"WSBVOL 维斯波成交量", ID:"WSBVOL", Type:0}, {Name:"CCYD 持仓异动(适用于期货)", ID:"CCYD", Type:0}, {Name:"CCL 持仓量(适用于期货)", ID:"CCL", Type:0}, ] }, { Group:{ ID:"均线型", Name:"均线型"} , AryIndex: [ {Name:"MA 均线", ID:"MA", Type:0}, {Name:"MA4 4根均线", ID:"MA4", Type:0}, {Name:"MA5 5根均线", ID:"MA5", Type:0}, {Name:"MA7 6根均线", ID:"MA6", Type:0}, {Name:"MA7 7根均线", ID:"MA7", Type:0}, {Name:"MA8 8根均线", ID:"MA8", Type:0}, {Name:"BBI 多空线", ID:"BBI", Type:0}, {Name:"ACD 升降线", ID:"ACD", Type:0}, {Name:"EXPMA 指数平均线", ID:"EXPMA", Type:0}, {Name:"EXPMA_S 指数平均线-副图", ID:"EXPMA_S", Type:0}, {Name:"HMA 高价平均线", ID:"HMA", Type:0}, {Name:"LMA 低价平均线", ID:"LMA", Type:0}, {Name:"VMA 变异平均线", ID:"VMA", Type:0}, {Name:"AMV 成本价均线", ID:"AMV", Type:0}, {Name:"BBIBOLL 多空布林线", ID:"BBIBOLL", Type:0}, {Name:"ALLIGAT 鳄鱼线", ID:"ALLIGAT", Type:0}, {Name:"GMMA 顾比均线", ID:"GMMA", Type:0}, ] }, { Group:{ ID:"路径型", Name:"路径型"} , AryIndex: [ {Name:"BOLL 布林线", ID:"BOLL", Type:0}, {Name:"BOLL 布林线-副图", ID:"BOLL副图", Type:0}, {Name:"MIKE 麦克支撑压力", ID:"MIKE", Type:0}, {Name:"ENE 轨道线", ID:"ENE", Type:0}, {Name:"PBX 瀑布线", ID:"PBX", Type:0}, {Name:"XS 薛斯通道", ID:"XS", Type:0}, {Name:"XS2 薛斯通道II", ID:"XS2", Type:0}, {Name:"DC 唐奇安通道", ID:"DC", Type:0} ] }, { Group:{ ID:"能量型", Name:"能量型"} , AryIndex: [ {Name:"BRAR 情绪指标", ID:"BRAR", Type:0}, {Name:"CYR 市场强弱", ID:"CYR", Type:0}, {Name:"MASS 梅斯线", ID:"MASS", Type:0}, {Name:"PSY 心理线", ID:"PSY", Type:0}, {Name:"CR 带状能量线", ID:"CR", Type:0}, {Name:"VR 成交量变异率", ID:"VR", Type:0}, {Name:"WAD 威廉多空力度线", ID:"WAD", Type:0}, {Name:"PCNT 幅度比", ID:"PCNT", Type:0} ] }, { Group:{ ID:"大势型", Name:"大势型"}, AryIndex: [ {Name:"ABI 绝对广量指标", ID:"ABI", Type:0 }, {Name:"ADL 腾落指标", ID:"ADL", Type:0 }, ] }, { Group:{ ID:"五彩K线", Name:"五彩K线"} , AryIndex: [ {Name:"五彩K线-十字星", ID:"五彩K线-十字星", Type:5}, {Name:"五彩K线-早晨之星", ID:"五彩K线-早晨之星", Type:5}, {Name:"五彩K线-黄昏之星", ID:"五彩K线-黄昏之星", Type:5}, {Name:"五彩K线-长十字", ID:"五彩K线-长十字", Type:5}, {Name:"五彩K线-身怀六甲", ID:"五彩K线-身怀六甲", Type:5}, {Name:"五彩K线-三个白武士", ID:"五彩K线-三个白武士", Type:5}, {Name:"五彩K线-三只乌鸦", ID:"五彩K线-三只乌鸦", Type:5}, {Name:"五彩K线-光头阳线", ID:"五彩K线-光头阳线", Type:5}, {Name:"五彩K线-光脚阴线", ID:"五彩K线-光脚阴线线", Type:5}, {Name:"五彩K线-垂死十字", ID:"五彩K线-垂死十字", Type:5}, {Name:"五彩K线-早晨十字星", ID:"五彩K线-早晨十字星", Type:5}, {Name:"五彩K线-黄昏十字星", ID:"五彩K线-黄昏十字星", Type:5}, {Name:"五彩K线-射击之星", ID:"五彩K线-射击之星", Type:5}, {Name:"五彩K线-倒转锤头", ID:"五彩K线-倒转锤头", Type:5}, {Name:"五彩K线-锤头", ID:"五彩K线-锤头", Type:5}, {Name:"五彩K线-吊颈", ID:"五彩K线-吊颈星", Type:5}, {Name:"五彩K线-穿头破脚", ID:"五彩K线-穿头破脚", Type:5}, {Name:"五彩K线-出水芙蓉", ID:"五彩K线-出水芙蓉", Type:5}, {Name:"五彩K线-乌云盖顶", ID:"五彩K线-乌云盖顶", Type:5}, {Name:"五彩K线-曙光初现", ID:"五彩K线-曙光初现", Type:5}, {Name:"五彩K线-十字胎", ID:"五彩K线-十字胎", Type:5}, {Name:"五彩K线-剑", ID:"五彩K线-剑", Type:5}, {Name:"五彩K线-平顶", ID:"五彩K线-平顶", Type:5}, {Name:"五彩K线-平底", ID:"五彩K线-平底", Type:5}, {Name:"五彩K线-大阳烛", ID:"五彩K线-大阳烛", Type:5}, {Name:"五彩K线-大阴烛", ID:"五彩K线-大阴烛", Type:5}, {Name:"五彩K线-好友反攻", ID:"五彩K线-好友反攻", Type:5}, {Name:"五彩K线-跳空缺口", ID:"五彩K线-跳空缺口", Type:5}, {Name:"五彩K线-双飞乌鸦", ID:"五彩K线-双飞乌鸦", Type:5}, {Name:"五彩K线-上升三部曲", ID:"五彩K线-上升三部曲", Type:5}, {Name:"五彩K线-下跌三部曲", ID:"五彩K线-下跌三部曲", Type:5}, {Name:"五彩K线-长下影", ID:"五彩K线-长下影", Type:5}, {Name:"五彩K线-长上影", ID:"五彩K线-长上影", Type:5}, {Name:"五彩K线-分离", ID:"五彩K线-分离", Type:5}, ] }, { Group:{ ID:"交易系统", Name:"交易系统"} , AryIndex: [ {Name:"交易系统-BIAS", ID:"交易系统-BIAS", Type:4}, {Name:"交易系统-CCI", ID:"交易系统-CCI", Type:4}, {Name:"交易系统-DMI", ID:"交易系统-DMI", Type:4}, {Name:"交易系统-KD", ID:"交易系统-KD", Type:4}, {Name:"交易系统-BOLL", ID:"交易系统-BOLL", Type:4}, {Name:"交易系统-KDJ", ID:"交易系统-KDJ", Type:4}, {Name:"交易系统-MACD", ID:"交易系统-MACD", Type:4}, {Name:"交易系统-KD", ID:"交易系统-KD", Type:4}, {Name:"交易系统-MTM", ID:"交易系统-MTM", Type:4}, {Name:"交易系统-PSY", ID:"交易系统-PSY", Type:4}, {Name:"交易系统-ROC", ID:"交易系统-ROC", Type:4}, {Name:"交易系统-RSI", ID:"交易系统-RSI", Type:4}, {Name:"交易系统-VR", ID:"交易系统-VR", Type:4}, {Name:"交易系统-DPSJ", ID:"交易系统-DPSJ", Type:4}, ] }, { Group:{ ID:"自定义", Name:"自定义"} , AryIndex: [ { Name:"收盘线(后台指标)", ID:"API-DRAWTEXTREL", Type:2, Args:null }, { Name:"高低均价(自定义脚本)", ID:"HIGH_LOW_AV", Type:1, Script:"均价:(H+L)/2;高:H;低:L;", Args:[ { Name:'N', Value:20}, { Name:'M', Value:6}]}, { Name:"指标异常(后台指标)", ID:"API_ERRORMESSAGE", Type:2, Args:null,} ] }, { Group:{ ID:"付费指标", Name:"付费指标"} , AryIndex: [ { Name:"面积图(后台指标)", ID:"API-DRAWBAND", Type:2, Args:null, Lock:{ IsLocked:true } }, { Name:"波段量能跟庄-波段量能", ID:"TEST_INDEX_4AE0_1", Type:0, Lock:{ IsLocked:true } }, { Name:"飞龙八级进-主图", ID:"TEST_INDEX_4AE0_2", Type:0, Lock:{ IsLocked:true } } ] }, { Group:{ ID:"组合指标", Name:"组合指标" } , AryIndex: [ { Name:"BOLL+ENE+KDJ", ID:"9E154D3C-A4D4-40DD-8D8F-2C499F35E31B", Type:3, TemplateData: { Windows: [ { Index:"BOLL" }, { Index:"ENE" }, { Index:"KDJ"} ] } }, { Name:"MA_OSC+DPO_RSI", ID:"E828DD1C-D41B-4888-9CB5-4CA1D84F7B50", Type:3, TemplateData: { Windows: [ //{ API:{ Name:"后台指标ID", ID:"后台指标ID", Url:'local' } }, { Index:'MA', }, { Index:"DPO" }, ], OverlayIndex: //叠加指标设置 [ { Index:'OSC', Windows:0, //IsShareY:true,ShowRightText:false }, { Index:'RSI', Windows:1, //ShowRightText:false }, ], //KLine:{ Period:5, } } }, ] } ] } return data; } function JSDialogModifyIndexParam() { this.DivDialog=null; this.DragTitle=null; this.TitleBox=null; //{ DivTitle, DivName, DivName } this.Style=0; //样式 预留 this.MaxRowCount=30; //行 this.HQChart=null; this.AryData=[]; this.IndexData=null; //指标数据 { WindowsIndex:, Type:1=主图 2=叠加, Identify, IndexScript: } this.Arguments=[]; //默认参数 this.EnableRestoreParam=true; //是否允许“恢复默认" this.RestoreFocusDelay=800; this.Inital=function(hqchart, option) { this.HQChart=hqchart; if (option) { if (IFrameSplitOperator.IsNumber(option.Style)) this.Style=option.Style; if (IFrameSplitOperator.IsNumber(option.MaxRowCount)) this.MaxRowCount=option.MaxRowCount; if (IFrameSplitOperator.IsBool(option.EnableRestoreParam)) this.EnableRestoreParam=option.EnableRestoreParam; } } this.Destroy=function() { this.AryData=[]; this.HQChart=null; if (this.DivDialog) { if (document && document.body && document.body.removeChild) document.body.removeChild(this.DivDialog); this.DivDialog=null; } } this.Show=function(x,y) { if (!this.DivDialog) return; if (this.HQChart) this.HQChart.ClearRestoreFocusTimer(); this.UpdateParam(); if (this.IndexData && this.IndexData.Title) this.TitleBox.DivName.innerText=this.IndexData.Title; if (!IFrameSplitOperator.IsNumber(x) || !IFrameSplitOperator.IsNumber(y)) //默认居中显示 { var rtClient=this.HQChart.UIElement.getBoundingClientRect(); var scrollPos=GetScrollPosition(); x=rtClient.left+(rtClient.right-rtClient.left-this.DivDialog.offsetWidth)/2; y=rtClient.top+(rtClient.bottom-rtClient.top-this.DivDialog.offsetHeight)/2+scrollPos.Top; } this.DivDialog.style.visibility='visible'; this.DivDialog.style.top = y + "px"; this.DivDialog.style.left = x + "px"; } this.OnClickColseButton=function(e) { //this.RestoreParam(); //还原参数 this.Close(e); } this.OnClickRestoreButton=function(e) { var aryText=this.Arguments; if (!aryText) aryText=[]; this.UpdateParamTable(aryText); this.RestoreParam(); } this.OnClickOkButton=function(e) { this.Close(e); } this.Close=function(e) { this.IndexData=null; this.Arguments=[]; if (!this.DivDialog) return; this.DivDialog.style.visibility='hidden'; if (this.HQChart) this.HQChart.RestoreFocus(this.RestoreFocusDelay); } this.SetIndexData=function(data) { this.IndexData=data; this.GetDefaultParam(); //this.BackupParam(); } this.OnMouseDownTitle=function(e) { if (!this.DivDialog) return; var dragData={ X:e.clientX, Y:e.clientY }; dragData.YOffset=e.clientX - this.DivDialog.offsetLeft; dragData.XOffset=e.clientY - this.DivDialog.offsetTop; this.DragTitle=dragData; document.onmousemove=(e)=>{ this.DocOnMouseMoveTitle(e); } document.onmouseup=(e)=>{ this.DocOnMouseUpTitle(e); } } this.DocOnMouseMoveTitle=function(e) { if (!this.DragTitle) return; var left = e.clientX - this.DragTitle.YOffset; var top = e.clientY - this.DragTitle.XOffset; var right=left+this.DivDialog.offsetWidth; var bottom=top+ this.DivDialog.offsetHeight; var scrollPos=GetScrollPosition(); if ((right+5)>=window.innerWidth) left=window.innerWidth-this.DivDialog.offsetWidth-5; if ((bottom+5)>=window.innerHeight+scrollPos.Top) top=(window.innerHeight-this.DivDialog.offsetHeight-5)+scrollPos.Top; this.DivDialog.style.left = left + 'px'; this.DivDialog.style.top = top + 'px'; if(e.preventDefault) e.preventDefault(); } this.DocOnMouseUpTitle=function(e) { this.DragTitle=null; this.onmousemove = null; this.onmouseup = null; } this.Create=function() { var divDom=document.createElement("div"); divDom.className='UMyChart_ModifyIndexParam_Dialog_Div'; //对话框标题栏 var divTitle=document.createElement("div"); divTitle.className='UMyChart_ModifyIndexParam_Title_Div'; divTitle.onmousedown=(e)=>{ this.OnMouseDownTitle(e);} divDom.appendChild(divTitle); var divName=document.createElement("div"); divName.className='UMyChart_ModifyIndexParam_Name_Div'; divName.innerText="指标参数修改"; divTitle.appendChild(divName); var divClose=document.createElement("div"); divClose.className='UMyChart_ModifyIndexParam_Close_Div'; divClose.innerText="x"; divClose.onmousedown=(e)=>{ this.OnClickColseButton(e); } divTitle.appendChild(divClose); //整个框子 var divFrame=document.createElement("div"); divFrame.className="UMyChart_ModifyIndexParam_Frome_Div"; divDom.appendChild(divFrame); //表格 var divTable=document.createElement("div"); divTable.className='UMyChart_ModifyIndexParam_Table_Div'; divFrame.appendChild(divTable); var table=document.createElement("table"); table.className="UMyChart_ModifyIndexParam_Table"; divTable.appendChild(table); var tbody=document.createElement("tbody"); tbody.className="UMyChart_ModifyIndexParam_Tbody"; table.appendChild(tbody); this.AryData=[]; for(var i=0;i<this.MaxRowCount;++i) { var rowItem=this.CreateRowDOM(i, tbody) this.AryData.push(rowItem); } var divButton=document.createElement("div"); divButton.className='UMyChart_ModifyIndexParam_Button_Div'; divFrame.appendChild(divButton); if (this.EnableRestoreParam) { var btnRestore=document.createElement("button"); //btnRestore.className="UMyChart_ModifyIndexParam_button"; btnRestore.innerText="恢复默认"; btnRestore.addEventListener("mousedown", (e)=>{ this.OnClickRestoreButton(e); }); divButton.appendChild(btnRestore); } /* var btnOk=document.createElement("button"); //btnOk.className="UMyChart_ModifyIndexParam_button"; btnOk.innerText="确认"; btnOk.addEventListener("mousedown", (e)=>{ this.OnClickOkButton(e); }) divButton.appendChild(btnOk); */ var btnOk=document.createElement("button"); //btnOk.className="UMyChart_ModifyIndexParam_button"; btnOk.innerText="关闭"; btnOk.addEventListener("mousedown", (e)=>{ this.Close(e); }) divButton.appendChild(btnOk); document.body.appendChild(divDom); this.DivName=divName; this.DivDialog=divDom; this.TitleBox={ DivTitle:divTitle, DivName:divName, DivColor:divClose }; this.UpdateStyle(); } this.CreateRowDOM=function(index, tbody) { var rowItem={ Tr:null, TdName:null, SpanName:null, TdValue:null, Input:null, ParamItem:null }; var trDom=document.createElement("tr"); trDom.className='UMyChart_ModifyIndexParam_Tr'; tbody.appendChild(trDom); rowItem.Tr=trDom; var tdDom=document.createElement("td"); tdDom.className="UMyChart_ModifyIndexParam_Name_Td"; //指标名称 trDom.appendChild(tdDom); rowItem.TdName=tdDom; var spanDom=document.createElement("span"); spanDom.className='UMyChart_ModifyIndexParam_Name_Span'; spanDom.innerText='参数'; tdDom.appendChild(spanDom); rowItem.SpanName=spanDom; var tdDom=document.createElement("td"); tdDom.className="UMyChart_ModifyIndexParam_Value_Td"; //指标名称 trDom.appendChild(tdDom); rowItem.TdValue=tdDom; var input=document.createElement("input"); input.className='UMyChart_ModifyIndexParam_Input'; input.type="number"; input.step=1; //input.addEventListener("mouseup", (e)=>{ this.OnParamMouseUp(e)}); //input.addEventListener("keyup", (e)=>{ this.OnParamKeyUp(e)} ); input.addEventListener("input", (e)=>{ this.OnParamInput(e)} ); tdDom.appendChild(input); rowItem.Input=input; return rowItem; } this.UpdateStyle=function() { }; this.UpdateParamTable=function(aryText) { var index=0; for(index=0; index<aryText.length && index<this.AryData.length; ++index) { var item=aryText[index]; var row=this.AryData[index]; row.SpanName.innerText=`${item.Name}: `; row.Input.value=item.Value; row.Input.dataset.paramid=item.Index; if (row.Tr.style.display=="none") row.Tr.style.display=""; } for(; index<this.AryData.length; ++index) { var row=this.AryData[index]; row.Tr.style.display="none"; row.Input.dataset.paramid=-1; } } this.UpdateParam=function() { var aryText=[]; var indexScript=this.IndexData.IndexScript; if (indexScript && IFrameSplitOperator.IsNonEmptyArray(indexScript.Arguments)) { for(var i=0;i<indexScript.Arguments.length;++i) { var item=indexScript.Arguments[i]; aryText.push({ Name:item.Name, Value:item.Value, Index:i }); } } this.UpdateParamTable(aryText); } this.RestoreParam=function() { if (!this.IndexData || !this.IndexData.IndexScript) return; var indexScript=this.IndexData.IndexScript; if (!IFrameSplitOperator.IsNonEmptyArray(indexScript.Arguments)) return; if (!IFrameSplitOperator.IsNonEmptyArray(this.Arguments)) return; var bUpdate=false; for(var i=0;i<this.Arguments.length;++i) { var oldItem=this.Arguments[i]; var item=indexScript.Arguments[i]; if (oldItem.Value!=item.Value) { item.Value=oldItem.Value; bUpdate=true; } } if (!bUpdate) return; if (this.IndexData.Type==1) this.HQChart.UpdateWindowIndex(this.IndexData.WindowIndex); else if (this.IndexData.Type==2) this.HQChart.UpdateOverlayIndex(this.IndexData.Identify); } this.BackupParam=function() { this.Arguments=[]; if (!this.IndexData || !this.IndexData.IndexScript) return; var indexScript=this.IndexData.IndexScript; if (IFrameSplitOperator.IsNonEmptyArray(indexScript.Arguments)) { for(var i=0;i<indexScript.Arguments.length;++i) { var item=indexScript.Arguments[i]; this.Arguments.push({Name:item.Name, Value:item.Value, Index:i}); } } } this.GetDefaultParam=function() { this.Arguments=[]; if (!this.IndexData || !this.IndexData.IndexScript) return; var indexScript=this.IndexData.IndexScript; var args=[]; if (indexScript.ID) { var scriptData = new JSIndexScript(); var indexInfo = scriptData.Get(indexScript.ID); if (indexInfo) args=indexInfo.Args; } var event=this.HQChart.GetEventCallback(JSCHART_EVENT_ID.GET_DEFAULT_INDEX_PARAM); if (event && event.Callback) { var sendData={ IndexData:this.IndexData, Args:args.slice(), PreventDefault:false }; event.Callback(event, sendData, this); if (sendData.PreventDefault) return; args=sendData.Args; } if (IFrameSplitOperator.IsNonEmptyArray(args)) { for(var i=0;i<args.length;++i) { var item=args[i]; this.Arguments.push({Name:item.Name, Value:item.Value, Index:i}); } } } /* this.OnParamMouseUp=function(e) { var input=e.target; var value=input.value; var id=input.dataset.paramid; this.ModifyParam(id, parseInt(value)); } this.OnParamKeyUp=function(e) { var input=e.target; var value=input.value; var id=input.dataset.paramid; this.ModifyParam(id, parseInt(value)); } */ this.OnParamInput=function(e) { var input=e.target; var value=input.value; var id=input.dataset.paramid; this.ModifyParam(id, parseInt(value)); } this.ModifyParam=function(id, value) { if (!this.IndexData || !this.IndexData.IndexScript) return; var indexScript=this.IndexData.IndexScript; var item=indexScript.Arguments[id]; if (!item) return; if (item.Value==value) return; item.Value=value; if (this.IndexData.Type==1) { this.HQChart.UpdateWindowIndex(this.IndexData.WindowIndex); } else if (this.IndexData.Type==2) { this.HQChart.UpdateOverlayIndex(this.IndexData.Identify); } } } ///////////////////////////////////////////////////////////////////////////////////////////// //测试指标 var TEST_INDEX_4AE0_1=`能量:=SQRT(VOL)*(((C-(H+L)/2))/((H+L)/2)); 平滑能量:=EMA(能量,16); 能量惯性:EMA(平滑能量,16); DRAWICON(能量惯性>0 AND REF(能量惯性,1)<0,0,1); STICKLINE(能量惯性>=0,(能量惯性-能量惯性*0.05),(能量惯性-能量惯性*0.15),3,0), COLOR0000CC; STICKLINE(能量惯性>=0,(能量惯性-能量惯性*0.2),(能量惯性-能量惯性*0.35),3,0), COLOR0066FF; STICKLINE(能量惯性>=0,(能量惯性-能量惯性*0.4),(能量惯性-能量惯性*0.55),3,0),COLOR0099FF; STICKLINE(能量惯性>=0,(能量惯性-能量惯性*0.6),(能量惯性-能量惯性*0.75),3,0), COLOR00CCFF; STICKLINE(能量惯性>=0,(能量惯性-能量惯性*0.8),(能量惯性-能量惯性*0.95),3,0), COLOR00FFFF; STICKLINE(能量惯性<0,(能量惯性-能量惯性*0.05),(能量惯性-能量惯性*0.15),3,0), COLORFF3300; STICKLINE(能量惯性<0,(能量惯性-能量惯性*0.2),(能量惯性-能量惯性*0.35),3,0), COLORFF6600; STICKLINE(能量惯性<0,(能量惯性-能量惯性*0.4),(能量惯性-能量惯性*0.55),3,0), COLORFF9900; STICKLINE(能量惯性<0,(能量惯性-能量惯性*0.6),(能量惯性-能量惯性*0.75),3,0), COLORFFCC00; STICKLINE(能量惯性<0,(能量惯性-能量惯性*0.8),(能量惯性-能量惯性*0.95),3,0), COLORFFFF00;` var TEST_INDEX_4AE0_2=` MA3:MA(CLOSE,3),COLORWHITE; MA17:MA(CLOSE,17),COLORYELLOW; QQ:=0,COLORWHITE; MA1:=MA(CLOSE,3); MA2:=MA(CLOSE,17); JG:=CROSS(MA1,MA2); VOLUME:=VOL,VOLSTICK; MAVOL1:=MA(VOLUME,3); MAVOL2:=MA(VOLUME,17); NL:=CROSS(MAVOL1,MAVOL2); DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); MACD:=(DIF-DEA)*2,COLORSTICK; NA:=CROSS(DIF,DEA); RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:=SMA(RSV,9,1); D:=SMA(K,9,1); J:=3*K-2*D; KD:=CROSS(K,D) AND CROSS(J,D); 飞龙八级进:DRAWTEXT((JG AND NL AND NA) OR (JG AND NL AND KD) OR (JG AND NA AND KD) OR (NL AND NA AND KD),L*0.95,' 飞龙八级进'),COLORYELLOW; X:=LLV(J,2)=LLV(J,8); Y:=IF(CROSS(J,REF(J+0.01,1)) AND X AND J<20,30,0); DRAWTEXT(CROSS(J,REF(J+0.01,1)) AND X AND J<20,LOW*0.98,''),COLORLIMAGENTA; 空:=EMA(C,5); 均衡:=EMA(空,5),COLORWHITE; 中轨:=HHV(MA(H,13),13),COLORRED,LINETHICK2; VAR5:=FILTER(均衡>REF(均衡,1)AND 中轨<REF(中轨,1)AND C>REF(C,1),11); DRAWTEXT(VAR5,L*0.98,''),COLORYELLOW; PT:=XMA(H,20); PAN:=XMA(CLOSE,7),COLORBROWN; RUO:=MEMA(CLOSE,3),COLORLIBLUE; STICKLINE(CLOSE> REF(CLOSE,1) ,HIGH,LOW,0,1 ),COLORRED; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,3,0 ),COLOR000055; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,2.7,0 ),COLOR000077; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,2.1,0 ),COLOR000099; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,1.5,0 ),COLOR0000BB; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,0.9,0 ),COLOR0000DD; STICKLINE(CLOSE> REF(CLOSE,1) ,OPEN,CLOSE,0.3,0 ),COLOR0000FF; STICKLINE(CLOSE= REF(CLOSE,1) ,HIGH,LOW,0,1 ),COLORWHITE; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,3,0 ),COLOR555555; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,2.7,0 ),COLOR777777; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,2.1,0 ),COLOR999999; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,1.5,0 ),COLORBBBBBB; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,0.9,0 ),COLORDDDDDD; STICKLINE(CLOSE= REF(CLOSE,1) ,OPEN,CLOSE,0.3,0 ),COLORFFFFFF; STICKLINE(CLOSE< REF(CLOSE,1) ,HIGH,LOW,0,1 ),COLORCYAN; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,3,0 ),COLOR990000; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,2.7,0 ),COLORCC0000; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,2.1,0 ),COLORFF4400; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,1.5,0 ),COLORFF8800; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,0.9,0 ),COLORFFCC00; STICKLINE(CLOSE< REF(CLOSE,1) ,OPEN,CLOSE,0.3,0 ),COLORCYAN; 高:=REF(HHV(H,80),3); 低:=REF(LLV(L,80),3); H19:=高-(高-低)*0.191; H38:=高-(高-低)*0.382; H中:=高-(高-低)*0.5; H61:=高-(高-低)*0.618; H80:=高-(高-低)*0.809; 顶点:REFDATE(高,DATE),COLORWHITE; REFDATE(H19,DATE),COLORYELLOW; REFDATE(H38,DATE),COLORMAGENTA; REFDATE(H中,DATE),COLORRED; REFDATE(H61,DATE),COLORMAGENTA; REFDATE(H80,DATE),COLORYELLOW; 低点:REFDATE(低,DATE),COLORWHITE; DRAWTEXT(ISLASTBAR,低点,''),COLORWHITE; ` //添加测试系统指标 function AddTestSystemIndex() { var aryIndex=[]; aryIndex.push( { ID:"TEST_INDEX_4AE0_1", Name: '波段量能跟庄-波段量能', Script:TEST_INDEX_4AE0_1, Args: null, }); aryIndex.push( { ID:"TEST_INDEX_4AE0_2", //指标ID Name:'飞龙八级进-主图', //指标名称 Description:'飞龙八级进', //描述信息 IsMainIndex:true, //是否是主图指标 Condition: { Period:[CONDITION_PERIOD.KLINE_DAY_ID], Message:"指标(飞龙八级进-主图)只支持日线周期" },