[Perl] 纯文本查看 复制代码//------------------------------------------------------------------------ // 简称: ChanLun // 名称: 缠论基本结构识别 // 类别: 技术指标 // 类型: 用户应用 //------------------------------------------------------------------------ Params Numeric MinPenLength(4); // 最小笔长度(K线数) Numeric MinFenxingDistance(3); // 分型最小间隔K线数 Numeric ZhongshuLevel(3); // 中枢最小重叠次数 Vars Bool isTopFenxing(False); // 顶分型标记 Bool isBottomFenxing(False); // 底分型标记 NumericArray topFenxingPrices; // 顶分型价格序列 NumericArray bottomFenxingPrices; // 底分型价格序列 NumericArray penHighs; // 笔高点序列 NumericArray penLows; // 笔低点序列 Begin // ===== 分型识别 ===== // 顶分型条件:中间K线高点最高且低点最高 if(High[1] > High[0] && High[1] > High[2] && Low[1] > Low[0] && Low[1] > Low[2] && BarsSinceLastFenxing >= MinFenxingDistance) { isTopFenxing = True; topFenxingPrices.Insert(0, High[1]); PlotText("顶", High[1] + 2*MinMove, Red); } // 底分型条件:中间K线低点最低且高点最低 if(Low[1] = MinFenxingDistance) { isBottomFenxing = True; bottomFenxingPrices.Insert(0, Low[1]); PlotText("底", Low[1] - 2*MinMove, Cyan); } // ===== 笔识别 ===== if(isTopFenxing && !isBottomFenxing) { // 寻找前一个底分型 if(bottomFenxingPrices.Count > 0) { Numeric lastBottom = bottomFenxingPrices[0]; if(CurrentBar - LastPenBar > MinPenLength && High[1] - lastBottom > 2*MinMove) { // 绘制笔 PlotNumeric("UpPen", lastBottom, High[1], 0, Red); penHighs.Insert(0, High[1]); penLows.Insert(0, lastBottom); } } } else if(isBottomFenxing && !isTopFenxing) { // 寻找前一个顶分型 if(topFenxingPrices.Count > 0) { Numeric lastTop = topFenxingPrices[0]; if(CurrentBar - LastPenBar > MinPenLength && lastTop - Low[1] > 2*MinMove) { // 绘制笔 PlotNumeric("DnPen", lastTop, Low[1], 0, Green); penHighs.Insert(0, lastTop); penLows.Insert(0, Low[1]); } } } // ===== 中枢识别 ===== if(penHighs.Count >= ZhongshuLevel*2) { Numeric maxLow = Highest(penLows, ZhongshuLevel); Numeric minHigh = Lowest(penHighs, ZhongshuLevel); if(maxLow ZhongshuLevel) { // 绘制中枢区域 PlotRectangle("Zhongshu", maxLow, minHigh, DarkGray); } } End //------------------------------------------------------------------------ // 简称: BarsSinceLastFenxing // 计算上次分型以来的周期数 //------------------------------------------------------------------------ Function Numeric BarsSinceLastFenxing() Begin static Numeric lastFenxingBar = 0; if(isTopFenxing || isBottomFenxing) { lastFenxingBar = CurrentBar; } return CurrentBar - lastFenxingBar; End //------------------------------------------------------------------------ // 简称: BarsSinceLastZhongshu // 计算上次中枢以来的周期数 //------------------------------------------------------------------------ Function Numeric BarsSinceLastZhongshu() Begin static Numeric lastZhongshuBar = 0; if(maxLow
在 TBQuant (TradeBlazer) 平台上编写 缠论指标公式 需要基于 TB语言 (TradeBlazer Formula Language, TBL) 进行开发。以下是实现常见的 缠论分型、笔、线段、中枢 的核心逻辑示例代码,你可以根据实际需求进行调整和扩展。 1. 缠论分型(顶分型 & 底分型) // 参数设置 Params Numeric Len(5); // 分型检测长度 End // 变量声明 Vars Bool IsTopFractal; // 顶分型标志 Bool IsBottomFractal; // 底分型标志 End // 顶分型:中间 K 线最高价最高,左右两侧低 IsTopFractal = Highest(High, Len) == High[Len-1] && (High[Len-1] > High[Len] && High[Len-1] > High[Len-2]); // 底分型:中间 K 线最低价最低,左右两侧高 IsBottomFractal = Lowest(Low, Len) == Low[Len-1] && (Low[Len-1] 2. 缠论笔(基于分型) Params Numeric MinPips(5); // 笔的最小变动单位 End Vars NumericSeries TrendDirection; // 当前笔的趋势方向 (1=上涨, -1=下跌) Numeric LastTop; // 上一个顶分型 Numeric LastBottom; // 上一个底分型 Bool NewUpPen; // 新上涨笔 Bool NewDownPen; // 新下跌笔 End // 初始化 If (CurrentBar == 0) Then TrendDirection = 0; LastTop = 0; LastBottom = 0; End // 检测分型是否有效(最低价差 >= MinPips) Bool ValidTop = (IsTopFractal && (High[Len-1] - LastBottom >= MinPips)); Bool ValidBottom = (IsBottomFractal && (LastTop - Low[Len-1] >= MinPips)); // 笔生成逻辑 If (TrendDirection == 0) Then // 初始无趋势 If (ValidBottom) Then TrendDirection = 1; // 初始向上笔 LastBottom = Low[Len-1]; Else If (ValidTop) Then TrendDirection = -1; // 初始向下笔 LastTop = High[Len-1]; End Else If (TrendDirection == 1 && ValidTop) Then // 上升趋势后出现顶分型 LastTop = High[Len-1]; NewDownPen = True; TrendDirection = -1; Else If (TrendDirection == -1 && ValidBottom) Then // 下降趋势后出现底分型 LastBottom = Low[Len-1]; NewUpPen = True; TrendDirection = 1; End End // 绘制笔 If (NewUpPen) Then LinePen("UpPen", Low[Len-1], LastBottom, Blue); NewUpPen = False; End If (NewDownPen) Then LinePen("DownPen", High[Len-1], LastTop, Red); NewDownPen = False; End 3. 缠论中枢(基于线段) Params Numeric WaveDegree(3); // 中枢最小波动次数 End Vars NumericSeries WaveHigh; // 线段高点 NumericSeries WaveLow; // 线段低点 Bool InsideRange; // 是否在中枢内 End // 中枢判断(最近 WaveDegree 次线段重叠) InsideRange = High >= Lowest(WaveHigh, WaveDegree) && Low 4. 完整示例(分型 + 笔 + 中枢) // TBQuant缠论指标完整实现(分型->笔->中枢) Params Numeric FractalLen(5); // 分型检测长度 Numeric MinPipSize(5); // 笔最小变动 Numeric WaveDegree(3); // 中枢检测线段数 End Vars ... (包含之前的变量逻辑) End // 分型检测 IsTopFractal = Highest(High, FractalLen) == High[FractalLen-1] && (High[FractalLen-1] > High[FractalLen] && High[FractalLen-1] > High[FractalLen-2]); IsBottomFractal = Lowest(Low, FractalLen) == Low[FractalLen-1] && (Low[FractalLen-1] 使用说明 [ol]复制代码 到 TBQuant 公式编辑器(F7 打开)根据需要调整参数(如 FractalLen, MinPipSize)加载到 图表 或 策略 中使用 [/ol] 扩展功能 可添加 背驰检测(MACD/成交量配合)可增加 自动交易信号(基于中枢突破) 如果有具体需求(如 添加均线过滤 / 优化中枢算法),可以进一步补充说明!
有两个 1. https://gitcode.com/open-source-toolkit/71e9c 2. https://gitcode.com/open-source-toolkit/e8a61
w20w20 发表于 2025-3-30 17:40 [mw_shl_code=perl,true]//------------------------------------------------------------------------ / ... 很多报错,用不了哦
xliuling 发表于 2025-3-30 18:11 [md]在 **TBQuant (TradeBlazer) 平台**上编写 **缠论指标公式** 需要基于 **TB语言 (TradeBlazer Formula ... 也是很多报错,运行不了