Пример #1
0
        private static decimal CalclateNecessaryWhenExistsVolumeNecessaryDetails(this Settings.VolumeNecessary volumeNecessary, decimal netLot, decimal tradePolicyMargin, bool isNight)
        {
            decimal necessary   = 0m;
            int     detailCount = volumeNecessary.VolumeNecessaryDetails.Count;
            int     i           = 0;

            while (i < volumeNecessary.VolumeNecessaryDetails.Count)
            {
                var volumeNecessaryDetail = volumeNecessary.VolumeNecessaryDetails[i];
                if (i == 0)
                {
                    necessary = Math.Min(netLot, volumeNecessaryDetail.From) * tradePolicyMargin;
                }
                ++i;
                if (netLot > volumeNecessaryDetail.From)
                {
                    decimal margin = volumeNecessaryDetail.GetMargin(isNight);
                    if (i < detailCount)
                    {
                        var     nextDetail = volumeNecessary.VolumeNecessaryDetails[i];
                        decimal lot1       = netLot - volumeNecessaryDetail.From;
                        decimal lot2       = nextDetail.From - volumeNecessaryDetail.From;
                        decimal lot        = Math.Min(lot1, lot2);
                        necessary += lot * margin;
                    }
                    else
                    {
                        necessary += (netLot - volumeNecessaryDetail.From) * margin;
                    }
                }
            }
            return(necessary);
        }
Пример #2
0
        private static decimal CalculateNecessaryForFlat(this Settings.VolumeNecessary volumeNecessary, decimal netLot, decimal tradePolicyMargin, bool isNight)
        {
            var detail = volumeNecessary.GetMaxFromDetail(netLot);

            if (detail == null)
            {
                return(netLot * tradePolicyMargin);
            }
            else
            {
                return(netLot * detail.GetMargin(isNight));
            }
        }
Пример #3
0
        private static Settings.VolumeNecessaryDetail GetMaxFromDetail(this Settings.VolumeNecessary volumeNecessary, decimal netLot)
        {
            if (volumeNecessary.VolumeNecessaryDetails.Count == 0)
            {
                return(null);
            }
            Settings.VolumeNecessaryDetail result = null;
            decimal maxFrom = decimal.MinValue;

            foreach (var eachDetail in volumeNecessary.VolumeNecessaryDetails)
            {
                if (eachDetail.From < netLot && maxFrom < eachDetail.From)
                {
                    maxFrom = eachDetail.From;
                    result  = eachDetail;
                }
            }
            return(result);
        }