如何优化下面的代码,调用太多相似的函数?



我这里有一个代码写在pinescript。我在控制台收到了一个关于请求太多证券的错误。代码的工作原理与此不同。我的代码没有优化。知道怎么做吗?否则,另一种解决方案是将代码分成两个脚本。目标是在指定的分辨率下获得每个货币对的当前汇率,然后除以货币对在周一开盘价的汇率,以获得相对货币强度指数。任何建议和建议都将不胜感激。谢谢你。

//=========== Currency Exchange Rates ===========
eurUSDrate = security("EURUSD", "60", open)
eurJPYrate = security("EURJPY", "60", open)
eurGBPrate = security("EURGBP", "60", open)
eurCADrate = security("EURCAD", "60", open)
eurAUDrate = security("EURAUD", "60", open)
eurCHFrate = security("EURCHF", "60", open)
eurNZDrate = security("EURNZD", "60", open)
usdCADrate = security("USDCAD", "60", open)
usdJPYrate = security("USDJPY", "60", open)
usdCHFrate = security("USDCHF", "60", open)
usdEURrate = 1/(security("EURUSD", "60", open))
usdGBPrate = 1/(security("GBPUSD", "60", open))
usdNZDrate = 1/(security("NZDUSD", "60", open))
usdAUDrate = 1/(security("AUDUSD", "60", open))
gbpUSDrate = security("GBPUSD", "60", open)
gbpJPYrate = security("GBPJPY", "60", open)
gbpCADrate = security("GBPCAD", "60", open)
gbpNZDrate = security("GBPNZD", "60", open)
gbpCHFrate = security("GBPCHF", "60", open)
gbpEURrate = 1/(security("EURGBP", "60", open))
gbpAUDrate = security("GBPAUD", "60", open)
audUSDrate = security("AUDUSD", "60", open)
audCHFrate = security("AUDCHF", "60", open)
audNZDrate = security("AUDNZD", "60", open)
audCADrate = security("AUDCAD", "60", open)
audJPYrate = security("AUDJPY", "60", open)
audEURrate = 1/(security("EURAUD", "60", open))
audGBPrate = 1/(security("GBPAUD", "60", open))
nzdUSDrate = security("NZDUSD", "60", open)
nzdCADrate = security("NZDCAD", "60", open)
nzdCHFrate = security("NZDCHF", "60", open)
nzdJPYrate = security("NZDJPY", "60", open)
nzdEURrate = 1/(security("EURNZD", "60", open))
nzdAUDrate = 1/(security("AUDNZD", "60", open))
nzdGBPrate = 1/(security("GBPNZD", "60", open))
jpyEURrate = 1/(security("EURJPY", "60", open))
jpyUSDrate = 1/(security("USDJPY", "60", open))
jpyGBPrate = 1/(security("GBPJPY", "60", open))
jpyAUDrate = 1/(security("AUDJPY", "60", open))
jpyNZDrate = 1/(security("NZDJPY", "60", open))
jpyCADrate = 1/(security("CADJPY", "60", open))
jpyCHFrate = 1/(security("CHFJPY", "60", open))
cadEURrate = 1/(security("EURCAD", "60", open))
cadUSDrate = 1/(security("USDCAD", "60", open))
cadGBPrate = 1/(security("GBPCAD", "60", open))
cadAUDrate = 1/(security("AUDCAD", "60", open))
cadNZDrate = 1/(security("NZDCAD", "60", open))
cadJPYrate = security("CADJPY", "60", open)
cadCHFrate = security("CADCHF", "60", open)
chfEURrate = 1/(security("EURCHF", "60", open))
chfUSDrate = 1/(security("USDCHF", "60", open))
chfGBPrate = 1/(security("GBPCHF", "60", open))
chfAUDrate = 1/(security("AUDCHF", "60", open))
chfNZDrate = 1/(security("NZDCHF", "60", open))
chfCADrate = 1/(security("CADCHF", "60", open))
chfJPYrate = security("CHFJPY", "60", open)

//=========== Currency Index ===========
//Formula = Sum(all major pairs divide by currency exchange rate on Monday's opening)
//update currency exchange rate at opening of Monday's price for each currency pair
eurusd = valuewhen(dayofweek==1, security("EURUSD", "D", open), 0)  
eurjpy = valuewhen(dayofweek==1, security("EURJPY", "D", open), 0) 
eurgbp = valuewhen(dayofweek==1, security("EURGBP", "D", open), 0) 
eurcad = valuewhen(dayofweek==1, security("EURCAD", "D", open), 0) 
euraud = valuewhen(dayofweek==1, security("EURAUD", "D", open), 0)
eurchf = valuewhen(dayofweek==1, security("EURCHF", "D", open), 0)
eurnzd = valuewhen(dayofweek==1, security("EURNZD", "D", open), 0)
EUR = eurUSDrate/eurusd + eurJPYrate/eurjpy + eurGBPrate/eurgbp + eurCADrate/eurcad + eurAUDrate/euraud + eurCHFrate/eurchf + eurNZDrate/eurnzd
usdcad = valuewhen(dayofweek==1, security("USDCAD", "D", open), 0)
usdjpy = valuewhen(dayofweek==1, security("USDJPY", "D", open), 0)
usdchf = valuewhen(dayofweek==1, security("USDCHF", "D", open), 0)
usdeur = 1/(valuewhen(dayofweek==1, security("EURUSD", "D", open), 0))
usdgbp = 1/(valuewhen(dayofweek==1, security("GBPUSD", "D", open), 0))
usdnzd = 1/(valuewhen(dayofweek==1, security("NZDUSD", "D", open), 0))
usdaud = 1/(valuewhen(dayofweek==1, security("AUDUSD", "D", open), 0))
USD = usdCADrate/usdcad + usdJPYrate/usdjpy + usdCHFrate/usdchf + usdEURrate/usdeur + usdgbp/usdGBPrate + usdNZDrate/usdnzd + usdAUDrate/usdaud
gbpusd = valuewhen(dayofweek==1, security("GBPUSD", "D", open), 0)
gbpjpy = valuewhen(dayofweek==1, security("GBPJPY", "D", open), 0)
gbpcad = valuewhen(dayofweek==1, security("GBPCAD", "D", open), 0)
gbpnzd = valuewhen(dayofweek==1, security("GBPNZD", "D", open), 0)
gbpchf = valuewhen(dayofweek==1, security("GBPCHF", "D", open), 0)
gbpeur = 1/valuewhen(dayofweek==1, security("EURGBP", "D", open), 0)
gbpaud = valuewhen(dayofweek==1, security("GBPAUD", "D", open), 0)
GBP = gbpUSDrate/gbpusd + gbpJPYrate/gbpjpy + gbpCADrate/gbpcad + gbpNZDrate/gbpnzd + gbpCHFrate/gbpchf + gbpEURrate/gbpeur + gbpAUDrate/gbpaud
audusd = valuewhen(dayofweek==1, security("AUDUSD", "D", open), 0)
audchf = valuewhen(dayofweek==1, security("AUDCHF", "D", open), 0)
audnzd = valuewhen(dayofweek==1, security("AUDNZD", "D", open), 0)
audcad = valuewhen(dayofweek==1, security("AUDCAD", "D", open), 0)
audjpy = valuewhen(dayofweek==1, security("AUDJPY", "D", open), 0)
audeur = 1/(valuewhen(dayofweek==1, security("EURAUD", "D", open), 0))
audgbp = 1/(valuewhen(dayofweek==1, security("GBPAUD", "D", open), 0))
AUD = audUSDrate/audusd + audCHFrate/audchf + audNZDrate/audnzd + audCADrate/audcad + audJPYrate/audjpy + audEURrate/audeur + audGBPrate/audgbp
nzdusd = valuewhen(dayofweek==1, security("NZDUSD", "D", open), 0)
nzdcad = valuewhen(dayofweek==1, security("NZDCAD", "D", open), 0)
nzdchf = valuewhen(dayofweek==1, security("NZDCHF", "D", open), 0)
nzdjpy = valuewhen(dayofweek==1, security("NZDJPY", "D", open), 0)
nzdeur = 1/(valuewhen(dayofweek==1, security("EURNZD", "D", open), 0))
nzdaud = 1/(valuewhen(dayofweek==1, security("AUDNZD", "D", open), 0))
nzdgbp = 1/(valuewhen(dayofweek==1, security("GBPNZD", "D", open), 0))
NZD = nzdUSDrate/nzdusd + nzdCADrate/nzdcad + nzdCHFrate/nzdchf + nzdJPYrate/nzdjpy + nzdEURrate/nzdeur + nzdAUDrate/nzdaud + nzdGBPrate/nzdgbp
jpyeur = 1/(valuewhen(dayofweek==1, security("EURJPY", "D", open), 0))
jpyusd = 1/(valuewhen(dayofweek==1, security("USDJPY", "D", open), 0))
jpygbp = 1/(valuewhen(dayofweek==1, security("GBPJPY", "D", open), 0))
jpyaud = 1/(valuewhen(dayofweek==1, security("AUDJPY", "D", open), 0))
jpynzd = 1/(valuewhen(dayofweek==1, security("NZDJPY", "D", open), 0))
jpycad = 1/(valuewhen(dayofweek==1, security("CADJPY", "D", open), 0))
jpychf = 1/(valuewhen(dayofweek==1, security("CHFJPY", "D", open), 0))
JPY = jpyEURrate/jpyeur + jpyUSDrate/jpyusd + jpyGBPrate/jpygbp + jpyAUDrate/jpyaud + jpyNZDrate/jpynzd + jpyCADrate/jpycad + jpyCHFrate/jpychf
cadeur = 1/(valuewhen(dayofweek==1, security("EURCAD", "D", open), 0))
cadusd = 1/(valuewhen(dayofweek==1, security("USDCAD", "D", open), 0))
cadgbp = 1/(valuewhen(dayofweek==1, security("GBPCAD", "D", open), 0))
cadaud = 1/(valuewhen(dayofweek==1, security("AUDCAD", "D", open), 0))
cadnzd = 1/(valuewhen(dayofweek==1, security("NZDCAD", "D", open), 0))
cadjpy = valuewhen(dayofweek==1, security("CADJPY", "D", open), 0)
cadchf = valuewhen(dayofweek==1, security("CADCHF", "D", open), 0)
CAD = cadEURrate/cadeur + cadUSDrate/cadusd + cadGBPrate/cadgbp + cadAUDrate/cadaud + cadNZDrate/cadnzd + cadJPYrate/cadjpy + cadCHFrate/cadchf
chfeur = 1/(valuewhen(dayofweek==1, security("EURCHF", "D", open), 0))
chfusd = 1/(valuewhen(dayofweek==1, security("USDCHF", "D", open), 0))
chfgbp = 1/(valuewhen(dayofweek==1, security("GBPCHF", "D", open), 0))
chfaud = 1/(valuewhen(dayofweek==1, security("AUDCHF", "D", open), 0))
chfnzd = 1/(valuewhen(dayofweek==1, security("NZDCHF", "D", open), 0))
chfcad = 1/(valuewhen(dayofweek==1, security("CADCHF", "D", open), 0))
chfjpy = valuewhen(dayofweek==1, security("CHFJPY", "D", open), 0)
CHF = chfEURrate/chfeur + chfUSDrate/chfusd + chfGBPrate/chfgbp + chfAUDrate/chfaud + chfNZDrate/chfnzd + chfCADrate/chfcad + chfJPYrate/chfjpy

首先,消除对同一安全性的多个安全性调用。你有eurUSDrate = security("EURUSD", "60", open)之后,usdEURrate = 1/(security("EURUSD", "60", open)).

改为

eurUSDrate = security("EURUSD", "60", open)
usdEURrate = 1 / eurUSDrate

您的代码中没有使用版本编译器指令。
尝试在脚本的开头添加//@version=4
我这端效果很好。

//@version=4
study("My Script")
//=========== Currency Exchange Rates ===========
eurUSDrate = security("EURUSD", "60", open)
eurJPYrate = security("EURJPY", "60", open)
eurGBPrate = security("EURGBP", "60", open)
eurCADrate = security("EURCAD", "60", open)
eurAUDrate = security("EURAUD", "60", open)
eurCHFrate = security("EURCHF", "60", open)
eurNZDrate = security("EURNZD", "60", open)
usdCADrate = security("USDCAD", "60", open)
usdJPYrate = security("USDJPY", "60", open)
usdCHFrate = security("USDCHF", "60", open)
usdEURrate = 1/(security("EURUSD", "60", open))
usdGBPrate = 1/(security("GBPUSD", "60", open))
usdNZDrate = 1/(security("NZDUSD", "60", open))
usdAUDrate = 1/(security("AUDUSD", "60", open))
gbpUSDrate = security("GBPUSD", "60", open)
gbpJPYrate = security("GBPJPY", "60", open)
gbpCADrate = security("GBPCAD", "60", open)
gbpNZDrate = security("GBPNZD", "60", open)
gbpCHFrate = security("GBPCHF", "60", open)
gbpEURrate = 1/(security("EURGBP", "60", open))
gbpAUDrate = security("GBPAUD", "60", open)
audUSDrate = security("AUDUSD", "60", open)
audCHFrate = security("AUDCHF", "60", open)
audNZDrate = security("AUDNZD", "60", open)
audCADrate = security("AUDCAD", "60", open)
audJPYrate = security("AUDJPY", "60", open)
audEURrate = 1/(security("EURAUD", "60", open))
audGBPrate = 1/(security("GBPAUD", "60", open))
nzdUSDrate = security("NZDUSD", "60", open)
nzdCADrate = security("NZDCAD", "60", open)
nzdCHFrate = security("NZDCHF", "60", open)
nzdJPYrate = security("NZDJPY", "60", open)
nzdEURrate = 1/(security("EURNZD", "60", open))
nzdAUDrate = 1/(security("AUDNZD", "60", open))
nzdGBPrate = 1/(security("GBPNZD", "60", open))
jpyEURrate = 1/(security("EURJPY", "60", open))
jpyUSDrate = 1/(security("USDJPY", "60", open))
jpyGBPrate = 1/(security("GBPJPY", "60", open))
jpyAUDrate = 1/(security("AUDJPY", "60", open))
jpyNZDrate = 1/(security("NZDJPY", "60", open))
jpyCADrate = 1/(security("CADJPY", "60", open))
jpyCHFrate = 1/(security("CHFJPY", "60", open))
cadEURrate = 1/(security("EURCAD", "60", open))
cadUSDrate = 1/(security("USDCAD", "60", open))
cadGBPrate = 1/(security("GBPCAD", "60", open))
cadAUDrate = 1/(security("AUDCAD", "60", open))
cadNZDrate = 1/(security("NZDCAD", "60", open))
cadJPYrate = security("CADJPY", "60", open)
cadCHFrate = security("CADCHF", "60", open)
chfEURrate = 1/(security("EURCHF", "60", open))
chfUSDrate = 1/(security("USDCHF", "60", open))
chfGBPrate = 1/(security("GBPCHF", "60", open))
chfAUDrate = 1/(security("AUDCHF", "60", open))
chfNZDrate = 1/(security("NZDCHF", "60", open))
chfCADrate = 1/(security("CADCHF", "60", open))
chfJPYrate = security("CHFJPY", "60", open)

//=========== Currency Index ===========
//Formula = Sum(all major pairs divide by currency exchange rate on Monday's opening)
//update currency exchange rate at opening of Monday's price for each currency pair
eurusd = valuewhen(dayofweek==1, security("EURUSD", "D", open), 0)  
eurjpy = valuewhen(dayofweek==1, security("EURJPY", "D", open), 0) 
eurgbp = valuewhen(dayofweek==1, security("EURGBP", "D", open), 0) 
eurcad = valuewhen(dayofweek==1, security("EURCAD", "D", open), 0) 
euraud = valuewhen(dayofweek==1, security("EURAUD", "D", open), 0)
eurchf = valuewhen(dayofweek==1, security("EURCHF", "D", open), 0)
eurnzd = valuewhen(dayofweek==1, security("EURNZD", "D", open), 0)
EUR = eurUSDrate/eurusd + eurJPYrate/eurjpy + eurGBPrate/eurgbp + eurCADrate/eurcad + eurAUDrate/euraud + eurCHFrate/eurchf + eurNZDrate/eurnzd
usdcad = valuewhen(dayofweek==1, security("USDCAD", "D", open), 0)
usdjpy = valuewhen(dayofweek==1, security("USDJPY", "D", open), 0)
usdchf = valuewhen(dayofweek==1, security("USDCHF", "D", open), 0)
usdeur = 1/(valuewhen(dayofweek==1, security("EURUSD", "D", open), 0))
usdgbp = 1/(valuewhen(dayofweek==1, security("GBPUSD", "D", open), 0))
usdnzd = 1/(valuewhen(dayofweek==1, security("NZDUSD", "D", open), 0))
usdaud = 1/(valuewhen(dayofweek==1, security("AUDUSD", "D", open), 0))
USD = usdCADrate/usdcad + usdJPYrate/usdjpy + usdCHFrate/usdchf + usdEURrate/usdeur + usdgbp/usdGBPrate + usdNZDrate/usdnzd + usdAUDrate/usdaud
gbpusd = valuewhen(dayofweek==1, security("GBPUSD", "D", open), 0)
gbpjpy = valuewhen(dayofweek==1, security("GBPJPY", "D", open), 0)
gbpcad = valuewhen(dayofweek==1, security("GBPCAD", "D", open), 0)
gbpnzd = valuewhen(dayofweek==1, security("GBPNZD", "D", open), 0)
gbpchf = valuewhen(dayofweek==1, security("GBPCHF", "D", open), 0)
gbpeur = 1/valuewhen(dayofweek==1, security("EURGBP", "D", open), 0)
gbpaud = valuewhen(dayofweek==1, security("GBPAUD", "D", open), 0)
GBP = gbpUSDrate/gbpusd + gbpJPYrate/gbpjpy + gbpCADrate/gbpcad + gbpNZDrate/gbpnzd + gbpCHFrate/gbpchf + gbpEURrate/gbpeur + gbpAUDrate/gbpaud
audusd = valuewhen(dayofweek==1, security("AUDUSD", "D", open), 0)
audchf = valuewhen(dayofweek==1, security("AUDCHF", "D", open), 0)
audnzd = valuewhen(dayofweek==1, security("AUDNZD", "D", open), 0)
audcad = valuewhen(dayofweek==1, security("AUDCAD", "D", open), 0)
audjpy = valuewhen(dayofweek==1, security("AUDJPY", "D", open), 0)
audeur = 1/(valuewhen(dayofweek==1, security("EURAUD", "D", open), 0))
audgbp = 1/(valuewhen(dayofweek==1, security("GBPAUD", "D", open), 0))
AUD = audUSDrate/audusd + audCHFrate/audchf + audNZDrate/audnzd + audCADrate/audcad + audJPYrate/audjpy + audEURrate/audeur + audGBPrate/audgbp
nzdusd = valuewhen(dayofweek==1, security("NZDUSD", "D", open), 0)
nzdcad = valuewhen(dayofweek==1, security("NZDCAD", "D", open), 0)
nzdchf = valuewhen(dayofweek==1, security("NZDCHF", "D", open), 0)
nzdjpy = valuewhen(dayofweek==1, security("NZDJPY", "D", open), 0)
nzdeur = 1/(valuewhen(dayofweek==1, security("EURNZD", "D", open), 0))
nzdaud = 1/(valuewhen(dayofweek==1, security("AUDNZD", "D", open), 0))
nzdgbp = 1/(valuewhen(dayofweek==1, security("GBPNZD", "D", open), 0))
NZD = nzdUSDrate/nzdusd + nzdCADrate/nzdcad + nzdCHFrate/nzdchf + nzdJPYrate/nzdjpy + nzdEURrate/nzdeur + nzdAUDrate/nzdaud + nzdGBPrate/nzdgbp
jpyeur = 1/(valuewhen(dayofweek==1, security("EURJPY", "D", open), 0))
jpyusd = 1/(valuewhen(dayofweek==1, security("USDJPY", "D", open), 0))
jpygbp = 1/(valuewhen(dayofweek==1, security("GBPJPY", "D", open), 0))
jpyaud = 1/(valuewhen(dayofweek==1, security("AUDJPY", "D", open), 0))
jpynzd = 1/(valuewhen(dayofweek==1, security("NZDJPY", "D", open), 0))
jpycad = 1/(valuewhen(dayofweek==1, security("CADJPY", "D", open), 0))
jpychf = 1/(valuewhen(dayofweek==1, security("CHFJPY", "D", open), 0))
JPY = jpyEURrate/jpyeur + jpyUSDrate/jpyusd + jpyGBPrate/jpygbp + jpyAUDrate/jpyaud + jpyNZDrate/jpynzd + jpyCADrate/jpycad + jpyCHFrate/jpychf
cadeur = 1/(valuewhen(dayofweek==1, security("EURCAD", "D", open), 0))
cadusd = 1/(valuewhen(dayofweek==1, security("USDCAD", "D", open), 0))
cadgbp = 1/(valuewhen(dayofweek==1, security("GBPCAD", "D", open), 0))
cadaud = 1/(valuewhen(dayofweek==1, security("AUDCAD", "D", open), 0))
cadnzd = 1/(valuewhen(dayofweek==1, security("NZDCAD", "D", open), 0))
cadjpy = valuewhen(dayofweek==1, security("CADJPY", "D", open), 0)
cadchf = valuewhen(dayofweek==1, security("CADCHF", "D", open), 0)
CAD = cadEURrate/cadeur + cadUSDrate/cadusd + cadGBPrate/cadgbp + cadAUDrate/cadaud + cadNZDrate/cadnzd + cadJPYrate/cadjpy + cadCHFrate/cadchf
chfeur = 1/(valuewhen(dayofweek==1, security("EURCHF", "D", open), 0))
chfusd = 1/(valuewhen(dayofweek==1, security("USDCHF", "D", open), 0))
chfgbp = 1/(valuewhen(dayofweek==1, security("GBPCHF", "D", open), 0))
chfaud = 1/(valuewhen(dayofweek==1, security("AUDCHF", "D", open), 0))
chfnzd = 1/(valuewhen(dayofweek==1, security("NZDCHF", "D", open), 0))
chfcad = 1/(valuewhen(dayofweek==1, security("CADCHF", "D", open), 0))
chfjpy = valuewhen(dayofweek==1, security("CHFJPY", "D", open), 0)
CHF = chfEURrate/chfeur + chfUSDrate/chfusd + chfGBPrate/chfgbp + chfAUDrate/chfaud + chfNZDrate/chfnzd + chfCADrate/chfcad + chfJPYrate/chfjpy
plot(CHF)

最新更新