Для загрузки котировок и сделок с Московской Биржи необходимо добавить коды в Справочники Навигатора

Пошаговое руководство

Для загрузки необходимо выполнить предварительные условия: 

  1. Настроить тип Кода Инструменты для внешней системы Московская Биржа;
  2. Загрузить котировки через Адаптер StoregeApp. 

После этого выполните скрипт:

declare
    vEntityId       number;
    vEntityShort    varchar2(3);
    vPriceInsrument number;
    vPriceShort     VARCHAR2(3);
    vMaturity       number;
    vMatName1       varchar2(3);
    vMatName2       varchar2(16);
    vCodeValue      varchar2(64);
    vTypeId         number;
    vProductId      number;
    vUnderLinePos   number;
begin
    vTypeId := pkg_codes.f_get_codetype(
         pcodescheme => NULL
        ,pext_system_id => 3 -- ID MICEX EXT_SYSTEMS
        ,pobj_type_id => pkg_object.POBJ_CONST_INSTR_PAY
        ,pcode_aliase => NULL
        ,powner_id => null);
    for cur in (select distinct vq.instrument_short shortname
                from KIP.vw_quotations vq 
                where vq.market_place_code = 'MICEX' 
                    and vq.trading_place_short in ('CETS','CNGD'))
    loop
        vMatName1 := null;
        vMatName2 := null;
        vcodevalue := cur.shortname;
        vEntityShort    := substr(cur.shortname,1,3);
        IF vEntityShort = 'GLD' THEN
            vEntityShort := 'XAU';
        ELSIF vEntityShort = 'SLV' THEN
            vEntityShort := 'ARG';
        END IF;
        vEntityId       := f_ccy_instrument(pccy=>vEntityShort);
        vPriceInsrument := f_ccy_instrument(pccy=>substr(cur.shortname,4,3));
        IF substr(cur.shortname,4,3) = '000' THEN
            vPriceInsrument := f_ccy_instrument(pccy=>'RUB');
        END IF;
        vUnderLinePos := instr(cur.shortname,'__');
        IF vUnderLinePos = 0 THEN 
            vUnderLinePos := instr(cur.shortname,'_');
        END IF;
        IF instr(cur.shortname,'000000') > 0 
            --OR instr(cur.shortname,'__') > 0
            OR length (substr(cur.shortname,vUnderLinePos+1,length(cur.shortname)))=3
            OR length (substr(cur.shortname,instr(cur.shortname,'000'),length(cur.shortname)))=3
        THEN
            vProductId := pkg_products.fx_id;
        ELSE 
            vProductId := pkg_products.fx_swap_id;
        END IF; -- __
        
        IF vUnderLinePos > 0 THEN
            vMatName1 := substr(cur.shortname,vUnderLinePos+1,3);
        END IF;
        
        IF vproductid = pkg_products.fx_swap_id THEN
            IF instr(cur.shortname, 'TODTOM') > 0 then
                vMatName2 := 'OVERNIGHT';
                select max(id) into vMaturity from maturity_classes where maturity_type = 'PERIOD' and maturity_title = vMatName2; 
            ELSE
                 vMatName2 := substr(cur.shortname,length(cur.shortname)-1,2);
                 select max(id) into vMaturity from maturity_classes where maturity_type = 'DATE' and substr(maturity_title,1,2) = vMatName2;
            END IF;
            
        ELSE
            IF vMatName1 is null then
                vMatName1 := substr(cur.shortname,length(cur.shortname)-2,3);
            END IF;
            select max(id) into vMaturity from maturity_classes where maturity_type = 'DATE' and substr(maturity_title,1,3) = vMatName1;
        END IF;
        IF ventityid is not null and vTypeId is not null and vProductId is not null and vPriceInsrument is not null then
            begin
                insert into codes (entity_id,type_id,code_value,product_id,maturity_class,price_instrument)
                    values(ventityid,vTypeId,vcodevalue,vProductId,vMaturity,vPriceInsrument);
            
                DBMS_OUTPUT.put_line('Entity '||ventityid||' vTypeId '||vTypeId ||' vcodevalue '|| vcodevalue ||'vProductId '|| vProductId  ||' vMaturity '||vMaturity);
            exception when others then
                null;
            END;
        end if;
    end loop;
end;
/

После выполнения скрипта через интерфейс справочника Навигатора проверьте корректность автоматически заполненных кодов

Конвертация кодов финансовых инструментов MICEX в коды торговых(рыночных) инструментов

С версии Навигатора 7.1 коды финансовых инструментов системы MICEX будут с конвертированы в коды Торговых Инструментов

Алгоритм конвертации: 

  1. Берется стандартная URL схема 'bank/micex/instruments/' кодов MICEX, в противном случае будет выбран первый тип сущности, который попадает под определение финансового инструмента. 
  2. Производится конвертация по выбранным  из кодов инструментам, цены которых есть в Рынке навигатора.
  3. По результатам конвертации создается: 
    1. Рыночный инструмент, который включает в себя режим торгов по которым поступали цены в Навигатор
    2. По каждому режиму торгов создается отдельный тип кода:"Торговый инструмент" с перечнем с конвертированных рыночных инструментов с определенной маской в названием схемы:  "bank/Внешняя система/Биржа/режим торгов/instrument_market_id"
    3. Пример названия схемы нового типа кодов "Торговый инструмент" после конвертации: 

      bank/micex/moex/tqdb/instrument-market-id
  4. Поступающие цены по котировкам MICEX будут обрабатываться по URL адресу схемы, который получился в ходе конвертации. 


Примечание

Новые типы кодов сущности "Торговый инструмент" появятся и для остальных внешних систем, в ходе загрузки цен. Это штатное поведение системы. Подробнее можно прочитать в документации "Коды" в разделе "Торговый инструмент".

К примеру: Загрузка курсов ЦБ("bank/nationalbank/cbr/cb_rates/instrument-market-id")