Pine 脚本:在 if 语句中使用绘制的值

问题描述 投票:0回答:1

我是结构编程语言的新手,我正在尝试制作一个基于 2 个随机振荡器的指标和策略,其中一个比另一个更快。 2 个振荡器的交叉/欠值以及较慢和较快振荡器的值用于确定进入和退出条件。以下是结构化英语中描述的条件:

IF crossover is below 25 OR slow stoch oscil is below 20 THEN
   Open long position
ELSE
   IF fast stoch oscil is above 90 THEN
      Close long position
   ELSE
      Do nothing
   ENDIF
ENDIF
IF crossunder is above 75 OR slow stoch oscil is above 80 THEN
   Open short position
ELSE
   IF fast stoch oscil is below 10 THEN
      Close short position
   ELSE
      Do nothing
   ENDIF
ENDIF
EXIT

以及伪代码:

crossover = (stoch_slow, stoch_fast)
crossunder = (stoch_slow, stoch_fast)
long
  if crossover < 25 or stoch_slow < 20
    close_long
      if long == true and stoch_fast > 90
short
  if crossunder > 75 or stoch_slow > 80
    close_short
     if short == true and stoch_fast < 10

我阅读了 Pine Script 用户手册的相关部分,但找不到类似的示例,最终只能绘制出交叉/下的所有实例。

//@version=5
indicator(title="Stochastic oscillator-SlowFast", shorttitle="Stoch-SF", overlay=false)
// Input and calculate values
periodKs = input.int(10)
smoothKs = input.int(10)
ks = ta.sma(ta.stoch(close, high, low, periodKs), smoothKs)
periodKf = input.int(6)
smoothKf = input.int(3)
kf = ta.sma(ta.stoch(close, high, low, periodKf), smoothKf)
// Plot crossover/under circles
long = plot(ta.crossover(ks, kf) ? kf : na, color=color.teal, linewidth=3, style=plot.style_circles)
short = plot(ta.crossunder(ks, kf) ? kf : na, color=color.red, linewidth=3, style=plot.style_circles)
// Plot Stochastics lines
plot(ks, color=color.yellow)
plot(kf, color=color.white)
hline(18)
hline(36)
hline(64)
hline(82)

后来,我在TradingCode.net上找到了另一种方法来完成交叉/下划线的标记,替换了上面代码中的“// Plot crossover/under Circles”部分:

co = ta.crossover(ks, kf)
cu = ta.crossunder(ks, kf)
// Colour the background when a crossover/under happens
backgroundColour = if co
    color.new(color.teal, 80)
else if cu
    color.new(color.orange, 80)
bgcolor(backgroundColour)

但我还没有找到一种方法将布尔值和浮点值同化为一种常见类型。

TLDR 如何获取交叉/低于的值并仅绘制高于/低于某个固定值的值。

floating-point boolean pine-script pine-script-v5
1个回答
0
投票

找出解决方案很有趣,我什至找到了我没有提到的第二个问题的解决方案。 下一个代码替换我问题的最后一个代码块:

sfco = ta.crossover(kf, ks) and kf < 36 or ks < 18 //Open long position
sfcu = ta.crossunder(kf, ks) and kf > 64 or ks > 82 //Open short position
// Color the background when long conditions are met
opencolor = if sfco
    color.new(color.teal, 80)
else if sfcu
    color.new(color.orange, 80)
bgcolor(opencolor)
© www.soinside.com 2019 - 2024. All rights reserved.