从山证v2.3.0拷贝

This commit is contained in:
吴方海
2024-05-09 14:06:26 +08:00
parent 566ff33259
commit f9d8a256a6
4471 changed files with 1203456 additions and 9 deletions
@@ -0,0 +1,86 @@
namespace YLErp.Modules.ScenarioModule
{
/// <summary>
/// 情景分析API请求
/// </summary>
public class ScenarioCalcApiRequest
{
/// <summary>
/// 交易数据筛选
/// </summary>
public ScenarioCalcApiDataFilter DataFilter { get; set; }
/// <summary>
/// 情景分析配置
/// </summary>
public ScenarioConfigV2 ScenarioConfig { get; set; }
/// <summary>
/// 估值日期
/// </summary>
public DateTime ValueDate { get; set; }
/// <summary>
/// 波动率类型
/// </summary>
public string VolType { get; set; }
/// <summary>
/// 无风险利率
/// </summary>
public double RiskFreeRate { get; set; }
/// <summary>
/// 使用交易分红率
/// </summary>
public bool UseTradeDivendRate { get; set; }
/// <summary>
/// 情景分析标的参数
/// </summary>
public IEnumerable<ScenarioUnderlyingModel> UnderlyingParams { get; set; }
}
public class ScenarioCalcApiDataFilter
{
/// <summary>
/// 查看日期
/// </summary>
public DateTime? ValueDate { get; set; }
/// <summary>
/// 客户编号
/// </summary>
public IEnumerable<string> ClientNumbers { get; set; }
/// <summary>
/// 客户名称
/// </summary>
public IEnumerable<string> ClientNames { get; set; }
/// <summary>
/// 簿记账户组名称
/// </summary>
public IEnumerable<string> AssetGroupNames { get; set; }
/// <summary>
/// 簿记账户名称
/// </summary>
public IEnumerable<string> AssetBookNames { get; set; }
/// <summary>
/// 标的代码
/// </summary>
public IEnumerable<string> UnderlyingCodes { get; set; }
/// <summary>
/// 标的品种
/// </summary>
public IEnumerable<string> VarietyCodes { get; set; }
/// <summary>
/// 交易类型
/// </summary>
public IEnumerable<string> TradeTypes { get; set; }
}
}
@@ -0,0 +1,84 @@
using YLErp.Modules.CalculationModule;
namespace YLErp.Modules.ScenarioModule
{
/// <summary>
/// 情景分析计算结果
/// </summary>
public class ScenarioCalcResult
{
public string ConfigName { get; set; }
public IEnumerable<ScenarioCalcResultItem> Trades { get; set; }
public IEnumerable<ScenarioUnderlyingModel> Underlyings { get; set; }
public IEnumerable<ScenarioCalcResultItem> ResultItems { get; set; }
public string xType { get; set; }
public string yType { get; set; }
public IEnumerable<string> xRates { get; set; }
public IEnumerable<string> yRates { get; set; }
}
/// <summary>
/// 情景分析计算结果单项
/// </summary>
public class ScenarioCalcResultItem
{
public int xIndex { get; set; }
public int yIndex { get; set; }
public string UnderlyingCode { get; set; }
public string UnderlyingPrice { get; set; }
public int TradeId { get; set; }
public double ZeroPv { get; set; }
public double Pv { get; set; }
public double Delta { get; set; }
public double Gamma { get; set; }
public double Theta { get; set; }
public double Vega { get; set; }
public double PnL { get; set; }
public double DeltaChg { get; set; }
public double DeltaInLots { get; set; }
public double DeltaCash { get; set; }
public double GammaCash { get; set; }
public void AddValueResult(TradeValueResult valueResult, double contractSize, double zeroPv, double zeroDelta)
{
Pv += NumberHelper.Normalize(valueResult.Pv);
Delta += NumberHelper.Normalize(valueResult.Delta);
Gamma += NumberHelper.Normalize(valueResult.Gamma);
Theta += NumberHelper.Normalize(valueResult.Theta);
Vega += NumberHelper.Normalize(valueResult.Vega);
PnL += NumberHelper.Normalize(valueResult.Pv - zeroPv);
DeltaChg += NumberHelper.Normalize(valueResult.Delta - zeroDelta);
DeltaCash += NumberHelper.Normalize(valueResult.DeltaCash);
GammaCash += NumberHelper.Normalize(valueResult.GammaCash);
ZeroPv += Math.Abs(NumberHelper.Normalize(zeroPv));
DeltaInLots = NumberHelper.Normalize(Delta) / (contractSize < 1 ? 1 : contractSize);
}
}
}
@@ -0,0 +1,38 @@
namespace YLErp.Modules.ScenarioModule
{
/// <summary>
/// 情景分析计算接口
/// </summary>
public class ScenarioRequest
{
public int ConfigId { get; set; }
public TradeScenarioSearchModel SearchModel { get; set; } = new TradeScenarioSearchModel();
/// <summary>
/// 波动率类型
/// </summary>
public string VolType { get; set; }
/// <summary>
/// 无风险利率
/// </summary>
public double RiskFreeRate { get; set; }
/// <summary>
/// 估值日期
/// </summary>
public DateTime ValueDate { get; set; }
public IEnumerable<ScenarioUnderlyingModel> Underlyings { get; set; }
/// <summary>
/// 使用交易分红率
/// </summary>
public bool UseTradeDivendRate { get; set; }
/// <summary>
/// 是否完全对冲假设
/// </summary>
public bool IsFullyHedged { get; set; } = false;
}
}
@@ -0,0 +1,81 @@
namespace YLErp.Modules.ScenarioModule
{
/// <summary>
/// 情景分析标的参数
/// </summary>
public class ScenarioUnderlyingModel
{
/// <summary>
/// [out]标的品种代码
/// </summary>
public string VarietyCode { get; set; }
/// <summary>
/// [in]标的代码
/// </summary>
public string UnderlyingCode { get; set; }
/// <summary>
/// [in]标的价格
/// </summary>
public double? UnderlyingPrice { get; set; }
/// <summary>
/// [in]分红率
/// </summary>
public double? DividenRate { get; set; }
/// <summary>
/// 分红率(初始传入)
/// </summary>
internal double? OriDividenRate { get; set; }
/// <summary>
/// [in]波动率
/// </summary>
public double? ConstVol { get; set; }
/// <summary>
/// 波动率(初始传入)
/// </summary>
internal double? OriVol { get; set; }
double? _preVol, _preDividenRate;
internal void SetVol(double value)
{
if (_preVol == null)
{
ConstVol = _preVol = value;
}
else if (!double.IsNaN(_preVol.Value) && Math.Abs(_preVol.Value - value) > 1e-6)
{
ConstVol = null;
_preVol = double.NaN;
}
}
internal void SetDividenRate(double value)
{
if (_preDividenRate == null)
{
DividenRate = _preDividenRate = value;
}
else if (!double.IsNaN(_preDividenRate.Value) && Math.Abs(_preDividenRate.Value - value) > 1e-6)
{
DividenRate = null;
_preDividenRate = double.NaN;
}
}
public override string ToString()
{
return $"{VarietyCode}--{UnderlyingCode}--price:{UnderlyingPrice}--div:{DividenRate}--vol:{ConstVol}";
}
public ScenarioUnderlyingModel Clone()
{
return (ScenarioUnderlyingModel)MemberwiseClone();
}
}
}
@@ -0,0 +1,40 @@
using BaseOUDAL;
namespace YLErp.Modules.ScenarioModule
{
/// <summary>
/// 情景分析交易筛选Model
/// </summary>
public class TradeScenarioSearchModel : BaseSearchReq
{
public bool IsSelAll { get; set; }
/// <summary>
/// 持仓日期
/// </summary>
public DateTime? PositionDate { get; set; }
public List<int> AssetIds { get; set; }
public IEnumerable<int> AssetGroupIds { get; set; }
public List<int> ClientIds { get; set; }
public IEnumerable<int> UnderlyingIds { get; set; }
public IEnumerable<int> VarietyIds { get; set; }
public IEnumerable<string> TradeTypes { get; set; }
public List<int> EodTradeIds { get; set; }
public List<int> OtcTradeIds { get; set; }
public List<long> ExchangeTradeIds { get; set; }
public List<int> UserAssets { get; set; }
public List<int> UserClients { get; set; }
public List<int> CurUserTradeIds { get; set; }
}
}