www.gusucode.com > trading工具箱matlab源码程序 > trading/trading/@krg/timingRisk.m

    function tr = timingRisk(k,tradeData)
%TIMINGRISK Market impact cost estimate uncertainty.
%   TR = TIMINGRISK(K,TRADEDATA) calculates the uncertainty of the market 
%   impact cost estimate.    K is the KRG object and TRADEDATA
%   is the order data.
%
%   For example,
%
%   tradeData = 
% 
%     Symbol    Side    Shares     Size    Price         ADV         Volatility    POV 
%     ______    ____    _______    ____    ______    ____________    __________    ____
% 
%     'IBM'     1         41742    0.01    162.72         4174150    0.196456       0.1
%     'MSFT'    1       1380889    0.05     48.19    2.761778e+07    0.195524       0.2
%     'AAPL'    1       4588737     0.1     115.5    4.588737e+07    0.219272      0.05
%     'HSNI'    1         49455    0.15     72.58          329700     0.23793      0.15
%     'GE'      1       5626336     0.2    26.371    2.813168e+07    0.150651       0.3
%
%   tr = timingRisk(k,tradeData)
%
%   tr = 
% 
%      21.5207
%      31.9289
%     110.3645
%      80.0992
%      37.5790
%
%   See also krg, iStar, marketImpact, priceAppreciation.

%   Copyright 2016 The MathWorks, Inc.

% Determine if Size or Shares/ADV and POV or TradeTime given
[sizeFlag,povFlag,timeFlag,tsvpFlag] = krg.krgDataFlags(tradeData);
      
% Use Size or derive from Shares/ADV
if sizeFlag
  Size = tradeData.Size;
else
  Size = tradeData.Shares ./ tradeData.ADV;
end

% Use POV, derive from Size and TradeTime or use TradeSchedule
if povFlag
  POV = tradeData.POV;
elseif timeFlag
  POV = Size ./ (tradeData.TradeTime + Size);
elseif tsvpFlag
  Residuals = flip(cumsum(flip(tradeData.TradeSchedule(:))));
  ArrivalValue = sum(tradeData.TradeSchedule) .* tradeData.Price;
  DayTime = sum(tradeData.VolumeProfile) ./ tradeData.ADV;
  TradePeriods = length(tradeData.TradeSchedule);

  % volatility is first defined in terms of variance expressed in dollars per share per trade period
  VarianceDpsPp = tradeData.Volatility.^2 * 1/k.TradeDaysInYear * DayTime * 1/TradePeriods * tradeData.Price^2; 
  
end

% Timing Risk Calculation
if tsvpFlag
  tr = sqrt(sum(Residuals.^2).* VarianceDpsPp) / ArrivalValue * 10000;
else
  tr = tradeData.Volatility .* sqrt(1/3*1/k.TradeDaysInYear .* ...
     (Size.*(1-POV)./POV) ) .* 10000;
end