将计算出来的趋势线绘制到图表上时遇到的问题

目标:公式运行到某一个Bar时根据这个Bar之前的历史图形挑选的两个点(x1,y1),(x2, y2) 根据公式y=ax+b 计算出 a,b两个数值,然后从这个Bar之后根据公式计算出y值,然后将这个y值计算出来并画在图表上,当公式运行到之后某一个K线,价格突破趋势线后,清空a,b参数,停止计算,也停止画线,直到下一次条件满足重新计算出a,b 问题:用PlotNumeric画图时如果没有值也会将有值的点连接起来,但不需要。下图给出了一个例子,从出现绿色笑脸之后的第一根Bar开始画,遇到红色脸就停止,直到遇到下一个绿色脸才继续; 如果遇到红色脸之前遇到另一个绿色脸,则改变斜率继续。图中只有红色框里的部分是需要的,连接红框的线不需要。请问这种线段要如何画出?

“line-break”-填充打断就可以了

回复:亲测有效😀,谢谢老师指点👍👍样本代码供有相同问题的伙伴参考文档看这里: https://tbq3.tbquant.net/helper?product_id=991&keyword=3794&content_id=2658&type=article#4.8-%E2%80%9Cline-break%E2%80%9D-%E7%94%BB%E7%BA%BF%E6%AE%B5 Vars Plot plt1; Global Array<Integer> barsToSkip([3,4,5,6]); Events OnBar(ArrayRef<Integer> indexs) { if(ArrayFind(barsToSkip, currentBar % 12)) { Print(Text(CurrentBar)); plt1.setOption("MA1","line-break",true); } plt1.line("MA1",Close); }

回复:请老师回复前先试下编译能否通过,代码里有明显的语法错误,DeepSeek, Kimi,ChatGPT, 豆包, Perplexity, Github Copilot这些辅助的AI我都有,我也可以自己问,自己测试,如果只是随意转贴的画,就不麻烦老师做AI的搬运工了

用DeepSeek AI 回答的。我只是转抄。老师看这个回答如何。--------------------------------------------------------------------------------------要实现你描述的功能,可以在开拓者量化软件中使用以下方法:1. 计算趋势线的斜率和截距在满足条件时,根据历史图形中的两个点 (x1, y1) 和 (x2, y2) 计算趋势线的斜率 a 和截距 b。计算公式:斜率:a = (y2 - y1) / (x2 - x1)截距:b = y1 - a * x12. 绘制趋势线使用 PlotNumeric 绘制趋势线,并在价格突破趋势线时停止绘制。3. 处理断点在遇到红色脸(停止条件)时,清空 a 和 b,并停止绘制趋势线。直到下一次满足条件时重新计算并绘制。4. 示例代码以下是一个示例代码,实现你描述的功能:pascal复制Vars: Numeric a(0); // 斜率 Numeric b(0); // 截距 Bool isDrawing(False); // 是否正在绘制趋势线 Numeric startBar(0); // 开始绘制的Bar索引 NumericArray xValues[100](0); // 存储x值 NumericArray yValues[100](0); // 存储y值 Numeric count(0); // 记录点数 Begin // 满足条件时计算斜率和截距 If (ConditionForGreenFace) Then Begin // 获取两个点的坐标 Numeric x1 = BarIndex - 10; // 假设第一个点是10根Bar之前 Numeric y1 = Close[x1]; Numeric x2 = BarIndex - 5; // 假设第二个点是5根Bar之前 Numeric y2 = Close[x2]; // 计算斜率和截距 a = (y2 - y1) / (x2 - x1); b = y1 - a * x1; // 标记开始绘制 isDrawing = True; startBar = BarIndex; count = 0; // 重置点数 End; // 绘制趋势线 If (isDrawing) Then Begin // 计算当前Bar的y值 Numeric y = a * BarIndex + b; // 记录x和y值 xValues[count] = BarIndex; yValues[count] = y; count = count + 1; // 绘制趋势线 PlotNumeric("TrendLine", y, Default, Default, Default, True); // 检查是否突破趋势线 If (Close > y And ConditionForRedFace) Then Begin // 清空斜率和截距 a = 0; b = 0; isDrawing = False; // 停止绘制 DeletePlot("TrendLine"); End; End; // 处理断点 If (Not isDrawing) Then Begin // 清空x和y值 For Numeric i = 0 To count - 1 Begin xValues[i] = 0; yValues[i] = 0; End; count = 0; End; End5. 代码说明ConditionForGreenFace:满足绿色笑脸的条件。ConditionForRedFace:满足红色笑脸的条件。PlotNumeric:绘制趋势线。DeletePlot:停止绘制趋势线。xValues 和 yValues:存储趋势线的点,用于处理断点。6. 注意事项数据长度:确保 x1 和 x2 的索引在有效范围内。突破条件:根据实际需求调整价格突破趋势线的条件。性能优化:如果数据量较大,可以优化数组的存储和清理逻辑。通过以上方法,你可以实现根据历史图形计算趋势线,并在满足条件时绘制趋势线,同时在价格突破趋势线时停止绘制。如果仍有疑问,欢迎继续交流!

回复:老师好,使用AI辅助用TB开发是个好主意,之前我只用过GitHub CoPilot辅助开发,没想到现在AI也能直接辅助TB的编程语言了。具体到我的问题,似乎代码没有贴全,比如4. DeletePlot:停止绘制趋势线。这个函数哪里来的呢?能否把代码贴全给我看看?