从山证v2.3.0拷贝
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user