繁体   English   中英

将 MQL4 for 循环移植到 Pinescript 时遇到问题

[英]Trouble porting MQL4 for loop to Pinescript

好吧,我自学了 MQL4/C++(至少足以应付它)并且我正在尝试将我构建的指标转移到 TradingView。 不过,我很难理解语法差异。

这是 MQL4 循环

for(int i=limit; i>=1; i--)
{
if(KBuffer[i]>80 || KBuffer[i]<20)   CrossoverValue=KBuffer[i];
else if(KBuffer[i]>CrossoverValue)  BuyBuffer[i]=100;
else if(KBuffer[i]<CrossoverValue)  SellBuffer[i]=100;
if(KBuffer[i]>CrossoverValue)  EntryCondition[i]=1; //1=Buy
if(KBuffer[i]<CrossoverValue)  EntryCondition[i]=2; //2=Sell
}

这就是我到目前为止在 Pine 中得到的东西

for i = 1 to 100
if k[i] > 80 or k[i] < 20
    crossoverValue = k[i]
else if k[i] > crossoverValue
    buyBuffer[i] = 100
else k[i] < crossoverValue
    sellBuffer[i] = 100
if k > crossoverValue
    entryCondition := 1
if k< crossoverValue
    entryCondition := -1

我知道我没有正确使用 Pine 语法,但是在进行了一堆谷歌搜索并阅读了 Pine 手册之后,我仍然在苦苦挣扎。

目前,我收到一个不匹配的输入“如果”,期望“行尾没有续行”。 错误。

任何关于我哪里出错的指示都将不胜感激!

作为参考,这里是 MT4 版本的截图。 当随机 K 线超过 20 并低于 80 时,它发出买入信号,反之亦然。

随机 RSI 买入/卖出信号

你快到了 文档: https ://www.tradingview.com/pine-script-reference/v5/#op_for

for i = limit to 0 by -1
   if k[i] > 80 or k[i] < 20
     crossoverValue = k[i]
  else if k[i] > crossoverValue
     buyBuffer[i] = 100
  else k[i] < crossoverValue
     sellBuffer[i] = 100

  if k > crossoverValue
    entryCondition := 1
  if k< crossoverValue
    entryCondition := -1

“作为参考,这是 MT4 版本的截图。当随机 K 线超过 20 并低于 80 时,它发出买入信号,反之亦然。”

也许使用标准随机指标呢?

//@version=5
indicator(title="Stochastic", shorttitle="Stoch", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)

buy = ta.crossover(k, 20)
sell = ta.crossunder(k, 80)

plot(k, title="%K", color=#2962FF)
plot(d, title="%D", color=#FF6D00)

plotshape(buy, title = "Buy", shape = shape.triangleup, location = location.belowbar, size = size.normal, color = color.green)

plotshape(sell, title = "Sell", shape = shape.triangledown, location = location.abovebar, size = size.normal, color = color.red)

h0 = hline(80, "Upper Band", color=#787B86)
hline(50, "Middle Band", color=color.new(#787B86, 50))
h1 = hline(20, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")

这就是我最终得到的结果——第一个 if 语句中的“或”运算符由于某种原因无法正常工作,所以我不得不将其拆分,以及一些其他的语法问题。

 var float crossoverValue = 0 for i = 0 to 0 if k[i] > 80 crossoverValue := k[i] else if k[i] < 20 crossoverValue := k[i] entryCondition = if k > crossoverValue color.green else if k < crossoverValue color.red else #9598a1

注意:当我尝试将代码编辑器粘贴到基本的“大括号”类型中时,代码编辑器正在破坏我的换行符。 出于某种原因,我必须使用 JS/HTML/CSS 块。

哦。 原来我根本不需要 for 循环! 🤣

我已经习惯在 MT4 中使用它们了。

这是实际的最终结果。

 var float crossoverValue = 0 if k > 80 crossoverValue := k else if k < 20 crossoverValue := k entryCondition = if k > crossoverValue color.green else if k < crossoverValue color.red else #9598a1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM