//@Name:Currency Conversion //@Description:Converts the share's currency. //@Update:Intraday var ctype = 0; var outputType = 0; var lookback = 0; var clist = ["GBP","EUR","USD"]; var outputList = ["Price","% change"]; function init(status) { if (status == Loading || status == Editing) { ctype = storage.getAt(0); outputType = storage.getAt(1); lookback = storage.getAt(2); } if (status == Adding || status == Editing) { dlg = new Dialog("Convert to...", 155, 55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,60,-1,clist,"","",ctype); dlg.addDropList("DL2",8,-1,60,-1,outputList,"","",outputType); dlg.addIntEdit("INT1",40,-1,-1,-1,"Lookback","td ago",lookback,0,1000); if (dlg.show()==Dialog.Cancel) return false; ctype = dlg.getValue("DL1"); outputType = dlg.getValue("DL2"); lookback = dlg.getValue("INT1"); storage.setAt(0, ctype); storage.setAt(1, outputType); storage.setAt(2, lookback); } setTitle(outputList[outputType] + " ("+ lookback + "td ago) to " + clist[ctype]); } function getVal(share) { // Check if the share is one of the hard coded indices and grab its currency var curr = getIndexCurrency(share.getShareScopeID()); // if nothing was returned get the instrument's currency curr = curr || share.getCurrency(); var currInfo = getCurr(curr); var fx = currInfo[0]; var fxtype = currInfo[1]; if (fxtype === 3) return; if (outputType === 0) { var price = lookback === 0 ? share.getIMid() : share.getClose(lookback-1); if (price==null) price = share.getClose(); if (fx) { var fxprice = lookback === 0 ? fx.getIMid() : fx.getClose(lookback-1); if (fxprice==null) fxprice = fx.getClose(); } else { var fxprice = 1; } if (fxtype==0) var output = price*fxprice; else if (fxtype==1) var output = price/fxprice; else if (fxtype==2) var output = price; } else { if (lookback === 0) return; var price0, price1, fxprice0, fxprice1; price0 = share.getIMid(); if (price0) { if (fx) { fxprice0 = fx.getIMid(); fxprice1 = fx.getClose(lookback-1); } else { fxprice0 = 1; fxprice1 = 1; } price1 = share.getClose(lookback-1); } else { if (fx) { fxprice0 = fx.getClose(); fxprice1 = fx.getClose(lookback); } else { fxprice0 = 1; fxprice1 = 1; } price0 = share.getClose(); price1 = share.getClose(lookback); } if (fxtype==0) { var convPrice0 = price0*fxprice0; var convPrice1 = price1*fxprice1; } else if (fxtype==1) { var convPrice0 = price0/fxprice0; var convPrice1 = price1/fxprice1; } else if (fxtype==2) { var convPrice0 = price0; var convPrice1 = price1; } var output = (convPrice0/convPrice1-1) * 100; } return output; } function getCurr(curr) { var fx; var fxtype; if (ctype==0) { switch(curr) { case "GBP": fxtype = 2; break; case "EUR": fx = getShare("FX:GBPEUR"); fxtype = 1; break; case "USD": fx = getShare("FX:GBPUSD"); fxtype = 1; break; case "AUD": fx = getShare("FX:GBPAUD"); fxtype = 1; break; case "PLN": fx = getShare("FX:GBPPLN"); fxtype = 1; break; case "JPY": fx = getShare("FX:GBPJPY"); fxtype = 1; break; case "NOK": fx = getShare("FX:GBPNOK"); fxtype = 1; break; case "SEK": fx = getShare("FX:GBPSEK"); fxtype = 1; break; case "CHF": fx = getShare("FX:GBPCHF"); fxtype = 1; break; default: fxtype = 3; break; } } if (ctype==1) { switch(curr) { case "GBP": fx = getShare("FX:EURGBP"); fxtype = 1; break; case "EUR": fxtype = 2; break; case "USD": fx = getShare("FX:EURUSD"); fxtype = 1; break; case "AUD": fx = getShare("FX:EURAUD"); fxtype = 1; break; case "PLN": fx = getShare("FX:EURPLN"); fxtype = 1; break; case "JPY": fx = getShare("FX:EURJPY"); fxtype = 1; break; case "NOK": fx = getShare("FX:EURNOK"); fxtype = 1; break; case "SEK": fx = getShare("FX:EURSEK"); fxtype = 1; break; case "CHF": fx = getShare("FX:EURCHF"); fxtype = 1; break; default: fxtype = 3; break; } } if (ctype==2) { switch(curr) { case "GBP": fx = getShare("FX:USDGBP"); fxtype = 1; break; case "EUR": fx = getShare("FX:USDEUR"); fxtype = 1; break; case "USD": fxtype = 2; break; case "AUD": fx = getShare("FX:USDAUD"); fxtype = 1; break; case "PLN": fx = getShare("FX:USDPLN"); fxtype = 1; break; case "JPY": fx = getShare("FX:USDJPY"); fxtype = 1; break; case "NOK": fx = getShare("FX:USDNOK"); fxtype = 1; break; case "SEK": fx = getShare("FX:USDSEK"); fxtype = 1; break; case "CHF": fx = getShare("FX:USDCHF"); fxtype = 1; break; default: fxtype = 3; break; } } return [fx,fxtype]; } function getIndexCurrency(ssId) { switch (ssId) { case 49171: return "USD"; // S&P 500 case 49166: return "EUR"; // DAX default: return; } }