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:
Old | New | Differences | |
---|---|---|---|
7 | 7 | ||
8 | 8 | let E = 2718282 | |
9 | 9 | ||
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 | |
11 | 22 | let deltaT = fraction(T, FACTOR, (365 * n)) | |
12 | 23 | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
13 | 24 | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
15 | 26 | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
16 | 27 | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
17 | 28 | 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)) | |
25 | 32 | else 0 | |
26 | - | let secondInnerPrice = if (( | |
27 | - | then ( | |
33 | + | let secondInnerPrice = if ((projectedPrices[1] > (K * FACTOR))) | |
34 | + | then (projectedPrices[1] - (K * FACTOR)) | |
28 | 35 | else 0 | |
29 | - | let thirdInnerPrice = if (( | |
30 | - | then ( | |
36 | + | let thirdInnerPrice = if ((projectedPrices[2] > (K * FACTOR))) | |
37 | + | then (projectedPrices[2] - (K * FACTOR)) | |
31 | 38 | else 0 | |
32 | - | let fourthInnerPrice = if (( | |
33 | - | then ( | |
39 | + | let fourthInnerPrice = if ((projectedPrices[3] > (K * FACTOR))) | |
40 | + | then (projectedPrices[3] - K) | |
34 | 41 | else 0 | |
35 | - | let fifthInnerPrice = if (( | |
36 | - | then ( | |
42 | + | let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR))) | |
43 | + | then (projectedPrices[4] - K) | |
37 | 44 | else 0 | |
38 | 45 | let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR) | |
39 | 46 | let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR) | |
50 | 57 | ||
51 | 58 | ||
52 | 59 | @Callable(i) | |
53 | - | func calculatCallPrice (T,S,K,r,sigma | |
54 | - | let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma | |
55 | - | WriteSet([ | |
60 | + | func calculatCallPrice (T,S,K,r,sigma) = { | |
61 | + | let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma) | |
62 | + | WriteSet([DataEntry("finalValue", finalValue)]) | |
56 | 63 | } | |
57 | 64 | ||
58 | 65 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let FACTOR = 1000000 | |
5 | 5 | ||
6 | 6 | let FACTORDECIMALS = 6 | |
7 | 7 | ||
8 | 8 | let E = 2718282 | |
9 | 9 | ||
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 | |
11 | 22 | let deltaT = fraction(T, FACTOR, (365 * n)) | |
12 | 23 | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
13 | 24 | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
14 | 25 | let down = fraction(1, (FACTOR * FACTOR), up) | |
15 | 26 | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
16 | 27 | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
17 | 28 | 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)) | |
25 | 32 | else 0 | |
26 | - | let secondInnerPrice = if (( | |
27 | - | then ( | |
33 | + | let secondInnerPrice = if ((projectedPrices[1] > (K * FACTOR))) | |
34 | + | then (projectedPrices[1] - (K * FACTOR)) | |
28 | 35 | else 0 | |
29 | - | let thirdInnerPrice = if (( | |
30 | - | then ( | |
36 | + | let thirdInnerPrice = if ((projectedPrices[2] > (K * FACTOR))) | |
37 | + | then (projectedPrices[2] - (K * FACTOR)) | |
31 | 38 | else 0 | |
32 | - | let fourthInnerPrice = if (( | |
33 | - | then ( | |
39 | + | let fourthInnerPrice = if ((projectedPrices[3] > (K * FACTOR))) | |
40 | + | then (projectedPrices[3] - K) | |
34 | 41 | else 0 | |
35 | - | let fifthInnerPrice = if (( | |
36 | - | then ( | |
42 | + | let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR))) | |
43 | + | then (projectedPrices[4] - K) | |
37 | 44 | else 0 | |
38 | 45 | let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR) | |
39 | 46 | let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR) | |
40 | 47 | let firstLevelThirdValue = fraction((fraction(thirdInnerPrice, pUp, FACTOR) + fraction(fourthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
41 | 48 | let firstLevelFourthValue = fraction((fraction(fourthInnerPrice, pUp, FACTOR) + fraction(fifthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
42 | 49 | let secondLevelFirstValue = fraction((fraction(firstLevelFirstValue, pUp, FACTOR) + fraction(firstLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
43 | 50 | let secondLevelSecondValue = fraction((fraction(firstLevelSecondValue, pUp, FACTOR) + fraction(firstLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
44 | 51 | let secondLevelThirdValue = fraction((fraction(firstLevelThirdValue, pUp, FACTOR) + fraction(firstLevelFourthValue, pDown, FACTOR)), df, FACTOR) | |
45 | 52 | let thirdLevelFirstValue = fraction((fraction(secondLevelFirstValue, pUp, FACTOR) + fraction(secondLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
46 | 53 | let thirdLevelSecondValue = fraction((fraction(secondLevelSecondValue, pUp, FACTOR) + fraction(secondLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
47 | 54 | let fourthLevel = fraction((fraction(thirdLevelFirstValue, pUp, FACTOR) + fraction(thirdLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
48 | 55 | fourthLevel | |
49 | 56 | } | |
50 | 57 | ||
51 | 58 | ||
52 | 59 | @Callable(i) | |
53 | - | func calculatCallPrice (T,S,K,r,sigma | |
54 | - | let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma | |
55 | - | WriteSet([ | |
60 | + | func calculatCallPrice (T,S,K,r,sigma) = { | |
61 | + | let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma) | |
62 | + | WriteSet([DataEntry("finalValue", finalValue)]) | |
56 | 63 | } | |
57 | 64 | ||
58 | 65 |
github/deemru/w8io/c3f4982 33.78 ms ◑