| 7241 | } |
| 7242 | |
| 7243 | public Object safeTicker(Object ticker, Object... optionalArgs) |
| 7244 | { |
| 7245 | Object market = Helpers.getArg(optionalArgs, 0, null); |
| 7246 | Object open = this.omitZero(this.safeString(ticker, "open")); |
| 7247 | Object close = this.omitZero(this.safeString2(ticker, "close", "last")); |
| 7248 | Object change = this.omitZero(this.safeString(ticker, "change")); |
| 7249 | Object percentage = this.omitZero(this.safeString(ticker, "percentage")); |
| 7250 | Object average = this.omitZero(this.safeString(ticker, "average")); |
| 7251 | Object vwap = this.safeString(ticker, "vwap"); |
| 7252 | Object baseVolume = this.safeString(ticker, "baseVolume"); |
| 7253 | Object quoteVolume = this.safeString(ticker, "quoteVolume"); |
| 7254 | if (Helpers.isTrue(Helpers.isEqual(vwap, null))) |
| 7255 | { |
| 7256 | vwap = Precise.stringDiv(this.omitZero(quoteVolume), baseVolume); |
| 7257 | } |
| 7258 | // calculate open |
| 7259 | if (Helpers.isTrue(!Helpers.isEqual(change, null))) |
| 7260 | { |
| 7261 | if (Helpers.isTrue(Helpers.isTrue(Helpers.isEqual(close, null)) && Helpers.isTrue(!Helpers.isEqual(average, null)))) |
| 7262 | { |
| 7263 | close = Precise.stringAdd(average, Precise.stringDiv(change, "2")); |
| 7264 | } |
| 7265 | if (Helpers.isTrue(Helpers.isTrue(Helpers.isEqual(open, null)) && Helpers.isTrue(!Helpers.isEqual(close, null)))) |
| 7266 | { |
| 7267 | open = Precise.stringSub(close, change); |
| 7268 | } |
| 7269 | } else if (Helpers.isTrue(!Helpers.isEqual(percentage, null))) |
| 7270 | { |
| 7271 | if (Helpers.isTrue(Helpers.isTrue(Helpers.isEqual(close, null)) && Helpers.isTrue(!Helpers.isEqual(average, null)))) |
| 7272 | { |
| 7273 | Object openAddClose = Precise.stringMul(average, "2"); |
| 7274 | // openAddClose = open * (1 + (100 + percentage)/100) |
| 7275 | Object denominator = Precise.stringAdd("2", Precise.stringDiv(percentage, "100")); |
| 7276 | Object calcOpen = ((Helpers.isTrue((!Helpers.isEqual(open, null))))) ? open : Precise.stringDiv(openAddClose, denominator); |
| 7277 | close = Precise.stringMul(calcOpen, Precise.stringAdd("1", Precise.stringDiv(percentage, "100"))); |
| 7278 | } |
| 7279 | if (Helpers.isTrue(Helpers.isTrue(Helpers.isEqual(open, null)) && Helpers.isTrue(!Helpers.isEqual(close, null)))) |
| 7280 | { |
| 7281 | open = Precise.stringDiv(close, Precise.stringAdd("1", Precise.stringDiv(percentage, "100"))); |
| 7282 | } |
| 7283 | } |
| 7284 | // change |
| 7285 | if (Helpers.isTrue(Helpers.isEqual(change, null))) |
| 7286 | { |
| 7287 | if (Helpers.isTrue(Helpers.isTrue(!Helpers.isEqual(close, null)) && Helpers.isTrue(!Helpers.isEqual(open, null)))) |
| 7288 | { |
| 7289 | change = Precise.stringSub(close, open); |
| 7290 | } else if (Helpers.isTrue(Helpers.isTrue(!Helpers.isEqual(close, null)) && Helpers.isTrue(!Helpers.isEqual(percentage, null)))) |
| 7291 | { |
| 7292 | change = Precise.stringMul(Precise.stringDiv(percentage, "100"), Precise.stringDiv(close, "100")); |
| 7293 | } else if (Helpers.isTrue(Helpers.isTrue(!Helpers.isEqual(open, null)) && Helpers.isTrue(!Helpers.isEqual(percentage, null)))) |
| 7294 | { |
| 7295 | change = Precise.stringMul(open, Precise.stringDiv(percentage, "100")); |
| 7296 | } |
| 7297 | } |
| 7298 | // calculate things according to "open" (similar can be done with "close") |
| 7299 | if (Helpers.isTrue(!Helpers.isEqual(open, null))) |
| 7300 | { |