Пример #1
0
        OptionData GetATMOptionData(EOptionType opType, DateTime expiryDate)
        {
            var offsetStep = 0.005;
            var maxOffset  = 0.495;
            var minOffset  = 0.505;

            OptionData theATMOption = null;

            //Get optionATM:
            while (theATMOption == null)
            {
                maxOffset += offsetStep;
                minOffset -= offsetStep;

                theATMOption = UNLManager.OptionsManager.OptionDataDic.Values.FirstOrDefault(
                    o => o.Expiry.Equals(expiryDate) && o.OptionContract.OptionType == opType &&
                    o.DeltaAbsValue >= minOffset && o.DeltaAbsValue <= maxOffset);
                //Set for max iteration
                if (maxOffset > (0.50 + 20 * offsetStep))//Max will be: 0.555 <=> 0.445
                {
                    return(null);
                }
            }
            return(theATMOption);
        }
Пример #2
0
        private OptionData GenerateOptionInPreconditions(EOptionType optionType)
        {
            double   theta  = MINIMAL_THETA + 1;
            DateTime expiry = DateTime.Now.Add(TimeSpan.FromDays(MIN_EXPIRY_DAYS + 1));
            double   strike;
            double   underline = 100;

            if (optionType == EOptionType.Call)
            {
                strike = underline * (1 + MINIMAL_DIS_UNL / 100) + 10;
            }
            else
            {
                strike = underline * (1 - MINIMAL_DIS_UNL / 100) - 10;
            }
            var optionContract = new OptionContract("AAPL", expiry, optionType)
            {
                Strike = strike
            };
            var option = new OptionData()
            {
                UnderlinePrice = underline,
                Theta          = theta,
                OptionContract = optionContract
            };

            return(option);
        }
Пример #3
0
        /// <summary>
        /// Calculate the margin requierd to sell 1 option of the given position data.
        /// It calculates considering the situation and relations of entire positions of the given UNL.
        /// </summary>
        /// <param name="positionData"></param>
        /// <returns></returns>
        public double OnePositionSellMargin(OptionsPositionData positionData)
        {
            var symbol = positionData.OptionData.Symbol;

            CalculateUNLRequierdMargin(symbol);
            var marginData = MarginDataDic[symbol];
            //double unlRate = positionData.OptionData.LastPrice;
            var         unlRate = _appManager.ManagedSecuritiesManager.Securities[symbol].LastPrice;
            double      strike  = positionData.OptionContract.Strike;
            EOptionType type    = positionData.OptionType;
            bool        mate    = false;

            switch (marginData.PutCallPositionRelation)
            {
            case EPutCallPositionRelation.Equel:
                break;

            case EPutCallPositionRelation.PutGCall:
                if (type == EOptionType.Call)
                {
                    mate = true;
                }
                break;

            case EPutCallPositionRelation.CallGPut:
                if (type == EOptionType.Put)
                {
                    mate = true;
                }
                break;
            }
            var result = CalculateMargin(unlRate, strike, mate, type);

            return(result);
        }
Пример #4
0
 public OptionCalculationData(EOptionType optionType, int position, double currentUNLPrice, int multiplier)
 {
     OptionType       = optionType;
     ResultDataValues = new ResultData();
     Position         = position;
     CurrentUNLPrice  = currentUNLPrice;
     Multiplier       = multiplier;
 }
Пример #5
0
        public OptionContract(string symbol, DateTime expiry, EOptionType type,
                              string exchange = "SMART", int multiplier = 100, string currency = "USD")
            : base(symbol, SecurityType.Option)

        {
            Expiry     = expiry;
            Multiplier = multiplier;
            OptionType = type;
        }
Пример #6
0
        /// <summary>
        /// Get the Implied Volatility on the ATM option.
        /// </summary>
        public double GetImVolOnATMOption(EOptionType optionType, DateTime expiryDate)
        {
            var option = GetATMOptionData(expiryDate, optionType);

            if (option != null)
            {
                return(option.ImpliedVolatility);
            }
            return(0);
        }
Пример #7
0
        /// <summary>
        /// Check if there is any option that close enugh to the ATM option.
        /// </summary>
        /// <param name="optionType"></param>
        /// <param name="expiryDate"></param>
        /// <returns></returns>
        public bool CheckForATMOption(EOptionType optionType, DateTime expiryDate)
        {
            //
            var exist = OptionDataDic.Values
                        .Any(op => op.Expiry == expiryDate &&
                             op.OptionContract.OptionType == optionType &&
                             op.DeltaOffsetFromATM < AllConfigurations.AllConfigurationsObject.Trading
                             .MaxDeltaOffsetAllowed);

            return(exist);
        }
Пример #8
0
 public BnSCalculationData(string symbol, EOptionType optionType, double stockPrice, double strike,
                           int dayLeftsOriginal, int multiplier = 100)
 {
     Symbol           = symbol;
     OptionType       = optionType;
     StockPrice       = stockPrice;
     Strike           = strike;
     DayLeftsOriginal = dayLeftsOriginal;
     ResultDataValues = new ResultData();
     Multiplier       = multiplier;
 }
Пример #9
0
        /// <summary>
        /// Calculates the number of the mate couples of given UNL (symbol),
        /// Also return the single options (without mate and the type of the singl).
        /// </summary>
        /// <param name="symbol">The UNL symbol</param>
        /// <param name="singleCount">The number of single options, that have no adequate mate.</param>
        /// <param name="optionType">The option type of the single.</param>
        /// <returns></returns>
        public int GetCoupleMateOptionsCount(string symbol, out int singleCount, out EOptionType optionType)
        {
            var posList            = GetPositionList(symbol);
            var callPositionsCount = posList.Where(pd => pd.OptionType == EOptionType.Call).Sum(pd => pd.Quantity);
            var putPositionsCount  = posList.Where(pd => pd.OptionType == EOptionType.Put).Sum(pd => pd.Quantity);

            var result = Min(callPositionsCount, putPositionsCount);

            singleCount = Abs(callPositionsCount - putPositionsCount);
            optionType  = callPositionsCount >= putPositionsCount ? EOptionType.Call : EOptionType.Put;

            return(result);
        }
Пример #10
0
        public double CalculateMargin(double unlRate, double strike, bool mate, EOptionType type = EOptionType.Call)
        {
            double lossPercantag = mate ? WITH_MATE_LOSS_PERCANTAG : NO_MATE_LOSS_PERCANTAG;
            //lossPercantag = 0.06;
            //lossPercantag = 0.245;
            const int multiplier = 100;

            var requierdMargin = type == EOptionType.Call ?
                                 (unlRate * (1 + lossPercantag) - strike) * multiplier :
                                 (strike - unlRate * (1 - lossPercantag)) * multiplier;

            return(requierdMargin);
        }
Пример #11
0
 public void SetQuestTalkOption(uint questid, int step, bool bNpcSay, string strCap)
 {
     m_questid = questid;
     m_step    = step;
     m_eOpType = EOptionType.EOT_ScenarioTalk;
     if (bNpcSay)
     {
         SetNpcCaption(m_questid, m_step, strCap);
     }
     else
     {
         SetHeroCaption(strCap);
     }
 }
Пример #12
0
        public OptionData GetATMOptionData(DateTime expiry, EOptionType optionType)
        {
            const double epsilon = 0.005;
            //Get all the options nearest the ATM
            var options = OptionDataDic.Values
                          .Where(od => od.Expiry == expiry && od.OptionContract.OptionType == optionType &&
                                 od.DeltaOffsetFromATM < 0.05).ToList();

            if (options.Count == 0)
            {
                return(null);
            }
            var minDeltaOffset = options.Min(od => od.DeltaOffsetFromATM);
            var atmOptionData  = options.FirstOrDefault(od => od.DeltaOffsetFromATM < (minDeltaOffset + epsilon));

            if (atmOptionData == null)
            {
                throw new Exception("ATM Option didn't found. check your calculation!!!");
            }
            return(atmOptionData);
        }
Пример #13
0
 public void SetAcceptTalkOption(uint questid)
 {
     m_questid = questid;
     m_eOpType = EOptionType.EOT_AcceptQuest;
     SetQuestCaption(m_questid);
 }
Пример #14
0
 public BnSCalculationData(string symbol, EOptionType optionType)
 {
     Symbol           = symbol;
     OptionType       = optionType;
     ResultDataValues = new ResultData();
 }
Пример #15
0
 public string GetOptionKey(DateTime expiry, EOptionType optionType, double strike)
 {
     return($"{expiry}.{optionType}.{strike}");
 }
Пример #16
0
 private void grpOptionType_EditValueChanged(object sender, EventArgs e)
 {
     OptionType = (int)grpOptionType.EditValue == 1 ? EOptionType.Put : EOptionType.Call;
 }
Пример #17
0
        public static double ImpliedVolatility(double S, double X, double t, double r, double P, EOptionType OptionType, EPutCall PutCall, EOptionPrice Method)
        {
            int n = 0;

            switch (Method)
            {
            case EOptionPrice.Binomial:
                n = 100;
                break;

            case EOptionPrice.MonteCarlo:
                n = 100000;
                break;
            }
            double Eps = 0.001;

            return(FinMath.ImpliedVolatility(S, X, t, r, P, OptionType, PutCall, Method, n, Eps));
        }
Пример #18
0
        public static double ImpliedVolatility(double S, double X, double t, double r, double P, EOptionType OptionType, EPutCall PutCall, EOptionPrice Method, int n, double Eps)
        {
            double num1 = 0.0;
            double num2 = 10.0;
            double num3 = 0.0;
            double s    = 0.0;

            while (Math.Abs(num2 - num1) > Eps)
            {
                s = num1 + (num2 - num1) / 2.0;
                switch (Method)
                {
                case EOptionPrice.BlackScholes:
                    num3 = FinMath.BS(S, X, t, s, r, PutCall);
                    break;

                case EOptionPrice.Binomial:
                    num3 = FinMath.BM(S, X, t, s, r, PutCall, n);
                    break;

                case EOptionPrice.MonteCarlo:
                    num3 = FinMath.MC(S, X, t, s, r, PutCall, n);
                    break;
                }
                if (num3 > P)
                {
                    num2 = s;
                }
                else
                {
                    num1 = s;
                }
            }
            return(s);
        }
Пример #19
0
        public double CalculateMarginTest(double unlRate, double strike, bool mate, EOptionType type = EOptionType.Call)
        {
            var result = MarginManager.CalculateMargin(unlRate, strike, mate, type);

            return(result);
        }
Пример #20
0
		public static double ImpliedVolatility(double S, double X, double t, double r, double P, EOptionType OptionType, EPutCall PutCall, EOptionPrice Method, int n, double Eps)
		{
			double num1 = 0.0;
			double num2 = 10.0;
			double num3 = 0.0;
			double s = 0.0;
			while (Math.Abs(num2 - num1) > Eps)
			{
				s = num1 + (num2 - num1) / 2.0;
				switch (Method)
				{
					case EOptionPrice.BlackScholes:
						num3 = FinMath.BS(S, X, t, s, r, PutCall);
						break;
					case EOptionPrice.Binomial:
						num3 = FinMath.BM(S, X, t, s, r, PutCall, n);
						break;
					case EOptionPrice.MonteCarlo:
						num3 = FinMath.MC(S, X, t, s, r, PutCall, n);
						break;
				}
				if (num3 > P)
					num2 = s;
				else
					num1 = s;
			}
			return s;
		}
Пример #21
0
		public static double ImpliedVolatility(double S, double X, double t, double r, double P, EOptionType OptionType, EPutCall PutCall, EOptionPrice Method)
		{
			int n = 0;
			switch (Method)
			{
				case EOptionPrice.Binomial:
					n = 100;
					break;
				case EOptionPrice.MonteCarlo:
					n = 100000;
					break;
			}
			double Eps = 0.001;
			return FinMath.ImpliedVolatility(S, X, t, r, P, OptionType, PutCall, Method, n, Eps);
		}
Пример #22
0
 public void SetCompleteTalkOption(uint questid)
 {
     m_questid = questid;
     m_eOpType = EOptionType.EOT_CompleteQuest;
     SetQuestCaption(m_questid);
 }