ccxt-ir 4.18.1 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/src/baazar.js +8 -4
  5. package/dist/cjs/src/daric.js +11 -5
  6. package/dist/cjs/src/digikalagold.js +2 -2
  7. package/dist/cjs/src/gerami.js +180 -0
  8. package/dist/cjs/src/goldika.js +6 -2
  9. package/dist/cjs/src/hamrahgold.js +8 -4
  10. package/dist/cjs/src/melligold.js +11 -4
  11. package/dist/cjs/src/ramzinex.js +5 -2
  12. package/dist/cjs/src/talapp.js +10 -4
  13. package/dist/cjs/src/technogold.js +8 -4
  14. package/dist/cjs/src/wallgold.js +6 -2
  15. package/dist/cjs/src/zarafza.js +8 -4
  16. package/dist/cjs/src/zarminex.js +5 -5
  17. package/dist/cjs/src/zarniv.js +8 -5
  18. package/dist/cjs/src/zarpin.js +185 -0
  19. package/js/ccxt.d.ts +8 -2
  20. package/js/ccxt.js +6 -2
  21. package/js/src/abstract/gerami.d.ts +8 -0
  22. package/js/src/abstract/gerami.js +11 -0
  23. package/js/src/abstract/zarpin.d.ts +8 -0
  24. package/js/src/abstract/zarpin.js +11 -0
  25. package/js/src/baazar.js +8 -4
  26. package/js/src/daric.js +11 -5
  27. package/js/src/digikalagold.js +2 -2
  28. package/js/src/gerami.d.ts +20 -0
  29. package/js/src/gerami.js +179 -0
  30. package/js/src/goldika.js +6 -2
  31. package/js/src/hamrahgold.js +8 -4
  32. package/js/src/melligold.js +11 -4
  33. package/js/src/ramzinex.js +5 -2
  34. package/js/src/talapp.js +10 -4
  35. package/js/src/technogold.js +8 -4
  36. package/js/src/wallgold.js +6 -2
  37. package/js/src/zarafza.js +8 -4
  38. package/js/src/zarminex.js +5 -5
  39. package/js/src/zarniv.js +8 -5
  40. package/js/src/zarpin.d.ts +21 -0
  41. package/js/src/zarpin.js +184 -0
  42. package/js/test.js +49 -48
  43. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -97,6 +97,7 @@ var foxbit = require('./src/foxbit.js');
97
97
  var gate = require('./src/gate.js');
98
98
  var gateio = require('./src/gateio.js');
99
99
  var gemini = require('./src/gemini.js');
100
+ var gerami = require('./src/gerami.js');
100
101
  var goldika = require('./src/goldika.js');
101
102
  var goldis = require('./src/goldis.js');
102
103
  var hamrahgold = require('./src/hamrahgold.js');
@@ -181,6 +182,7 @@ var zaif = require('./src/zaif.js');
181
182
  var zarafza = require('./src/zarafza.js');
182
183
  var zarminex = require('./src/zarminex.js');
183
184
  var zarniv = require('./src/zarniv.js');
185
+ var zarpin = require('./src/zarpin.js');
184
186
  var zonda = require('./src/zonda.js');
185
187
  var alpaca$1 = require('./src/pro/alpaca.js');
186
188
  var apex$1 = require('./src/pro/apex.js');
@@ -258,7 +260,7 @@ var xt$1 = require('./src/pro/xt.js');
258
260
 
259
261
  //-----------------------------------------------------------------------------
260
262
  // this is updated by vss.js when building
261
- const version = '4.18.1';
263
+ const version = '4.20.0';
262
264
  Exchange["default"].ccxtVersion = version;
263
265
  const exchanges = {
264
266
  'abantether': abantether["default"],
@@ -346,6 +348,7 @@ const exchanges = {
346
348
  'gate': gate["default"],
347
349
  'gateio': gateio["default"],
348
350
  'gemini': gemini["default"],
351
+ 'gerami': gerami["default"],
349
352
  'goldika': goldika["default"],
350
353
  'goldis': goldis["default"],
351
354
  'hamrahgold': hamrahgold["default"],
@@ -430,6 +433,7 @@ const exchanges = {
430
433
  'zarafza': zarafza["default"],
431
434
  'zarminex': zarminex["default"],
432
435
  'zarniv': zarniv["default"],
436
+ 'zarpin': zarpin["default"],
433
437
  'zonda': zonda["default"],
434
438
  };
435
439
  const pro = {
@@ -643,6 +647,7 @@ exports.foxbit = foxbit["default"];
643
647
  exports.gate = gate["default"];
644
648
  exports.gateio = gateio["default"];
645
649
  exports.gemini = gemini["default"];
650
+ exports.gerami = gerami["default"];
646
651
  exports.goldika = goldika["default"];
647
652
  exports.goldis = goldis["default"];
648
653
  exports.hamrahgold = hamrahgold["default"];
@@ -727,6 +732,7 @@ exports.zaif = zaif["default"];
727
732
  exports.zarafza = zarafza["default"];
728
733
  exports.zarminex = zarminex["default"];
729
734
  exports.zarniv = zarniv["default"];
735
+ exports.zarpin = zarpin["default"];
730
736
  exports.zonda = zonda["default"];
731
737
  exports["default"] = ccxt;
732
738
  exports.exchanges = exchanges;
@@ -115,14 +115,18 @@ class baazar extends Exchange["default"] {
115
115
  }
116
116
  parseTicker(response, market = undefined) {
117
117
  const data = this.safeDict(response, 'data', {});
118
- let bid = this.safeNumber(data, 'sellPrice');
119
- let ask = this.safeNumber(data, 'buyPrice');
118
+ let bid = this.safeNumber(data, 'buyPrice');
119
+ let ask = this.safeNumber(data, 'sellPrice');
120
120
  if (bid !== undefined) {
121
121
  bid = bid / 10;
122
122
  }
123
123
  if (ask !== undefined) {
124
124
  ask = ask / 10;
125
125
  }
126
+ let last = bid;
127
+ if (ask !== undefined && (last === undefined || ask > last)) {
128
+ last = ask;
129
+ }
126
130
  return this.safeTicker({
127
131
  'symbol': market['symbol'],
128
132
  'timestamp': this.safeInteger(data, 'currentTime'),
@@ -135,8 +139,8 @@ class baazar extends Exchange["default"] {
135
139
  'askVolume': undefined,
136
140
  'vwap': undefined,
137
141
  'open': undefined,
138
- 'close': ask,
139
- 'last': ask,
142
+ 'close': last,
143
+ 'last': last,
140
144
  'previousClose': undefined,
141
145
  'change': undefined,
142
146
  'percentage': undefined,
@@ -75,7 +75,7 @@ class daric extends Exchange["default"] {
75
75
  }
76
76
  parseMarket(market) {
77
77
  const baseId = this.safeString(market, 'destinationCoinSymbol');
78
- let base = 'XAG';
78
+ let base = 'XAG-1G';
79
79
  if (baseId === 'GOLD18') {
80
80
  base = 'XAU18';
81
81
  }
@@ -144,20 +144,26 @@ class daric extends Exchange["default"] {
144
144
  markets = response;
145
145
  }
146
146
  const ticker = this.filterBy(markets, 'destinationCoinSymbol', market['baseId'])[0];
147
+ const bid = this.safeNumber(ticker, 'bestSell');
148
+ const ask = this.safeNumber(ticker, 'bestBuy');
149
+ let last = bid;
150
+ if (ask !== undefined && (last === undefined || ask > last)) {
151
+ last = ask;
152
+ }
147
153
  return this.safeTicker({
148
154
  'symbol': market['symbol'],
149
155
  'timestamp': undefined,
150
156
  'datetime': undefined,
151
157
  'high': this.safeNumber(ticker, 'highestRecentOrder'),
152
158
  'low': this.safeNumber(ticker, 'lowestRecentOrder'),
153
- 'bid': this.safeNumber(ticker, 'bestBuy'),
159
+ 'bid': bid,
154
160
  'bidVolume': undefined,
155
- 'ask': this.safeNumber(ticker, 'bestSell'),
161
+ 'ask': ask,
156
162
  'askVolume': undefined,
157
163
  'vwap': undefined,
158
164
  'open': undefined,
159
- 'close': this.safeNumber(ticker, 'lastOrderPrice'),
160
- 'last': this.safeNumber(ticker, 'lastOrderPrice'),
165
+ 'close': last,
166
+ 'last': last,
161
167
  'previousClose': undefined,
162
168
  'change': undefined,
163
169
  'percentage': this.safeNumber(ticker, 'change'),
@@ -69,7 +69,7 @@ class digikalagold extends Exchange["default"] {
69
69
  }
70
70
  parseMarketEntry(response, id) {
71
71
  const isGold = id === 'gold18';
72
- let base = 'XAG';
72
+ let base = 'XAG-1G';
73
73
  if (isGold) {
74
74
  base = 'XAU18';
75
75
  }
@@ -126,7 +126,7 @@ class digikalagold extends Exchange["default"] {
126
126
  }
127
127
  const response = await this.fetchPrice(params);
128
128
  const result = {};
129
- const marketSymbols = ['XAU18/IRT', 'XAG/IRT'];
129
+ const marketSymbols = ['XAU18/IRT', 'XAG-1G/IRT'];
130
130
  for (let i = 0; i < marketSymbols.length; i++) {
131
131
  const symbol = marketSymbols[i];
132
132
  const market = this.market(symbol);
@@ -0,0 +1,180 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Exchange = require('./base/Exchange.js');
6
+
7
+ // ----------------------------------------------------------------------------
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * @class gerami
11
+ * @augments Exchange
12
+ */
13
+ class gerami extends Exchange["default"] {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'id': 'gerami',
17
+ 'name': 'Gerami',
18
+ 'countries': ['IR'],
19
+ 'rateLimit': 1000,
20
+ 'certified': false,
21
+ 'pro': false,
22
+ 'has': {
23
+ 'CORS': undefined,
24
+ 'spot': false,
25
+ 'margin': false,
26
+ 'swap': false,
27
+ 'future': false,
28
+ 'option': false,
29
+ 'fetchMarkets': true,
30
+ 'fetchTicker': true,
31
+ 'fetchTickers': true,
32
+ 'otc': true,
33
+ },
34
+ 'options': {
35
+ 'defaultType': 'otc',
36
+ },
37
+ 'urls': {
38
+ 'api': {
39
+ 'public': 'https://api.gerami.com/api/v1',
40
+ },
41
+ 'www': 'https://gerami.com',
42
+ 'doc': 'https://api.gerami.com/api/v1/pairs/XAU750g_IRT',
43
+ },
44
+ 'api': {
45
+ 'public': {
46
+ 'get': {
47
+ 'pairs/{pair}': 1,
48
+ },
49
+ },
50
+ },
51
+ });
52
+ }
53
+ async fetchMarkets(params = {}) {
54
+ const marketIds = ['XAU750g_IRT', 'XAG999g_IRT'];
55
+ const result = [];
56
+ for (let i = 0; i < marketIds.length; i++) {
57
+ const response = await this.publicGetPairsPair(this.extend({
58
+ 'pair': marketIds[i],
59
+ }, params));
60
+ result.push(this.parseMarket(response));
61
+ }
62
+ return result;
63
+ }
64
+ parseMarket(response) {
65
+ const data = this.safeDict(response, 'data', {});
66
+ const baseId = this.safeString(data, 'base_symbol');
67
+ const quoteId = this.safeString(data, 'quote_symbol');
68
+ let base = 'XAG-1G';
69
+ if (baseId === 'XAU750g') {
70
+ base = 'XAU18';
71
+ }
72
+ return {
73
+ 'id': this.safeString(data, 'market'),
74
+ 'symbol': base + '/' + quoteId,
75
+ 'base': base,
76
+ 'quote': quoteId,
77
+ 'settle': undefined,
78
+ 'baseId': baseId,
79
+ 'quoteId': quoteId,
80
+ 'settleId': undefined,
81
+ 'type': 'otc',
82
+ 'spot': false,
83
+ 'margin': false,
84
+ 'swap': false,
85
+ 'future': false,
86
+ 'option': false,
87
+ 'active': this.safeBool(data, 'buy_is_active') && this.safeBool(data, 'sell_is_active'),
88
+ 'contract': false,
89
+ 'linear': undefined,
90
+ 'inverse': undefined,
91
+ 'contractSize': undefined,
92
+ 'expiry': undefined,
93
+ 'expiryDatetime': undefined,
94
+ 'strike': undefined,
95
+ 'optionType': undefined,
96
+ 'precision': {
97
+ 'amount': this.safeNumber(data, 'amount_precision'),
98
+ 'price': this.safeNumber(data, 'price_precision'),
99
+ },
100
+ 'limits': {
101
+ 'leverage': { 'min': undefined, 'max': undefined },
102
+ 'amount': {
103
+ 'min': this.safeNumber(data, 'buy_min_amount'),
104
+ 'max': this.safeNumber(data, 'buy_max_amount'),
105
+ },
106
+ 'price': { 'min': undefined, 'max': undefined },
107
+ 'cost': { 'min': undefined, 'max': undefined },
108
+ },
109
+ 'created': undefined,
110
+ 'info': data,
111
+ };
112
+ }
113
+ async fetchTicker(symbol, params = {}) {
114
+ await this.loadMarkets();
115
+ const market = this.market(symbol);
116
+ const response = await this.publicGetPairsPair(this.extend({
117
+ 'pair': market['id'],
118
+ }, params));
119
+ return this.parseTicker(response, market);
120
+ }
121
+ async fetchTickers(symbols = undefined, params = {}) {
122
+ await this.loadMarkets();
123
+ if (symbols !== undefined) {
124
+ symbols = this.marketSymbols(symbols);
125
+ }
126
+ const marketSymbols = ['XAU18/IRT', 'XAG-1G/IRT'];
127
+ const result = {};
128
+ for (let i = 0; i < marketSymbols.length; i++) {
129
+ const market = this.market(marketSymbols[i]);
130
+ const response = await this.publicGetPairsPair(this.extend({
131
+ 'pair': market['id'],
132
+ }, params));
133
+ const ticker = this.parseTicker(response, market);
134
+ result[ticker['symbol']] = ticker;
135
+ }
136
+ return this.filterByArrayTickers(result, 'symbol', symbols);
137
+ }
138
+ parseTicker(response, market = undefined) {
139
+ const data = this.safeDict(response, 'data', {});
140
+ const bid = this.safeNumber(data, 'buy_price');
141
+ const ask = this.safeNumber(data, 'sell_price');
142
+ let last = bid;
143
+ if (ask !== undefined && (last === undefined || ask > last)) {
144
+ last = ask;
145
+ }
146
+ return this.safeTicker({
147
+ 'symbol': market['symbol'],
148
+ 'timestamp': undefined,
149
+ 'datetime': undefined,
150
+ 'high': undefined,
151
+ 'low': undefined,
152
+ 'bid': bid,
153
+ 'bidVolume': undefined,
154
+ 'ask': ask,
155
+ 'askVolume': undefined,
156
+ 'vwap': undefined,
157
+ 'open': undefined,
158
+ 'close': last,
159
+ 'last': last,
160
+ 'previousClose': undefined,
161
+ 'change': this.safeNumber(data, 'daily_price_change_amount'),
162
+ 'percentage': this.safeNumber(data, 'daily_price_change_percentage'),
163
+ 'average': undefined,
164
+ 'baseVolume': undefined,
165
+ 'quoteVolume': undefined,
166
+ 'info': data,
167
+ }, market);
168
+ }
169
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
170
+ let url = this.urls['api'][api] + '/' + this.implodeParams(path, params);
171
+ const query = this.omit(params, this.extractParams(path));
172
+ if (Object.keys(query).length) {
173
+ url += '?' + this.urlencode(query);
174
+ }
175
+ headers = { 'Accept': 'application/json' };
176
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
177
+ }
178
+ }
179
+
180
+ exports["default"] = gerami;
@@ -126,6 +126,10 @@ class goldika extends Exchange["default"] {
126
126
  if (ask !== undefined) {
127
127
  ask = ask / 10;
128
128
  }
129
+ let last = bid;
130
+ if (ask !== undefined && (last === undefined || ask > last)) {
131
+ last = ask;
132
+ }
129
133
  return this.safeTicker({
130
134
  'symbol': market['symbol'],
131
135
  'timestamp': timestamp,
@@ -138,8 +142,8 @@ class goldika extends Exchange["default"] {
138
142
  'askVolume': undefined,
139
143
  'vwap': undefined,
140
144
  'open': undefined,
141
- 'close': ask,
142
- 'last': ask,
145
+ 'close': last,
146
+ 'last': last,
143
147
  'previousClose': undefined,
144
148
  'change': undefined,
145
149
  'percentage': this.safeNumber(data, 'daily_change_percent'),
@@ -122,8 +122,8 @@ class hamrahgold extends Exchange["default"] {
122
122
  const sell = this.safeDict(sellResponse, 'data', {});
123
123
  const changes = this.safeDict(sell, 'changes', {});
124
124
  const dailyChange = this.safeDict(changes, '1d', {});
125
- let bid = this.safeNumber(buy, 'current');
126
- let ask = this.safeNumber(sell, 'current');
125
+ let bid = this.safeNumber(sell, 'current');
126
+ let ask = this.safeNumber(buy, 'current');
127
127
  let previousClose = this.safeNumber(dailyChange, 'price');
128
128
  if (bid !== undefined) {
129
129
  bid = bid / 10;
@@ -134,6 +134,10 @@ class hamrahgold extends Exchange["default"] {
134
134
  if (previousClose !== undefined) {
135
135
  previousClose = previousClose / 10;
136
136
  }
137
+ let last = bid;
138
+ if (ask !== undefined && (last === undefined || ask > last)) {
139
+ last = ask;
140
+ }
137
141
  return this.safeTicker({
138
142
  'symbol': market['symbol'],
139
143
  'timestamp': undefined,
@@ -146,8 +150,8 @@ class hamrahgold extends Exchange["default"] {
146
150
  'askVolume': undefined,
147
151
  'vwap': undefined,
148
152
  'open': undefined,
149
- 'close': ask,
150
- 'last': ask,
153
+ 'close': last,
154
+ 'last': last,
151
155
  'previousClose': previousClose,
152
156
  'change': undefined,
153
157
  'percentage': this.safeNumber(dailyChange, 'percent'),
@@ -103,7 +103,10 @@ class melligold extends Exchange["default"] {
103
103
  parseMarket(response, baseId = undefined) {
104
104
  const data = this.safeDict(response, 'data', {});
105
105
  const lowerAmounts = this.safeDict(data, 'lower_amounts', {});
106
- const base = this.safeCurrencyCode(baseId);
106
+ let base = this.safeCurrencyCode(baseId);
107
+ if (base === 'XAG') {
108
+ base = 'XAG-1G';
109
+ }
107
110
  const quote = 'IRT';
108
111
  return {
109
112
  'id': base + quote,
@@ -161,7 +164,7 @@ class melligold extends Exchange["default"] {
161
164
  symbols = this.marketSymbols(symbols);
162
165
  }
163
166
  const result = {};
164
- const marketSymbols = ['XAU18/IRT', 'XAG/IRT'];
167
+ const marketSymbols = ['XAU18/IRT', 'XAG-1G/IRT'];
165
168
  for (let i = 0; i < marketSymbols.length; i++) {
166
169
  const market = this.market(marketSymbols[i]);
167
170
  const response = await this.requestWithCookie(this.extend({
@@ -177,6 +180,10 @@ class melligold extends Exchange["default"] {
177
180
  const data = this.safeDict(response, 'data', {});
178
181
  const buy = this.safeNumber(data, 'price_buy');
179
182
  const sell = this.safeNumber(data, 'price_sell');
183
+ let last = buy;
184
+ if (sell !== undefined && (last === undefined || sell > last)) {
185
+ last = sell;
186
+ }
180
187
  return this.safeTicker({
181
188
  'symbol': market['symbol'],
182
189
  'timestamp': this.safeTimestamp(data, 'timestamp'),
@@ -189,8 +196,8 @@ class melligold extends Exchange["default"] {
189
196
  'askVolume': undefined,
190
197
  'vwap': undefined,
191
198
  'open': undefined,
192
- 'close': buy,
193
- 'last': buy,
199
+ 'close': last,
200
+ 'last': last,
194
201
  'previousClose': undefined,
195
202
  'change': undefined,
196
203
  'percentage': undefined,
@@ -360,7 +360,6 @@ class ramzinex extends ramzinex$1["default"] {
360
360
  let open = this.safeFloat(tickerinfo, 'open');
361
361
  let close = this.safeFloat(tickerinfo, 'close');
362
362
  const change = this.safeFloat(tickerinfo, 'change_percent');
363
- let last = this.safeFloat(ticker, 'buy');
364
363
  let quoteVolume = this.safeFloat(tickerinfo, 'quote_volume');
365
364
  const baseVolume = this.safeFloat(tickerinfo, 'base_volume');
366
365
  if (marketinfo['quote'] === 'IRT') {
@@ -370,9 +369,13 @@ class ramzinex extends ramzinex$1["default"] {
370
369
  ask = ask ? ask / 10 : 0;
371
370
  open = open ? open / 10 : 0;
372
371
  close = close ? close / 10 : 0;
373
- last = last ? last / 10 : 0;
374
372
  quoteVolume = quoteVolume ? quoteVolume / 10 : 0;
375
373
  }
374
+ let last = bid;
375
+ if (ask !== undefined && (last === undefined || ask > last)) {
376
+ last = ask;
377
+ }
378
+ close = last;
376
379
  return this.safeTicker({
377
380
  'symbol': symbol,
378
381
  'timestamp': undefined,
@@ -119,20 +119,26 @@ class talapp extends Exchange["default"] {
119
119
  if (fetchedAt !== undefined) {
120
120
  timestamp = this.parse8601(fetchedAt.replace(' ', 'T') + '+03:30');
121
121
  }
122
+ const bid = this.safeNumber(response, 'buy_gold');
123
+ const ask = this.safeNumber(response, 'sell_gold');
124
+ let last = bid;
125
+ if (ask !== undefined && (last === undefined || ask > last)) {
126
+ last = ask;
127
+ }
122
128
  return this.safeTicker({
123
129
  'symbol': market['symbol'],
124
130
  'timestamp': timestamp,
125
131
  'datetime': undefined,
126
132
  'high': undefined,
127
133
  'low': undefined,
128
- 'bid': this.safeNumber(response, 'buy_gold'),
134
+ 'bid': bid,
129
135
  'bidVolume': undefined,
130
- 'ask': this.safeNumber(response, 'sell_gold'),
136
+ 'ask': ask,
131
137
  'askVolume': undefined,
132
138
  'vwap': undefined,
133
139
  'open': undefined,
134
- 'close': this.safeNumber(response, 'sell_gold'),
135
- 'last': this.safeNumber(response, 'sell_gold'),
140
+ 'close': last,
141
+ 'last': last,
136
142
  'previousClose': undefined,
137
143
  'change': undefined,
138
144
  'percentage': this.safeNumber(response, 'sell_diff'),
@@ -116,20 +116,24 @@ class technogold extends Exchange["default"] {
116
116
  const prices = this.safeDict(response, 'results', {});
117
117
  const buy = this.safeNumber(prices, 'buy_price');
118
118
  const sell = this.safeNumber(prices, 'sell_price');
119
+ let last = buy;
120
+ if (sell !== undefined && (last === undefined || sell > last)) {
121
+ last = sell;
122
+ }
119
123
  return this.safeTicker({
120
124
  'symbol': market['symbol'],
121
125
  'timestamp': undefined,
122
126
  'datetime': undefined,
123
127
  'high': undefined,
124
128
  'low': undefined,
125
- 'bid': sell,
129
+ 'bid': buy,
126
130
  'bidVolume': undefined,
127
- 'ask': buy,
131
+ 'ask': sell,
128
132
  'askVolume': undefined,
129
133
  'vwap': undefined,
130
134
  'open': undefined,
131
- 'close': buy,
132
- 'last': buy,
135
+ 'close': last,
136
+ 'last': last,
133
137
  'previousClose': undefined,
134
138
  'change': undefined,
135
139
  'percentage': undefined,
@@ -125,6 +125,10 @@ class wallgold extends Exchange["default"] {
125
125
  const sellResult = this.safeDict(sellResponse, 'result', buyResult);
126
126
  const bid = this.safeNumber(buyResult, 'price');
127
127
  const ask = this.safeNumber(sellResult, 'price');
128
+ let last = bid;
129
+ if (ask !== undefined && (last === undefined || ask > last)) {
130
+ last = ask;
131
+ }
128
132
  const currentTime = this.safeString(buyResult, 'currentTime');
129
133
  const timestamp = currentTime ? this.parse8601(currentTime) : undefined;
130
134
  return this.safeTicker({
@@ -139,8 +143,8 @@ class wallgold extends Exchange["default"] {
139
143
  'askVolume': undefined,
140
144
  'vwap': undefined,
141
145
  'open': undefined,
142
- 'close': ask,
143
- 'last': ask,
146
+ 'close': last,
147
+ 'last': last,
144
148
  'previousClose': undefined,
145
149
  'change': undefined,
146
150
  'percentage': undefined,
@@ -120,8 +120,12 @@ class zarafza extends Exchange["default"] {
120
120
  const gold = this.safeDict(data, 'G18', {});
121
121
  const buy = this.safeDict(gold, 'buy', {});
122
122
  const sell = this.safeDict(gold, 'sell', {});
123
- const bid = this.safeNumber(buy, 'price');
124
- const ask = this.safeNumber(sell, 'price');
123
+ const bid = this.safeNumber(sell, 'price');
124
+ const ask = this.safeNumber(buy, 'price');
125
+ let last = bid;
126
+ if (ask !== undefined && (last === undefined || ask > last)) {
127
+ last = ask;
128
+ }
125
129
  return this.safeTicker({
126
130
  'symbol': market['symbol'],
127
131
  'timestamp': undefined,
@@ -134,8 +138,8 @@ class zarafza extends Exchange["default"] {
134
138
  'askVolume': undefined,
135
139
  'vwap': undefined,
136
140
  'open': undefined,
137
- 'close': ask,
138
- 'last': ask,
141
+ 'close': last,
142
+ 'last': last,
139
143
  'previousClose': undefined,
140
144
  'change': undefined,
141
145
  'percentage': this.safeNumber(sell, 'change'),
@@ -113,17 +113,17 @@ class zarminex extends Exchange["default"] {
113
113
  return this.filterByArrayTickers(result, 'symbol', symbols);
114
114
  }
115
115
  parseTicker(response, market = undefined) {
116
- let bid = this.safeNumber(response, 'sell');
117
- let ask = this.safeNumber(response, 'buy');
118
- let last = this.safeNumber(response, 'cached_price');
116
+ let bid = this.safeNumber(response, 'buy');
117
+ let ask = this.safeNumber(response, 'sell');
119
118
  if (bid !== undefined) {
120
119
  bid = bid / 10;
121
120
  }
122
121
  if (ask !== undefined) {
123
122
  ask = ask / 10;
124
123
  }
125
- if (last !== undefined) {
126
- last = last / 10;
124
+ let last = bid;
125
+ if (ask !== undefined && (last === undefined || ask > last)) {
126
+ last = ask;
127
127
  }
128
128
  return this.safeTicker({
129
129
  'symbol': market['symbol'],
@@ -67,7 +67,7 @@ class zarniv extends Exchange["default"] {
67
67
  ];
68
68
  }
69
69
  parseMarketEntry(response, metal) {
70
- let base = 'XAG';
70
+ let base = 'XAG-1G';
71
71
  if (metal === 'gold') {
72
72
  base = 'XAU18';
73
73
  }
@@ -124,7 +124,7 @@ class zarniv extends Exchange["default"] {
124
124
  const goldResponse = await this.fetchPrice('gold', params);
125
125
  const silverResponse = await this.fetchPrice('silver', params);
126
126
  const goldMarket = this.market('XAU18/IRT');
127
- const silverMarket = this.market('XAG/IRT');
127
+ const silverMarket = this.market('XAG-1G/IRT');
128
128
  const goldTicker = this.parseTicker(goldResponse, goldMarket);
129
129
  const silverTicker = this.parseTicker(silverResponse, silverMarket);
130
130
  const result = {};
@@ -138,9 +138,12 @@ class zarniv extends Exchange["default"] {
138
138
  if (serverTime !== undefined) {
139
139
  timestamp = this.parse8601(serverTime + '+03:30');
140
140
  }
141
- const bid = this.safeNumber(response, 'sell_price_per_gram');
142
- const ask = this.safeNumber(response, 'buy_price_per_gram');
143
- const last = this.safeNumber(response, 'base_price_per_gram');
141
+ const bid = this.safeNumber(response, 'buy_price_per_gram');
142
+ const ask = this.safeNumber(response, 'sell_price_per_gram');
143
+ let last = bid;
144
+ if (ask !== undefined && (last === undefined || ask > last)) {
145
+ last = ask;
146
+ }
144
147
  return this.safeTicker({
145
148
  'symbol': market['symbol'],
146
149
  'timestamp': timestamp,