简体   繁体   English

如何优化下面的代码,召回太多类似的功能?

[英]How to optimize the following code, recalling too many similar functions?

I have a code here written in pinescript.我这里有一个用 pinescript 编写的代码。 I got an error in the console about requesting too many securities.我在控制台中收到关于请求太多证券的错误。 The code works otherwise.否则代码工作。 My code is not optimized.我的代码没有优化。 Any idea how?知道怎么做吗? Otherwise the other solution is to separate the code into two scripts.否则,另一种解决方案是将代码分成两个脚本。 The goal is to obtain each currency pair's current exchange at the specified resolution, then divide by the currency pair's exchange price on Monday's opening price to obtain a relative currency strength index.目标是获取每个货币对在指定分辨率下的当前汇率,然后除以该货币对在周一开盘价的汇率,得到一个相对货币强弱指数。 Any suggestion and advice would be greatly appreciated.任何建议和意见将不胜感激。 Thank you.谢谢你。

//=========== 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

To begin, eliminate multiple security calls to the same security.首先,消除对同一安全性的多个安全性调用。 You have eurUSDrate = security("EURUSD", "60", open) then later, usdEURrate = 1/(security("EURUSD", "60", open)) .你有eurUSDrate = security("EURUSD", "60", open)然后是usdEURrate = 1/(security("EURUSD", "60", open))

Change it to将其更改为

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

You're not using a version compiler directive in your code.您没有在代码中使用版本编译器指令。
Try adding //@version=4 in the beginning of your script.尝试在脚本的开头添加//@version=4
It works perfectly on my end.它对我来说完美无缺。

//@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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM