ThinkScript 到 PineScript 的转换问题
ThinkScript to PineScript Conversion Question
我正在努力将 ThinkScript 指标转换为 PineScript。我目前在将 ThinkScript 的 barNumber() 函数转换为 PineScript 时遇到问题。我想我知道使用什么作为它的等价物,但我不确定我是否理解 barNumber() 即使在阅读了文档和示例之后。
该指标基本上用作 entry/exit 指标。我认为代码通过使用 barNumber() 所做的是在绘制新信号时删除信号,但如果新信号无效,则它会恢复到先前的信号。
这是我对前几个 defs 背后有更多实质内容感到困惑的代码部分,只是解释它们无关紧要,它们都应该 return 作为浮点数(def stateUp through def linDev):
def bar = barNumber();
def stateUp;
def stateDn;
def atrCCI;
def price;
def linDev;
def CCI = if linDev == 0
then 0
else (price - avg(price, length)) / linDev / 0.05;
def MT1 = if CCI > 0
then max(MT1[1], hl2 - ATRCCI)
else (min(MT1[1], hl2 + ATRCCI)
def state = if close > ST and close > MT1 then StateUp
else if close < ST and close < MT1 then StateDn
else State[1];
def newState = HighestAll(if state <> state[1] then bar else 0);
该代码使用了很多条件语句,以下是该代码的一些其他用法:
CSA = if bar >= newState then MT1 else Double.NaN;
signal = if bar >= newState and state == stateUp and. . .
在 PineScript 中有解决这个问题的简单方法吗?
感谢您的帮助!
相当于 thinkScript 的 BarNumber() is Pine-Script's bar_index。
thinkScript 和 Pine-Script 都使用一个表示有效交易周期范围的循环。 BarNumber/bar_index 值表示通过循环计算的每个测量周期。
为了将此与其他类型的编码进行比较,您可能会考虑类似 for bar_index in 0 to 10
的 10 天交易期,其中 bar_index
将从 0 计数到 9(即,它的作用类似于for
循环中的刻板印象 i
。
指数代表的周期可以是一天、分钟、刻度等 - 无论您为图表或计算设置什么。并且,请注意:*“日”代表“交易日”,不是“日历日”。
一个令人困惑的问题是:条形图从哪里开始计数? BarNumber() 或 bar_index 从您时间框架的 最早 周期开始,并向您的最近交易周期计算 up 例如,0 的 bar_index 可能代表 10 天前,而 9 的 bar_index 可能代表今天。
这是来自 Kodify site (which provides Pine-Script tutorials) 的一些示例代码:
//@version=4
study("Example of bar_index variable", overlay=true)
// Make a new label once
var label myLabel = label.new(x=bar_index, y=high + tr,
textcolor=color.white, color=color.blue)
// On the last bar, show the chart's bar count
if (barstate.islast)
// Set the label content
label.set_text(id=myLabel, text="Bars on\nthe chart:\n" +
tostring(bar_index + 1))
// Update the label's location
label.set_x(id=myLabel, x=bar_index)
label.set_y(id=myLabel, y=high + tr)
注意 tostring(bar_index + 1))
。他们加一是因为,请记住,索引是从零开始的,因此从 0 到 9 的索引实际上是在计算 10 个柱。
我认为 BarNumber()/bar_index 概念令人困惑的原因是因为我们还以另一种方式考虑值。例如,如果我们将 close
与 close[1]
进行比较,即当前期间的 close
值与上一期间的 close
值 (close[1]
) 相比。这是条形码的 相反 ! close[1]
实际上会有一个 较低的 柱线 number/index 因为它来自 之前 close
.
当我们使用 close[1]
之类的东西时,脚本实际上是从右向左计数(最近到更早的时期)——与 BarNumber()/[=68 相反=]概念.
我正在努力将 ThinkScript 指标转换为 PineScript。我目前在将 ThinkScript 的 barNumber() 函数转换为 PineScript 时遇到问题。我想我知道使用什么作为它的等价物,但我不确定我是否理解 barNumber() 即使在阅读了文档和示例之后。
该指标基本上用作 entry/exit 指标。我认为代码通过使用 barNumber() 所做的是在绘制新信号时删除信号,但如果新信号无效,则它会恢复到先前的信号。
这是我对前几个 defs 背后有更多实质内容感到困惑的代码部分,只是解释它们无关紧要,它们都应该 return 作为浮点数(def stateUp through def linDev):
def bar = barNumber();
def stateUp;
def stateDn;
def atrCCI;
def price;
def linDev;
def CCI = if linDev == 0
then 0
else (price - avg(price, length)) / linDev / 0.05;
def MT1 = if CCI > 0
then max(MT1[1], hl2 - ATRCCI)
else (min(MT1[1], hl2 + ATRCCI)
def state = if close > ST and close > MT1 then StateUp
else if close < ST and close < MT1 then StateDn
else State[1];
def newState = HighestAll(if state <> state[1] then bar else 0);
该代码使用了很多条件语句,以下是该代码的一些其他用法:
CSA = if bar >= newState then MT1 else Double.NaN;
signal = if bar >= newState and state == stateUp and. . .
在 PineScript 中有解决这个问题的简单方法吗?
感谢您的帮助!
相当于 thinkScript 的 BarNumber() is Pine-Script's bar_index。
thinkScript 和 Pine-Script 都使用一个表示有效交易周期范围的循环。 BarNumber/bar_index 值表示通过循环计算的每个测量周期。
为了将此与其他类型的编码进行比较,您可能会考虑类似 for bar_index in 0 to 10
的 10 天交易期,其中 bar_index
将从 0 计数到 9(即,它的作用类似于for
循环中的刻板印象 i
。
指数代表的周期可以是一天、分钟、刻度等 - 无论您为图表或计算设置什么。并且,请注意:*“日”代表“交易日”,不是“日历日”。
一个令人困惑的问题是:条形图从哪里开始计数? BarNumber() 或 bar_index 从您时间框架的 最早 周期开始,并向您的最近交易周期计算 up 例如,0 的 bar_index 可能代表 10 天前,而 9 的 bar_index 可能代表今天。
这是来自 Kodify site (which provides Pine-Script tutorials) 的一些示例代码:
//@version=4
study("Example of bar_index variable", overlay=true)
// Make a new label once
var label myLabel = label.new(x=bar_index, y=high + tr,
textcolor=color.white, color=color.blue)
// On the last bar, show the chart's bar count
if (barstate.islast)
// Set the label content
label.set_text(id=myLabel, text="Bars on\nthe chart:\n" +
tostring(bar_index + 1))
// Update the label's location
label.set_x(id=myLabel, x=bar_index)
label.set_y(id=myLabel, y=high + tr)
注意 tostring(bar_index + 1))
。他们加一是因为,请记住,索引是从零开始的,因此从 0 到 9 的索引实际上是在计算 10 个柱。
我认为 BarNumber()/bar_index 概念令人困惑的原因是因为我们还以另一种方式考虑值。例如,如果我们将 close
与 close[1]
进行比较,即当前期间的 close
值与上一期间的 close
值 (close[1]
) 相比。这是条形码的 相反 ! close[1]
实际上会有一个 较低的 柱线 number/index 因为它来自 之前 close
.
当我们使用 close[1]
之类的东西时,脚本实际上是从右向左计数(最近到更早的时期)——与 BarNumber()/[=68 相反=]概念.