[英]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 时,它发出买入信号,反之亦然。
你快到了 文档: 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.