Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
276 views
in Technique[技术] by (71.8m points)

pine script - How to optimize the following code, recalling too many similar functions?

I have a code here written in 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
question from:https://stackoverflow.com/questions/65912970/how-to-optimize-the-following-code-recalling-too-many-similar-functions

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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)).

Change it to

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...