Как выполнять вычисления с помощью списка Python, импортированного из JSON?

#python #arrays #python-3.x #quantitative-finance

#python #массивы #python-3.x #количественный-финансы

Вопрос:

Итак, у меня есть данные о запасах, которые я пытаюсь вычислить разницу объема между лучшей ценой запроса и лучшей ценой предложения для каждого момента времени.

Моменты времени 0-1-2-3-4 показаны как в Bid, так и в Ask. И первый элемент в этих подсписках 0-1-2-3-4 — это лучшая цена по объему (второй элемент — вторая лучшая цена по объему, третий — третий и так далее ..)

 {"Ask":
{"0":[[10.13,30500],[10.14,106456],[10.15,53772],[10.16,58104],[10.17,45589]],
"1":[[10.14,106976],[10.15,53782],[10.16,58104],[10.17,45899],[10.18,31521]],
"2":[[10.14,106986],[10.15,53652],[10.16,58504],[10.17,45589],[10.18,37821]],
"3":[[10.14,106996],[10.15,57872],[10.16,58104],[10.17,45789],[10.18,89721]],
"4":[[10.14,106936],[10.15,53982],[10.16,58154],[10.17,4495],[10.18,2521]]
}
,

"Bid":{
"0":[[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381],[10.08,98178]],
"1":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"2":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"3":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"4":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]]
}
}
  

Мне нужна помощь в вычислении

1 — Разница в объеме между лучшей ценой запроса и лучшей ценой предложения для каждого момента времени

2 — Разница в цене между лучшей ценой запроса и лучшей ценой предложения для каждого момента.

(Первые элементы, такие как десятичные знаки 10.xx, — это цена, вторые элементы — объем)

 
I have read the json formula and trying to print best ask price to get started but failing it.

import json

with open(r"C:UsersUserDesktopFILE.json") as BOB:
    data=json.load(BOB)


for x in data['Bid']['0'][0][0]:
    print(x)

  

объект ‘float’ не является итеративным

Комментарии:

1. Вы пробовали какой-либо код для этого?

2. Да, я отредактировал сообщение

3. Хорошо, я обновил свой код в ответе, указав, где вы ошиблись

Ответ №1:

dct['Bid']['0'][0][0] равно ли значение с плавающей 10.12 запятой, и вы не можете выполнять итерацию по значению с плавающей запятой.

Вы должны либо выбрать dct['Bid']['0'][0] , который является подсписком с лучшей ценой и объемом, либо выбрать dct['Bid']['0'] , который представляет собой список всех подсписков цен и объемов.
Для моего подхода мы начнем с получения словаря запросов и предложений

 dct = {"Ask":
{"0":[[10.13,30500],[10.14,106456],[10.15,53772],[10.16,58104],[10.17,45589]],
"1":[[10.14,106976],[10.15,53782],[10.16,58104],[10.17,45899],[10.18,31521]],
"2":[[10.14,106986],[10.15,53652],[10.16,58504],[10.17,45589],[10.18,37821]],
"3":[[10.14,106996],[10.15,57872],[10.16,58104],[10.17,45789],[10.18,89721]],
"4":[[10.14,106936],[10.15,53982],[10.16,58154],[10.17,4495],[10.18,2521]]
},

"Bid":{
"0":[[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381],[10.08,98178]],
"1":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"2":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"3":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]],
"4":[[10.13,13500],[10.12,198807],[10.11,1110],[10.1,42110],[10.09,84381]]
}
}
ask_dct = dct['Ask']
bid_dct = dct['Bid']
  

Затем мы перебираем оба словаря, выбираем лучшие запросы и ставки, которые являются первым элементом, а затем берем разницу между ценами и объемами.

 result = {}

for k, v in ask_dct.items():
    diff_dct = {}
    #Take best ask and best bid as the first element of list
    best_ask =  v[0]
    best_bid = bid_dct[k][0]
    #Calculate vol and price diff and save it in a dict
    diff_dct['vol_diff'] = best_ask[1]-best_bid[1]
    diff_dct['price_diff'] =  best_ask[0] - best_bid[0]
    #For each moment, make another bigger dict and save diff dct to it
    result[k] = diff_dct

print(result)

#{'0': {'vol_diff': -168307, 'price_diff': 0.010000000000001563}, 
#'1': {'vol_diff': 93476, 'price_diff': 0.009999999999999787}, 
#'2': {'vol_diff': 93486, 'price_diff': 0.009999999999999787}, 
#'3': {'vol_diff': 93496, 'price_diff': 0.009999999999999787}, 
#'4': {'vol_diff': 93436, 'price_diff': 0.009999999999999787}}

  

Комментарии:

1. Это здорово, я попробую, одна вещь поразила меня, как price_diff может немного отличаться от 0.01?

2. Это зависит от значений, которые вы указали в примере. Пожалуйста, поддержите и примите мой ответ, если он вам помог 🙂

3. Выполнено. Большое вам спасибо, я новичок на этом сайте. Вы знаете, почему люди проголосовали против моего поста?

4. Для начала, вы не опубликовали код, а затем опубликованный вами код показал почти нулевые усилия по поиску решения. Люди здесь исправляют ошибки в вашем коде, а не пишут весь код за вас. Я сделал это так, чтобы в следующий раз, когда вы задаете вопрос, вы приложили достаточно усилий к своему вопросу, а затем спросили людей, где вы ошиблись! Не поймите это неправильно, но если вы просто сбросите свой вопрос здесь, не показывая ввод / вывод или существенный код, люди проголосуют против вас