public OptionTribeElementListData(CallPutFlag cp, double strike) { this.ElwWEs = new List<WatchElement>(); OptionTribe ot = ElwOptionUtil.GetOptionTribe(strike, cp); InitOptionDataPart(ot); InitElwDataPart(ot); }
public static Detail.ProductType ConvertToDetailProductType(CallPutFlag callPut) { if (callPut == CallPutFlag.Call) { return Detail.ProductType.CallOption; } else if (callPut == CallPutFlag.Put) { return Detail.ProductType.PutOption; } return Detail.ProductType.Unknown; }
/// <summary> /// Claculate Price With BlackScholes Algorithm /// </summary> /// <param name="callPutFlag">Call Put Flag => Send c or p</param> /// <param name="stockPrice">Stock Price</param> /// <param name="strikePrice">Strike Price </param> /// <param name="yearsToExpire">Years To Expire</param> /// <param name="riskFreeRate">Risk-Free Rate</param> /// <param name="volatilitys">Volatilitys</param> /// <returns></returns> public double CalculateBlackScholes(CallPutFlag callPutFlag, double stockPrice, double strikePrice, double yearsToExpire, double riskFreeRate, double volatilitys) { double d1 = 0.0; double d2 = 0.0; double dBlackScholes = 0.0; d1 = (Math.Log(stockPrice / strikePrice) + (riskFreeRate + volatilitys * volatilitys / 2.0) * yearsToExpire) / (volatilitys * Math.Sqrt(yearsToExpire)); d2 = d1 - volatilitys * Math.Sqrt(yearsToExpire); if (callPutFlag == CallPutFlag.C) { dBlackScholes = stockPrice * CND(d1) - strikePrice * Math.Exp(-riskFreeRate * yearsToExpire) * CND(d2); } else if (callPutFlag == CallPutFlag.P) { dBlackScholes = strikePrice * Math.Exp(-riskFreeRate * yearsToExpire) * CND(-d2) - stockPrice * CND(-d1); } return(dBlackScholes); }
public static KospiOptionInfo GetKOI(double strike, CallPutFlag callPut, DateTime maturity) { foreach (KospiOptionInfo info in KOIs.Values) { double diff = info.Strike - strike; if (info.CallPut == callPut && Math.Abs(diff) < 0.1) { if (Util.IsSameDay(info.Maturity, maturity)) { return info; } else { logger.Warn("허용되지 않은 만기 사용"); } } } return null; }
public OptionTribe(CallPutFlag cp, double strike, DateTime maturity) { CP = cp; Strike = strike; Maturity = maturity; KOI = OptionUtil.GetKOI(Strike, CP, maturity); ElwInfos = ElwUtil.GetSameStrikeElw(Strike, CP); if (KOI == null) { IsValid = false; } else { IsValid = true; CandidateCodes = ElwOptionUtil.GetSameCandidateCodes(KOI.Code); } OtLeft = null; OtRight = null; }
double GetDoorRefStrike(double strike, CallPutFlag cp) { if (cp == CallPutFlag.Call) { double doorStrike = 2.5 + strike; return doorStrike; } else { double doorStrike = strike - 2.5; return doorStrike; } }
public static String GetKOIKey(CallPutFlag cp, double strike) { return String.Format("{0}_{1:n2}", cp.ToString(), strike); }
public static List<double> GetSortedStrikeList(CallPutFlag cp) { if (cp == CallPutFlag.Call) { return SortedCallStrikes; } return SortedPutStrikes; }
public static OptionTribe GetOptionTribe(double strike, CallPutFlag cp) { String key = OptionUtil.GetKOIKey(cp, strike); return GetOptionTribeFromKey(key); }
ArrayList GetCCOrderViaCallPutFlag(ArrayList arr, CallPutFlag cp) { ArrayList ret = new ArrayList(); foreach (CodeCount cc in arr) { Detail.ProductType mpt = ProductUtil.Ins().GetProductType(cc.Code); if (mpt == Detail.ProductType.ELW) { ElwInfo ei = ElwUtil.GetElwInfo(cc.Code); if (ei.CallPut == cp) { ret.Add(cc); } } else if (mpt == Detail.ProductType.CallOption || mpt == Detail.ProductType.PutOption) { KospiOptionInfo koi = OptionUtil.GetKOI(cc.Code); if (koi.CallPut == cp) { ret.Add(cc); } } } return ret; }
double GetDoorStrike(double strike, CallPutFlag cp, double offset) { if (cp == CallPutFlag.Call) { double doorStrike = (offset * 2.5) + strike; return doorStrike; } else { double doorStrike = (-1) * (offset * 2.5) + strike; return doorStrike; } }
EDoorEachMonitorEnterController GetController( Queue<EDoorEachMonitorEnterController> queue, CallPutFlag cp, int index) { List<EDoorEachMonitorEnterController> l = new List<EDoorEachMonitorEnterController>(); l.AddRange(queue.ToArray()); int count = 0; foreach (EDoorEachMonitorEnterController controller in queue) { EDoorEachMonitorEnterController_Accessor each = new EDoorEachMonitorEnterController_Accessor( new PrivateObject(controller)); if (each._data.EI.CallPut == cp) { if (count == index) { return controller; } ++count; } } // call, put 종류 잘 골라서 넘겨준다. Assert.AreEqual(true, false); // 여기 오면 안된다. return null; }
public SameStrikeInstrument(double strike, CallPutFlag cp) { DateTime maturity = Util.GetSystemOptionMaturity(); KOI = OptionUtil.GetKOI(strike, cp, maturity); ElwInfos = ElwUtil.GetSameStrikeElw(strike, cp); }
public ArrayList GetExposure100k(CallPutFlag cp) { if (cp == CallPutFlag.Call) { ArrayList ret = GetExposureCC100k_Raw(_dicCall); return ret; } else { ArrayList ret = GetExposureCC100k_Raw(_dicPut); return ret; } }
// 'n' times 걸린다. 스케줄 안에서 이것을 돌리는 일은 없도록 한다. public static List<ElwInfo> GetSameStrikeElw(double strike, CallPutFlag callPut) { List<ElwInfo> arr = new List<ElwInfo>(); foreach (ElwInfo data in ElwInfos.Values) { if (Math.Abs(strike - data.Strike) <= 0.001 && callPut == data.CallPut) { arr.Add(data); } } return arr; }
double GetDoorStrike(double strike, CallPutFlag cp) { if (cp == CallPutFlag.Call) { double doorStrike = (_parent.Parent.Input.DoorStrikeOffset * 2.5) + strike; return doorStrike; } else { double doorStrike = (-1) * (_parent.Parent.Input.DoorStrikeOffset * 2.5) + strike; return doorStrike; } }
public WasEachController(CallPutFlag cp, double strike) { _watchElementListData = new OptionTribeElementListData(cp, strike); _eoDiffData = new WasEoDiffData(_watchElementListData); _eoDiffController = new WasEoDiffController(); }