Bloomberg exchange-traded funds updates
This mapping is used for Security Type Exchange-traded funds (ETFs) (FUND).
This mapping is used in the Securities view when you click Update Security Data and choose Bloomberg.
Note mappings update.bloomberg.C ,update.bloomberg.CE, update.bloomberg.D, update.bloomberg.E and update.bloomberg.O are applied depending on Security type.
Configuration
Asset classes and types are set up in Preference → Securities → Asset classes and types (see Asset classes and types in FA Back reference). To fully utilize the updates functionality, you need the following asset classes and types:
Asset class breakdown1
Geographical allocation (M49)
ISO10962 Classification of Financial Instruments
Currency exposure
1/ Note that it is made a BICS sector level mapping here between Bloomberg “Legacy BICS” structure and BICS 2020 structure.
Mapping
Mapping name: update.bloomberg.CE
Updated fields
Security code
ISIN code
Currency
Outstanding shares
Management Fee Percentage (%)
Allocations
Asset class breakdown [Holdings based]
Geographical allocation (M49) [Holdings based]
Currency exposure [NAV Currency]
ISO10962 Classification of Financial Instruments [Fund classification]
Mapping table
Row | Source field | FA field | Script |
---|---|---|---|
1 | ID_ISIN | s.isinCode | |
2 | CRNCY | s.currency | if("[CRNCY]"=='GBp') { output='GBP' } else { output="[CRNCY]" } ; |
3 | CFI_CODE | CFI | |
4 | BLOOMBERG_CFI_CODE | CFI | |
5 | TICKER_AND_EXCH_CODE | s.securityCode | if("[CFI]".substring(0,2)=='CE') { output="[TICKER_AND_EXCH_CODE]" } else { output="[s.isinCode]_[s.currency]" } ; |
6 | FUND_PORT_DT | FUNDDT | output=Date.parse("MM/dd/yyyy", "[FUND_PORT_DT]").format("yyyy-MM-dd") |
7 | HB_GEO_CNTRY_ALLOC | HBCTRY | output="[HB_GEO_CNTRY_ALLOC]".replaceAll("=",":") ; |
8 | HB_INDUSTRY_SECTOR_ALLOCATION | HBBICSSEC | output="[HB_INDUSTRY_SECTOR_ALLOCATION]".replaceAll("=",":").replaceAll("Consumer,","Consumer") ; |
9 | M49 | if((!"[HB_GEO_CNTRY_ALLOC]"?.trim())||("[HB_GEO_CNTRY_ALLOC]"=='N.A.')||("[HB_GEO_CNTRY_ALLOC]"=='')) { output = "" } else { if(services.configurationService.findGroupByCode('M49')) { output = "" def countries = ["Supranational":"991","Macau":"446","U.A.E.":"784","U.K.":"826","U.S.":"840","Canada":"124","Afghanistan":"004","Albania":"008","Algeria":"012","American Samoa":"016","Andorra":"020","Angola":"024","Anguilla":"660","Antarctica":"010","Antigua and Barbuda":"028","Argentina":"032","Armenia":"051","Aruba":"533","Australia":"036","Austria":"040","Azerbaijan":"031","Bahamas":"044","Bahrain":"048","Bangladesh":"050","Barbados":"052","Belarus":"112","Belgium":"056","Belize":"084","Benin":"204","Bermuda":"060","Bhutan":"064","Bolivia":"068","Bolivia":"068","Bosnia and Herzegovina":"070","Botswana":"072","Bouvet Island":"074","Brazil":"076","British Indian Ocean Territory":"086","Brunei Darussalam":"096","Brunei":"096","Bulgaria":"100","Burkina Faso":"854","Burundi":"108","Cambodia":"116","Cameroon":"120","Cape Verde":"132","Cayman Islands":"136","Central African Republic":"140","Chad":"148","Chile":"152","China":"156","Christmas Island":"162","Cocos (Keeling) Islands":"166","Colombia":"170","Comoros":"174","Congo":"178","Congo":"180","Cook Islands":"184","Costa Rica":"188","Côte d'Ivoire":"384","Ivory Coast":"384","Croatia":"191","Cuba":"192","Cyprus":"196","Czech Republic":"203","Denmark":"208","Djibouti":"262","Dominican Repb.":"212","Dominican Republic":"214","Ecuador":"218","Egypt":"818","El Salvador":"222","Equatorial Guinea":"226","Eritrea":"232","Estonia":"233","Ethiopia":"231","Falkland Islands (Malvinas)":"238","Faroe Islands":"234","Fiji":"242","Finland":"246","France":"250","French Guiana":"254","French Polynesia":"258","French Southern Territories":"260","Gabon":"266","Gambia":"270","Georgia":"268","Germany":"276","Ghana":"288","Gibraltar":"292","Greece":"300","Greenland":"304","Grenada":"308","Guadeloupe":"312","Guam":"316","Guatemala":"320","Guernsey":"831","Guinea":"324","Guinea-Bissau":"624","Guyana":"328","Haiti":"332","Heard Island and McDonald Islands":"334","Holy See (Vatican City State)":"336","Honduras":"340","Hong Kong":"344","Hungary":"348","Iceland":"352","India":"356","Indonesia":"360","Iran":"364","Iraq":"368","Ireland":"372","Isle of Man":"833","Israel":"376","Italy":"380","Jamaica":"388","Japan":"392","Jersey":"832","Jordan":"400","Kazakhstan":"398","Kenya":"404","Kiribati":"296","Korea":"408","Korea":"410","South Korea":"410","Kuwait":"414","Kyrgyzstan":"417","Lao People's Democratic Republic":"418","Latvia":"428","Lebanon":"422","Lesotho":"426","Liberia":"430","Libyan Arab Jamahiriya":"434","Libya":"434","Liechtenstein":"438","Lithuania":"440","Luxembourg":"442","Macao":"446","Macedonia":"807","Madagascar":"450","Malawi":"454","Malaysia":"458","Maldives":"462","Mali":"466","Malta":"470","Marshall Islands":"584","Martinique":"474","Mauritania":"478","Mauritius":"480","Mayotte":"175","Mexico":"484","Micronesia":"583","Moldova":"498","Monaco":"492","Mongolia":"496","Montenegro":"499","Montserrat":"500","Morocco":"504","Mozambique":"508","Myanmar":"104","Burma":"104","Namibia":"516","Nauru":"520","Nepal":"524","Netherlands":"528","Netherlands Antilles":"530","New Caledonia":"540","New Zealand":"554","Nicaragua":"558","Niger":"562","Nigeria":"566","Niue":"570","Norfolk Island":"574","Northern Mariana Islands":"580","Norway":"578","Oman":"512","Pakistan":"586","Palau":"585","Palestinian Territory":"275","Panama":"591","Papua New Guinea":"598","Paraguay":"600","Peru":"604","Philippines":"608","Pitcairn":"612","Poland":"616","Portugal":"620","Puerto Rico":"630","Qatar":"634","Réunion":"638","Romania":"642","Russian Federation":"643","Russia":"643","Rwanda":"646","Saint Helena":"654","Saint Kitts and Nevis":"659","Saint Lucia":"662","Saint Pierre and Miquelon":"666","Saint Vincent and the Grenadines":"670","Saint Vincent & the Grenadines":"670","St. Vincent and the Grenadines":"670","Samoa":"882","San Marino":"674","Sao Tome and Principe":"678","Saudi Arabia":"682","Senegal":"686","Serbia":"688","Seychelles":"690","Sierra Leone":"694","Singapore":"702","Slovakia":"703","Slovenia":"705","Solomon Islands":"090","Somalia":"706","South Africa":"710","South Georgia and the South Sandwich Islands":"239","Spain":"724","Sri Lanka":"144","Sudan":"736","Suriname":"740","Svalbard and Jan Mayen":"744","Swaziland":"748","Sweden":"752","Switzerland":"756","Syrian Arab Republic":"760","Taiwan":"158","Tajikistan":"762","Tanzania":"834","Thailand":"764","Timor-Leste":"626","Togo":"768","Tokelau":"772","Tonga":"776","Trinidad and Tobago":"780","Trinidad & Tobago":"780","Tunisia":"788","Turkey":"792","Turkmenistan":"795","Turks and Caicos Islands":"796","Tuvalu":"798","Uganda":"800","Ukraine":"804","United States Minor Outlying Islands":"581","Uruguay":"858","Uzbekistan":"860","Vanuatu":"548","Venezuela":"862","Vietnam":"704","British Virgin Islands":"092","Virgin Islands":"850","Wallis and Futuna":"876","Yemen":"887","Zambia":"894","Zimbabwe":"716" ] String groupCode = "M49" String exposure =":"+"[HBCTRY]" def dt = "[FUNDDT]" exposure = exposure.substring(0, exposure.length() - 1) exposure = exposure.substring(1, exposure.length()) def exposureList = exposure.split(",") def outputList = new ArrayList<>() double residual = 100d exposureList.eachWithIndex{ it, index -> Double share = (it.split(":").getAt(1).trim()).toDouble().round(6) residual -= share if(index == exposureList.size()-1) share += residual share = share.round(6) outputList << groupCode + ":" + dt + ":" + countries.get(it.split(":").getAt(0).trim()) + "=" + share.toString() } output=','+outputList.join(",") } } ; | |
10 | FUND_ASSET_CLASS_FOCUS | AC | |
11 | ASSET | if((!"[HB_INDUSTRY_SECTOR_ALLOCATION]"?.trim())||("[HB_INDUSTRY_SECTOR_ALLOCATION]"=='N.A.')||("[HB_INDUSTRY_SECTOR_ALLOCATION]"=='')) { output = "" } else { if(services.configurationService.findGroupByCode('ASSET')) { output = "" if("[AC]"=='Fixed Income'||"[AC]"=='Debt') { def sectors =["Mortgage Securities":"35","Asset Backed Securities":"35","Communications":"31","Consumer Cyclical":"32","Consumer Non-cyclical":"33","Energy":"34","Financial":"35","Health Care":"36","Industrial":"37","Basic Materials":"30","Technology":"38","Utilities":"39","Government":"50","Diversified":"99" ] String groupCode = "ASSET" String exposure =":"+"[HBBICSSEC]" def dt = "[FUNDDT]" exposure = exposure.substring(0, exposure.length() - 1) exposure = exposure.substring(1, exposure.length()) def exposureList = exposure.split(",") def outputList = new ArrayList<>() double residual = 100d exposureList.eachWithIndex{ it, index -> Double share = (it.split(":").getAt(1).trim()).toDouble().round(6) residual -= share if(index == exposureList.size()-1) share += residual share = share.round(6) outputList << groupCode + ":" + dt + ":" + sectors.get(it.split(":").getAt(0).trim()) + "=" + share.toString() } output=','+outputList.join(",") } else { def sectors =["Communications":"10","Consumer Cyclical":"11","Consumer Non-cyclical":"12","Energy":"13","Financial":"14","Real Estate":"15","Health Care":"16","Industrial":"17","Basic Materials":"18","Technology":"19","Utilities":"20","Government":"50","Diversified":"99" ] String groupCode = "ASSET" String exposure =":"+"[HBBICSSEC]" def dt = "[FUNDDT]" exposure = exposure.substring(0, exposure.length() - 1) exposure = exposure.substring(1, exposure.length()) def exposureList = exposure.split(",") def outputList = new ArrayList<>() double residual = 100d exposureList.eachWithIndex{ it, index -> Double share = (it.split(":").getAt(1).trim()).toDouble().round(6) residual -= share if(index == exposureList.size()-1) share += residual share = share.round(6) outputList << groupCode + ":" + dt + ":" + sectors.get(it.split(":").getAt(0).trim()) + "=" + share.toString() } output=','+outputList.join(",") } } } ; | |
12 | ISO10962 | output = "" if((!"[CFI]"?.trim())||("[CFI]"=='N.A.')) { output = "" } else { def s = services.securityService.loadSecurityBySecurityCode("[s.securityCode]") def allocationsChanged = true def allocationDate = "2009-01-01" // Any new allocations are set on the specified date if(("[CFI]".substring(0,2)=='EU')) { str='CM' } else { str="[CFI]".substring(0,2) } if(s){ def allocs = s.getAllocationsOnDate(new Date(), "ISO10962") if(allocs && allocs.size() == 1 && allocs.get(0).sector.code == str){ allocationsChanged = false } else if(allocs && allocs.size() == 1 && allocs.get(0).sector.code != str){ // There is an existing allocation that has changed -> the new allocation will be set for this date allocationDate = new Date().format("yyyy-MM-dd") } } if(services.configurationService.findGroupByCode('ISO10962') && allocationsChanged){ output += ",ISO10962:"+ allocationDate +":"+str+"=100" } } ; | |
13 | CURR | output = "" if((!"[s.currency]"?.trim())||("[s.currency]"=='N.A.')) { output = "" } else { def s = services.securityService.loadSecurityBySecurityCode("[s.securityCode]") def allocationsChanged = true def allocationDate = "2009-01-01" // Any new allocations are set on the specified date if(s){ def allocs = s.getAllocationsOnDate(new Date(), "CURR") if(allocs && allocs.size() == 1 && allocs.get(0).sector.code == "[s.currency]"){ allocationsChanged = false } else if(allocs && allocs.size() == 1 && allocs.get(0).sector.code != "[s.currency]"){ // There is an existing allocation that has changed -> the new allocation will be set for this date allocationDate = new Date().format("yyyy-MM-dd") } } if(services.configurationService.findGroupByCode('CURR') && allocationsChanged){ output += ",CURR:"+ allocationDate +":"+"[s.currency]"+"=100" } } ; | |
14 | s.allocations | output="***[ASSET][M49][ISO10962][CURR]" ; | |
15 | FUND_MGR_STATED_FEE | s.managementFeePercentage | |
16 | EQY_SH_OUT_REAL | s.share | |
17 | ID_BB_GLOBAL | s.tradeCode |