我们已经知道,单纯的if
语句解决的是“做”与“不做”的问题。但更多时候,我们的交易逻辑是“二选一”:“如果价格在均线上方,我们就看多;否则,我们就看空”。
这种非此即彼的决策,就需要if
语句的完整形态——if/else
语句。它给了我们两条明确的代码路径,并且保证有且只有一条会被执行。
if/else
语句的基本模式
它的结构非常清晰:if 条件 ... else ...
。
程序会先判断if
后面的条件,如果为true
,就执行if
下面的代码块,然后整个if/else
结构就结束了。如果条件为false
,程序会跳过if
的代码块,直接执行else
下面的代码块。
// 代码结构
if 布尔条件
// 当“布尔条件”为true时,执行此代码块
else
// 当“布尔条件”为false时,执行此代码块
这里有个新手需要注意的“坑”:else
会接住所有if
条件不满足的情况,有时候这可能会包含一些你没预料到的边缘场景。所以在写else
逻辑时,要确保它真的能处理好所有“其它”可能性。
同样,缩进规则至关重要,错误的缩进会导致逻辑混乱。
用if/else
,我们既可以执行二选一的“动作”,比如提交不同方向的订单,也可以“返回”一个二选一的值,比如给一个变量赋予不同的颜色。
案例一:动态设置均线颜色
这个例子非常直观,它使用if/else
语句,根据收盘价是在SMA之上还是之下,来动态地决定均线应该显示成什么颜色。这是一种非常常见的图表可视化技巧。
//@version=6
indicator(title="if/else语句 - 案例1", overlay=true)
// 1. 计算20日SMA
smaValue = ta.sma(close, 20)
// 2. 使用if/else语句决定均线的颜色
plotColour = if close > smaValue
color.green
else
color.red
// 3. 绘制均线
plot(smaValue, color=plotColour,
style=plot.style_circles, linewidth=3)
其着色后的均线图效果如下:
案例二:动态计算策略的止盈目标
下面这个策略案例展示了if/else
一个更高级的用法:动态调整策略参数。我们的目标是,止盈位不是一个固定的点数,而是根据市场所处的“势”来动态调整,让止盈更“智能”。
//@version=6
strategy(title="if/else语句 - 策略案例", overlay=true)
// 1. 计算12周期EMA作为多空分界线
emaValue = ta.ema(close, 12)
plot(emaValue, color=color.lime, linewidth=2, title="EMA(12)")
// 2. 使用if/else动态设定止盈目标
priceTarget = if close > emaValue
emaValue * 1.10
else
emaValue * 0.99
// 3. 提交订单
if ta.crossover(close, emaValue) // 当价格上穿均线时
strategy.entry("Enter Long", strategy.long)
strategy.exit("Exit Long", limit=priceTarget)
在这个策略中,if/else
语句根据收盘价与均线的相对位置,动态地计算出不同的priceTarget
。这种自适应的参数设置,是让策略更贴合市场节奏的有效方法。
该策略在图表上的效果如下:
总结
if/else
语句是你代码里的“岔路口”,它强制你的程序在两条路中选择一条来走,实现了“如果…就…否则…”的完整决策逻辑。它也会根据一个布尔条件的真假,执行两条预设代码路径中的一条:如果条件为true
,执行if
块;如果为false
,执行else
块。无论是执行不同的动作,还是返回不同的值,当你需要处理非此即彼的场景时,if/else
就是你的不二之选。最后清晰的缩进是它能正确工作的保证。