FAQ > 金融建模 > 建模问题 > 股票相关

Q:证券代码有变更的代码有哪些?数据如何处理的?    

  • A:目前为止,有发布代码变更公告的证券有如下:
    变更日旧代码旧名称新代码新名称
    20100305SH600849上海医药SH601607上海医药
    20180228SH601313江南嘉捷SH601360三六零
    20181226SZ000022深赤湾ASZ001872招商港口
    20191216SZ000043中航善达SZ001914招商积余

    新旧代码交替后,相关数据的处理:
    旧代码的数据不再更新。
    新代码的如下:
    基本面数据:新代码复制一份旧代码的数据,并持续更新。
    财务数据:新代码复制一份旧代码的数据,并持续更新。
    行情数据:新代码复制一份旧代码的日线行情数据,其他高频的暂不处理。
    回测框架:若持续持有证券的过程中,代码发生变更,框架会自动转出原股份,转入新股份。
    注:用户在给交易明细时,注意根据选股日期给出当时的正确证券代码,如何实现,可参考函数-新旧代码转换(按日期):getTrueStockIDbyDate(StockID,Endt)//获取指定日证券有效代码

    范例1:取一段时间内的60分钟线行情(跨)
        stockid:='SH601360';
        setsysparam(pn_stock(),stockid);
        setsysparam(pn_cycle(),cy_day());
        Tarr:=StockTradeDayQk(20180210T,20180305T);
        setsysparam(pn_cycle(),cy_60m());
        t:=array();
        for i:=0 to length(Tarr)-1 do //一天天取
          t&=select * from markettable datekey Tarr[i] to Tarr[i]+0.99
             of getTrueStockIDbyDate(stockid,Tarr[i]) end;
    return t;


    范例2:回测中的应用,旧代码迁出,新代码迁入,框架自动转换。高频下交易明细用户需正确给出交易的证券代码。
        begt:=20180227T;
        endt:=20180310T;
        obj := createobject('PercentPortfolio');
          //回测开始时间
       obj.FBegT:=begt;
          //回测截止时间
       obj.FEndT:=endt;
          //调仓周期-高频下,由于高频数据新代码没有历史数据,所以需要转代码
       obj.FCycle:=cy_60m();
          //组合类别(数量类组合)
       obj.FGroupType:=2;
          //基准代码
       obj.FIndexId:='SH000300';
          //初始资金
       obj.FIniCash:=1000000;
          //资金配比方式
       obj.FRateType:=-1;
      obj.FCashOption:=0;   //0 不现金对价(默认值),1 现金对价
           //回测
       obj.BackTest();

       return array(
                      //---组合基础
                    "交易明细":obj.GetTradeData(BegT,EndT),
                    "资产配置":obj.GetAssetData(BegT,EndT),
                    "持仓明细":obj.GetHoldData(BegT,EndT)
                    );
    Type PercentPortfolio=class(TSBackTesting)
       function GetTradeOrder(vEndT);override;
       begin
           Stocks:=array('SZ000002','SH600000','SH601360');
           HolD:=  GetHoldData();
           t:=select getTrueStockIDbyDate(thisrow,vEndt) as '代码',1 as '方向',0 as '动作',500 as '成交量'
              from Stocks
              where not (getTrueStockIDbyDate(thisrow,vEndt) in HolD[:,'代码'])
              end;
           return t;
       end;
    End;
    //可通过查看交易明细与持仓明细看出迁入迁出处理过程