tx · GbGXhbErYH3w1rE5fusFHMgdDQPPVGQ17sticyZjuFW9

3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC:  -0.09000000 Waves

2020.01.10 13:05 [847738] smart account 3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC > SELF 0.00000000 Waves

{ "type": 13, "id": "GbGXhbErYH3w1rE5fusFHMgdDQPPVGQ17sticyZjuFW9", "fee": 9000000, "feeAssetId": null, "timestamp": 1578650689458, "version": 1, "sender": "3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC", "senderPublicKey": "GfU9G8BJcrUfL2H2QthDHbeLHThimafNuKPuDQm9wbzr", "proofs": [ "2kJZDdGXgprPv9CzZWua3J6AaQqs5fQz95qDUAp4DtduxQ7r49Hg2tHbZLb82P54ggXUfnJfL3rW5bpu7T1uQZHM" ], "script": "base64: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Zm91cnRoSW5uZXJQcmljZQUAAAAFcERvd24FAAAABkZBQ1RPUgUAAAACZGYFAAAABkZBQ1RPUgQAAAAVZmlyc3RMZXZlbEZvdXJ0aFZhbHVlCQAAawAAAAMJAABkAAAAAgkAAGsAAAADBQAAABBmb3VydGhJbm5lclByaWNlBQAAAANwVXAFAAAABkZBQ1RPUgkAAGsAAAADBQAAAA9maWZ0aElubmVyUHJpY2UFAAAABXBEb3duBQAAAAZGQUNUT1IFAAAAAmRmBQAAAAZGQUNUT1IEAAAAFXNlY29uZExldmVsRmlyc3RWYWx1ZQkAAGsAAAADCQAAZAAAAAIJAABrAAAAAwUAAAAUZmlyc3RMZXZlbEZpcnN0VmFsdWUFAAAAA3BVcAUAAAAGRkFDVE9SCQAAawAAAAMFAAAAFWZpcnN0TGV2ZWxTZWNvbmRWYWx1ZQUAAAAFcERvd24FAAAABkZBQ1RPUgUAAAACZGYFAAAABkZBQ1RPUgQAAAAWc2Vjb25kTGV2ZWxTZWNvbmRWYWx1ZQkAAGsAAAADCQAAZAAAAAIJAABrAAAAAwUAAAAVZmlyc3RMZXZlbFNlY29uZFZhbHVlBQAAAANwVXAFAAAABkZBQ1RPUgkAAGsAAAADBQAAABRmaXJzdExldmVsVGhpcmRWYWx1ZQUAAAAFcERvd24FAAAABkZBQ1RPUgUAAAACZGYFAAAABkZBQ1RPUgQAAAAVc2Vjb25kTGV2ZWxUaGlyZFZhbHVlCQAAawAAAAMJAABkAAAAAgkAAGsAAAADBQAAABRmaXJzdExldmVsVGhpcmRWYWx1ZQUAAAADcFVwBQAAAAZGQUNUT1IJAABrAAAAAwUAAAAVZmlyc3RMZXZlbEZvdXJ0aFZhbHVlBQAAAAVwRG93bgUAAAAGRkFDVE9SBQAAAAJkZgUAAAAGRkFDVE9SBAAAABR0aGlyZExldmVsRmlyc3RWYWx1ZQkAAGsAAAADCQAAZAAAAAIJAABrAAAAAwUAAAAVc2Vjb25kTGV2ZWxGaXJzdFZhbHVlBQAAAANwVXAFAAAABkZBQ1RPUgkAAGsAAAADBQAAABZzZWNvbmRMZXZlbFNlY29uZFZhbHVlBQAAAAVwRG93bgUAAAAGRkFDVE9SBQAAAAJkZgUAAAAGRkFDVE9SBAAAABV0aGlyZExldmVsU2Vjb25kVmFsdWUJAABrAAAAAwkAAGQAAAACCQAAawAAAAMFAAAAFnNlY29uZExldmVsU2Vjb25kVmFsdWUFAAAAA3BVcAUAAAAGRkFDVE9SCQAAawAAAAMFAAAAFXNlY29uZExldmVsVGhpcmRWYWx1ZQUAAAAFcERvd24FAAAABkZBQ1RPUgUAAAACZGYFAAAABkZBQ1RPUgQAAAALZm91cnRoTGV2ZWwJAABrAAAAAwkAAGQAAAACCQAAawAAAAMFAAAAFHRoaXJkTGV2ZWxGaXJzdFZhbHVlBQAAAANwVXAFAAAABkZBQ1RPUgkAAGsAAAADBQAAABV0aGlyZExldmVsU2Vjb25kVmFsdWUFAAAABXBEb3duBQAAAAZGQUNUT1IFAAAAAmRmBQAAAAZGQUNUT1IFAAAAC2ZvdXJ0aExldmVsAAAAAQAAAAFpAQAAABFjYWxjdWxhdENhbGxQcmljZQAAAAUAAAABVAAAAAFTAAAAAUsAAAABcgAAAAVzaWdtYQQAAAAKZmluYWxWYWx1ZQkBAAAAFWNveFJvc3NSdWJpbnN0ZWluQ2FsbAAAAAUFAAAAAVQFAAAAAVMFAAAAAUsFAAAAAXIFAAAABXNpZ21hCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAApmaW5hbFZhbHVlBQAAAApmaW5hbFZhbHVlBQAAAANuaWwAAAAAM6EPjg==", "chainId": 84, "height": 847738, "spentComplexity": 0 } View: original | compacted Prev: FtYf9Ty9HHTD7KVaQYhuMPj3xVGU8yNYvLSjkGR3KdwC Next: BVzM1SfJ1wAeqv6vYHS7zMKZCFmzuK3hZhxCMv9CdKjp Diff:
OldNewDifferences
77
88 let E = 2718282
99
10-func coxRossRubinsteinCall (T,S,K,r,sigma,n) = {
10+func calculateProjectedPrices (S,up,down) = {
11+ let firstProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
12+ let secondProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
13+ let thirdProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
14+ let fourthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
15+ let fifthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
16+[firstProjectedPrice, secondProjectedPrice, thirdProjectedPrice, fourthProjectedPrice, fifthProjectedPrice]
17+ }
18+
19+
20+func coxRossRubinsteinCall (T,S,K,r,sigma) = {
21+ let n = 4
1122 let deltaT = fraction(T, FACTOR, (365 * n))
1223 let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP)
1324 let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP)
1526 let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP)
1627 let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down))
1728 let pDown = (FACTOR - pUp)
18- let firstProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
19- let secondProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
20- let thirdProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
21- let fourthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
22- let fifthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
23- let firstInnerPrice = if ((firstProjectedPrice > (K * FACTOR)))
24- then (firstProjectedPrice - (K * FACTOR))
29+ let projectedPrices = calculateProjectedPrices(S, up, down)
30+ let firstInnerPrice = if ((projectedPrices[0] > (K * FACTOR)))
31+ then (projectedPrices[0] - (K * FACTOR))
2532 else 0
26- let secondInnerPrice = if ((secondProjectedPrice > (K * FACTOR)))
27- then (secondProjectedPrice - (K * FACTOR))
33+ let secondInnerPrice = if ((projectedPrices[1] > (K * FACTOR)))
34+ then (projectedPrices[1] - (K * FACTOR))
2835 else 0
29- let thirdInnerPrice = if ((thirdProjectedPrice > (K * FACTOR)))
30- then (thirdProjectedPrice - (K * FACTOR))
36+ let thirdInnerPrice = if ((projectedPrices[2] > (K * FACTOR)))
37+ then (projectedPrices[2] - (K * FACTOR))
3138 else 0
32- let fourthInnerPrice = if ((fourthProjectedPrice > (K * FACTOR)))
33- then (fourthProjectedPrice - K)
39+ let fourthInnerPrice = if ((projectedPrices[3] > (K * FACTOR)))
40+ then (projectedPrices[3] - K)
3441 else 0
35- let fifthInnerPrice = if ((fifthProjectedPrice > (K * FACTOR)))
36- then (fifthProjectedPrice - K)
42+ let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR)))
43+ then (projectedPrices[4] - K)
3744 else 0
3845 let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR)
3946 let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR)
5057
5158
5259 @Callable(i)
53-func calculatCallPrice (T,S,K,r,sigma,n) = {
54- let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma, n)
55- WriteSet([DataEntry("deltaT", 0), DataEntry("sqrtDeltaT", 0), DataEntry("up", 0), DataEntry("down", 0), DataEntry("df", 0), DataEntry("pUp", 0), DataEntry("pDown", 0), DataEntry("firstInnerPrice", 0), DataEntry("secondInnerPrice", 0), DataEntry("thirdInnerPrice", 0), DataEntry("fourthInnerPrice", 0), DataEntry("fifthInnerPrice", 0), DataEntry("firstLevelFirstValue", 0), DataEntry("finalValue", finalValue)])
60+func calculatCallPrice (T,S,K,r,sigma) = {
61+ let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma)
62+ WriteSet([DataEntry("finalValue", finalValue)])
5663 }
5764
5865
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let FACTOR = 1000000
55
66 let FACTORDECIMALS = 6
77
88 let E = 2718282
99
10-func coxRossRubinsteinCall (T,S,K,r,sigma,n) = {
10+func calculateProjectedPrices (S,up,down) = {
11+ let firstProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
12+ let secondProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
13+ let thirdProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
14+ let fourthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
15+ let fifthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
16+[firstProjectedPrice, secondProjectedPrice, thirdProjectedPrice, fourthProjectedPrice, fifthProjectedPrice]
17+ }
18+
19+
20+func coxRossRubinsteinCall (T,S,K,r,sigma) = {
21+ let n = 4
1122 let deltaT = fraction(T, FACTOR, (365 * n))
1223 let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP)
1324 let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP)
1425 let down = fraction(1, (FACTOR * FACTOR), up)
1526 let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP)
1627 let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down))
1728 let pDown = (FACTOR - pUp)
18- let firstProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
19- let secondProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
20- let thirdProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
21- let fourthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
22- let fifthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR)
23- let firstInnerPrice = if ((firstProjectedPrice > (K * FACTOR)))
24- then (firstProjectedPrice - (K * FACTOR))
29+ let projectedPrices = calculateProjectedPrices(S, up, down)
30+ let firstInnerPrice = if ((projectedPrices[0] > (K * FACTOR)))
31+ then (projectedPrices[0] - (K * FACTOR))
2532 else 0
26- let secondInnerPrice = if ((secondProjectedPrice > (K * FACTOR)))
27- then (secondProjectedPrice - (K * FACTOR))
33+ let secondInnerPrice = if ((projectedPrices[1] > (K * FACTOR)))
34+ then (projectedPrices[1] - (K * FACTOR))
2835 else 0
29- let thirdInnerPrice = if ((thirdProjectedPrice > (K * FACTOR)))
30- then (thirdProjectedPrice - (K * FACTOR))
36+ let thirdInnerPrice = if ((projectedPrices[2] > (K * FACTOR)))
37+ then (projectedPrices[2] - (K * FACTOR))
3138 else 0
32- let fourthInnerPrice = if ((fourthProjectedPrice > (K * FACTOR)))
33- then (fourthProjectedPrice - K)
39+ let fourthInnerPrice = if ((projectedPrices[3] > (K * FACTOR)))
40+ then (projectedPrices[3] - K)
3441 else 0
35- let fifthInnerPrice = if ((fifthProjectedPrice > (K * FACTOR)))
36- then (fifthProjectedPrice - K)
42+ let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR)))
43+ then (projectedPrices[4] - K)
3744 else 0
3845 let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR)
3946 let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR)
4047 let firstLevelThirdValue = fraction((fraction(thirdInnerPrice, pUp, FACTOR) + fraction(fourthInnerPrice, pDown, FACTOR)), df, FACTOR)
4148 let firstLevelFourthValue = fraction((fraction(fourthInnerPrice, pUp, FACTOR) + fraction(fifthInnerPrice, pDown, FACTOR)), df, FACTOR)
4249 let secondLevelFirstValue = fraction((fraction(firstLevelFirstValue, pUp, FACTOR) + fraction(firstLevelSecondValue, pDown, FACTOR)), df, FACTOR)
4350 let secondLevelSecondValue = fraction((fraction(firstLevelSecondValue, pUp, FACTOR) + fraction(firstLevelThirdValue, pDown, FACTOR)), df, FACTOR)
4451 let secondLevelThirdValue = fraction((fraction(firstLevelThirdValue, pUp, FACTOR) + fraction(firstLevelFourthValue, pDown, FACTOR)), df, FACTOR)
4552 let thirdLevelFirstValue = fraction((fraction(secondLevelFirstValue, pUp, FACTOR) + fraction(secondLevelSecondValue, pDown, FACTOR)), df, FACTOR)
4653 let thirdLevelSecondValue = fraction((fraction(secondLevelSecondValue, pUp, FACTOR) + fraction(secondLevelThirdValue, pDown, FACTOR)), df, FACTOR)
4754 let fourthLevel = fraction((fraction(thirdLevelFirstValue, pUp, FACTOR) + fraction(thirdLevelSecondValue, pDown, FACTOR)), df, FACTOR)
4855 fourthLevel
4956 }
5057
5158
5259 @Callable(i)
53-func calculatCallPrice (T,S,K,r,sigma,n) = {
54- let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma, n)
55- WriteSet([DataEntry("deltaT", 0), DataEntry("sqrtDeltaT", 0), DataEntry("up", 0), DataEntry("down", 0), DataEntry("df", 0), DataEntry("pUp", 0), DataEntry("pDown", 0), DataEntry("firstInnerPrice", 0), DataEntry("secondInnerPrice", 0), DataEntry("thirdInnerPrice", 0), DataEntry("fourthInnerPrice", 0), DataEntry("fifthInnerPrice", 0), DataEntry("firstLevelFirstValue", 0), DataEntry("finalValue", finalValue)])
60+func calculatCallPrice (T,S,K,r,sigma) = {
61+ let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma)
62+ WriteSet([DataEntry("finalValue", finalValue)])
5663 }
5764
5865

github/deemru/w8io/6500d08 
62.01 ms