public tryField ( Wombat.MamaFieldDescriptor descriptor, Wombat.MamaMsgField &result ) : bool | ||
descriptor | Wombat.MamaFieldDescriptor | |
result | Wombat.MamaMsgField | |
return | bool |
private MamdaOptionContract findContract( MamdaSubscription subscription, MamaMsg msg) { /* * NOTE: fields which are enums can be pubished as integers if feedhandler * uses mama-publish-enums-as-ints. It may also be possible for a feed to * publish the numerical value as a string. All enumerated fields must be handled * by getting the value based on the field type. */ // Look up the strike price and expiration date string contractSymbol = null; if (!msg.tryString(MamdaOptionFields.CONTRACT_SYMBOL, ref contractSymbol)) { throw new MamdaDataException ("cannot find contract symbol"); } string fullSymbol = contractSymbol; MamdaOptionContract contract = mChain.getContract(fullSymbol); if (contract == null) { string expireDateStr = String.Empty; double strikePrice = 0.0; string putCall = String.Empty; uint openInterest = 0; msg.tryString(MamdaOptionFields.EXPIRATION_DATE, ref expireDateStr); msg.tryF64(MamdaOptionFields.STRIKE_PRICE, ref strikePrice); if (msg.tryField (MamdaOptionFields.PUT_CALL, ref tmpfield_)) { putCall = getFieldAsString(tmpfield_); } int symbolLen = fullSymbol.Length; string symbol = null; string exchange = null; int dotIndex = fullSymbol.LastIndexOf('.'); if (dotIndex > 0) { // Have exchange in symbol. exchange = fullSymbol.Substring(dotIndex + 1); symbol = fullSymbol.Substring(0, dotIndex); } else { exchange = ""; symbol = fullSymbol; } DateTime expireDate = DateTime.MinValue; try { expireDate = mDateFormat.Parse(expireDateStr); } catch (FormatException e) { throw new MamdaDataException ( String.Format("cannot parse expiration date: {0}", expireDateStr)); } MamdaOptionContract.PutOrCall putCallchar = extractPutCall(msg,fullSymbol); contract = new MamdaOptionContract( symbol, exchange, expireDate, strikePrice, putCallchar); MamdaOptionContract.ExerciseStyle exerciseStyleChar = extractExerciseStyle(msg,fullSymbol); contract.setExerciseStyle(exerciseStyleChar); if (msg.tryU32 (MamdaOptionFields.OPEN_INTEREST, ref openInterest)) { contract.setOpenInterest( (long)openInterest ); } mChain.addContract(fullSymbol, contract); mLastActionContract = contract; mLastActionContractFieldState = MamdaFieldState.MODIFIED; mLastAction = MamdaOptionAction.Add; mLastActionFieldState = MamdaFieldState.MODIFIED; foreach (MamdaOptionChainHandler handler in mHandlers) { handler.onOptionContractCreate(subscription, this, msg, contract, mChain); } } return contract; }
private MamdaOptionContract.ExerciseStyle extractExerciseStyle( MamaMsg msg, string fullSymbol) { MamdaOptionContract.ExerciseStyle exerciseStyle = MamdaOptionContract.ExerciseStyle.Unknown; int exerciseStyleInt = 0; if (!msg.tryField (MamdaOptionFields.EXERCISE_STYLE, ref tmpfield_) ) { Console.WriteLine("findContract:CANNOT find exercisestyle in msg:"+fullSymbol+exerciseStyle); } else { switch(tmpfield_.getType()) { case mamaFieldType.MAMA_FIELD_TYPE_I8: case mamaFieldType.MAMA_FIELD_TYPE_U8: case mamaFieldType.MAMA_FIELD_TYPE_I16: case mamaFieldType.MAMA_FIELD_TYPE_U16: exerciseStyleInt =tmpfield_.getU16(); switch(exerciseStyleInt) { case 1: exerciseStyle = MamdaOptionContract.ExerciseStyle.American; break; case 2: exerciseStyle = MamdaOptionContract.ExerciseStyle.European; break; case 3: exerciseStyle = MamdaOptionContract.ExerciseStyle.Capped; break; case 99: exerciseStyle = MamdaOptionContract.ExerciseStyle.Unknown; break; default: exerciseStyle = MamdaOptionContract.ExerciseStyle.Unknown; Console.Write("Unhandled value for wExerciseStyle."+exerciseStyleInt); break; } break; case mamaFieldType.MAMA_FIELD_TYPE_STRING: string exerciseStyleStr = tmpfield_.getString(); ; switch (exerciseStyleStr[0]) { case '1': case 'A': exerciseStyle = MamdaOptionContract.ExerciseStyle.American; break; case '2': case 'E': exerciseStyle = MamdaOptionContract.ExerciseStyle.European; break; case '3': case 'C': exerciseStyle = MamdaOptionContract.ExerciseStyle.Capped; break; default: exerciseStyle = MamdaOptionContract.ExerciseStyle.Unknown; if ((exerciseStyleStr=="99") && (exerciseStyleStr=="Z")) { Console.WriteLine("Unhandled value for wExerciseStyle."+exerciseStyleStr); } break; } break; default: exerciseStyle = MamdaOptionContract.ExerciseStyle.Unknown; Console.WriteLine("Unhandled type for wExerciseStyle. Expected string or integer but returned:"+ tmpfield_.getType()); break; } } return exerciseStyle; }
private MamdaOptionContract.PutOrCall extractPutCall( MamaMsg msg, string fullSymbol) { MamdaOptionContract.PutOrCall putCall = MamdaOptionContract.PutOrCall.Unknown; int putCallInt = 0; if (!msg.tryField (MamdaOptionFields.PUT_CALL, ref tmpfield_)) { Console.WriteLine("findContract:CANNOT find put/call in msg:"+fullSymbol+putCall); } else { switch(tmpfield_.getType()) { case mamaFieldType.MAMA_FIELD_TYPE_I8: case mamaFieldType.MAMA_FIELD_TYPE_U8: case mamaFieldType.MAMA_FIELD_TYPE_I16: case mamaFieldType.MAMA_FIELD_TYPE_U16: putCallInt = tmpfield_.getU16(); switch(putCallInt) { case 1: putCall = MamdaOptionContract.PutOrCall.Put; break; case 2: putCall = MamdaOptionContract.PutOrCall.Call; break; case 99: putCall = MamdaOptionContract.PutOrCall.Unknown; break; default: putCall = MamdaOptionContract.PutOrCall.Unknown; Console.WriteLine("Unhandled value for wPutCall."+ putCallInt); break; } break; case mamaFieldType.MAMA_FIELD_TYPE_STRING: string putCallStr = tmpfield_.getString(); switch (putCallStr[0]) { case '1': case 'P': putCall = MamdaOptionContract.PutOrCall.Put; break; case '2': case 'C': putCall = MamdaOptionContract.PutOrCall.Call; break; default: putCall = MamdaOptionContract.PutOrCall.Unknown; if ((putCallStr=="99") && (putCallStr=="Z")) { Console.WriteLine("Unhandled value for wPutCall."+ putCallStr); } break; } break; default: putCall = MamdaOptionContract.PutOrCall.Unknown; Console.WriteLine("Unhandled type for wPutCall. Expected string or integer but returned: "+tmpfield_.getType()); break; } } return putCall; }
private void updateFundamentalFields(MamaMsg msg) { /* * NOTE: fields which are enums can be pubished as integers if feedhandler * uses mama-publish-enums-as-ints. It may also be possible for a feed to * publish the numerical value as a string. All enumerated fields must be handled * by getting the value based on the field type. */ if (msg.tryDateTime(MamdaFundamentalFields.SRC_TIME, ref mSrcTimeStr)) mSrcTimeStrFieldState = MamdaFieldState.MODIFIED; if (msg.tryDateTime(MamdaFundamentalFields.ACTIVITY_TIME, ref mActTimeStr)) mActTimeStrFieldState = MamdaFieldState.MODIFIED; if (msg.tryString(MamdaFundamentalFields.CORP_ACT_TYPE, ref mCorpActType)) mCorpActTypeFieldState = MamdaFieldState.MODIFIED; if(msg.tryField (MamdaFundamentalFields.DIVIDEND_FREQ, ref mTmpfield)) { mDivFreq = getFieldAsString(mTmpfield); mDivFreqFieldState = MamdaFieldState.MODIFIED; } if (msg.tryString(MamdaFundamentalFields.DIVIDEND_EX_DATE, ref mDivExDate)) mDivExDateFieldState = MamdaFieldState.MODIFIED; if(msg.tryString(MamdaFundamentalFields.DIVIDEND_PAY_DATE, ref mDivPayDate)) mDivPayDateFieldState = MamdaFieldState.MODIFIED; if (msg.tryString(MamdaFundamentalFields.DIVIDEND_REC_DATE, ref mDivRecordDate)) mDivRecordDateFieldState = MamdaFieldState.MODIFIED; if(msg.tryString(MamdaFundamentalFields.DIVIDEND_CURRENCY, ref mDivCurrency)) mDivCurrencyFieldState = MamdaFieldState.MODIFIED; if (msg.tryString(MamdaFundamentalFields.MRKT_SEGM_NATIVE, ref mMrktSegmNative)) mMrktSegmNativeFieldState = MamdaFieldState.MODIFIED; if (msg.tryString(MamdaFundamentalFields.MRKT_SECT_NATIVE, ref mMrktSectNative)) mMrktSectNativeFieldState = MamdaFieldState.MODIFIED; if(msg.tryField (MamdaFundamentalFields.MRKT_SEGMENT, ref mTmpfield)) { mMarketSegment = getFieldAsString(mTmpfield); mMarketSegmentFieldState = MamdaFieldState.MODIFIED; } if(msg.tryField (MamdaFundamentalFields.MRKT_SECTOR, ref mTmpfield)) { mMarketSector = getFieldAsString(mTmpfield); mMarketSectorFieldState = MamdaFieldState.MODIFIED; } if (msg.tryI64 (MamdaFundamentalFields.SHARES_OUT, ref mSharesOut)) mSharesOutFieldState = MamdaFieldState.MODIFIED; if (msg.tryI64 (MamdaFundamentalFields.SHARES_FLOAT, ref mSharesFloat)) mSharesFloatFieldState = MamdaFieldState.MODIFIED; if (msg.tryI64 (MamdaFundamentalFields.SHARES_AUTH, ref mSharesAuth)) mSharesAuthFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.DIVIDEND_PRICE, ref mDividendPrice)) mDividendPriceFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.EARN_PER_SHARE, ref mEarnPerShare)) mEarnPerShareFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.VOLATILITY, ref mVolatility)) mVolatilityFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.PRICE_EARN_RATIO, ref mPeRatio)) mPeRatioFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.YIELD, ref mYield)) mYieldFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.HIST_VOLATILITY, ref mHistVolatility)) mHistVolatilityFieldState = MamdaFieldState.MODIFIED; if (msg.tryF64(MamdaFundamentalFields.RISK_FREE_RATE, ref mRiskFreeRate)) mRiskFreeRateFieldState = MamdaFieldState.MODIFIED; }