保持敬畏之心
交易是一场持久战

Pine Script(12):if 语句实现 if-then 逻辑

#Pine Script入门教学

前面我们讲了三元运算符?:,它擅长根据条件“返回一个值”。但如果我们的需求不是返回值,而是“执行一个或一系列动作”呢?

比如,“如果金叉发生,就提交一笔买入订单”,或者“如果满足某个条件,就画一条趋势线”。这种时候,就需要请出PineScript里进行条件判断的另一个主角——if语句。

if语句的核心功能就是:根据一个条件的真假,来决定是否执行某一段代码。它是你策略的“执行官”,负责在特定情况发生时,采取相应的行动。

if语句的语法结构

它的基本结构非常像我们在说英语:if 条件… 然后呢?然后另起一行,向右缩进(标准是4个空格),写下当条件为true时要执行的所有动作。

// 代码结构
if 布尔条件
    // 当“布尔条件”为true时,
    // 这里的代码块才会被执行
    // (注意:此代码块必须缩进)

这个缩进至关重要,它告诉PineScript哪些代码是归if管的,哪些不是。搞错缩进,程序就会报错或者乱套。

这里有一个PineScript和其他语言(比如Python)非常不同的地方,是新手的重点“避坑区”:if后面的条件必须是一个明确的truefalse布尔值。你不能像在其他语言里那样写if 1或者if some_variable,程序会不认。你必须写成类似if some_variable > 10这种能明确返回truefalse的表达式。

if语句块里,我们可以执行各种动作,比如最常见的下单操作strategy.entry(),或者修改一个已经存在的变量的值。注意,在if块里修改变量值时,我们用的是“重新赋值运算符”:=,而不是声明变量时用的=

案例一:使用if语句计算条件平均值

这个例子展示了如何使用if语句进行筛选,计算一个特殊的平均值:只统计那些“放量”K线的收盘价,而忽略“缩量”K线。

//@version=6
indicator(title="if语句 - 案例1", overlay=true)

// 1. 初始化变量
closeSum = 0.0 // 用于累加“合格”K线的收盘价
count = 0      // 用于计算“合格”K线的数量

// 2. 计算成交量的“及格线”
averageVolume = ta.sma(volume, 20)

// 3. 循环遍历过去10根K线
for i = 0 to 9
    // 4. 如果这根K线的成交量 > 它的20均量
    if volume[i] > averageVolume[i]
        closeSum := closeSum + close[i]
        count := count + 1

// 5. 计算最终的“条件平均价”
avgClose = count > 0 ? closeSum / count : na

// 6. 绘制结果
plot(avgClose, color=color.fuchsia, linewidth=2, title="条件成交量均线")

该自定义均线的图表效果如下:

使用Pine脚本if语句计算条件平均价的指标效果图

案例二:使用if语句提交策略订单

如果说前面的例子还有点绕,那下面这个均线交叉策略,就是if语句在实盘交易中最直接、最核心的应用:监测交易信号,执行开平仓指令。

//@version=6
strategy(title="if语句 - 均线交叉策略", overlay=true)

// 1. 计算快慢两条均线
quickMA = ta.sma(close, 20)
slowMA  = ta.sma(close, 60)

// 2. 绘制均线,方便观察
plot(quickMA, color=color.blue, title="快线SMA20")
plot(slowMA, color=color.orange, linewidth=2, title="慢线SMA60")

// 3. 使用if语句
// 如果快线上穿慢线
if ta.crossover(quickMA, slowMA)
    // 执行“进入多头”的动作
    strategy.entry("Enter Long", strategy.long, qty=5)

// 如果快线下穿慢线
if ta.crossunder(quickMA, slowMA)
    // 执行“进入空头”的动作
    strategy.entry("Enter Short", strategy.short, qty=5)

这段代码完美地诠释了if语句的“执行官”角色。它使用内置函数ta.crossover()ta.crossunder()来判断金叉和死叉。这两个函数在交叉发生的那一根K线上会返回trueif语句捕获到这个true信号后,就立刻执行内部的strategy.entry()函数来下单。

由于这两个if语句会在每次均线交叉时都提交订单,因此该策略会根据均线交叉信号进行交易,效果如下:

使用Pine脚本if语句执行均线交叉策略的交易信号图

总结

if语句是你策略的“执行官”,它用于判断一个布尔(true/false)条件。如果条件为true,则执行if关键字下方缩进的代码块;如果条件为false,则跳过该缩进代码块。代码缩进至关重要:if下方的代码块必须相对于if关键字所在行,额外缩Git indent4个空格(或1个制表符)。if语句使得我们的指标或策略能够根据不同情况做出决策和执行动作,是实现交易自动化的关键。

赞(0)
未经允许不得转载:图道交易 » Pine Script(12):if 语句实现 if-then 逻辑
分享到

评论 抢沙发