是否有可以在策略中使用的函数而不是 line.new() 或 label.new()?

Is there a function instead of a line.new() or label.new() that can be used in the strategy?

问题1:在研究中,变量fibEntryfibProfit从一开始就给出了奇怪的值。这些值远低于设定的标准。当脚本中的条件为真时,变量就会给出正确的值。

问题 2:在策略中,脚本在 open 柱线值处触发入场,因为 fibEntry 的奇怪值远低于柱线集。每隔一天,脚本会在收盘价处触发 fibProfit

问题 3:在策略中,即使条件为真,脚本也会忽略它。

我不能使用绘图,因为我需要这些值作为策略。

我试过:

strategy.entry(id="Long", long=true, when=barstate.isconfirmed and fibEntry)

strategy.entry(id="Long", long=true, when=dayofmonth != dayofmonth[1] and fibEntry)

代码如下:

//@version=4

study(title="first baby study",overlay=true)

// Step 1. Highs and lows

pHigh = pivothigh(1,1)
pLow = pivotlow(1,1)

// Step 2. Fibonacci

// Step 2.1 Fibonacci Top

fibTop = 0.00

if pHigh > pHigh[2] or pHigh > pHigh[3] or pHigh > pHigh[4] or pHigh > pHigh[5]

    if close[1] > open[1]

        fibTop := close[1]

    if open[1] > close[1]

        fibTop := open[1]

// Step 2.2. Fibonacci Bottom

fibBottom = 0.00

if pLow > pLow[2] or pLow > pLow[3] or pLow > pLow[4] or pLow > pLow[5]

    if close[1] > open[1]

        fibBottom := open[1]

    if open[1] > close[1]

        fibBottom := close[1]

// Step 2.3. Fibonacci 0.272 - Entry Levl

var float fibEntry = na

if fibBottom[1] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[1])
else
    if fibBottom[2] 
        fibEntry := fibTop - 0.272 * (fibTop - fibBottom[2])
    else
        if fibBottom[3] 
            fibEntry := fibTop - 0.272 * (fibTop - fibBottom[3])
        else
            if fibBottom[4]
                fibEntry := fibTop - 0.272 * (fibTop - fibBottom[4])
            else
                if fibBottom[5]
                    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[5])

// Step 2.4. Fibonacci -0.272 - Take Profit Level

var float fibProfit = na

if fibBottom[1]
    fibProfit := (fibTop - fibBottom[1]) * 0.272 + fibTop
else
    if fibBottom[2]
        fibProfit := (fibTop - fibBottom[2]) * 0.272 + fibTop
    else
        if fibBottom[3]
            fibProfit := (fibTop - fibBottom[3]) * 0.272 + fibTop
        else
            if fibBottom[4]
                fibProfit := (fibTop - fibBottom[4]) * 0.272 + fibTop
            else
                if fibBottom[5]
                    fibProfit := (fibTop - fibBottom[5]) * 0.272 + fibTop

// // Step 3. Enter Trade

// strategy.entry(id="Long", long=true, when=fibEntry)

// // Step 4. Take Profit

// strategy.close(id="Long", when=fibProfit)


// Step 5. Plotting

plot(fibEntry, color=#ffe504)
plot(fibProfit, color=#00ff0a)    
plot(fibTop, color=color.green, offset=-1)
plot(fibBottom, color=color.red, offset=-1)
plot(pHigh, color=color.green, transp=50,style=plot.style_circles, linewidth=5, offset=-1)
plot(pLow, color=color.red, transp=50, style=plot.style_circles, linewidth=5, offset=-1)

这是我的第一个 study/strategy,希望有人能提供帮助。谢谢

这可能会让您更接近您的目标。我们将变量初始化为 na 并确保它们来自主 if 块,其值为:

// Step 2.1 Fibonacci Top

float fibTop = na
if pHigh > pHigh[2] or pHigh > pHigh[3] or pHigh > pHigh[4] or pHigh > pHigh[5]
    if close[1] > open[1]
        fibTop := close[1]
    else
        fibTop := open[1]

// Step 2.2. Fibonacci Bottom

float fibBottom = na
if pLow > pLow[2] or pLow > pLow[3] or pLow > pLow[4] or pLow > pLow[5]
    if close[1] > open[1]
        fibBottom := open[1]
    else
        fibBottom := close[1]