在上一篇文章中,我们已经系统介绍了 Pine Script 中的 for loop,并通过实例说明了它在固定次数遍历、区间计算等场景下的常见用法。不过,在实际策略和指标开发中,并不是所有问题都能提前确定循环次数。有些逻辑需要在“条件满足之前不断执行”,这时 while loop 就显得尤为重要。
while loop 是 Pine Script 中另一种核心循环结构,它基于条件判断来决定是否继续执行代码,而不是依赖预先设定的次数。这使它在动态计算、逐步逼近目标值、状态驱动型逻辑等场景中具有更高的灵活性。当然,也正因为这种灵活性,while loop 在使用时需要格外注意边界条件,否则可能导致脚本超时或编译错误。
本文将在 for loop 的基础上,详细介绍 Pine Script 中 while loop 的语法结构、执行机制及其与 for loop 的关键区别,并结合实际示例,帮助你理解在什么情况下应该选择 while loop,以及如何安全、高效地使用它。
while 循环语句用于创建一个由条件控制的循环,它通过一个条件表达式来控制其本地代码块的执行。只要指定的条件保持为真,循环就会持续迭代。
while 循环的头部会在每一次迭代之前对条件进行求值。因此,当脚本在某次迭代中修改了该条件时,循环头部会在下一次迭代时反映这些变化。
根据循环头部中指定的条件,while 循环的行为可以与 for 循环类似,例如持续迭代直到某个计数变量达到指定的上限。
由于 while 循环 的执行依赖于其条件始终为真,而该条件在某一次特定迭代中可能不会发生变化,因此在循环开始之前,预期的迭代次数往往是无法准确确定的。因此,while 循环通常在无法事先确定精确循环边界的场景中非常有用。
下面的脚本用于跟踪当图表的收盘价突破用户指定长度和通道宽度的 Keltner 通道时的情况。当价格突破当前 K 线的通道范围时,脚本会绘制一个方框,用来高亮显示此前所有连续收盘价仍位于该价格区间内的 K 线。该脚本使用 while 循环来分析历史 K 线的价格,并逐步调整每一个新方框的左边界,直到绘制的区域覆盖当前区间内最新的一组连续 K 线。
10. 检测“首次突破”:当前 K 线价格在通道外,上一根 K 线价格不在通道外。这表示:刚刚发生突破(避免重复画框)。
11. 创建价格窗口 Box:创建一个新的 box 对象:
左边界:bar_index
右边界:bar_index(初始宽度为 0)
上边界:channelHigh
下边界:channelLow
border_width = 2:边框宽度
bgcolor:半透明灰色背景
这个方框将用来标记“价格在通道内的历史区间”。
12. 初始化计数器:定义一个整数变量 i,用于回溯历史 K 线(close[i] 表示第 i 根之前的收盘价)。
13. while 循环:向左扩展方框:只要 第 i 根之前的收盘价仍在当前通道范围内:
close[i] >= channelLow
close[i] <= channelHigh
循环继续执行。
14. 调整方框左边界:将方框的左边界向左移动到:当前 K 线索引 – i,实现“逐根向左扩展方框”。
15. 增加回溯步数:每次循环 i 加 1
16. 绘制通道下轨。
17. 在图表上绘制通道上轨线。
K线上结果呈现如下:
本文通过一个完整的 Pine Script 示例,系统地讲解了 while 循环在 TradingView 指标中的实际应用。脚本以 EMA 与 ATR 构建 Keltner 通道为基础,当价格首次突破通道时创建一个价格窗口方框,并利用 while 循环向左逐根回溯历史 K 线,只要收盘价仍处于当前通道范围内,就不断扩展方框的左边界。相比 for 循环,while 循环不依赖预先确定的迭代次数,更适合用于回溯区间长度不确定的场景。通过这一示例,可以清楚地看到 while 循环在处理“连续条件判断”和“动态边界”问题时的优势,有助于读者在编写更灵活、逻辑更清晰的 Pine Script 脚本时,合理选择和运用循环结构。
By
Michael Miao
The information provided is of general nature only and does not take into account your personal objectives, financial situations or needs. Before acting on any information provided, you should consider whether the information is suitable for you and your personal circumstances and if necessary, seek appropriate professional advice. All opinions, conclusions, forecasts or recommendations are reasonably held at the time of compilation but are subject to change without notice. Past performance is not an indication of future performance. Go Markets Pty Ltd, ABN 85 081 864 039, AFSL 254963 is a CFD issuer, and trading carries significant risks and is not suitable for everyone. You do not own or have any interest in the rights to the underlying assets. You should consider the appropriateness by reviewing our TMD, FSG, PDS and other CFD legal documents to ensure you understand the risks before you invest in CFDs. 免责声明:文章来自 GO Markets 分析师和参与者,基于他们的独立分析或个人经验。表达的观点、意见或交易风格仅代表作者个人,不代表 GO Markets 立场。建议,(如有),具有“普遍”性,并非基于您的个人目标、财务状况或需求。在根据建议采取行动之前,请考虑该建议(如有)对您的目标、财务状况和需求的适用程度。如果建议与购买特定金融产品有关,您应该在做出任何决定之前了解并考虑该产品的产品披露声明 (PDS) 和金融服务指南 (FSG)。
全球顶级大厂对最前沿先进制程晶圆以及高端先进封装的贪婪蚕食速度,已经远远把底层供应链的常态扩产周期甩在了身后。这种持仓超载带来的**内生脆性风险**,正在强行迫使顶级 AI 巨头未雨绸缪地去寻找替代制造水源 —— 这绝非他们要脱离或抛弃台积电,而是因为在风控准则上,大厂绝不能将万亿美元的算力帝国单边绑死在单一地理节点的供应链上。
一颗顶级 AI 算力大芯片的诞生,绝不仅仅是将光刻机在晶圆上蚀刻出电路那么简单。工程师必须在微观层面上,将算力核心的核心中央处理器、海量的高带宽显存(HBM)以及其他异构组件,以极度变态的物理密度进行拼装互联,使其在财务能效比上能像一个闭环整体那样爆发出超级算力。这一道决定生死的终极组装工艺,在行业内被统称为高级先进封装。
看涨英特尔(Intel) Foundry 战略的长线逻辑极具说服力:**全球 AI 基础设施建设资本支出依旧高亢暴动**,台积电的物理承载力逼近绝对瓶颈,跨国巨头急切需要一个在技术、地缘和产权安全上完全靠得住的第二制造温床。如果英特尔能够成功将目前传出的多项大厂试单测试意向真正沉淀为流水线上的量产出货,华尔街将乐此不疲地对其转型前景执行暴利重新计价。
更底层的风险在于**全球 AI 硬件资本支出的大周期拐点**。倘若在 5 月 27 日核心宏观数据和美债收益率冲高的双重压制下,谷歌、微软、亚马逊或 Meta 等超大规模云厂商在下半年对数据中心等重资产砸钱的步伐出现边际失速,那么整场芯片战争所赖以生存的总蛋糕都将面临残酷的系统性估值倍数(Valuation Multiple)大清洗,届时全行业泥沙俱下,任何个股的微观进展都绝无可能在大雪崩中逆势独活。
作为坐在交易面板前的你,未来决定多空头寸生死存亡的终极监测变量包括:顶级大厂生产性订单的最终法律合同落地、18A 制程的量产良率拐点、英特尔代工单元经营性亏损的边际改善情况、台积电先进封装的扩产速度,以及全球超大规模云厂商的 AI 资本开支大盘有无发生见顶刹车。