Disclaimer
In order to reproduce the sample below, you will need to have valid credentials for DataScope Select. The source code in this article was simplified for illustration purposes, you can find the full project here.
Overview
The Securities and Futures Commission (SFC) and the Hong Kong Monetary Authority (HKMA) have received an increasing number of enquiries from intermediaries about distributing virtual asset1 -related products2 (VA-related products) to investors. Intermediaries are also interested in providing virtual asset dealing services3 to their clients.
The Hong Kong Securities and Futures Commission (SFC) issued a statement drawing attention to the risks associated with investing in non-fungible tokens (NFTs) and summarizing the legal and regulatory requirements applicable to NFTs.
This follows recent guidance from Hong Kong’s banking, securities, and insurance regulators to financial institutions looking to undertake virtual asset activities
In this article we would like to briefly explain the details about the Joint circular on intermediaries’ virtual asset-related activities and the DataScope Solutions that we offer.
On January 28, 2022, the Securities and Futures Commission (“SFC”) and the Hong Kong Monetary Authority (“HKMA”) issued a “Joint Circular on Intermediaries’ Virtual Asset Related Activities” (“2022 Crypto Regulation Circular”). This circular sets out the approach to regulating the distribution of crypto assets, comprising of what the circular calls “virtual assets” and “virtual asset related products”, as well as the provision of dealing and advisory services in respect of such assets. In this article, we provide an overview of the updated requirements and the data offerings that we provide in DataScope.
Read more: Joint circular on intermediaries’ virtual asset-related activities
“Virtual assets” refers to digital representations of value which may be in the form of digital tokens (such as utility tokens, stablecoins or security- or asset-backed tokens) or any other virtual commodities, crypto assets or other assets of essentially the same nature, irrespective of whether or not they amount to “securities” or “futures contracts” as defined under the Securities and Futures Ordinance (SFO), but excludes digital representations of fiat currencies issued by central banks.
Newer digital assets are based on blockchain or similar technologies:
- Nonfungible tokens
- Cryptocurrency
- Tokens
- Crypto Assets
- Tokenized Assets
- Security Tokens
- Central Bank Digital Currencies
Regulatory Requirement & End User Impact:
Complex product regime:
- Sustainability
- Information &
- Warning statement.
Additional investor protection measure under circular:
- Selling restrictions.
- Virtual asset knowledge.
Clients impacted:
- Retain investors.
- Intermediaries like private banks & equity brokers.
- Global / regional remit
The LSEG DataScope Solutions
- A list of securities with Virtual Assets as underlying will be provided.
- The below mentioned solutions will scan your complete portfolio / instrument lists through data source for funds as well as exchange traded products
- Global exchanges or custom list of exchanges based on clients’ requirements.
We are going to use a csv file as an input, which will consist of two columns:
- Security identifier type: CHR (ChainRIC), ISN (ISIN), CSP (CUSIP) or SED (SEDOL) or RIC (RIC) or File Code (IPC)
- Security identifier
So, in our case, the file companies.csv will look like this:
RIC,0863.HK
RIC,FDIG.O
RIC,3171.HK
RIC,BITS.O
RIC,BTCR.K
IPC,1
IPC,81
IPC,1272
With this input file, we will get the following list of fields from DataScope Select.
- RBC Classification.
- Security Description.
- Blockchain Flag (For Funds)
- Cryptoasset Indicator Flag
- Cryptocurrency Flag (For Funds)
Fields | Asset | Description |
---|---|---|
Blockchain Flag |
|
y/n/null flag that indicates if fund assets are linked to blockchain technologies. |
Cryptoasset Flag |
|
y/null flag. Indicates whether the instruments is related to cryptocurrencies. For example, equities issued by companies in the crypto industry, derivatives with cryptocurrencies as underlying’s, exchange-traded products/funds invested in or tracks the performance of the cryptocurrencies. |
Cryptocurrency Flag |
|
y/n/null flag that indicates if fund assets are linked to cryptocurrencies directly or indirectly (companies involved in servicing crypto-asset markets, including crypto mining firms, crypto mining equipment suppliers, crypto financial services companies, or other financial institutions servicing primarily crypto-related clients). |
We are going to use the following DataScope Select templates:
- Terms and Conditions
Thus, we are going to establish a connection to DataScope Select, read the companies.csv input file, then extract these fields from terms and conditions report template within DataScope Select.
Code
Prerequisites
In order to start working with the DataScope Select .NET SDK you will need to download the latest SDK, extract it, copy the following files into your solution folder and reference them in your IDE:
- Microsoft.OData.Client.dll
- Microsoft.OData.Core.dll
- Microsoft.OData.Edm.dll
- Microsoft.Spatial.dll
- Newtonsoft.Json.dll
- DataScope.Select.Core.RestApi.Common.dll
- DataScope.Select.RestApi.Client.dll
For more information on how to install the SDK have a look at the DSS .NET SDK tutorial 1.
Connecting to the server
Firstly, we need to establish a connection to DataScope Select host and get a token.
DssClient dssClient = new DssClient();
dssClient.ConnectToServer(dssUserName.Value, dssPassword.Value);
Console.WriteLine("\nReturned session token: {0}\n",dssClient.SessionToken);
...
...
class DssClient
{
private ExtractionsContext extractionsContext;
private Uri dssUri = new Uri("https://selectapi.datascope.refinitiv.com/RestApi/v1/");
public void ConnectToServer(string dssUserName, string dssUserPassword)
{
extractionsContext = new ExtractionsContext(dssUri, dssUserName, dssUserPassword);
}
public string SessionToken
{
//The session token is only generated if the server connection is successful.
get { return extractionsContext.SessionToken; }
}
...
}
The code sends the HTTP POST request message with the username and password to the https://selectapi.datascope.refinitiv.com/RestApi/v1/Authentication/RequestToken endpoint.
{
"Credentials": {
"Username": <dss-user>,
"Password": <dss-password>
}
}
If the credential is valid, the HTTP response will contain a token.
{
"@odata.context": "https://selectapi.datascope.refinitiv.com/RestApi/v1/$metadata#Edm.String",
"value": "_i4exu5DBe-13t648x4WK93FkHUUU3cNj1cuULCQS-xJhkHLIsrjKAEt4qU8..."
}
Reading the input file
Once the connection to the host is established, our app will read the companies.csv input file, parse it and create an InstrumentIdentifier list.
...
...
List<InstrumentIdentifier> instrumentIdentifiersList =
PopulateInstrumentIdentifiersListFromFile(inputFileName.Value, errorFile);
...
...
private List<InstrumentIdentifier> PopulateInstrumentIdentifiersListFromFile(
string instrumentIdentifiersInputFile, string errorOutputFile)
{
StreamReader sr = new StreamReader(instrumentIdentifiersInputFile);
List<InstrumentIdentifier> instrumentIdentifiersList = new List<InstrumentIdentifier>();
...
bool endOfFile = false;
while (!endOfFile)
{
Errors errorCode = Errors.NoError;
fileLine = sr.ReadLine();
...
//Parse the file line to extract the comma separated instrument type and code:
if (errorCode == Errors.NoError && !endOfFile)
{
commaExistsInFileLine = (fileLine.IndexOf(",") >= 0);
if (commaExistsInFileLine)
{
string[] splitLine = fileLine.Split(new char[] { ',' });
identifierTypeString = splitLine[0];
identifierCodeString = splitLine[1];
}
else
{
errorCode = Errors.BadLineFormat; //Missing comma
identifierTypeString = string.Empty;
identifierCodeString = string.Empty;
}
}
...
if (errorCode == Errors.NoError && !endOfFile)
{
//DSS can handle many types, here we only handle a subset:
switch (identifierTypeString)
{
case "CHR": identifierType = IdentifierType.ChainRIC; break;
case "CSP": identifierType = IdentifierType.Cusip; break;
case "ISN": identifierType = IdentifierType.Isin; break;
case "RIC": identifierType = IdentifierType.Ric; break;
case "SED": identifierType = IdentifierType.Sedol; break;
case "IPC": identifierType = IdentifierType.FileCode;break;
default: errorCode = Errors.UnknownIdentifier; break;
}
}
if (errorCode == Errors.NoError && !endOfFile)
{
//Add validated instrument identifier into our list:
instrumentIdentifiersList.Add(new InstrumentIdentifier
{
IdentifierType = identifierType,
Identifier = identifierCodeString
});
Console.WriteLine("Line " + fileLineNumber + ": " +
identifierTypeString + " " + identifierCodeString + " loaded into array [" + i + "]");
i++;
}
...
}
...
return instrumentIdentifiersList;
}
Creating an array of field names
We are going to extract the following fields from the Terms And Conditions report template.
- RIC
- Ticker
- File Code
- Exchange Code
- Blockchain Flag
- Cryptoasset Flag
- Cryptocurrency Flag
- Asset SubType
- Asset SubType Description
- Refinitiv Classification Scheme
- Refinitiv Classification Scheme Description
Thus, we create an array of these field names.
...
string[] requestedFieldNames = CreateRequestedFieldNames();
...
...
private string[] CreateRequestedFieldNames()
{
string[] requestedFieldNames = {
"RIC",
"Ticker",
"File Code",
"Exchange Code",
"Blockchain Flag",
"Cryptoasset Flag",
"Cryptocurrency Flag",
"Asset SubType",
"Asset SubType Description",
"Refinitiv Classification Scheme",
"Refinitiv Classification Scheme Description"
};
return requestedFieldNames;
}
Extracting Data
Now, we have an instrument list and an array of fields. Let us use the TermsAndConditionsExtractionRequest object to extract data for all instruments.
...
ExtractionResult extractionResult =
dssClient.CreateAndRunTandCExtraction(instrumentIdentifiersList.ToArray(), requestedFieldNames);
...
class DssClient
{
...
public ExtractionResult CreateAndRunTandCExtraction(
InstrumentIdentifier[] instrumentIdentifiers, string[] contentFieldNames)
{
TermsAndConditionsExtractionRequest extractionTandC = new TermsAndConditionsExtractionRequest
{
IdentifierList = InstrumentIdentifierList.Create(instrumentIdentifiers),
ContentFieldNames = contentFieldNames,
};
return extractionsContext.ExtractWithNotes(extractionTandC);
}
...
}
The code sends the HTTP POST request message with the following content in the body to the https://selectapi.datascope.refinitiv.com/RestApi/v1/Extractions/ExtractWithNotes endpoint.
{
"ExtractionRequest": {
"@odata.type": "#DataScope.Select.Api.Extractions.ExtractionRequests.TermsAndConditionsExtractionRequest",
"ContentFieldNames": [
"RIC",
"Ticker",
"File Code",
"Exchange Code",
"Blockchain Flag",
"Cryptoasset Flag",
"Cryptocurrency Flag",
"Asset SubType",
"Asset SubType Description",
"Refinitiv Classification Scheme",
"Refinitiv Classification Scheme Description"
],
"IdentifierList": {
"@odata.type": "#DataScope.Select.Api.Extractions.ExtractionRequests.InstrumentIdentifierList",
"InstrumentIdentifiers": [
{
"Identifier": "0863.HK",
"IdentifierType": "Ric"
},
{
"Identifier": "FDIG.O",
"IdentifierType": "Ric"
},
{
"Identifier": "3171.HK",
"IdentifierType": "Ric"
},
{
"Identifier": "BITS.O",
"IdentifierType": "Ric"
},
{
"Identifier": "BTCR.K",
"IdentifierType": "Ric"
},
{
"Identifier": "1",
"IdentifierType": "FileCode"
},
{
"Identifier": "81",
"IdentifierType": "FileCode"
},
{
"Identifier": "1272",
"IdentifierType": "FileCode"
}
]
}
}
}
The raw HTTP response contiains the extracted data and the Notes information.
{
"@odata.context": "https://selectapi.datascope.refinitiv.com/RestApi/v1/$metadata#DataScope.Select.Api.Extractions.ExtractionRequests.ExtractionResult",
"Contents": [
{
"IdentifierType": "Ric",
"Identifier": "0863.HK",
"RIC": "0863.HK",
"Ticker": "863",
"File Code": "1",
"Exchange Code": "HKG",
"Blockchain Flag": null,
"Cryptoasset Flag": "Y",
"Cryptocurrency Flag": null,
"Asset SubType": "ODSH",
"Asset SubType Description": "Ordinary shares",
"Refinitiv Classification Scheme": "ORD",
"Refinitiv Classification Scheme Description": "Ordinary Shares"
},
{
"IdentifierType": "Ric",
"Identifier": "FDIG.O",
"RIC": "FDIG.O",
"Ticker": "FDIG",
"File Code": "81",
"Exchange Code": "NMQ",
"Blockchain Flag": null,
"Cryptoasset Flag": "Y",
"Cryptocurrency Flag": null,
"Asset SubType": "CDFN",
"Asset SubType Description": "Closed Fund",
"Refinitiv Classification Scheme": "ETFE",
"Refinitiv Classification Scheme Description": "Equity ETFs"
},
{
"IdentifierType": "Ric",
"Identifier": "3171.HK",
"RIC": "3171.HK",
"Ticker": "3171",
"File Code": "1",
"Exchange Code": "HKG",
"Blockchain Flag": null,
"Cryptoasset Flag": "Y",
"Cryptocurrency Flag": null,
"Asset SubType": "CDFN",
"Asset SubType Description": "Closed Fund",
"Refinitiv Classification Scheme": "ETFE",
"Refinitiv Classification Scheme Description": "Equity ETFs"
},
{
"IdentifierType": "Ric",
"Identifier": "BITS.O",
"RIC": "BITS.O",
"Ticker": "BITS",
"File Code": "81",
"Exchange Code": "NMQ",
"Blockchain Flag": null,
"Cryptoasset Flag": "Y",
"Cryptocurrency Flag": null,
"Asset SubType": "CDFN",
"Asset SubType Description": "Closed Fund",
"Refinitiv Classification Scheme": "ETFE",
"Refinitiv Classification Scheme Description": "Equity ETFs"
},
...
...
],
"Notes": [
"Extraction Services Version 16.1.44123 (ed92f5e3e332), Built Aug 10 2022 01:59:20\r\nProcessing started at 08/25/2022 08:35:42.\r\nUser ID: 9008895\r\nExtraction ID: 609753892\r\nCorrelation ID: CiD/9008895/AAAAAA.082474c88f3e280b/RA/EXT.609753892\r\nSchedule: _OnD_0x082474c88f4e280b (ID = 0x082474c8917e280b)\r\nInput List (8 items): _OnD_0x082474c88f4e280b (ID = 082474c88fee280b) Created: 08/25/2022 08:35:40 Last Modified: 08/25/2022 08:35:41\r\nDelisted RICs are not included in the file code expansion.\r\nDuplicate RIC 3171.HK for file code 1 ignored.\r\nDuplicate RIC 0863.HK for file code 1 ignored.\r\nFile code 1 expanded to 2882 RICS: 0001.HK to 9999.HK.\r\nDuplicate RIC FDIG.O for file code 81 ignored.\r\nDuplicate RIC BITS.O for file code 81 ignored.\r\nFile code 81 expanded to 1553 RICS: AACG.O to ZYNE.O.\r\nDuplicate RIC BTCR.K for file code 1272 ignored.\r\nFile code 1272 expanded to 1944 RICS: AAA to ZZV.\r\nTotal instruments after instrument expansion = 6379\r\nSchedule Time: 08/25/2022 08:35:41\r\nReport Template (17 fields): _OnD_0x082474c88f4e280b (ID = 0x082474c88f5e280b) Created: 08/25/2022 08:35:40 Last Modified: 08/25/2022 08:35:40\r\nProcessing completed successfully at 08/25/2022 08:35:55, taking 13.9 Secs.\r\nExtraction finished at 08/25/2022 07:35:55 UTC, with servers: x01E04, QSDHA1 (0.0 secs), QSHC19 (1.6 secs)\r\nUsage Summary for User 9008895, Client 65507, Template Type Terms and Conditions\r\nBase Usage\r\n Instrument Instrument Terms Price\r\n Count Type Subtype Source Source\r\n------- ----------------------------------- ---------------------------- -------------- ----------------------------------------\r\n 6379 Equities N/A N/A\r\n-------\r\n 6379 Total instruments charged.\r\n 0 Instruments with no reported data.\r\n=======\r\n 6379 Instruments in the input list.\r\nWriting RIC maintenance report.\r\n",
"Identifier,IdentType,Source,RIC,RecordDate,MaintType,OldValue,NewValue,Factor,FactorType\r\n0018.HK,RIC,HKG,0018.HK,08/23/2022,SPLT,,,.957746,\r\n0125.HK,RIC,HKG,0125.HK,08/24/2022,SPLT,,,.985849,\r\n0151.HK,RIC,HKG,0151.HK,08/25/2022,SPLT,,,.961631,\r\n0630.HK,RIC,HKG,0630.HK,08/22/2022,SPLT,,,5,\r\n0880.HK,RIC,HKG,0880.HK,08/19/2022,SPLT,,,.937294,\r\n1559.HK,RIC,HKG,1559.HK,08/17/2022,SPLT,,,.981818,\r\n3893.HK,RIC,HKG,3893.HK,08/23/2022,SPLT,,,10,\r\n8079.HK,RIC,HKG,8079.HK,08/18/2022,SPLT,,,.830601,\r\nEMBK.O,RIC,NMQ,EMBK.O,08/17/2022,SPLT,,,20,\r\nGCT.O,RIC,NMQ,GCT.O,08/18/2022,FLCH,118,81,,\r\nPFIN.O,RIC,NMQ,PFIN.O,08/19/2022,SPLT,,,.991438,\r\n"
]
}
Parsing and displaying content
The .NET function returns the ExtractionResult object which contains extracted data and Notes information. The following code is used to parse and display the data and Noted information. Moreover, the extracted data is written to an output file (output.csv).
...
DssCollection<ExtractionRow> extractionDataRows = extractionResult.Contents;
DisplayExtractedDataFieldNames(extractionDataRows);
DisplayExtractedDataFieldValues(extractionDataRows);
DisplayExtractionNotes(extractionResult);
...
private void DisplayExtractedDataFieldNames(DssCollection<ExtractionRow> extractionDataRows)
{
StreamWriter sw = new StreamWriter(outputFileName.Value, true);
StringBuilder returnedFieldNames = new StringBuilder();
ExtractionRow firstRow = extractionDataRows.First();
foreach (string fieldName in firstRow.DynamicProperties.Keys)
{
returnedFieldNames.Append(fieldName);
returnedFieldNames.Append(",");
}
sw.WriteLine(returnedFieldNames.ToString());
DebugPrintAndWaitForEnter("Returned list of field names:\n" + returnedFieldNames.ToString());
sw.Close();
}
//Extract the actual data values, from all rows of returned data:
private void DisplayExtractedDataFieldValues(DssCollection<ExtractionRow> extractionDataRows)
{
StreamWriter sw = new StreamWriter(outputFileName.Value, true);
string rowValuesInString = string.Empty;
int validDataRows = 0;
foreach (ExtractionRow row in extractionDataRows)
{
IEnumerable<object> rowValues = row.DynamicProperties.Select(dp => dp.Value);
rowValuesInString = String.Join(", ", rowValues);
if (rowValuesInString != string.Empty)
{
Console.WriteLine(rowValuesInString);
sw.WriteLine(rowValuesInString);
validDataRows++;
}
}
sw.Close();
}
//Display the extraction notes:
private void DisplayExtractionNotes(ExtractionResult extractionResult)
{
Console.WriteLine("Extraction Notes:");
Console.WriteLine("=================");
foreach (string note in extractionResult.Notes)
Console.WriteLine(note);
}
Run the example
The example accepts four optional parameters.
Usage:
-u, --username[optional]... DSS Username
-p, --password[optional]... DSS Password
-i, --input[optional]... Input CSV file name (companies.csv)
-o, --output[optional]... Output file name (output.csv)
The output when running the example is:
Returned session token: _QITEBR0PiIKkGQpcmNgsEZVnr...
Line 1: RIC 0863.HK loaded into array [0]
Line 2: RIC FDIG.O loaded into array [1]
Line 3: RIC 3171.HK loaded into array [2]
Line 4: RIC BITS.O loaded into array [3]
Line 5: RIC BTCR.K loaded into array [4]
Line 6: IPC 1 loaded into array [5]
Line 7: IPC 81 loaded into array [6]
Line 8: IPC 1272 loaded into array [7]
Extract the following fields:
RIC
Ticker
File Code
Exchange Code
Blockchain Flag
Cryptoasset Flag
Cryptocurrency Flag
Asset SubType
Asset SubType Description
Refinitiv Classification Scheme
Refinitiv Classification Scheme Description
Extracting TermsAndConditionsExtractionRequest...
Extraction Completed:
Returned list of field names:
RIC,Ticker,File Code,Exchange Code,Blockchain Flag,Cryptoasset Flag,Cryptocurrency Flag,Asset SubType,Asset SubType De
scription,Refinitiv Classification Scheme,Refinitiv Classification Scheme Description,
Press Enter to continue
Returned field values:
======================
0863.HK, 863, 1, HKG, , Y, , ODSH, Ordinary shares, ORD, Ordinary Shares
FDIG.O, FDIG, 81, NMQ, , Y, , CDFN, Closed Fund, ETFE, Equity ETFs
3171.HK, 3171, 1, HKG, , Y, , CDFN, Closed Fund, ETFE, Equity ETFs
BITS.O, BITS, 81, NMQ, , Y, , CDFN, Closed Fund, ETFE, Equity ETFs
BTCR.K, BTCR, 1272, PCQ, , Y, , CDFN, Closed Fund, ETFE, Equity ETFs
0001.HK, 1, 1, HKG, , , , ODSH, Ordinary shares, ORD, Ordinary Shares
0002.HK, 2, 1, HKG, , , , ODSH, Ordinary shares, ORD, Ordinary Shares
...
...
Extraction completed.
Number of data rows: 6379
Number of valid (non empty) data rows: 6379
Output was also written to file.
Press Enter to continue
Extraction Notes:
=================
Extraction Services Version 16.1.44123 (ed92f5e3e332), Built Aug 10 2022 01:59:20
Processing started at 08/25/2022 10:02:39.
User ID: 9008895
Extraction ID: 609768162
Correlation ID: CiD/9008895/p8oikQ.082448de0ace27ed/RA/EXT.609768162
Schedule: _OnD_0x082448de0ade27ed (ID = 0x082448de0d1e27ed)
Input List (8 items): _OnD_0x082448de0ade27ed (ID = 082448de0b7e27ed) Created: 08/25/2022 10:02:37 Last Modified: 08/2
5/2022 10:02:37
Delisted RICs are not included in the file code expansion.
Duplicate RIC 3171.HK for file code 1 ignored.
Duplicate RIC 0863.HK for file code 1 ignored.
File code 1 expanded to 2882 RICS: 0001.HK to 9999.HK.
Duplicate RIC FDIG.O for file code 81 ignored.
Duplicate RIC BITS.O for file code 81 ignored.
File code 81 expanded to 1553 RICS: AACG.O to ZYNE.O.
Duplicate RIC BTCR.K for file code 1272 ignored.
File code 1272 expanded to 1944 RICS: AAA to ZZV.
Total instruments after instrument expansion = 6379
Schedule Time: 08/25/2022 10:02:38
Report Template (17 fields): _OnD_0x082448de0ade27ed (ID = 0x082448de0afe27ed) Created: 08/25/2022 10:02:37 Last Modif
ied: 08/25/2022 10:02:37
Processing completed successfully at 08/25/2022 10:02:49, taking 10.2 Secs.
Extraction finished at 08/25/2022 09:02:49 UTC, with servers: x04t02, QSDHA1 (0.0 secs), QSHC15 (0.5 secs)
Usage Summary for User 9008895, Client 65507, Template Type Terms and Conditions
Base Usage
Instrument Instrument Terms Price
Count Type Subtype Source Source
------- ----------------------------------- ---------------------------- -------------- ------------------------------
----------
6379 Equities N/A N/A
-------
6379 Total instruments charged.
0 Instruments with no reported data.
=======
6379 Instruments in the input list.
Writing RIC maintenance report.
Identifier,IdentType,Source,RIC,RecordDate,MaintType,OldValue,NewValue,Factor,FactorType
0018.HK,RIC,HKG,0018.HK,08/23/2022,SPLT,,,.957746,
0125.HK,RIC,HKG,0125.HK,08/24/2022,SPLT,,,.985849,
0151.HK,RIC,HKG,0151.HK,08/25/2022,SPLT,,,.961631,
0630.HK,RIC,HKG,0630.HK,08/22/2022,SPLT,,,5,
0880.HK,RIC,HKG,0880.HK,08/19/2022,SPLT,,,.937294,
1559.HK,RIC,HKG,1559.HK,08/17/2022,SPLT,,,.981818,
3893.HK,RIC,HKG,3893.HK,08/23/2022,SPLT,,,10,
8079.HK,RIC,HKG,8079.HK,08/18/2022,SPLT,,,.830601,
AIRS.O,RIC,NMQ,AIRS.O,08/25/2022,SPLT,,,.958544,
EMBK.O,RIC,NMQ,EMBK.O,08/17/2022,SPLT,,,20,
GCT.O,RIC,NMQ,GCT.O,08/18/2022,FLCH,118,81,,
PFIN.O,RIC,NMQ,PFIN.O,08/19/2022,SPLT,,,.991438,
Press Enter to continue
Press any key to continue . . .
Summary
DataScope Select provides fields that indicate if the instruments are related or linked to cryptocurrencies or blockchain technologies. These fields are available in the Terms And Conditions report template which can be extracted via DataScope Select Web GUI and DataScope Select REST API. This article explains the details of the Joint circular on intermediaries’ virtual asset-related activities and the DataScope Solutions that we offer. It also provides the example that uses DataScope Select .NET SDK to extract this information from DataScope Select.
References
- Apps.sfc.hk. 2022. Joint circular on intermediaries’ virtual asset-related activities. [online] Available at: <https://apps.sfc.hk/edistributionWeb/gateway/EN/circular/doc?refNo=22EC9> [Accessed 31 August 2022].
- Apps.sfc.hk. 2022. SFC reminds investors of risks associated with non-fungible tokens. [online] Available at: <https://apps.sfc.hk/edistributionWeb/gateway/EN/news-and-announcements/news/doc?refNo=22PR34> [Accessed 31 August 2022].