Removed references to SharpeRatioRiskAllocation

This commit is contained in:
2025-01-14 12:44:45 -05:00
parent 186eb52840
commit 441b8e97ff

View File

@@ -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,"*******************************************");