我是结构编程语言的新手,我正在尝试制作一个基于 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 如何获取交叉/低于的值并仅绘制高于/低于某个固定值的值。
找出解决方案很有趣,我什至找到了我没有提到的第二个问题的解决方案。 下一个代码替换我问题的最后一个代码块:
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)