Skip to main content

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 PreferenceSecuritiesAsset 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