Removed references to SharpeRatioRiskAllocation
This commit is contained in:
@@ -1,14 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using MarketData.MarketDataModel;
|
||||
using MarketData.DataAccess;
|
||||
using MarketData.Utils;
|
||||
using System.Linq;
|
||||
using MarketData.Helper;
|
||||
using MarketData.Numerical;
|
||||
using System.Threading;
|
||||
using MarketData.Integration;
|
||||
using MarketData.Cache;
|
||||
using MarketData.Generator.Model;
|
||||
|
||||
@@ -396,18 +391,7 @@ namespace MarketData.Generator.Momentum
|
||||
if(!ActivePositions.ContainsKey(slotIndex))
|
||||
{
|
||||
Positions positions = null;
|
||||
// if (Configuration.RiskAllocation.Equals(MGConfiguration.RISK_ALLOCATION_SHARPE_RATIO))
|
||||
// {
|
||||
// positions=BuyPositionsWithSharpeRatioRiskAllocation(TradeDate,AnalysisDate,CashBalance/((double)HoldingPeriod-(double)ActivePositions.Count),SymbolsHeld(TradeDate));
|
||||
//// positions = BuyPositionsWithSharpeRatioRiskAllocation(TradeDate, AnalysisDate, CashBalance / ((double)HoldingPeriod - (double)ActivePositions.Count), ActivePositions.SymbolsHeld());
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// positions=BuyPositions(TradeDate,AnalysisDate,CashBalance/((double)HoldingPeriod-(double)ActivePositions.Count),SymbolsHeld(TradeDate));
|
||||
//// positions = BuyPositions(TradeDate, AnalysisDate, CashBalance / ((double)HoldingPeriod - (double)ActivePositions.Count), ActivePositions.SymbolsHeld());
|
||||
// }
|
||||
positions=BuyPositions(TradeDate,AnalysisDate,CashBalance/((double)HoldingPeriod-(double)ActivePositions.Count),SymbolsHeld(TradeDate));
|
||||
// positions = BuyPositions(TradeDate, AnalysisDate, CashBalance / ((double)HoldingPeriod - (double)ActivePositions.Count), ActivePositions.SymbolsHeld());
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, "******************** B U Y ********************");
|
||||
positions.Display();
|
||||
if(CashBalance-positions.Exposure<0.00)
|
||||
@@ -433,17 +417,6 @@ namespace MarketData.Generator.Momentum
|
||||
cashAllocation = Math.Min(CashBalance, (ActivePositions.GetExposure() + CashBalance) / (double)HoldingPeriod);
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("CASH ALLOCATION:{0}",Utility.FormatCurrency(cashAllocation)));
|
||||
Positions positions = null;
|
||||
// if (Configuration.RiskAllocation.Equals(MGConfiguration.RISK_ALLOCATION_SHARPE_RATIO))
|
||||
// {
|
||||
// positions = BuyPositionsWithSharpeRatioRiskAllocation(TradeDate, AnalysisDate, cashAllocation, SymbolsHeld(TradeDate));
|
||||
// // positions=BuyPositionsWithSharpeRatioRiskAllocation(TradeDate,AnalysisDate,cashAllocation,ActivePositions.SymbolsHeld());
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
//// positions = BuyPositions(TradeDate, AnalysisDate, cashAllocation, ActivePositions.SymbolsHeld());
|
||||
// positions=BuyPositions(TradeDate,AnalysisDate,cashAllocation,SymbolsHeld(TradeDate));
|
||||
// }
|
||||
// positions = BuyPositions(TradeDate, AnalysisDate, cashAllocation, ActivePositions.SymbolsHeld());
|
||||
positions=BuyPositions(TradeDate,AnalysisDate,cashAllocation,SymbolsHeld(TradeDate));
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"********************** B U Y ********************");
|
||||
positions.Display();
|
||||
@@ -557,7 +530,7 @@ namespace MarketData.Generator.Momentum
|
||||
else position.CurrentPrice=price.Close;
|
||||
}
|
||||
// ***************************************************************************************************************************************************
|
||||
// *************************************************** B U Y P O S I T I O N S N O R I S K A L L O C A T I O N *******************************
|
||||
// ******************************************************** B U Y P O S I T I O N S *************************************************************
|
||||
// ***************************************************************************************************************************************************
|
||||
private Positions BuyPositions(DateTime tradeDate, DateTime analysisDate, double cash, List<String> symbolsHeld)
|
||||
{
|
||||
@@ -621,102 +594,6 @@ namespace MarketData.Generator.Momentum
|
||||
}
|
||||
return positions;
|
||||
}
|
||||
// ******************************************************************************************************************************************************************
|
||||
// ********************************************** U S E S H A R P E R A T I O F O R P O S I T I O N S I Z I N G ***********************************************
|
||||
// ******************************************************************************************************************************************************************
|
||||
//private Positions BuyPositionsWithSharpeRatioRiskAllocation(DateTime tradeDate, DateTime analysisDate, double cash, List<String> symbolsHeld)
|
||||
//{
|
||||
// MDTrace.WriteLine(LogLevel.DEBUG, "**BUY_POSITIONS_WITH_SHARPE_RATIO_RISK_ALLOCATION**");
|
||||
// Positions positions = new Positions();
|
||||
// if (Configuration.BenchmarkMode) return BuyBenchmarkPositions(tradeDate, cash);
|
||||
// MomentumCandidates momentumCandidates = MomentumGenerator.GenerateMomentum(tradeDate, symbolsHeld, Configuration);
|
||||
// positions = PositonSizingWithSharpeRatioRiskAllocation(momentumCandidates, tradeDate, cash);
|
||||
// if (0 == positions.Count && Configuration.UseFallbackCandidate) // if we don't get any signals then consider the fallback candidate options as per the configuration file
|
||||
// {
|
||||
// String fallbackCandidate = Configuration.FallbackCandidate;
|
||||
// if (null != Configuration.FallbackCandidateBestOf && !"".Equals(Configuration.FallbackCandidateBestOf))
|
||||
// {
|
||||
// QualityIndicator qualityIndicator=new QualityIndicator(Configuration.QualityIndicatorType);
|
||||
// fallbackCandidate=CandidateSelector.SelectBestCandidateSymbol(qualityIndicator,Utility.ToList(Configuration.FallbackCandidateBestOf),Configuration.FallbackCandidate,tradeDate);
|
||||
// }
|
||||
// Price price = GBPriceCache.GetInstance().GetPrice(fallbackCandidate, tradeDate);
|
||||
// if (null == price)
|
||||
// {
|
||||
// MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Cannot locate a price for {0} on {1}", fallbackCandidate, Utility.DateTimeToStringMMHDDHYYYY(tradeDate)));
|
||||
// return positions;
|
||||
// }
|
||||
// Position position = new Position();
|
||||
// position.Symbol = fallbackCandidate;
|
||||
// position.PurchaseDate = tradeDate;
|
||||
// position.PurchasePrice = price.Close;
|
||||
// position.CurrentPrice = price.Close;
|
||||
// position.Shares = (int)Math.Floor(cash / position.PurchasePrice);
|
||||
// positions.Add(position);
|
||||
// }
|
||||
// return positions;
|
||||
//}
|
||||
private Positions PositonSizingWithSharpeRatioRiskAllocation(MomentumCandidates momentumCandidates,DateTime tradeDate,double cash)
|
||||
{
|
||||
Positions positions = new Positions();
|
||||
List<SRRiskAllocation> riskAllocations = new List<SRRiskAllocation>();
|
||||
for (int index = 0; index < momentumCandidates.Count; index++)
|
||||
{
|
||||
MomentumCandidate momentumCandidate = momentumCandidates[index];
|
||||
Price price = GBPriceCache.GetInstance().GetPrice(momentumCandidate.Symbol, tradeDate);
|
||||
if (null == price)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Cannot locate a price for {0} on {1}", momentumCandidate.Symbol, Utility.DateTimeToStringMMHDDHYYYY(tradeDate)));
|
||||
continue;
|
||||
}
|
||||
Position position = new Position();
|
||||
position.Symbol = momentumCandidate.Symbol;
|
||||
position.CumReturn252 = momentumCandidate.CumReturn252;
|
||||
position.IDIndicator = momentumCandidate.IDIndicator;
|
||||
position.Score=momentumCandidate.Score;
|
||||
position.MaxDrawdown = momentumCandidate.MaxDrawdown;
|
||||
position.MaxUpside = momentumCandidate.MaxUpside;
|
||||
position.PE = momentumCandidate.PE;
|
||||
position.Beta = momentumCandidate.Beta;
|
||||
position.ZacksRank = momentumCandidate.ZacksRank;
|
||||
position.Velocity = momentumCandidate.Velocity;
|
||||
position.Volume = momentumCandidate.Volume;
|
||||
position.Return1D = position.Return1D;
|
||||
position.PurchaseDate = tradeDate;
|
||||
position.PurchasePrice = price.Close;
|
||||
position.CurrentPrice = price.Close;
|
||||
position.SharpeRatio = SharpeRatioGenerator.GenerateSharpeRatio(position.Symbol, tradeDate);
|
||||
position.Shares = 0.00;
|
||||
if (double.IsNaN(position.SharpeRatio)||0.00==position.SharpeRatio) continue;
|
||||
//WatchListDA.AddToWatchList(position.Symbol, "Momentum");
|
||||
positions.Add(position);
|
||||
}
|
||||
if (null == positions || 0 == positions.Count) return positions;
|
||||
positions = new Positions(positions.Take(MaxPositions).ToList());
|
||||
double minSharpeRatio = positions.Min(x => x.SharpeRatio);
|
||||
for (int index = 0; index < positions.Count; index++)
|
||||
{
|
||||
Position position = positions[index];
|
||||
SRRiskAllocation riskAllocation = new SRRiskAllocation();
|
||||
riskAllocation.Symbol = position.Symbol;
|
||||
riskAllocation.SharpeRatioBaseOne = minSharpeRatio < 0.00 ? position.SharpeRatio + Math.Abs(minSharpeRatio) + 1.00 : position.SharpeRatio;
|
||||
riskAllocations.Insert(index, riskAllocation);
|
||||
}
|
||||
double sumSharpeRatioBaseOne = riskAllocations.Sum(x => x.SharpeRatioBaseOne);
|
||||
riskAllocations.Select(t => t.Weight = t.SharpeRatioBaseOne/sumSharpeRatioBaseOne).ToList();
|
||||
riskAllocations.Select(t => t.Allocation = t.Weight*cash).ToList();
|
||||
for (int index = 0; index < positions.Count; index++)
|
||||
{
|
||||
Position position = positions[index];
|
||||
SRRiskAllocation riskAllocation = riskAllocations[index];
|
||||
if (!position.Symbol.Equals(riskAllocation.Symbol)) throw new Exception("RiskAllocation items are not in sequence with positions.");
|
||||
position.Shares = Math.Floor(riskAllocation.Allocation/position.PurchasePrice);
|
||||
}
|
||||
positions =new Positions(positions.Where(x => x.Shares > 0).ToList());
|
||||
return positions;
|
||||
}
|
||||
// *********************************************************************************************************************************************************************
|
||||
// ********************************************************* E N D S H A R P E R A T I O R I S K A L L O C A T I O N *****************************************
|
||||
// *********************************************************************************************************************************************************************
|
||||
private Positions BuyBenchmarkPositions(DateTime tradeDate, double cash)
|
||||
{
|
||||
Positions positions = new Positions();
|
||||
@@ -735,7 +612,9 @@ namespace MarketData.Generator.Momentum
|
||||
positions.Add(position);
|
||||
return positions;
|
||||
}
|
||||
// ***********************************************************************************************************************************************************
|
||||
// *********************************************************************************************************************************************************************
|
||||
// ************************************************************ E N D B U Y P O S I T I O N S ***********************************************
|
||||
// *********************************************************************************************************************************************************************
|
||||
private void DisplayBalance()
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,"*******************************************");
|
||||
|
||||
Reference in New Issue
Block a user