tx · BVzM1SfJ1wAeqv6vYHS7zMKZCFmzuK3hZhxCMv9CdKjp 3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC: -0.09000000 Waves 2020.01.10 20:23 [848179] smart account 3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC > SELF 0.00000000 Waves
{ "type": 13, "id": "BVzM1SfJ1wAeqv6vYHS7zMKZCFmzuK3hZhxCMv9CdKjp", "fee": 9000000, "feeAssetId": null, "timestamp": 1578677008616, "version": 1, "sender": "3MvQVj21fwPXbyXsrVDV2Sf639TcWTsaxmC", "senderPublicKey": "GfU9G8BJcrUfL2H2QthDHbeLHThimafNuKPuDQm9wbzr", "proofs": [ "5MzJ9zXA8dQFs63xf43dXUNi4ZDznBS4w5s34p8s1VmXkP28jrjEhoU9m1gvcypwiTR6fUWJzaWs5mzngBet9WH" ], "script": "base64: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", "chainId": 84, "height": 848179, "spentComplexity": 0 } View: original | compacted Prev: GbGXhbErYH3w1rE5fusFHMgdDQPPVGQ17sticyZjuFW9 Next: none Diff:
Old | New | Differences | |
---|---|---|---|
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | - | func coxRossRubinsteinCall (T,S,K,r,sigma) = { | |
21 | - | let n = 4 | |
22 | - | let deltaT = fraction(T, FACTOR, (365 * n)) | |
23 | - | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
24 | - | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
25 | - | let down = fraction(1, (FACTOR * FACTOR), up) | |
26 | - | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
27 | - | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
28 | - | let pDown = (FACTOR - pUp) | |
29 | - | let projectedPrices = calculateProjectedPrices(S, up, down) | |
20 | + | func calculateInnerPrices (projectedPrices,K) = { | |
30 | 21 | let firstInnerPrice = if ((projectedPrices[0] > (K * FACTOR))) | |
31 | 22 | then (projectedPrices[0] - (K * FACTOR)) | |
32 | 23 | else 0 | |
42 | 33 | let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR))) | |
43 | 34 | then (projectedPrices[4] - K) | |
44 | 35 | else 0 | |
45 | - | let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR) | |
46 | - | let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR) | |
47 | - | let firstLevelThirdValue = fraction((fraction(thirdInnerPrice, pUp, FACTOR) + fraction(fourthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
48 | - | let firstLevelFourthValue = fraction((fraction(fourthInnerPrice, pUp, FACTOR) + fraction(fifthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
49 | - | let secondLevelFirstValue = fraction((fraction(firstLevelFirstValue, pUp, FACTOR) + fraction(firstLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
50 | - | let secondLevelSecondValue = fraction((fraction(firstLevelSecondValue, pUp, FACTOR) + fraction(firstLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
51 | - | let secondLevelThirdValue = fraction((fraction(firstLevelThirdValue, pUp, FACTOR) + fraction(firstLevelFourthValue, pDown, FACTOR)), df, FACTOR) | |
52 | - | let thirdLevelFirstValue = fraction((fraction(secondLevelFirstValue, pUp, FACTOR) + fraction(secondLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
53 | - | let thirdLevelSecondValue = fraction((fraction(secondLevelSecondValue, pUp, FACTOR) + fraction(secondLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
54 | - | let fourthLevel = fraction((fraction(thirdLevelFirstValue, pUp, FACTOR) + fraction(thirdLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
55 | - | fourthLevel | |
36 | + | [firstInnerPrice, secondInnerPrice, thirdInnerPrice, fourthInnerPrice, fifthInnerPrice] | |
37 | + | } | |
38 | + | ||
39 | + | ||
40 | + | func calculatFirstLevel (innerPrices,pUp,pDown,df) = { | |
41 | + | let firstValue = fraction((fraction(innerPrices[0], pUp, FACTOR) + fraction(innerPrices[1], pDown, FACTOR)), df, FACTOR) | |
42 | + | let secondValue = fraction((fraction(innerPrices[1], pUp, FACTOR) + fraction(innerPrices[2], pDown, FACTOR)), df, FACTOR) | |
43 | + | let thirdValue = fraction((fraction(innerPrices[2], pUp, FACTOR) + fraction(innerPrices[3], pDown, FACTOR)), df, FACTOR) | |
44 | + | let fourthValue = fraction((fraction(innerPrices[3], pUp, FACTOR) + fraction(innerPrices[4], pDown, FACTOR)), df, FACTOR) | |
45 | + | [firstValue, secondValue, thirdValue, fourthValue] | |
46 | + | } | |
47 | + | ||
48 | + | ||
49 | + | func calculateSecondLevel (firstLevel,pUp,pDown,df) = { | |
50 | + | let firstValue = fraction((fraction(firstLevel[0], pUp, FACTOR) + fraction(firstLevel[1], pDown, FACTOR)), df, FACTOR) | |
51 | + | let secondValue = fraction((fraction(firstLevel[1], pUp, FACTOR) + fraction(firstLevel[2], pDown, FACTOR)), df, FACTOR) | |
52 | + | let thirdValue = fraction((fraction(firstLevel[2], pUp, FACTOR) + fraction(firstLevel[3], pDown, FACTOR)), df, FACTOR) | |
53 | + | [firstValue, secondValue, thirdValue] | |
54 | + | } | |
55 | + | ||
56 | + | ||
57 | + | func calculateThirdLevel (secondLevel,pUp,pDown,df) = { | |
58 | + | let firstValue = fraction((fraction(secondLevel[0], pUp, FACTOR) + fraction(secondLevel[1], pDown, FACTOR)), df, FACTOR) | |
59 | + | let secondValue = fraction((fraction(secondLevel[1], pUp, FACTOR) + fraction(secondLevel[2], pDown, FACTOR)), df, FACTOR) | |
60 | + | [firstValue, secondValue] | |
61 | + | } | |
62 | + | ||
63 | + | ||
64 | + | func coxRossRubinsteinCall (T,S,K,r,sigma) = { | |
65 | + | let n = 4 | |
66 | + | let deltaT = fraction(T, FACTOR, (365 * n)) | |
67 | + | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
68 | + | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
69 | + | let down = fraction(1, (FACTOR * FACTOR), up) | |
70 | + | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
71 | + | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
72 | + | let pDown = (FACTOR - pUp) | |
73 | + | let projectedPrices = calculateProjectedPrices(S, up, down) | |
74 | + | let innerPrices = calculateInnerPrices(projectedPrices, K) | |
75 | + | let firstLevel = calculatFirstLevel(innerPrices, pUp, pDown, df) | |
76 | + | let secondLevel = calculateSecondLevel(firstLevel, pUp, pDown, df) | |
77 | + | let thirdLevel = calculateThirdLevel(secondLevel, pUp, pDown, df) | |
78 | + | fraction((fraction(thirdLevel[0], pUp, FACTOR) + fraction(thirdLevel[1], pDown, FACTOR)), df, FACTOR) | |
56 | 79 | } | |
57 | 80 | ||
58 | 81 |
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 | 10 | func calculateProjectedPrices (S,up,down) = { | |
11 | 11 | let firstProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR) | |
12 | 12 | let secondProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR) | |
13 | 13 | let thirdProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 2, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR) | |
14 | 14 | let fourthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 1, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 3, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR) | |
15 | 15 | let fifthProjectedPrice = fraction(((S * pow(up, FACTORDECIMALS, 0, 0, FACTORDECIMALS, HALFUP)) * pow(down, FACTORDECIMALS, 4, 0, FACTORDECIMALS, HALFUP)), 1, FACTOR) | |
16 | 16 | [firstProjectedPrice, secondProjectedPrice, thirdProjectedPrice, fourthProjectedPrice, fifthProjectedPrice] | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | - | func coxRossRubinsteinCall (T,S,K,r,sigma) = { | |
21 | - | let n = 4 | |
22 | - | let deltaT = fraction(T, FACTOR, (365 * n)) | |
23 | - | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
24 | - | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
25 | - | let down = fraction(1, (FACTOR * FACTOR), up) | |
26 | - | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
27 | - | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
28 | - | let pDown = (FACTOR - pUp) | |
29 | - | let projectedPrices = calculateProjectedPrices(S, up, down) | |
20 | + | func calculateInnerPrices (projectedPrices,K) = { | |
30 | 21 | let firstInnerPrice = if ((projectedPrices[0] > (K * FACTOR))) | |
31 | 22 | then (projectedPrices[0] - (K * FACTOR)) | |
32 | 23 | else 0 | |
33 | 24 | let secondInnerPrice = if ((projectedPrices[1] > (K * FACTOR))) | |
34 | 25 | then (projectedPrices[1] - (K * FACTOR)) | |
35 | 26 | else 0 | |
36 | 27 | let thirdInnerPrice = if ((projectedPrices[2] > (K * FACTOR))) | |
37 | 28 | then (projectedPrices[2] - (K * FACTOR)) | |
38 | 29 | else 0 | |
39 | 30 | let fourthInnerPrice = if ((projectedPrices[3] > (K * FACTOR))) | |
40 | 31 | then (projectedPrices[3] - K) | |
41 | 32 | else 0 | |
42 | 33 | let fifthInnerPrice = if ((projectedPrices[4] > (K * FACTOR))) | |
43 | 34 | then (projectedPrices[4] - K) | |
44 | 35 | else 0 | |
45 | - | let firstLevelFirstValue = fraction((fraction(firstInnerPrice, pUp, FACTOR) + fraction(secondInnerPrice, pDown, FACTOR)), df, FACTOR) | |
46 | - | let firstLevelSecondValue = fraction((fraction(secondInnerPrice, pUp, FACTOR) + fraction(thirdInnerPrice, pDown, FACTOR)), df, FACTOR) | |
47 | - | let firstLevelThirdValue = fraction((fraction(thirdInnerPrice, pUp, FACTOR) + fraction(fourthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
48 | - | let firstLevelFourthValue = fraction((fraction(fourthInnerPrice, pUp, FACTOR) + fraction(fifthInnerPrice, pDown, FACTOR)), df, FACTOR) | |
49 | - | let secondLevelFirstValue = fraction((fraction(firstLevelFirstValue, pUp, FACTOR) + fraction(firstLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
50 | - | let secondLevelSecondValue = fraction((fraction(firstLevelSecondValue, pUp, FACTOR) + fraction(firstLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
51 | - | let secondLevelThirdValue = fraction((fraction(firstLevelThirdValue, pUp, FACTOR) + fraction(firstLevelFourthValue, pDown, FACTOR)), df, FACTOR) | |
52 | - | let thirdLevelFirstValue = fraction((fraction(secondLevelFirstValue, pUp, FACTOR) + fraction(secondLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
53 | - | let thirdLevelSecondValue = fraction((fraction(secondLevelSecondValue, pUp, FACTOR) + fraction(secondLevelThirdValue, pDown, FACTOR)), df, FACTOR) | |
54 | - | let fourthLevel = fraction((fraction(thirdLevelFirstValue, pUp, FACTOR) + fraction(thirdLevelSecondValue, pDown, FACTOR)), df, FACTOR) | |
55 | - | fourthLevel | |
36 | + | [firstInnerPrice, secondInnerPrice, thirdInnerPrice, fourthInnerPrice, fifthInnerPrice] | |
37 | + | } | |
38 | + | ||
39 | + | ||
40 | + | func calculatFirstLevel (innerPrices,pUp,pDown,df) = { | |
41 | + | let firstValue = fraction((fraction(innerPrices[0], pUp, FACTOR) + fraction(innerPrices[1], pDown, FACTOR)), df, FACTOR) | |
42 | + | let secondValue = fraction((fraction(innerPrices[1], pUp, FACTOR) + fraction(innerPrices[2], pDown, FACTOR)), df, FACTOR) | |
43 | + | let thirdValue = fraction((fraction(innerPrices[2], pUp, FACTOR) + fraction(innerPrices[3], pDown, FACTOR)), df, FACTOR) | |
44 | + | let fourthValue = fraction((fraction(innerPrices[3], pUp, FACTOR) + fraction(innerPrices[4], pDown, FACTOR)), df, FACTOR) | |
45 | + | [firstValue, secondValue, thirdValue, fourthValue] | |
46 | + | } | |
47 | + | ||
48 | + | ||
49 | + | func calculateSecondLevel (firstLevel,pUp,pDown,df) = { | |
50 | + | let firstValue = fraction((fraction(firstLevel[0], pUp, FACTOR) + fraction(firstLevel[1], pDown, FACTOR)), df, FACTOR) | |
51 | + | let secondValue = fraction((fraction(firstLevel[1], pUp, FACTOR) + fraction(firstLevel[2], pDown, FACTOR)), df, FACTOR) | |
52 | + | let thirdValue = fraction((fraction(firstLevel[2], pUp, FACTOR) + fraction(firstLevel[3], pDown, FACTOR)), df, FACTOR) | |
53 | + | [firstValue, secondValue, thirdValue] | |
54 | + | } | |
55 | + | ||
56 | + | ||
57 | + | func calculateThirdLevel (secondLevel,pUp,pDown,df) = { | |
58 | + | let firstValue = fraction((fraction(secondLevel[0], pUp, FACTOR) + fraction(secondLevel[1], pDown, FACTOR)), df, FACTOR) | |
59 | + | let secondValue = fraction((fraction(secondLevel[1], pUp, FACTOR) + fraction(secondLevel[2], pDown, FACTOR)), df, FACTOR) | |
60 | + | [firstValue, secondValue] | |
61 | + | } | |
62 | + | ||
63 | + | ||
64 | + | func coxRossRubinsteinCall (T,S,K,r,sigma) = { | |
65 | + | let n = 4 | |
66 | + | let deltaT = fraction(T, FACTOR, (365 * n)) | |
67 | + | let sqrtDeltaT = pow(deltaT, FACTORDECIMALS, 5, 1, FACTORDECIMALS, HALFUP) | |
68 | + | let up = pow(E, FACTORDECIMALS, fraction(sigma, sqrtDeltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
69 | + | let down = fraction(1, (FACTOR * FACTOR), up) | |
70 | + | let df = pow(E, FACTORDECIMALS, fraction(-(r), deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) | |
71 | + | let pUp = fraction((pow(E, FACTORDECIMALS, fraction(r, deltaT, 100), FACTORDECIMALS, FACTORDECIMALS, HALFUP) - down), FACTOR, (up - down)) | |
72 | + | let pDown = (FACTOR - pUp) | |
73 | + | let projectedPrices = calculateProjectedPrices(S, up, down) | |
74 | + | let innerPrices = calculateInnerPrices(projectedPrices, K) | |
75 | + | let firstLevel = calculatFirstLevel(innerPrices, pUp, pDown, df) | |
76 | + | let secondLevel = calculateSecondLevel(firstLevel, pUp, pDown, df) | |
77 | + | let thirdLevel = calculateThirdLevel(secondLevel, pUp, pDown, df) | |
78 | + | fraction((fraction(thirdLevel[0], pUp, FACTOR) + fraction(thirdLevel[1], pDown, FACTOR)), df, FACTOR) | |
56 | 79 | } | |
57 | 80 | ||
58 | 81 | ||
59 | 82 | @Callable(i) | |
60 | 83 | func calculatCallPrice (T,S,K,r,sigma) = { | |
61 | 84 | let finalValue = coxRossRubinsteinCall(T, S, K, r, sigma) | |
62 | 85 | WriteSet([DataEntry("finalValue", finalValue)]) | |
63 | 86 | } | |
64 | 87 | ||
65 | 88 |
github/deemru/w8io/3ef1775 49.29 ms ◑