量化 TradingView Pine 脚本实现策略开仓

tradedge · 2024年04月25日 · 18 次阅读

使用 Pine Script 代码实现策略交易开仓的四种方式

Pine Script 交易策略可以实现开仓。如果没有这一功能,脚本就无法进行交易设置以及回测。

Pine Script 策略通过 strategy.entry() 函数实现开仓。该函数可以生成市价、限价、止损和止损限价订单。

市价订单

在 Pine Script 中生成市价入场订单时,我们使用 strategy.entry() 函数,并提供以下必需参数:

  • 订单标识符(即订单名称)
  • 订单方向,多头开仓使用 strategy.long,空头开仓使用 strategy.short

将配置的 strategy.entry() 函数放在一个 if 语句中,市价订单只会在 if 语句的条件成立时生成。

以下是多头入场的示例:

// 当价格穿过 20 根指数移动平均线时生成多头市价订单
if ta.crossover(close, ta.ema(close, 20))
    strategy.entry("Enter Long", strategy.long)

这个 if 语句使用 ta.crossover() 函数检查收盘价是否上穿 ta.ema() 函数计算的 20 根指数移动平均线。条件满足时,strategy.entry() 函数被执行。调用该函数并提供两个参数。第一个是订单的标识符(名称):"Enter Long"。另一个是方向 strategy.long,表示多头交易。

市价做空的例子:

// 当价格穿过 20 根指数移动平均线下方时生成空头市价订单
if ta.crossunder(close, ta.ema(close, 20))
    strategy.entry("Enter Short", strategy.short)

这个 if 语句使用 ta.crossunder() 函数验证收盘价是否下穿 20 根 K 线指数移动平均线。

限价订单

要使用 Pine Script 限价订单开仓,strategy.entry() 函数提供以下必需参数:

  • 订单标识符(即订单名称)
  • 订单方向。做多使用 strategy.long,做空使用 strategy.short。
  • 限价参数。在这里我们使用标的价格。

Pine Script 的限价订单在取消之前一直生效,因此必须在特定条件满足时取消订单。

将 strategy.entry() 放在一个 if 语句中。这样,它只会在 if 条件成立时执行。限价单多头开仓例子:

// 当价格穿过移动平均线上方时,在该 K 线的最低价生成买入(多头)限价订单
if ta.crossover(close, ta.ema(close, 20))
    strategy.entry("Enter Long", strategy.long, limit=low)

当价格上穿 ema20 时执行 strategy.entry() 函数,并提供三个参数。"Enter Long" 设置订单标识符。strategy.long 值让函数进行多头交易。而 limit 参数设置限价订单价格。这个价格是 K 线的最低价。

限价单开空例子:

// 当价格穿过移动平均线下方时,在该柱的最高价生成卖空限价订单
if ta.crossunder(close, ta.ema(close, 20))
    strategy.entry("Enter Short", strategy.short, limit=high)

止损订单

要在 Pine Script 中创建带有止损的开仓订单,我们给 strategy.entry() 函数提供以下三个必需参数:

  • 订单标识符(即订单名称)
  • 订单方向:多头交易使用 strategy.long,空头交易使用 strategy.short。
  • 止损价格:标的价格。

要在特定情况下生成入场止损订单(而不是一直生成),我们将 strategy.entry() 放在一个 if 语句中。这样订单只会在 if 条件成立时生成。

带有止损的多头开仓例子:

// 当价格穿过 20 根指数移动平均线上方时,生成一个开启多头交易的止损入场订单
if ta.crossover(close, ta.ema(close, 20))
    strategy.entry("Enter Long", strategy.long, stop=high + 10 * syminfo.mintick)

满足条件调用 strategy.entry() 函数并提供了三个参数。第一个是订单的标识符:"Enter Long"。使用 strategy.long 设置交易方向。而 stop 参数设置止损价格。这个价格是柱的最高价加上 10 个最小价格变动单位(syminfo.mintick)。

做空入场订单案例:

// 当价格穿过 20 根指数移动平均线下方时,生成一个开启空头交易的止损入场订单
if ta.crossunder(close, ta.ema(close, 20))
    strategy.entry("Enter Short", strategy.short, stop=low - 10 * syminfo.mintick)

这段代码调用 strategy.entry() 并提供了三个参数。订单标识符为 "空头入场"。使用 strategy.short 进行空头交易。而 stop 参数设置止损价格为所在 K 线的最低价减去 10 个最小价格变动单位(syminfo.mintick)。

止损限价订单

要使用 Pine Script 止损限价订单进场,我们给 strategy.entry() 函数提供以下四个必需参数:

  • 订单标识符(即订单名称)
  • 订单方向(多头使用 strategy.long,空头使用 strategy.short)
  • 止损价格
  • 限价价格

止损限价订单做多:

// 当价格穿过 20 根指数移动平均线上方时,生成一个开启多头交易的止损限价入场订单
if ta.crossover(close, ta.ema(close, 20))
    strategy.entry("Enter Long", strategy.long, stop=high[1], limit=close)

这段代码调用 strategy.entry() 并提供了四个参数。将订单的标识符设置为 "Enter Long"。使用 strategy.long 告诉 Pine Script 进行多头交易。

stop 参数设置止损价格为前一根 K 线的最高价(high[1])。当价格触及该价位时,限价订单生成。limit 参数设置限价价格为 K 线的收盘价。这使得策略在该限价价格或更低价位进行多头交易。

止损限价做空开仓例子:

// 当价格穿过 20 根指数移动平均线下方时,生成一个开启空头交易的止损限价入场订单
if ta.crossunder(close, ta.ema(close, 20))
    strategy.entry("Enter Short", strategy.short, stop=low[1], limit=close)

这段代码调用 strategy.entry() 并提供了四个参数。订单标识符为 "Enter Short"。使用 strategy.short 进行空头交易。stop 参数设置止损价格为前一根 K 线的最低价(low[1])。当价格达到该价格时,限价订单生成。limit 参数设置限价价格所在 K 线的收盘价。因此策略会以该限价价格或更高价位进行空头交易。

例子

//@version=5
strategy(title="Stop-limit entry orders", overlay=true)

// Calculate and plot Bollinger Bands
[middleLine, upperBand, lowerBand] = ta.bb(close, 20, 2.0)

plot(upperBand, color=color.teal, title="Upper Band")
plot(middleLine, color=color.gray, title="Middle line")
plot(lowerBand, color=color.teal, title="Lower Band")

// When prices drop below the lower band, make long stop-limit order
if ta.crossunder(close, lowerBand)
    strategy.entry("Enter Long", strategy.long, stop=lowerBand, 
         limit=lowerBand + 10 * syminfo.mintick)

// When prices rise above the upper band, make short stop-limit order
if ta.crossover(close, upperBand)
    strategy.entry("Enter Short", strategy.short, stop=upperBand,
         limit=upperBand - 10 * syminfo.mintick)

// If prices cross the middle line, cancel unfilled orders and, if
// there's a position, exit with a market order
if ta.cross(close, middleLine)
    strategy.cancel_all()
    strategy.close_all(comment="Exit Position")

第三个 if 语句使用 ta.cross() 函数评估收盘价是否穿过了 Bollinger 中轨(上方或下方)。当发生这种情况时,会执行两项操作。

首先,strategy.cancel_all() 函数取消所有待定订单。这会删除未成交的止损限价订单。因此,这些订单在价格穿过 Bollinger 中轨之前有时间成交。如果到那时它们还没有成交,订单就会被取消。

接下来,strategy.close_all() 函数以市价订单关闭所有持仓交易。这会在价格穿过中轨时退出策略的持仓。通过注释参数为此订单指定一个自定义显示名称。

如果策略在价格穿过 Bollinger 中轨时没有持仓,strategy.close_all() 将不会执行任何操作。因此,我们无需首先检查是否有持仓。

总结

  • Pine Script 策略使用 strategy.entry() 函数开启多头和空头订单。
  • 该函数可以生成市价、限价、止损和止损限价订单。
  • 始终为 strategy.entry() 提供订单标识符和方向(strategy.long 或 strategy.short)。
  • 限价和止损参数用于配置限价、止损或止损限价订单的价格。
  • 这些限价、止损或止损限价订单保持活跃直到成交。当不再需要执行交易时,我们使用 strategy.cancel() 或 strategy.cancel_all() 函数取消订单。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号