Pine script PineScript/转换为V4

Pine script PineScript/转换为V4,pine-script,Pine Script,我很难将此脚本转换为最新版本4。如果可能的话,有人能帮我一下吗。我所做的是,我做了一项我最喜欢的研究,并将其转化为一项可行的策略。我试图添加新的功能,就像一个可选择的时间范围,在这个时间范围内,我可以限制我的回溯测试运行,但由于pine脚本版本的原因,这是不可能的 strategy(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=true)

我很难将此脚本转换为最新版本4。如果可能的话,有人能帮我一下吗。我所做的是,我做了一项我最喜欢的研究,并将其转化为一项可行的策略。我试图添加新的功能,就像一个可选择的时间范围,在这个时间范围内,我可以限制我的回溯测试运行,但由于pine脚本版本的原因,这是不可能的

strategy(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=true)

length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=bool)

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), 
            lengthKC,0)

bcolor = iff( val > 0, 
            iff( val > nz(val[1]), lime, green),
            iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 
//plot(val, color=bcolor, style=histogram, linewidth=4)
//plot(0, color=scolor, style=cross, linewidth=2)



// Signal


buyEntry = crossover((bcolor == lime)? 1 : 0, 0)
sellEntry = crossover((bcolor == red)? 1 : 0, 0)

//plotarrow((buyEntry ? 1 : 0))
//plotarrow((sellEntry ? -1 : 0))

/////////////////////////////////////////////////////////////////////
//This controls the time when the backtest runs
//start = timestamp(2020,1,1)
//end = timestamp(2021,4,29)
//t = time(timeframe.period)



////////////////////////////////////////////////////////////////////////

//if time >= start and time <= end 
strategy.entry("Entry", strategy.long, 10000, when=buyEntry)
strategy.close("Entry", when = sellEntry)
   
策略(shorttitle=“SQZMOM_LB”,title=“挤压动量指示器[LazyBear]”,overlay=true)
长度=输入(20,title=“BB长度”)
mult=输入(2.0,title=“BB MultFactor”)
lengthKC=输入(20,title=“KC长度”)
multKC=输入(1.5,title=“KC MultFactor”)
UseTureRange=input(true,title=“Use TrueRange(KC)”,type=bool)
//计算BB
来源=关闭
基础=sma(来源、长度)
dev=multKC*stdev(源,长度)
upperBB=基准+偏差
lowerBB=基础-开发
//计算KC
ma=sma(源,长度C)
范围=使用真实范围?tr:(高-低)
rangema=sma(范围,长度C)
上限kc=ma+量程ma*multKC
lowerKC=毫安-量程毫安*multKC
sqzOn=(lowerBB>lowerKC)和(upperBBupperKC)
noSqz=(sqzOn==false)和(sqzOff==false)
val=linreg(源-平均值(平均值(最高(高,长厚c)),最低(低,长厚c)),sma(闭合,长厚c)),
长度(C,0)
b颜色=iff(val>0,
iff(val>nz(val[1])、石灰、绿色、,
iff(val=开始,时间
/@version=4
策略(shorttitle=“SQZMOM_LB”,title=“挤压动量指示器[LazyBear]”,overlay=true)
长度=输入(20,title=“BB长度”)
mult=输入(2.0,title=“BB MultFactor”)
lengthKC=输入(20,title=“KC长度”)
multKC=输入(1.5,title=“KC MultFactor”)
useTureRange=input(true,title=“useTureRange(KC)”,type=input.bool)
//计算BB
来源=关闭
基础=sma(来源、长度)
dev=multKC*stdev(源,长度)
upperBB=基准+偏差
lowerBB=基础-开发
//计算KC
ma=sma(源,长度C)
范围=使用真实范围?tr:(高-低)
rangema=sma(范围,长度C)
上限kc=ma+量程ma*multKC
lowerKC=毫安-量程毫安*multKC
sqzOn=(lowerBB>lowerKC)和(upperBBupperKC)
noSqz=(sqzOn==false)和(sqzOff==false)
val=linreg(源-平均值(平均值(最高值(高,长厚c)),最低值(低,长厚c)),sma(闭合,长厚c)),长厚c,0)
b颜色=iff(val>0,iff(val>nz(val[1]),color.lime,color.green),iff(val=开始和结束时间
//@version=4
strategy(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=true)

length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), color.lime, color.green), iff( val < nz(val[1]), color.red, color.maroon))
scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray 
//plot(val, color=bcolor, style=histogram, linewidth=4)
//plot(0, color=scolor, style=cross, linewidth=2)



// Signal


buyEntry = crossover((bcolor == color.lime)? 1 : 0, 0)
sellEntry = crossover((bcolor == color.red)? 1 : 0, 0)

//plotarrow((buyEntry ? 1 : 0))
//plotarrow((sellEntry ? -1 : 0))

/////////////////////////////////////////////////////////////////////
//This controls the time when the backtest runs
//start = timestamp(2020,1,1)
//end = timestamp(2021,4,29)
//t = time(timeframe.period)



////////////////////////////////////////////////////////////////////////

//if time >= start and time <= end 
strategy.entry("Entry", strategy.long, 10000, when=buyEntry)
strategy.close("Entry", when = sellEntry)