Ejemplo n.º 1
0
 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()
     });
 }
Ejemplo n.º 2
0
        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);
        }