예제 #1
0
 protected CommodsMultiScore(ComID[] ccys_, int numDays_)
 {
   NumDays = numDays_;
   ComIndexes = ccys_.Select(x => x.ArrayIndex).ToArray();
   Weights = ccys_.Select(x => _RELATIVE_VOLS[x.Name]).ToArray();
   Refresh(false);
 }
예제 #2
0
    public static ConstructGen<PairTrade> CalculateWeights(ComID[] commodities_)
    {
      // calculate the weighting
      var con = new ConstructGen<PairTrade>(commodities_.Select(x => x.Name).ToArray());

      for (int i = 0; i < con.ArrayLength; ++i)
        con.SetColumnValues(i, CalculateWeights(commodities_[i]));

      if (con.NeedsToSortKeys())
        con.SortKeys();

      return con;
    }
예제 #3
0
    public static ConstructGen<double> DoBW(ComID[] coms_, ConstructGen<PairTrade> pairTrades_)
    {
      var conRets = new ConstructGen<double>(coms_.Select(x => x.Name).ToArray());

      for (int rebalIndex = 0; rebalIndex < pairTrades_.Dates.Count; ++rebalIndex)
      {
        var rebalDate = pairTrades_.Dates[rebalIndex];
        var tradeEndDate = (rebalIndex < (pairTrades_.Dates.Count - 1) ? pairTrades_.Dates[rebalIndex + 1] : DateTime.Today);

        var pairTradesOnDay = pairTrades_.GetValues(rebalDate);

        for (int i = 0; i < pairTradesOnDay.Length; ++i)
        {
          var pairTrade = pairTradesOnDay[i];

          if (pairTrade == null)
            continue;

          var rets = pairTrade.WeightedBackwardation.GetSubValues(rebalDate.AddDays(1d), tradeEndDate);

          rets = rets.DivideBy(pairTrade.GetStdev(rebalDate, 63) * 3000d);

          conRets.SetColumnValues(i, rets);
        }
      }

      conRets.SortKeys();

      conRets = conRets.ProcessEachCell(x => (double.IsNaN(x) || double.IsInfinity(x) || double.IsNegativeInfinity(x) ? 0d : x));

      return conRets;
    }