public static BlockOrderRequest GenerateStaticBlockOrder(string portfolio, string areaCode, Auction auction, BlockOrderType blockOrderType = BlockOrderType.Regular) { return(new BlockOrderRequest { AreaCode = areaCode, AuctionId = auction.Id, Portfolio = portfolio, Blocks = GenerateBlocks(blockOrderType, auction).ToList() }); }
public static IEnumerable <Block> GenerateBlocks(BlockOrderType blockOrderType, Auction auction) { var blocks = new List <Block> { new Block { MinimumAcceptanceRatio = 1, Name = blockOrderType == BlockOrderType.Spread ? "SpreadBlock1" : "RegularBlock", Price = 50, IsSpreadBlock = blockOrderType == BlockOrderType.Spread ? true : false, Periods = new List <Period> { new Period { ContractId = auction.Contracts[0].Id, Volume = 200 }, new Period { ContractId = auction.Contracts[1].Id, Volume = 200 } } } }; if (blockOrderType == BlockOrderType.Profiled) { // Profiled with different volumes blocks.First().Periods.Last().Volume = 150; } if (blockOrderType == BlockOrderType.ExclusiveGroup) { // Exclusive group should have same value on ExclusiveGroup field var exclusiveGroupName = "ExclGroup_1"; blocks.First().ExclusiveGroup = exclusiveGroupName; blocks.Add(new Block { MinimumAcceptanceRatio = 1, ExclusiveGroup = exclusiveGroupName, Name = "RegularBlock2", Price = 50, Periods = new List <Period> { new Period { ContractId = auction.Contracts[0].Id, Volume = 150 }, new Period { ContractId = auction.Contracts[1].Id, Volume = 150 } } }); } if (blockOrderType == BlockOrderType.Linked) { // Linked block should have LinkedTo field pointing to parent block name blocks.Add(new Block { MinimumAcceptanceRatio = 1, LinkedTo = blocks.First().Name, Name = "LinkedBlock1", Price = 50, Periods = new List <Period> { new Period { ContractId = auction.Contracts[0].Id, Volume = 150 }, new Period { ContractId = auction.Contracts[1].Id, Volume = 150 } } }); } if (blockOrderType == BlockOrderType.Spread) { var firstSpread = blocks.First(); // Spread blocks should always contain a buy and sell block blocks.Add(new Block { MinimumAcceptanceRatio = 1, LinkedTo = firstSpread.Name, Name = "SpreadBlock2", Price = 50, IsSpreadBlock = true, Periods = new List <Period> { new Period { ContractId = auction.Contracts[2].Id, Volume = -150 }, new Period { ContractId = auction.Contracts[3].Id, Volume = -150 } } }); var lastSpread = blocks.Last(); firstSpread.LinkedTo = lastSpread.Name; } return(blocks); }