Node com.nodelab.interest.CalcInflation

com.nodelab.0.10380
Instance of TypeScriptInfo

Node dataValue
org.edgescript.TypeScriptInfo.prerequisiteParcelsList{}
org.edgescript.TypeScriptInfo.prerequisiteMethodsList{}
org.edgescript.TypeScriptInfo.script/* instance Value[Real] quoteRealStep; instance Value[Real] yieldRealStep; instance Value[Real] quoteGovStep; instance Value[Real] yieldGovStep; instance Value[Real] calcInflationStep; instance Value[Real] calcAStep; instance Value[Real] calcBStep; instance Value[Real] calcCStep; instance Value[Real] calcDStep; instance Value[Real] calcRealFwdStep; instance Value[Real] calcGovFwdStep; instance Value[Symbol] calcAspect; instance Value[Symbol] calcGovType; instance Value[Symbol] calcRealType; instance Value[String] errorString; instance Value[Boolean] calculateRealFwd; instance Value[InstrumentBond] interestA; instance Value[InstrumentBond] interestB; instance Value[InstrumentBond] interestC; instance Value[InstrumentBond] interestD; instance Value[Time] maturityA; instance Value[Time] maturityB; instance Value[Time] maturityC; instance Value[Time] maturityD; constructor() { View:(); instance quoteRealStep = new Value(Real, null); instance yieldRealStep = new Value(Real, null); instance quoteRealStep = new Value(Real, null); instance yieldRealStep = new Value(Real, null); instance calcInflationStep = new Value(Real, null); instance calcAStep = new Value(Real, null); instance calcBStep = new Value(Real, null); instance calcCStep = new Value(Real, null); instance calcDStep = new Value(Real, null); instance calcRealFwdStep = new Value(Real, null); instance calcGovFwdStep = new Value(Real, null); instance calcAspect = new Value(Symbol, #calcInflation); instance calcRealType = new Value(Symbol, #quoted); instance calcGovType = new Value(Symbol, #quoted); instance errorString = new Value(String, ''); instance calculateRealFwd = new Value(Boolean, false); instance forwardGov = new Value(Real, 0); instance forwardReal = new Value(Real, 0); instance inflation = new Value(Real, 0); instance interestA = new Value(InstrumentBond, null); instance interestB = new Value(InstrumentBond, null); instance interestC = new Value(InstrumentBond, null); instance interestD = new Value(InstrumentBond, null); instance maturityA = new Value(Time, null); instance maturityB = new Value(Time, null); instance maturityC = new Value(Time, null); instance maturityD = new Value(Time, null); } */ /* class Boolean isResourceOf(Listable node, Symbol aspect) { if (aspect == #views) return true; false; } class String resourceLabel() "Name of resource" { "inflation calculator"; } introspect Collection[Class] requiredConditions() { #(ConditionHistory); } Void calculate() { Int step = 1. instance quoteRealStep.set(null); instance yieldRealStep.set(null); instance quoteGovStep.set(null); instance yieldGovStep.set(null); instance calcInflationStep.set(null); instance calcAStep.set(null); instance calcBStep.set(null); instance calcCStep.set(null); instance calcDStep.set(null); Boolean calcReal := #(#calcA, #calcB, #calcForwardReal).includes(instance calcAspect.value); Boolean calcGov := #(#calcC, #calcD, #calcForwardBond).includes(instance calcAspect.value); if (calcReal) { instance calcRealType.set(null); if (instance calcGovType.value == null) instance calcGovType.set(#theoretical); } if (calcGov) { instance calcGovType.set(null); if (instance calcRealType.value == null) instance calcRealType.set(#theoretical); } if (instance calcAspect.value == #calcInflation) { if (instance calcRealType.value == null) instance calcRealType.set(#quoted); if (instance calcGovType.value == null) instance calcGovType.set(#quoted); } instance errorString.set(""); if (instance calcRealType.value == #quoted) { if (!instance calculateRealFwd) return null; instance quoteRealStep.set(step); step = step + 1; } if (instance calcRealType.value == #quoted) { if (!instance calculateGovFwd) return null; instance quoteGovStep.set(step); step = step + 1; } if (!calcReal) instance yieldRealStep.set(step); if (!calcGov) instance yieldGovStep.set(step); if (instance calcAspect.value == #calcInflation) { step = step + 1; instance inflation.set((((instance forwardGov.value / 100 + 1) / (instance forwardReal.value / 100 + 1)) - 1) * 100); } instance calcInflationStep.set(step); step = step + 1; if (instance maturityA.value != instance maturityC.value || instance maturityB.value != instance maturityD.value) instance errorString.set("Warning: different maturities"); Real x1; Real x2; Real x3; Real t1; Real t2; Real tf; if (calcReal) { x1 = 1 + instance forwardGov.value / 100; x2 = 1 + instance inflation.value / 100; instance forwardReal.set(((x1 / x2) - 1) * 100); instance calcRealFwdStep.set(step); step = step + 1; } if (instance calcAspect.value == #calcA) { if (instance quoteB.value == null) { instance errorString.set("Quote B is missing"); return; } x1 = 1 + instance forwardGov.value / 100; x2 = 1 + instance inflation.value / 100; x3 = 1 + instance quoteB.value / 100; t1 = instance maturityA.subtractDate360(Time.now.settlement(3)) / 360; t2 = instance maturityB.subtractDate360(Time.now.settlement(3)) / 360; t1 = instance maturityB.subtractDate360(instance maturityA) / 360; instance quoteA.set((((x3 ^ t2 / (x1 / x2) ^ tf) ^ (1 / t1)) - 1) * 100); instance calcAStep.set(step); } if (instance calcAspect.value == #calcB) { if (instance quoteA.value == null) { instance errorString.set("Quote A is missing"); return; } x1 = 1 + instance forwardGov.value / 100; x2 = 1 + instance inflation.value / 100; x3 = 1 + instance quoteA.value / 100; t1 = instance maturityA.subtractDate360(Time.now.settlement(3)) / 360; t2 = instance maturityB.subtractDate360(Time.now.settlement(3)) / 360; t1 = instance maturityB.subtractDate360(instance maturityA) / 360; instance quoteB.set((((x3 ^ t1 * (x1 * x2) ^ tf) ^ (1 / t2)) - 1) * 100); instance calcBStep.set(step); } if (calcGov) { x1 = 1 + instance forwardGov.value / 100; x2 = 1 + instance inflation.value / 100; instance forwardGov.set(((x1 * x2) - 1) * 100); instance calcGovFwdStep.set(step); step = step + 1; } if (instance calcAspect.value == #calcC) { if (instance quoteD.value == null) { instance errorString.set("Quote D is missing"); return; } x1 = 1 + instance forwardReal.value / 100; x2 = 1 + instance inflation.value / 100; x3 = 1 + instance quoteD.value / 100; t1 = instance maturityC.subtractDate360(Time.now.settlement(3)) / 360; t2 = instance maturityD.subtractDate360(Time.now.settlement(3)) / 360; t1 = instance maturityD.subtractDate360(instance maturityC) / 360; instance quoteC.set((((x3 ^ t2 / (x1 / x2) ^ tf) ^ (1 / t1)) - 1) * 100); instance calcCStep.set(step); } if (instance calcAspect.value == #calcD) { if (instance quoteC.value == null) { instance errorString.set("Quote C is missing"); return; } x1 = 1 + instance forwardReal.value / 100; x2 = 1 + instance inflation.value / 100; x3 = 1 + instance quoteC.value / 100; t1 = instance maturityC.subtractDate360(Time.now.settlement(3)) / 360; t2 = instance maturityD.subtractDate360(Time.now.settlement(3)) / 360; t1 = instance maturityD.subtractDate360(instance maturityC) / 360; instance quoteB.set((((x3 ^ t1 * (x1 * x2) ^ tf) ^ (1 / t2)) - 1) * 100); instance calcBStep.set(step); } } Boolean calculateGovFwd() { // return true if ok if (instance maturityC == null) { instance errorString.set("Maturity C missing"); return false; } if (instance maturityD == null) { instance errorString.set("Maturity D missing"); return false; } if (instance quoteC.value == null) { instance errorString.set("Quote C missing"); return false; } if (instance quoteD.value == null) { instance errorString.set("Quote D missing"); return false; } Real r1 = instance quoteC.value / 100; Real r2 = instance quoteD.value / 100; Real t1 = instance maturityC.subtractDate360(Time.now.settlement(3)) / 360; Real t2 = instance maturityD.subtractDate360(Time.now.settlement(3)) / 360; Real tf = instance maturityD.subtractDate360(instance maturityC) / 360; if (tf == 0) { instance errorString.set('No difference in maturity'); return false; } Real x1 = (1 + r2) ^ t2; Real x2 = (1 + r1) ^ t1; Real rf = (x1 / x2) ^ (1 / tf) - 1; instance forwardGov.set(rf * 100); return true; } Void calculateGovQuotes() { if (instance interestC.value != null) instance modC.set('modified'); if (instance interestD.value != null) instance modD.set('modified'); Yield yield = Producer.fetch(#yieldGovBond); external #cond_history_resolution = #day; external #cond_history = Time.now.addDays(1); external #cond_maturity = instance maturityC.subtractDate360(Time.now.settlement(3)) / 360; instance quoteC.set(yield.aspectReal(#value)); external #cond_maturity = instance maturityD.subtractDate360(Time.now.settlement(3)) / 360; instance quoteD.set(yield.aspectReal(#value)); if (!calculateGovFwd()) return; instance yieldGovDate.set(yield.toString + ', ' + Time{yield.aspectValue(#time)}.printType(#day)); calculate(); } Boolean calculateRealFwd() { // return true if ok if (instance maturityA == null) { instance errorString.set("Maturity A missing"); return false; } if (instance maturityB == null) { instance errorString.set("Maturity B missing"); return false; } if (instance quoteA.value == null) { instance errorString.set("Quote A missing"); return false; } if (instance quoteB.value == null) { instance errorString.set("Quote B missing"); return false; } Real r1 = instance quoteA.value / 100; Real r2 = instance quoteB.value / 100; Real t1 = instance maturityA.subtractDate360(Time.now.settlement(3)) / 360; Real t2 = instance maturityB.subtractDate360(Time.now.settlement(3)) / 360; Real tf = instance maturityB.subtractDate360(instance maturityA) / 360; if (tf == 0) { instance errorString.set('No difference in maturity'); return false; } Real x1 = (1 + r2) ^ t2; Real x2 = (1 + r1) ^ t1; Real rf = (x1 / x2) ^ (1 / tf) - 1; instance forwardReal.set(rf * 100); return true; } Void calculateGovQuotes() { if (instance interestA.value != null) instance modA.set('modified'); if (instance interestB.value != null) instance modB.set('modified'); Yield yield = Producer.fetch(#yieldReal); external #cond_history_resolution = #day; external #cond_history = Time.now.addDays(1); external #cond_maturity = instance maturityA.subtractDate360(Time.now.settlement(3)) / 360; instance quoteA.set(yield.aspectReal(#value)); external #cond_maturity = instance maturityB.subtractDate360(Time.now.settlement(3)) / 360; instance quoteB.set(yield.aspectReal(#value)); if (!calculateRealFwd()) return; instance yieldRealDate.set(yield.toString + ', ' + Time{yield.aspectValue(#time)}.printType(#day)); calculate(); } Void designView(WidgetWorkspace ws) { InstrumentBond bond = InstrumentBond{partAt(0).source}; ws.addHeader(new Place(0, 0).setDimensions(3, 1).setWeight(1.0, 0.0, #horizontal), this); ws.addLabel(new Place(0, 1), "Date"); Condition condHist = conditionType(ConditionHistory); ws.addField( new Place(1, 1).setWeight(1.0, 0.0, #horizontal).setDimensions(2, 1), condHist, null); ws.addLabel(new Place(0, 2), "Settlement"); Value[Int] settlement = new Value(Int, 3); ws.addField( new Place(1, 2).setPrefSize(30, 0).setFill(#none), settlement, null); ws.addLabel(new Place(2, 1), "days"); Value[Time] settlementDate = new Value(Time, null); WidgetField f = ws.addField( new Place(1, 3).setDimensions(2, 1), settlementDate, null); ws.setTrigger(Void(){ settlementDate.set(Time{condHist.focus}.settlement(settlement.value)); }); // f.addListener(Void(){settlement = null}); ws.addLabel(new Place(0, 4), "Maturity"); Value[Time] maturity = new Value(Time, bond.aspectValue(#maturity)); ws.addField( new Place(1, 4).setDimensions(2, 1), maturity, null); ws.addLabel(new Place(0, 5), "Rate"); Value[Real] rate = new Value(Real, bond.aspectValue(#bid)); ws.addField( new Place(1, 5).setDimensions(2, 1), rate, null); condHist.addListener(Void() {rate.set(bond.aspectValue(#bid))}); ws.addLabel(new Place(0, 6), "Coupon"); Value[Real] coupon = new Value(Real, bond.aspectValue(#coupon)); ws.addField( new Place(1, 6).setDimensions(2, 1), coupon, null); ws.addLabel(new Place(0, 7), "Dirty price"); Value[Real] dirtyPrice = new Value(Real, null); ws.addField( new Place(1, 7).setDimensions(2, 1), dirtyPrice, null); ws.setTrigger(Void(){ dirtyPrice.set(InstrumentBond.dirtyPriceQuote(settlementDate.value, maturity.value, rate.value, coupon.value)); }); ws.addLabel(new Place(0, 8), "Clean price"); Value[Real] cleanPrice = new Value(Real, null); ws.addField( new Place(1, 8).setDimensions(2, 1), cleanPrice, null); ws.setTrigger(Void(){ cleanPrice.set(InstrumentBond.cleanPriceQuote(settlementDate.value, maturity.value, rate.value, coupon.value)); }); ws.addLabel(new Place(0, 9), "Delta"); Value[Real] delta = new Value(Real, null); ws.addField( new Place(1, 9).setDimensions(2, 1), delta, null); ws.setTrigger(Void(){ delta.set(InstrumentBond.delta(settlementDate.value, maturity.value, rate.value, coupon.value)); }); ws.addLabel(new Place(0, 10), "Duration"); Value[Real] duration = new Value(Real, null); ws.addField( new Place(1, 10).setDimensions(2, 1), duration, null); ws.setTrigger(Void(){ duration.set(InstrumentBond.duration(settlementDate.value, maturity.value, rate.value, coupon.value)); }); ws.addLabel(new Place(0, 11), "Mod Dur"); Value[Real] modDuration = new Value(Real, null); ws.addField( new Place(1, 11).setDimensions(2, 1), modDuration, null); ws.setTrigger(Void(){ modDuration.set(InstrumentBond.modDuration(settlementDate.value, maturity.value, rate.value, coupon.value)); }); ws.addLabel(new Place(0, 12), "Convexity"); Value[Real] convexity = new Value(Real, null); ws.addField( new Place(1, 12).setDimensions(2, 1), convexity, null); ws.setTrigger(Void(){ convexity.set(InstrumentBond.convexity(settlementDate.value, maturity.value, rate.value, coupon.value)); }); } changeBidA self interestA value isNil ifFalse: [self modA value: 'modified']. self calculate.! changeBidB self interestB value isNil ifFalse: [self modB value: 'modified']. self calculate.! changeBidC self interestC value isNil ifFalse: [self modC value: 'modified']. self calculate.! changeBidD self interestD value isNil ifFalse: [self modD value: 'modified']. self calculate.! changeCalc self calculate.! changeGovFwd self calcGovType setValue: #theoretical. self yieldGovDate value: ''. self quoteC value: nil. self quoteD value: nil. self calculate.! changeGovType (self calcGovType value = #theoretical) ifTrue: [ self maturityC: self maturityA. self maturityD: self maturityB. self calculateGovQuotes] ifFalse: [ self interestC value isNil ifFalse: [ self maturityC: self interestC value realtime maturity. self quoteC value: self interestC value realtime bid. self modC value: '']. self interestD value isNil ifFalse: [ self maturityD: self interestD value realtime maturity. self quoteD value: self interestD value realtime bid. self modD value: '']. self yieldGovDate value: ''. self calculate].! changeInflation self calculate.! changeMaturityA self maturityA: (BaliTime fromString: self maturityAText value). self interestA value isNil ifFalse: [self modA value: 'modified']. self calcRealType value = #theoretical ifTrue: [self calculateRealQuotes] ifFalse: [self calculate].! changeMaturityB self maturityB: (BaliTime fromString: self maturityBText value). self interestB value isNil ifFalse: [self modB value: 'modified']. self calcRealType value = #theoretical ifTrue: [self calculateRealQuotes] ifFalse: [self calculate].! changeMaturityC self maturityC: (BaliTime fromString: self maturityCText value). self interestC value isNil ifFalse: [self modC value: 'modified']. self calcGovType value = #theoretical ifTrue: [self calculateGovQuotes] ifFalse: [self calculate].! changeMaturityD self maturityD: (BaliTime fromString: self maturityDText value). self interestD value isNil ifFalse: [self modD value: 'modified']. self calcGovType value = #theoretical ifTrue: [self calculateGovQuotes] ifFalse: [self calculate].! changeRealFwd self calcRealType setValue: #theoretical. self yieldRealDate value: ''. self quoteA value: nil. self quoteB value: nil. self calculate.! changeRealType (self calcRealType value = #theoretical) ifTrue: [ self maturityA: self maturityC. self maturityB: self maturityD. self calculateRealQuotes] ifFalse: [ self interestA value isNil ifFalse: [ self maturityA: self interestA value realtime maturity. self quoteA value: self interestA value realtime bid. self modA value: '']. self interestB value isNil ifFalse: [ self maturityB: self interestB value realtime maturity. self quoteB value: self interestB value realtime bid. self modB value: '']. self yieldRealDate value: ''. self calculate].! fetchA | src | src := self display user currentSource. (src isKindOf: BaliSecInterest) ifFalse: [ ^Dialog warn: 'Current source must be an interest']. src checkRealtime: true. src realtime isNil ifTrue: [^Dialog warn: 'No data for ' , src name]. self interestA value: src. self maturityA: src realtime maturity. self quoteA value: src realtime bid. self modA value: ''. self calculate.! fetchB | src | src := self display user currentSource. (src isKindOf: BaliSecInterest) ifFalse: [ ^Dialog warn: 'Current source must be an interest']. src checkRealtime: true. src realtime isNil ifTrue: [^Dialog warn: 'No data for ' , src name]. self interestB value: src. self maturityB: src realtime maturity. self quoteB value: src realtime bid. self modB value: ''. self calculate.! fetchC | src | src := self display user currentSource. (src isKindOf: BaliSecInterest) ifFalse: [ ^Dialog warn: 'Current source must be an interest']. src checkRealtime: true. src realtime isNil ifTrue: [^Dialog warn: 'No data for ' , src name]. self interestC value: src. self maturityC: src realtime maturity. self quoteC value: src realtime bid. self modC value: ''. self calculate.! fetchD | src | src := self display user currentSource. (src isKindOf: BaliSecInterest) ifFalse: [ ^Dialog warn: 'Current source must be an interest']. src checkRealtime: true. src realtime isNil ifTrue: [^Dialog warn: 'No data for ' , src name]. self interestD value: src. self maturityD: src realtime maturity. self quoteD value: src realtime bid. self modD value: ''. self calculate.! ! !BaliCalcInflation methodsFor: 'aspects'! curves |list| list := List new. self interestA value isNil ifFalse: [list add: self interestA value]. self interestB value isNil ifFalse: [list add: self interestB value]. self interestC value isNil ifFalse: [list add: self interestC value]. self interestD value isNil ifFalse: [list add: self interestD value]. list add: (self server element: #yieldGovBond). list add: (self server element: #yieldReal). ^list! firstSource ^nil! maturityA ^maturityA! maturityA: aBaliTime aBaliTime isNil ifFalse: [ maturityA := aBaliTime. self maturityAText value: (aBaliTime printType: #day)].! maturityAText "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^maturityAText isNil ifTrue: [maturityAText := String new asValue] ifFalse: [maturityAText]! maturityB ^maturityB! maturityB: aBaliTime aBaliTime isNil ifFalse: [ maturityB := aBaliTime. self maturityBText value: (aBaliTime printType: #day)]! maturityBText "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^maturityBText isNil ifTrue: [maturityBText := String new asValue] ifFalse: [maturityBText]! maturityC ^maturityC! maturityC: aBaliTime aBaliTime isNil ifFalse: [ maturityC := aBaliTime. self maturityCText value: (aBaliTime printType: #day)]! maturityCText "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^maturityCText isNil ifTrue: [maturityCText := String new asValue] ifFalse: [maturityCText]! maturityD ^maturityD! maturityD: aBaliTime aBaliTime isNil ifFalse: [ maturityD := aBaliTime. self maturityDText value: (aBaliTime printType: #day)]! maturityDText "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^maturityDText isNil ifTrue: [maturityDText := String new asValue] ifFalse: [maturityDText]! modA "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^modA isNil ifTrue: [modA := String new asValue] ifFalse: [modA]! modB "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^modB isNil ifTrue: [modB := String new asValue] ifFalse: [modB]! modC "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^modC isNil ifTrue: [modC := String new asValue] ifFalse: [modC]! modD "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^modD isNil ifTrue: [modD := String new asValue] ifFalse: [modD]! quoteA ^quoteA isNil ifTrue: [quoteA := nil asValue] ifFalse: [quoteA]! quoteB ^quoteB isNil ifTrue: [quoteB := nil asValue] ifFalse: [quoteB]! quoteC ^quoteC isNil ifTrue: [quoteC := nil asValue] ifFalse: [quoteC]! quoteD ^quoteD isNil ifTrue: [quoteD := nil asValue] ifFalse: [quoteD]! quoteGovStep ^quoteGovStep isNil ifTrue: [quoteGovStep := nil asValue] ifFalse: [quoteGovStep]! quoteRealStep ^quoteRealStep isNil ifTrue: [quoteRealStep := nil asValue] ifFalse: [quoteRealStep]! yieldGovDate ^yieldGovDate isNil ifTrue: [yieldGovDate := String new asValue] ifFalse: [yieldGovDate]! yieldGovStep ^yieldGovStep isNil ifTrue: [yieldGovStep := nil asValue] ifFalse: [yieldGovStep]! yieldRealDate ^yieldRealDate isNil ifTrue: [yieldRealDate := String new asValue] ifFalse: [yieldRealDate]! yieldRealStep ^yieldRealStep isNil ifTrue: [yieldRealStep := nil asValue] ifFalse: [yieldRealStep]! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! BaliCalcInflation class instanceVariableNames: ''! !BaliCalcInflation class methodsFor: 'resources'! description "UIMaskEditor new openOnClass: self andSelector: #description" ^CachedImage on: (Image extent: 34@31 depth: 3 bitsPerPixel: 4 palette: (MappedPalette withColors: ((Array new: 5) at: 1 put: ColorValue black; at: 2 put: ColorValue blue; at: 3 put: ColorValue red; at: 4 put: ColorValue white; at: 5 put: ColorValue darkGreen; yourself)) usingBits: (ByteArray fromPackedString: */
org.edgescript.TypeScriptInfo.defineTypecom.nodelab.interest.CalcInflation
org.edgescript.TypeScriptInfo.prerequisiteScriptsList{}