Giter Club home page Giter Club logo

Comments (6)

slukin1 avatar slukin1 commented on August 30, 2024 1

Просто иллюстрация в продолжение темы, куда можно это дальше применить

quotes = {}
quotes['open']=numpy.asarray([item['open'] for item in data])
quotes['close']=numpy.asarray([item['close'] for item in data])
quotes['high']=numpy.asarray([item['high'] for item in data])
quotes['low']=numpy.asarray([item['low'] for item in data])
quotes['datetime']=numpy.asarray([item['datetime'] for item in data])
fig, ax = plt.subplots(3, sharex=True)
candlestick2_ohlc(ax[0],quotes['open'],quotes['high'],quotes['low'],quotes['close'],width=0.6)
ax[0].xaxis.set_major_locator(ticker.MaxNLocator(6))
def chart_date(x,pos):
    try:
        return quotes['datetime'][int(x)]
    except IndexError:
        return ''
ax[0].xaxis.set_major_formatter(ticker.FuncFormatter(chart_date))
fig.autofmt_xdate()
fig.tight_layout()
quotes['close'] = numpy.array([float(x) for x in quotes['close']])
sma = talib.SMA(quotes['close'], timeperiod=50)
ax[0].plot(sma)
ema = talib.EMA(quotes['close'], timeperiod=20)
ax[0].plot(ema)
macd, macdsignal, macdhist = talib.MACD(quotes['close'], fastperiod=12, slowperiod=26, signalperiod=9)
ax[1].plot(macd, color="y")
ax[1].plot(macdsignal)
hist_data = []
for elem in macdhist:
    if not numpy.isnan(elem):
        v = 0 if numpy.isnan(elem) else elem
        hist_data.append(v*100)
ax[2].fill_between([x for x in range(len(macdhist))], 0,macdhist)
plt.show()

from quik-lua-rpc.

Enfernuz avatar Enfernuz commented on August 30, 2024

Функция getCandlesByIndex на стороне QLua не назначает выходным свечам индекс. И свечи там идут вразнобой тоже по времени. У меня на терминале всё ещё 7 версии возвращается там таблица, в которой есть элемент с индексом [0], и остальные элементы без индексов. Как-то так это выглядит:

t = {
  [0] = {какая-то свеча, может быть, даже первая в требуемой выгрузке, но я не обратил внимание},
  {другая свеча},
  {другая свеча},
  ...
}

Соответственно, если итерироваться через ipairs, то свеча с ключом [0] не встретится. Поэтому я итерируюсь по этой таблице через pairs который уже не гарантирует никакого порядка, но даже если бы и гарантировал, то, как я уже сказал, в самом результате, судя по всему, порядок не предусмотрен.

Поправьте, если я не прав, но и тогда, когда я писал обработчик, и сейчас у меня в этой таблице свечи не упорядочены (опять же, чтобы это увидеть, используются всё те же самые pairs и ipairs, а также библиотека inspect, которая наверняка использует те же самые ключевые слова при превращении таблицы в строку).

P.S. Спасибо, что подняли тему -- как раз поправил один маленький баг, когда легенда графика написана на русском языке (не было преобразования в UTF-8 при отдаче на сторону клиента).

from quik-lua-rpc.

Enfernuz avatar Enfernuz commented on August 30, 2024

Практически, вижу два решения: либо сортировать результат на стороне сервиса (медленно, но удобно), либо сортировать результат на месте получения (скорее всего быстрее, но менее удобно). Лично я за то, чтобы оставить как есть, т.е. производить сортировку на стороне клиента, тем более если известно, что эта функция в QLua также не гарантирует порядок, т.е., с этой точки зрения, сервис не привносит никаких изменений и самодеятельности.

from quik-lua-rpc.

slukin1 avatar slukin1 commented on August 30, 2024

Если исходить из того, что getCandlesByIndex полезна в основном тогда, когда торги не идут и можно неспеша тестировать на исторических данных, то сортировать результат на стороне клиента (медленно, но удобно) - вполне приемлемый вариант.

from quik-lua-rpc.

slukin1 avatar slukin1 commented on August 30, 2024

Примерно так можно на клиенте отсортировать по времени свечи?

socket.send_string('{"method":"getCandlesByIndex","args":{"tag":"siu9_price_chart","line":0,"first_candle":0,"count":%d}}' % (num_candles))
result = json.loads(socket.recv_string())
data = result['result']['t']
for item in data:
        item['datetime'] = datetime.datetime(item['datetime']['year'], item['datetime']['month'], item['datetime']['day'], item['datetime']['hour'], item['datetime']['min'], item['datetime']['sec'], item['datetime']['ms'])
data = sorted(data, key=lambda k: k['datetime'])
print(data)

from quik-lua-rpc.

Enfernuz avatar Enfernuz commented on August 30, 2024

Да, таким способом можно.

from quik-lua-rpc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.