Pine script 如何在斐波那契水平上进入/退出策略?

Pine script 如何在斐波那契水平上进入/退出策略?,pine-script,Pine Script,我无法根据fibench值制定交易策略。该值绘制在图表上,即配偶所在位置。退出该战略存在一些问题 我试过: strategy.entry(id=“EL”,when=fibcentry) crossEntry=cross(关闭,fiberentry[1]) crossEntrySince=barssince(crossEntry)pHigh[2]或pHigh>pHigh[3]或pHigh>pHigh[4]或pHigh>pHigh[5] 或pHigh>pHigh[6]或pHigh>pHigh[7]或

我无法根据
fibench
值制定交易策略。该值绘制在图表上,即配偶所在位置。退出该战略存在一些问题

我试过:

strategy.entry(id=“EL”,when=fibcentry)

crossEntry=cross(关闭,fiberentry[1])
crossEntrySince=barssince(crossEntry)<5
如果交叉口
strategy.entry(id=“Long”,Long=true)
代码如下:

//@version=4

strategy(title="First baby study / long position / trade set up #2 ", shorttitle="F.B.S.:long #2", overlay=true)


//$$$$$$$$$$$$$$$$$$$$$$$ Step 1. Highs and Lows $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


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


//$$$$$$$$$$$$$$$$$$$$$$$$$ Step 2. Fibonacci $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

//$$$$$$$$$$$$$$$$$$$$$$$ Step 2.1 Fibonacci Top $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


float fibTop = na

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

  or pHigh > pHigh[6] or pHigh > pHigh[7] or pHigh > pHigh[8] or pHigh > pHigh[9]


   if close[1] > open[1]

       fibTop := close[1]

   if open[1] > close[1]

       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]

  or pLow > pLow[6] or pLow > pLow[7] or pLow > pLow[8] or pLow > pLow[9]

  or pLow > pLow[10] or pLow > pLow[11] or pLow > pLow[12] or pLow > pLow[13] 

  or pLow > pLow[14] or pLow > pLow[15]

   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 barstate.isconfirmed and fibBottom[1] 
   fibEntry := fibTop - 0.272 * (fibTop - fibBottom[1])
else
   if barstate.isconfirmed and fibBottom[2] 
       fibEntry := fibTop - 0.272 * (fibTop - fibBottom[2])
   else
       if barstate.isconfirmed and fibBottom[3] 
           fibEntry := fibTop - 0.272 * (fibTop - fibBottom[3])


//$$$$$$$$$$$$$$$ Step 2.4. Fibbonacci -0.272 - Take Profit Level $$$$$$$$$$$$$$


var float fibProfit = na

if barstate.isconfirmed and fibBottom[1]
   fibProfit := (fibTop - fibBottom[1]) * 0.272 + fibTop
else
   if barstate.isconfirmed and fibBottom[2]
       fibProfit := (fibTop - fibBottom[2]) * 0.272 + fibTop    
   else
       if barstate.isconfirmed and fibBottom[3]
           fibProfit := (fibTop - fibBottom[3]) * 0.272 + fibTop


//$$$$$$$$$$$$$$$$$ Step 2.5. Fibonacci 0.786 - Stop Loss Level $$$$$$$$$$$$$$$$


var float fibSL = na

if barstate.isconfirmed and fibBottom[1] 
   fibSL := fibTop - 0.786 * (fibTop - fibBottom[1])
else
   if barstate.isconfirmed and fibBottom[2] 
       fibSL := fibTop - 0.786 * (fibTop - fibBottom[2])
   else
       if barstate.isconfirmed and fibBottom[3] 
           fibSL := fibTop - 0.786 * (fibTop - fibBottom[3])

//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 3. Enter Trade $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


crossEntry = cross(close, fibEntry)

crossEntrySince = barssince(crossEntry) < 5

if crossEntrySince
   strategy.entry(id="Long", long=true)


//$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 4. Take Profit $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

// crossProfit = cross(high, fibProfit)
// if barssince(fibProfit) < 5
//     strategy.exit(id="Long")


//$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 5. Stop Loss $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


crossSL = cross(low, fibSL)
if barssince(fibSL) < 7
   strategy.close(id="Long")


//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 6. Plotting $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


plot(fibEntry, transp=50, style=plot.style_circles, linewidth=5, color=#ffe504)
plot(fibProfit, transp=50, style=plot.style_circles, linewidth=5, color=#00ff0a)
plot(fibSL, transp=50, style=plot.style_circles, linewidth=5, color=#00ffe7)
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) ```

/@version=4
策略(title=“首次婴儿研究/多头仓位/交易设置#2”,shorttitle=“F.B.S:多头#2”,overlay=true)
//$$$$$$$$$$$$$$$$$$$$$步骤1。高低$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
pHigh=枢轴高(1,1)
犁=枢轴低速(1,1)
//$$$$$$$$$$$$$$$$$$$$$$$$步骤2。斐波那契$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$$$$$$$$$$$$$$$$$$$$$$步骤2.1斐波那契顶部$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
浮动fibTop=na
如果pHigh>pHigh[2]或pHigh>pHigh[3]或pHigh>pHigh[4]或pHigh>pHigh[5]
或pHigh>pHigh[6]或pHigh>pHigh[7]或pHigh>pHigh[8]或pHigh>pHigh[9]
如果关闭[1]>打开[1]
fibTop:=关闭[1]
如果打开[1]>关闭[1]
fibTop:=打开[1]
//$$$$$$$$$$$$$$$$$$$$步骤2.2。斐波那契底$$$$$$$$$$$$$$$$$$$$$$$$$$$$
浮动底部=na
如果犁>犁[2]或犁>犁[3]或犁>犁[4]或犁>犁[5]
或犁>犁[6]或犁>犁[7]或犁>犁[8]或犁>犁[9]
或犁>犁[10]或犁>犁[11]或犁>犁[12]或犁>犁[13]
或犁>犁[14]或犁>犁[15]
如果关闭[1]>打开[1]
fibBottom:=打开[1]
如果打开[1]>关闭[1]
fibBottom:=关闭[1]
//$$$$$$$$$$$$$$$$$步骤2.3。斐波那契0.272-入门级$$$$$$$$$$$$$$$$$$$
var浮点输入=na
如果barstate.isconfirmed且fibBottom[1]
fibEntry:=fibTop-0.272*(fibTop-fibBottom[1])
其他的
如果barstate.isconfirm和fibBottom[2]
fibEntry:=fibTop-0.272*(fibTop-fibBottom[2])
其他的
如果barstate.isconfirm和fibBottom[3]
fibEntry:=fibTop-0.272*(fibTop-fibBottom[3])
//$$$$$$$$$$$$$$步骤2.4。斐波那契-0.272-获利回吐水平$$$$$$$$$$$$$$
var浮动利润=na
如果barstate.isconfirmed且fibBottom[1]
fibProfit:=(fibTop-fibBottom[1])*0.272+fibTop
其他的
如果barstate.isconfirm和fibBottom[2]
fibProfit:=(fibTop-fibBottom[2])*0.272+fibTop
其他的
如果barstate.isconfirm和fibBottom[3]
fibProfit:=(fibTop-fibBottom[3])*0.272+fibTop
//$$$$$$$$$$$$$$$步骤2.5。斐波那契0.786-止损水平$$$$$$$$$$$$$$$$
var浮点fibSL=na
如果barstate.isconfirmed且fibBottom[1]
fibSL:=fibTop-0.786*(fibTop-fibtown[1])
其他的
如果barstate.isconfirm和fibBottom[2]
fibSL:=fibTop-0.786*(fibTop-fibtown[2])
其他的
如果barstate.isconfirm和fibBottom[3]
fibSL:=fibTop-0.786*(fibTop-fibtown[3])
//$$$$$$$$$$$$$$$$$$$$$$$$步骤3。进入贸易$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
交叉进入=交叉(关闭,交叉进入)
crossEntrySince=barssince(crossEntry)<5
如果交叉入口自
strategy.entry(id=“Long”,Long=true)
//$$$$$$$$$$$$$$$$$$$$$$$$$步骤4。获利$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//交叉利润=交叉(高利润)
//如果barssince(fib利润)<5
//策略。退出(id=“Long”)
//$$$$$$$$$$$$$$$$$$$$$$$$$$步骤5。止损$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
crossSL=交叉(低,fibSL)
如果barssince(fibSL)<7
策略关闭(id=“Long”)
//$$$$$$$$$$$$$$$$$$$$$$$$步骤6。策划$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
绘图(fibEntry,transp=50,style=plot.style_圆,线宽=5,颜色=ffe504)
绘图(fibProfit,transp=50,style=plot.style_圆,线宽=5,颜色=00ff0a)
绘图(fibSL,transp=50,style=plot.style_圆,线宽=5,颜色=00ffe7)
绘图(fibTop,颜色=颜色。绿色,偏移量=-1)
绘图(底部,颜色=颜色。红色,偏移量=-1)
//打印(pHigh,颜色=颜色.绿色,传输=50,样式=打印.样式\圆形,线宽=5,偏移=-1)
//绘图(犁头,颜色=颜色.红色,传输=50,样式=绘图.样式\圆,线宽=5,偏移=-1)```

我认为问题在于您在声明变量时没有
var
关键字。这会使它们在每个条上重新初始化为na。
结果是,大多数情况下,您的
fib条目
也是
na
,导致
交叉条目
false

我已经重新编写了您的脚本(具有适当的缩进,应该是4个空格或1个制表符,您有3个空格),并将变量放在脚本顶部。
我已将提到的两个变量更改为使用
var
声明
这对你有用吗

//@version=4
strategy(title="First baby study / long position / trade set up #2 ", shorttitle="F.B.S.:long #2", overlay=true)

var float fibEntry = na
var float fibProfit = na
var float fibSL = na

// float fibTop = na
// float fibBottom = na
var float fibTop = na
var float fibBottom = na

//$$$$$$$$$$$$$$$$$$$$$$$ Step 1. Highs and Lows $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
pHigh = pivothigh(1, 1)
pLow = pivotlow(1, 1)

//$$$$$$$$$$$$$$$$$$$$$$$$$ Step 2. Fibonacci $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$$$$$$$$$$$$$$$$$$$$ Step 2.1 Fibonacci Top $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
if pHigh > pHigh[2] or pHigh > pHigh[3] or pHigh > pHigh[4] or pHigh > pHigh[5] or pHigh > pHigh[6] or pHigh > pHigh[7] or pHigh > pHigh[8] or pHigh > pHigh[9]
    if close[1] > open[1]
        fibTop := close[1]
    if open[1] > close[1]
        fibTop := open[1]

//$$$$$$$$$$$$$$$$$$$$$$ Step 2.2. Fibonacci Bottom $$$$$$$$$$$$$$$$$$$$$$$$$$$$
if pLow > pLow[2] or pLow > pLow[3] or pLow > pLow[4] or pLow > pLow[5] or pLow > pLow[6] or pLow > pLow[7] or pLow > pLow[8] or pLow > pLow[9] or pLow > pLow[10] or pLow > pLow[11] or pLow > pLow[12] or pLow > pLow[13] or pLow > pLow[14] or pLow > pLow[15]
    if close[1] > open[1]
        fibBottom := open[1]
    if open[1] > close[1]
        fibBottom := close[1]

//$$$$$$$$$$$$$$$$$$$ Step 2.3. Fibonacci 0.272 - Entry Levl $$$$$$$$$$$$$$$$$$$

//if barstate.isconfirmed and fibBottom[1] 
if fibBottom[1] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[1])
//else if barstate.isconfirmed and fibBottom[2] 
else if fibBottom[2] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[2])
//else if barstate.isconfirmed and fibBottom[3] 
else if fibBottom[3] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[3])

//$$$$$$$$$$$$$$$ Step 2.4. Fibbonacci -0.272 - Take Profit Level $$$$$$$$$$$$$$

// if barstate.isconfirmed and fibBottom[1]
if fibBottom[1]
    fibProfit := (fibTop - fibBottom[1]) * 0.272 + fibTop
// else if barstate.isconfirmed and fibBottom[2]
else if fibBottom[2]
    fibProfit := (fibTop - fibBottom[2]) * 0.272 + fibTop    
// else if barstate.isconfirmed and fibBottom[3]
else if fibBottom[3]
    fibProfit := (fibTop - fibBottom[3]) * 0.272 + fibTop

//$$$$$$$$$$$$$$$$$ Step 2.5. Fibonacci 0.786 - Stop Loss Level $$$$$$$$$$$$$$$$

// if barstate.isconfirmed and fibBottom[1] 
if fibBottom[1] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[1])
// else if barstate.isconfirmed and fibBottom[2] 
else if fibBottom[2] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[2])
// else if barstate.isconfirmed and fibBottom[3] 
else if fibBottom[3] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[3])

//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 3. Enter Trade $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
crossEntry = cross(close, fibEntry)
crossEntrySince = barssince(crossEntry) < 5

if crossEntrySince
    strategy.entry(id="Long", long=true)

//$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 4. Take Profit $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// crossProfit = cross(high, fibProfit)
// if barssince(fibProfit) < 5
//     strategy.exit(id="Long")

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 5. Stop Loss $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
crossSL = cross(low, fibSL)
if barssince(fibSL) < 7
    strategy.close(id="Long")

//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 6. Plotting $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
plot(fibEntry, title="fibEntry", transp=50, style=plot.style_circles, linewidth=5, color=#ffe504)
plot(fibProfit, title="fibProfit", transp=50, style=plot.style_circles, linewidth=5, color=#00ff0a)
plot(fibSL, title="fibSL", transp=50, style=plot.style_circles, linewidth=5, color=#00ffe7)
plot(fibTop, title="fibTop", color=color.green, offset=-1)
plot(fibBottom, title="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) ```
只需使用

strategy.entry(id="Long", long=strategy.long, when=crossEntrySince)

我认为问题在于您在声明变量时没有
var
关键字。这会使它们在每个条上重新初始化为na。
结果是,大多数情况下,您的
fib条目
也是
na
,导致
交叉条目
false

我已经重新编写了您的脚本(具有适当的缩进,应该是4个空格或1个制表符,您有3个空格),并将变量放在脚本顶部。
我已将提到的两个变量更改为使用
var
声明
这对你有用吗

//@version=4
strategy(title="First baby study / long position / trade set up #2 ", shorttitle="F.B.S.:long #2", overlay=true)

var float fibEntry = na
var float fibProfit = na
var float fibSL = na

// float fibTop = na
// float fibBottom = na
var float fibTop = na
var float fibBottom = na

//$$$$$$$$$$$$$$$$$$$$$$$ Step 1. Highs and Lows $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
pHigh = pivothigh(1, 1)
pLow = pivotlow(1, 1)

//$$$$$$$$$$$$$$$$$$$$$$$$$ Step 2. Fibonacci $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$$$$$$$$$$$$$$$$$$$$ Step 2.1 Fibonacci Top $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
if pHigh > pHigh[2] or pHigh > pHigh[3] or pHigh > pHigh[4] or pHigh > pHigh[5] or pHigh > pHigh[6] or pHigh > pHigh[7] or pHigh > pHigh[8] or pHigh > pHigh[9]
    if close[1] > open[1]
        fibTop := close[1]
    if open[1] > close[1]
        fibTop := open[1]

//$$$$$$$$$$$$$$$$$$$$$$ Step 2.2. Fibonacci Bottom $$$$$$$$$$$$$$$$$$$$$$$$$$$$
if pLow > pLow[2] or pLow > pLow[3] or pLow > pLow[4] or pLow > pLow[5] or pLow > pLow[6] or pLow > pLow[7] or pLow > pLow[8] or pLow > pLow[9] or pLow > pLow[10] or pLow > pLow[11] or pLow > pLow[12] or pLow > pLow[13] or pLow > pLow[14] or pLow > pLow[15]
    if close[1] > open[1]
        fibBottom := open[1]
    if open[1] > close[1]
        fibBottom := close[1]

//$$$$$$$$$$$$$$$$$$$ Step 2.3. Fibonacci 0.272 - Entry Levl $$$$$$$$$$$$$$$$$$$

//if barstate.isconfirmed and fibBottom[1] 
if fibBottom[1] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[1])
//else if barstate.isconfirmed and fibBottom[2] 
else if fibBottom[2] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[2])
//else if barstate.isconfirmed and fibBottom[3] 
else if fibBottom[3] 
    fibEntry := fibTop - 0.272 * (fibTop - fibBottom[3])

//$$$$$$$$$$$$$$$ Step 2.4. Fibbonacci -0.272 - Take Profit Level $$$$$$$$$$$$$$

// if barstate.isconfirmed and fibBottom[1]
if fibBottom[1]
    fibProfit := (fibTop - fibBottom[1]) * 0.272 + fibTop
// else if barstate.isconfirmed and fibBottom[2]
else if fibBottom[2]
    fibProfit := (fibTop - fibBottom[2]) * 0.272 + fibTop    
// else if barstate.isconfirmed and fibBottom[3]
else if fibBottom[3]
    fibProfit := (fibTop - fibBottom[3]) * 0.272 + fibTop

//$$$$$$$$$$$$$$$$$ Step 2.5. Fibonacci 0.786 - Stop Loss Level $$$$$$$$$$$$$$$$

// if barstate.isconfirmed and fibBottom[1] 
if fibBottom[1] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[1])
// else if barstate.isconfirmed and fibBottom[2] 
else if fibBottom[2] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[2])
// else if barstate.isconfirmed and fibBottom[3] 
else if fibBottom[3] 
    fibSL := fibTop - 0.786 * (fibTop - fibBottom[3])

//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 3. Enter Trade $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
crossEntry = cross(close, fibEntry)
crossEntrySince = barssince(crossEntry) < 5

if crossEntrySince
    strategy.entry(id="Long", long=true)

//$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 4. Take Profit $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// crossProfit = cross(high, fibProfit)
// if barssince(fibProfit) < 5
//     strategy.exit(id="Long")

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 5. Stop Loss $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
crossSL = cross(low, fibSL)
if barssince(fibSL) < 7
    strategy.close(id="Long")

//$$$$$$$$$$$$$$$$$$$$$$$$$$ Step 6. Plotting $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
plot(fibEntry, title="fibEntry", transp=50, style=plot.style_circles, linewidth=5, color=#ffe504)
plot(fibProfit, title="fibProfit", transp=50, style=plot.style_circles, linewidth=5, color=#00ff0a)
plot(fibSL, title="fibSL", transp=50, style=plot.style_circles, linewidth=5, color=#00ffe7)
plot(fibTop, title="fibTop", color=color.green, offset=-1)
plot(fibBottom, title="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) ```
只需使用

strategy.entry(id="Long", long=strategy.long, when=crossEntrySince)

谢谢你,@BjornMistiaen。不幸的是,这没有帮助。我甚至复制并粘贴了您的代码,以查看是否存在差异,但结果是有些差异。就在这一次,我得到了许多虚假的条目。脚本仍然没有使用
fibench
作为条目值。感谢if-else构造。我不知道。谢谢你,@BjornMistiaen。不幸的是,这没有帮助。我甚至复制并粘贴了你的代码,看看是否有区别,b