从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using YLErp.Configuration;
|
||||
using YLErp.Modules.EodModule.SettlementModule;
|
||||
using YLErp.Modules.TradeDalModule;
|
||||
|
||||
namespace YLErp.Modules.EodModule
|
||||
{
|
||||
[TestClass]
|
||||
public class ExDividendTest
|
||||
{
|
||||
[TestMethod("测试除权除息基础循环处理是否符合预期")]
|
||||
public void Test1()
|
||||
{
|
||||
var startIndex = 0;
|
||||
var priceDic = new Dictionary<DateTime, double> {
|
||||
{new DateTime(2021,1,1),1d },
|
||||
{new DateTime(2021,1,2),1d },
|
||||
{new DateTime(2021,1,3),1d },
|
||||
{new DateTime(2021,1,4),1d },
|
||||
{new DateTime(2021,1,5),1d },
|
||||
{new DateTime(2021,1,6),1d },
|
||||
{new DateTime(2021,1,7),1d },
|
||||
{new DateTime(2021,1,8),1d },
|
||||
{new DateTime(2021,1,9),1d },
|
||||
{new DateTime(2021,1,10),1d },
|
||||
};
|
||||
|
||||
var exDividendInfos = new List<ex_dividend_info> {
|
||||
new ex_dividend_info{ ExDividendDate = new DateTime(2021,1,2)},
|
||||
new ex_dividend_info{ ExDividendDate = new DateTime(2021,1,6)},
|
||||
new ex_dividend_info{ ExDividendDate = new DateTime(2021,1,8)},
|
||||
};
|
||||
|
||||
//日终价格和除权除息信息都按照正序排列
|
||||
//获取除权价格则使用大于日终价格日期的除权信息除权
|
||||
//循环日终价格,如果一个除权日期小于价格日期则被排除掉
|
||||
foreach (var kv in priceDic)
|
||||
{
|
||||
(var date, var price) = (kv.Key, kv.Value);
|
||||
|
||||
Console.WriteLine("===========" + date.ToString("yyyy-MM-dd") + "===========");
|
||||
|
||||
for (var i = startIndex; i < exDividendInfos.Count; i++)
|
||||
{
|
||||
var dividenInfo = exDividendInfos[i];
|
||||
|
||||
//除权日当天的收盘价也需要处理
|
||||
if (date <= dividenInfo.ExDividendDate)
|
||||
{
|
||||
Console.WriteLine(dividenInfo.ExDividendDate.Value.ToString("yyyy-MM-dd"));
|
||||
}
|
||||
else
|
||||
{
|
||||
startIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestEodDividend()
|
||||
{
|
||||
var userInfo = OptUserInfo.UnitTestUser;
|
||||
using var db = DbContextFactory.GetYLDbContext();
|
||||
var eodDate = new DateTime(2021, 06, 04);
|
||||
var trades = db.eod_trade.Where(et => et.ValueDate == eodDate && !ConsTrade.TradeCompleteStatus.Contains(et.TradeStatus))
|
||||
.ToArray().Select(O => O.trade).ToList();
|
||||
var tradeIds = trades.Select(O => O.id);
|
||||
var parentTradeIds = trades.Where(O => O.ParentTradeId > 0 && !tradeIds.Contains(O.ParentTradeId)).Select(O => O.ParentTradeId).ToHashSet();
|
||||
if (parentTradeIds.Any())
|
||||
{
|
||||
var parentTrades = new TradeDalService(userInfo).GetTradeOrEodTrade(parentTradeIds, eodDate);
|
||||
trades.AddRange(parentTrades);
|
||||
}
|
||||
var request = new EodSettlementRequest(userInfo) { SettleDate = eodDate };
|
||||
var context = new EodSettlementContextV2(request, new SettlementConfig { }, CancellationToken.None);
|
||||
new EodDividenService(context).Execute(trades);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user