Pine 脚本指示器问题(可能是代码过时了)
Pine script indicator problem (probably code outdated)
我是 Pine 脚本的新手,更多的是 R 用户,所以 pine 脚本代码很容易理解,但我遇到了名为“Open Interest:CME e-o-d vs CFTC e-o-w”的指标问题 - 价格线(contracts sum) 没有显示 plot(OiSum>0?OiSum:na, color=purple, title="CME e-o-d\n 9 cntrcts sum", linewidth=3,offset=OffSet)
,可能是因为没有收集合同数据。
主要问题是我找不到函数描述“getCntrct”,因此我无法理解它的去向 e.t.c。
任何帮助都是完美的。
//@version=3
study("Open Interest:CME e-o-d vs CFTC e-o-w", precision=0,overlay=true, scale=scale.left)
ChkComm = input("", title="override symbol (SI/CL etc)", type=string)
ChkPrelim = input(0, title="Prelim.OI", type=integer)
Prelim=(ChkPrelim>0?ChkPrelim:0)
fxroot =
ticker == "XAUUSD" ? "GC" :
ticker == "XAGUSD" ? "SI" :
""
ThisComm = ChkComm == "" ? fxroot == "" ? syminfo.root : fxroot : ChkComm
// root = syminfo.root
code = ThisComm
getCntrct(fut,num,max) =>
N=tostring(num)
C=num<=max?security("QUANDL:CHRIS/CME_"+fut+N+"|7", "D", close,barmerge.gaps_on, barmerge.lookahead_on):0
Cx=(C?C:0) // not na? OK, else 0
// NUMBER OF CONTRACTS
// CME Vol and Open Interesst page eg. for GOLD:
// https://www.cmegroup.com/markets/metals/precious/gold.volume.html#
// Totals Volume & OI (last line of table) are not exported
// CME data is recorded&exported daily by quandl.com to tradingview
// via the che CHRIS/CME datasets
// https://www.quandl.com/data/CHRIS
// Eg. Nat GAs cntract n. 20, field n. 7(OI)
// https://www.quandl.com/data/CHRIS/CME_NG20 (@quandl.com)
// https://www.tradingview.com/e/?symbol=QUANDL:CHRIS/CME_NG20|7 (@tradingview)
// This script tries to sum all the fut cntrcts' Vol&OI to obtain a fair total
//
// Number of cntrcts per commodity differ.
// eg E-mini (ES) has 4 contracts, Gold(GC) 16 cntrcts, NatGas(NG) has 43, WTI(CL) has 38 etc
// see https://s3.amazonaws.com/quandl-production-static/Ticker+CSV%27s/Futures/continuous.csv
getNc(code)=>
// set the N.of outstanding contracts per future code
c=16 //default 16
c:=code=="AD"?2:c //Australian Dollar
c:=code=="BB"?5:c //Brent Crude Oil HMUZ
c:=code=="BP"?2:c //British Pound FGHJKMNQUVXZ
c:=code=="C"?11:c //Corn HMUZ
c:=code=="CD"?4:c //Canadian Dollar HKNUZ
c:=code=="CL"?38:c //WTI Crude Oil HMUZ
c:=code=="CNH"?2:c //Standard-Size USD/Offshore RMB (CNH) FGHJKMNQUVXZ
c:=code=="EC"?2:c //Euro FX FGHJKMNQUVXZ
c:=code=="ES"?4:c //E-mini S&P 500 Index HMUZ
c:=code=="FC"?7:c //Feeder Cattle HMUZ
c:=code=="FV"?2:c //5 Year Treasury Note FHJKQUVX
c:=code=="GC"?16:c //Gold HMUZ
c:=code=="HG"?11:c //Copper GHJKMQVZ
c:=code=="HO"?17:c //Heating Oil FGHJKMNQUVXZ
c:=code=="IBV"?2:c //Ibovespa Index FGHJKMNQUVXZ
c:=code=="JY"?2:c //Japanese Yen GJMQVZ
c:=code=="LB"?2:c //Lumber HMUZ
c:=code=="LC"?7:c //Live Cattle FHKNUX
c:=code=="LN"?10:c //Lean Hogs GJMQVZ
c:=code=="ND"?2:c //NASDAQ 100 GJKMNQVZ
c:=code=="NE"?2:c //New Zealand Dollar HMUZ
c:=code=="NF"?4:c //Nonfat Dry Milk HMUZ
// as max securities for pine scripts is 40, NG has too many! lowered to 39
// c:=code=="NG"?43:c //Natural Gas FGHJKMNQUVXZ
c:=code=="NG"?39:c //Natural Gas FGHJKMNQUVXZ
c:=code=="NQ"?2:c //E-mini NASDAQ 100 Index HMUZ
c:=code=="O"?3:c //Oats HMUZ
c:=code=="PA"?2:c //Palladium HKNUZ
c:=code=="PL"?3:c //Platinum HJKMUZ
c:=code=="QL"?2:c //Coal FHJKNV
c:=code=="RB"?10:c //Gasoline FGHJKMNQUVXZ
c:=code=="RBB"?10:c //RBOB Gasoline Brent Crack Spread FGHJKMNQUVXZ
c:=code=="RP"?2:c //Euro/British Pound FGHJKMNQUVXZ
c:=code=="RR"?3:c //Rough Rice HMUZ
c:=code=="RU"?7:c //Russian Ruble FHKNUX
c:=code=="RY"?2:c //Euro/Japanese Yen FGHJKMNQUVXZ
c:=code=="S"?10:c //Soybeans HMUZ
c:=code=="SF"?2:c //Swiss Franc FHKNQUX
c:=code=="SI"?12:c //Silver HMUZ
c:=code=="SM"?11:c //Soybean Meal FHJKNUZ
c:=code=="SP"?3:c //Full-Size S&P 500 Index FHKNQUVZ
c:=code=="TRY"?2:c //Turkish Lira HMUZ
c:=code=="TU"?2:c //2 Year Treasury Note HMUZ
c:=code=="TY"?2:c //10 Year Treasury Note HMUZ
c:=code=="UL"?2:c //Ultra Treasury Bond HMUZ
c:=code=="US"?2:c //30-Year Treasury Bond HMUZ
c:=code=="W"?7:c //Wheat HMUZ
c:=code=="XAF"?2:c //E-mini Financial Sector HKNUZ
c:=code=="XAK"?2:c //E-mini Technology Sector HM
c:=code=="XAP"?2:c //E-mini Consumer Staples Sector HM
c:=code=="XAU"?2:c //E-mini Utilities Sector HM
c:=code=="XAY"?2:c //E-mini Consumer Discretionary Sector HM
// unfortunately, "securuty" can't be called inside a for loop,so:
C1=getCntrct(code,1,getNc(code))
C2=getCntrct(code,2,getNc(code))
C3=getCntrct(code,3,getNc(code))
C4=getCntrct(code,4,getNc(code))
C5=getCntrct(code,5,getNc(code))
C6=getCntrct(code,6,getNc(code))
C7=getCntrct(code,7,getNc(code))
C8=getCntrct(code,8,getNc(code))
C9=getCntrct(code,9,getNc(code))
C10=getCntrct(code,10,getNc(code))
C11=getCntrct(code,11,getNc(code))
C12=getCntrct(code,12,getNc(code))
C13=getCntrct(code,13,getNc(code))
C14=getCntrct(code,14,getNc(code))
C15=getCntrct(code,15,getNc(code))
C16=getCntrct(code,16,getNc(code))
C17=getCntrct(code,17,getNc(code))
C18=getCntrct(code,18,getNc(code))
C19=getCntrct(code,19,getNc(code))
C20=getCntrct(code,20,getNc(code))
C21=getCntrct(code,21,getNc(code))
C22=getCntrct(code,22,getNc(code))
C23=getCntrct(code,23,getNc(code))
C24=getCntrct(code,24,getNc(code))
C25=getCntrct(code,25,getNc(code))
C26=getCntrct(code,26,getNc(code))
C27=getCntrct(code,27,getNc(code))
C28=getCntrct(code,28,getNc(code))
C29=getCntrct(code,29,getNc(code))
C30=getCntrct(code,30,getNc(code))
C31=getCntrct(code,31,getNc(code))
C32=getCntrct(code,32,getNc(code))
C33=getCntrct(code,33,getNc(code))
C34=getCntrct(code,34,getNc(code))
C35=getCntrct(code,35,getNc(code))
C36=getCntrct(code,36,getNc(code))
C37=getCntrct(code,37,getNc(code))
C38=getCntrct(code,38,getNc(code))
C39=getCntrct(code,39,getNc(code))
// max securities for scripts is 40!
OiSum=C1+C2+C3+C4+C5+C6+C7+C8+C9+C10+C11+C12+C13+C14+C15+C16+C17+C18+C19+C20+C21+C22+C23+C24+C25+C26+C27
+C28+C29+C30+C31+C32+C33+C34+C35+C36+C37+C38+C39
///////// CFTC COT Open Interest
CftcOI = security("QUANDL:CFTC/"+code+"_F_ALL|0", "W", close, barmerge.gaps_off, barmerge.lookahead_on)
plot(CftcOI, color=orange, title="CFTC COT OI", linewidth=3)
// lastBar function
lastBar=(barstate.islast and close ? barstate.islast : na)
lB=lastBar
//day of week function
isMon() => dayofweek(time('D')) == monday and close ? 1 : 0
isTue() => dayofweek(time('D')) == tuesday and close ? 1 : 0
isWed() => dayofweek(time('D')) == wednesday and close ? 1 : 0
isThu() => dayofweek(time('D')) == thursday and close ? 1 : 0
isFri() => dayofweek(time('D')) == friday and close ? 1 : 0
NowIsSat() => dayofweek(timenow) == 7 ? 1: 0
NowIsSun() => dayofweek(timenow) == 1 ? 1: 0
//default label params to shorten command lines
s=shape.labeldown
l=location.absolute
tc=black
sz=size.tiny
o=+1
e=true
tr=70
// if lastblock is on Fri but we are on Sat or Sun...
//OffSetPrelim=(Prelim>0?OffSet+1:OffSet)
OffSet=-1
//OffSetPrelim=OffSet
OffSetPrelim=(NowIsSat() or NowIsSun()? 0:OffSet)
// Sum of next 20 contracts OI
plot(OiSum>0?OiSum:na, color=purple, title="CME e-o-d\n 9 cntrcts sum", linewidth=3,offset=OffSet)
// If a Prelim has been entered
plot(lB and Prelim > 0?Prelim:na, offset=OffSetPrelim, style=cross, color=black,title="Preliminary OI", linewidth=4)
// labels
plotshape(lB and Prelim > 0?Prelim:na, show_last=1,color=black,text="Preliminary OI",editable=e,location=l,style=shape.cross,textcolor=black,size=size.small,offset=OffSetPrelim,transp=30)
plotshape(lB and CftcOI?CftcOI:na, color=purple, text ="CME e-o-d OI ",editable=e,style=shape.labelup,location=l,textcolor=tc,size=s,offset=+1,transp=tr)
plotshape(lB and CftcOI?CftcOI:na, color=orange, text="CFTC Weekly OI",editable=true,style=s,location=l,textcolor=tc,size=s,offset=+1,transp=tr)
交易观点说明 - https://www.tradingview.com/script/7EvGzM0a-Open-Interest-CME-e-o-d-vs-CFTC-e-o-w/
getCntrct()
函数用于构造 ticker/quandl 代码并通过安全调用检索 OI 值。
脚本要求您手动指定合约的前缀,黄金和白银除外。对于那些,如果您将图表代码更改为 XAUUSD 或 XAGUSD,您将看到脚本绘制 OI 值。
对于其他人,例如对于澳元 OI 值,您必须将“覆盖符号(SI/CL 等)”设置更改为“AD”(输入变量 ChkComm
)
对于澳元,这将为安全调用构建 quandl 代码:
QUANDL:CHRIS/CME_AD1|7
QUANDL:CHRIS/CME_AD2|7
等等
(您也可以通过将其用作图表本身的股票代码直接查看这些)
“管道”符号|
用于引用table值中的哪个字段,其中7是OI值。您可以在此处查看 AD1 的相应 table:
我是 Pine 脚本的新手,更多的是 R 用户,所以 pine 脚本代码很容易理解,但我遇到了名为“Open Interest:CME e-o-d vs CFTC e-o-w”的指标问题 - 价格线(contracts sum) 没有显示 plot(OiSum>0?OiSum:na, color=purple, title="CME e-o-d\n 9 cntrcts sum", linewidth=3,offset=OffSet)
,可能是因为没有收集合同数据。
主要问题是我找不到函数描述“getCntrct”,因此我无法理解它的去向 e.t.c。
任何帮助都是完美的。
//@version=3
study("Open Interest:CME e-o-d vs CFTC e-o-w", precision=0,overlay=true, scale=scale.left)
ChkComm = input("", title="override symbol (SI/CL etc)", type=string)
ChkPrelim = input(0, title="Prelim.OI", type=integer)
Prelim=(ChkPrelim>0?ChkPrelim:0)
fxroot =
ticker == "XAUUSD" ? "GC" :
ticker == "XAGUSD" ? "SI" :
""
ThisComm = ChkComm == "" ? fxroot == "" ? syminfo.root : fxroot : ChkComm
// root = syminfo.root
code = ThisComm
getCntrct(fut,num,max) =>
N=tostring(num)
C=num<=max?security("QUANDL:CHRIS/CME_"+fut+N+"|7", "D", close,barmerge.gaps_on, barmerge.lookahead_on):0
Cx=(C?C:0) // not na? OK, else 0
// NUMBER OF CONTRACTS
// CME Vol and Open Interesst page eg. for GOLD:
// https://www.cmegroup.com/markets/metals/precious/gold.volume.html#
// Totals Volume & OI (last line of table) are not exported
// CME data is recorded&exported daily by quandl.com to tradingview
// via the che CHRIS/CME datasets
// https://www.quandl.com/data/CHRIS
// Eg. Nat GAs cntract n. 20, field n. 7(OI)
// https://www.quandl.com/data/CHRIS/CME_NG20 (@quandl.com)
// https://www.tradingview.com/e/?symbol=QUANDL:CHRIS/CME_NG20|7 (@tradingview)
// This script tries to sum all the fut cntrcts' Vol&OI to obtain a fair total
//
// Number of cntrcts per commodity differ.
// eg E-mini (ES) has 4 contracts, Gold(GC) 16 cntrcts, NatGas(NG) has 43, WTI(CL) has 38 etc
// see https://s3.amazonaws.com/quandl-production-static/Ticker+CSV%27s/Futures/continuous.csv
getNc(code)=>
// set the N.of outstanding contracts per future code
c=16 //default 16
c:=code=="AD"?2:c //Australian Dollar
c:=code=="BB"?5:c //Brent Crude Oil HMUZ
c:=code=="BP"?2:c //British Pound FGHJKMNQUVXZ
c:=code=="C"?11:c //Corn HMUZ
c:=code=="CD"?4:c //Canadian Dollar HKNUZ
c:=code=="CL"?38:c //WTI Crude Oil HMUZ
c:=code=="CNH"?2:c //Standard-Size USD/Offshore RMB (CNH) FGHJKMNQUVXZ
c:=code=="EC"?2:c //Euro FX FGHJKMNQUVXZ
c:=code=="ES"?4:c //E-mini S&P 500 Index HMUZ
c:=code=="FC"?7:c //Feeder Cattle HMUZ
c:=code=="FV"?2:c //5 Year Treasury Note FHJKQUVX
c:=code=="GC"?16:c //Gold HMUZ
c:=code=="HG"?11:c //Copper GHJKMQVZ
c:=code=="HO"?17:c //Heating Oil FGHJKMNQUVXZ
c:=code=="IBV"?2:c //Ibovespa Index FGHJKMNQUVXZ
c:=code=="JY"?2:c //Japanese Yen GJMQVZ
c:=code=="LB"?2:c //Lumber HMUZ
c:=code=="LC"?7:c //Live Cattle FHKNUX
c:=code=="LN"?10:c //Lean Hogs GJMQVZ
c:=code=="ND"?2:c //NASDAQ 100 GJKMNQVZ
c:=code=="NE"?2:c //New Zealand Dollar HMUZ
c:=code=="NF"?4:c //Nonfat Dry Milk HMUZ
// as max securities for pine scripts is 40, NG has too many! lowered to 39
// c:=code=="NG"?43:c //Natural Gas FGHJKMNQUVXZ
c:=code=="NG"?39:c //Natural Gas FGHJKMNQUVXZ
c:=code=="NQ"?2:c //E-mini NASDAQ 100 Index HMUZ
c:=code=="O"?3:c //Oats HMUZ
c:=code=="PA"?2:c //Palladium HKNUZ
c:=code=="PL"?3:c //Platinum HJKMUZ
c:=code=="QL"?2:c //Coal FHJKNV
c:=code=="RB"?10:c //Gasoline FGHJKMNQUVXZ
c:=code=="RBB"?10:c //RBOB Gasoline Brent Crack Spread FGHJKMNQUVXZ
c:=code=="RP"?2:c //Euro/British Pound FGHJKMNQUVXZ
c:=code=="RR"?3:c //Rough Rice HMUZ
c:=code=="RU"?7:c //Russian Ruble FHKNUX
c:=code=="RY"?2:c //Euro/Japanese Yen FGHJKMNQUVXZ
c:=code=="S"?10:c //Soybeans HMUZ
c:=code=="SF"?2:c //Swiss Franc FHKNQUX
c:=code=="SI"?12:c //Silver HMUZ
c:=code=="SM"?11:c //Soybean Meal FHJKNUZ
c:=code=="SP"?3:c //Full-Size S&P 500 Index FHKNQUVZ
c:=code=="TRY"?2:c //Turkish Lira HMUZ
c:=code=="TU"?2:c //2 Year Treasury Note HMUZ
c:=code=="TY"?2:c //10 Year Treasury Note HMUZ
c:=code=="UL"?2:c //Ultra Treasury Bond HMUZ
c:=code=="US"?2:c //30-Year Treasury Bond HMUZ
c:=code=="W"?7:c //Wheat HMUZ
c:=code=="XAF"?2:c //E-mini Financial Sector HKNUZ
c:=code=="XAK"?2:c //E-mini Technology Sector HM
c:=code=="XAP"?2:c //E-mini Consumer Staples Sector HM
c:=code=="XAU"?2:c //E-mini Utilities Sector HM
c:=code=="XAY"?2:c //E-mini Consumer Discretionary Sector HM
// unfortunately, "securuty" can't be called inside a for loop,so:
C1=getCntrct(code,1,getNc(code))
C2=getCntrct(code,2,getNc(code))
C3=getCntrct(code,3,getNc(code))
C4=getCntrct(code,4,getNc(code))
C5=getCntrct(code,5,getNc(code))
C6=getCntrct(code,6,getNc(code))
C7=getCntrct(code,7,getNc(code))
C8=getCntrct(code,8,getNc(code))
C9=getCntrct(code,9,getNc(code))
C10=getCntrct(code,10,getNc(code))
C11=getCntrct(code,11,getNc(code))
C12=getCntrct(code,12,getNc(code))
C13=getCntrct(code,13,getNc(code))
C14=getCntrct(code,14,getNc(code))
C15=getCntrct(code,15,getNc(code))
C16=getCntrct(code,16,getNc(code))
C17=getCntrct(code,17,getNc(code))
C18=getCntrct(code,18,getNc(code))
C19=getCntrct(code,19,getNc(code))
C20=getCntrct(code,20,getNc(code))
C21=getCntrct(code,21,getNc(code))
C22=getCntrct(code,22,getNc(code))
C23=getCntrct(code,23,getNc(code))
C24=getCntrct(code,24,getNc(code))
C25=getCntrct(code,25,getNc(code))
C26=getCntrct(code,26,getNc(code))
C27=getCntrct(code,27,getNc(code))
C28=getCntrct(code,28,getNc(code))
C29=getCntrct(code,29,getNc(code))
C30=getCntrct(code,30,getNc(code))
C31=getCntrct(code,31,getNc(code))
C32=getCntrct(code,32,getNc(code))
C33=getCntrct(code,33,getNc(code))
C34=getCntrct(code,34,getNc(code))
C35=getCntrct(code,35,getNc(code))
C36=getCntrct(code,36,getNc(code))
C37=getCntrct(code,37,getNc(code))
C38=getCntrct(code,38,getNc(code))
C39=getCntrct(code,39,getNc(code))
// max securities for scripts is 40!
OiSum=C1+C2+C3+C4+C5+C6+C7+C8+C9+C10+C11+C12+C13+C14+C15+C16+C17+C18+C19+C20+C21+C22+C23+C24+C25+C26+C27
+C28+C29+C30+C31+C32+C33+C34+C35+C36+C37+C38+C39
///////// CFTC COT Open Interest
CftcOI = security("QUANDL:CFTC/"+code+"_F_ALL|0", "W", close, barmerge.gaps_off, barmerge.lookahead_on)
plot(CftcOI, color=orange, title="CFTC COT OI", linewidth=3)
// lastBar function
lastBar=(barstate.islast and close ? barstate.islast : na)
lB=lastBar
//day of week function
isMon() => dayofweek(time('D')) == monday and close ? 1 : 0
isTue() => dayofweek(time('D')) == tuesday and close ? 1 : 0
isWed() => dayofweek(time('D')) == wednesday and close ? 1 : 0
isThu() => dayofweek(time('D')) == thursday and close ? 1 : 0
isFri() => dayofweek(time('D')) == friday and close ? 1 : 0
NowIsSat() => dayofweek(timenow) == 7 ? 1: 0
NowIsSun() => dayofweek(timenow) == 1 ? 1: 0
//default label params to shorten command lines
s=shape.labeldown
l=location.absolute
tc=black
sz=size.tiny
o=+1
e=true
tr=70
// if lastblock is on Fri but we are on Sat or Sun...
//OffSetPrelim=(Prelim>0?OffSet+1:OffSet)
OffSet=-1
//OffSetPrelim=OffSet
OffSetPrelim=(NowIsSat() or NowIsSun()? 0:OffSet)
// Sum of next 20 contracts OI
plot(OiSum>0?OiSum:na, color=purple, title="CME e-o-d\n 9 cntrcts sum", linewidth=3,offset=OffSet)
// If a Prelim has been entered
plot(lB and Prelim > 0?Prelim:na, offset=OffSetPrelim, style=cross, color=black,title="Preliminary OI", linewidth=4)
// labels
plotshape(lB and Prelim > 0?Prelim:na, show_last=1,color=black,text="Preliminary OI",editable=e,location=l,style=shape.cross,textcolor=black,size=size.small,offset=OffSetPrelim,transp=30)
plotshape(lB and CftcOI?CftcOI:na, color=purple, text ="CME e-o-d OI ",editable=e,style=shape.labelup,location=l,textcolor=tc,size=s,offset=+1,transp=tr)
plotshape(lB and CftcOI?CftcOI:na, color=orange, text="CFTC Weekly OI",editable=true,style=s,location=l,textcolor=tc,size=s,offset=+1,transp=tr)
交易观点说明 - https://www.tradingview.com/script/7EvGzM0a-Open-Interest-CME-e-o-d-vs-CFTC-e-o-w/
getCntrct()
函数用于构造 ticker/quandl 代码并通过安全调用检索 OI 值。
脚本要求您手动指定合约的前缀,黄金和白银除外。对于那些,如果您将图表代码更改为 XAUUSD 或 XAGUSD,您将看到脚本绘制 OI 值。
对于其他人,例如对于澳元 OI 值,您必须将“覆盖符号(SI/CL 等)”设置更改为“AD”(输入变量 ChkComm
)
对于澳元,这将为安全调用构建 quandl 代码:
QUANDL:CHRIS/CME_AD1|7
QUANDL:CHRIS/CME_AD2|7
等等
(您也可以通过将其用作图表本身的股票代码直接查看这些)
“管道”符号|
用于引用table值中的哪个字段,其中7是OI值。您可以在此处查看 AD1 的相应 table: