【爬虫】获取LedgerX的交易数据

本文介绍如何通过爬虫技术获取LedgerX的每日交易数据,并详细阐述了数据下载过程及如何对这些数据进行加总,以计算每日成交量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载数据

import requests
import json
import openpyxl
import datetime
import easygui as g

def get_datetime():

    start = str(input('输入开始日期,形式如‘2018-01-01’:'))
    end = str(input('输入结束日期,形式如‘2018-02-01’:'))
  
    datestart = datetime.datetime.strptime(start,'%Y-%m-%d')
    dateend = datetime.datetime.strptime(end,'%Y-%m-%d')

    data_time_list = []
     
    while datestart <= dateend:
        data_time_list.append(datestart.strftime('%Y-%m-%d'))
        datestart += datetime.timedelta(days=1)
    
    return data_time_list


def get_url(each_day):
    
    url = 'http://data.ledgerx.com/json/{}.json' .format(each_day)
    return url,each_day

def get_res(url):
    
    headers = {
        'Host': 'data.ledgerx.com',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
        'Accept': r'*/*',
        'Referer': 'http://data.ledgerx.com/',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8'
        }
    
    res = requests.get(url,headers=headers)

    return res


def get_data(file_json):
    
    report_data = file_json['report_data']
##  data_num = file_json['date'].split(' ')[0]
    all_num = int(len(report_data))    
    
    contract_id = []
    contract_label_coin = []
    contract_label_exercise_data = []
    contract_label_option = []
    contract_label_strike_price = []
    open_interest = []
    contract_type = []
    last_ask = []
    last_bid = []
    vwap = []
    volume = []

    swap_id = []
    swap_contract_label_coin = []
    swap_contract_label_data = []
    swap_contract_label_exercise_data = []
    swap_open_interest = []
    swap_type = []
    swap_last_ask = []
    swap_last_bid = []
    swap_vwap = []
    swap_volume = []


    for each in range(all_num):
        if report_data[each]['contract_type'] != "day_ahead_swap":
            contract_id.append(report_data[each]['contract_id'])
            contract_label_coin.append(report_data[each]['contract_label'].split(' ')[0])
            contract_label_exercise_data.append(report_data[each]['contract_label'].split(' ')[1])
            contract_label_option.append(report_data[each]['contract_label'].split(' ')[2])
            contract_label_strike_price.append(float(report_data[each]['contract_label'].split(' ')[3][1:].replace(',','')))
            open_interest.append(report_data[each]['open_interest'])
            contract_type.append(report_data[each]['contract_type'])
            last_ask.append((float(report_data[each]['last_ask'])/100) if (report_data[each]['last_ask']) !=  None else 0)
            last_bid.append((float(report_data[each]['last_bid'])/100) if (report_data[each]['last_bid']) !=  None else 0)
            vwap.append(float(report_data[each]['vwap'])/100)
            volume.append(report_data[each]['volume'])
        else:
            swap_id.append(report_data[each]['contract_id'])
            swap_contract_label_coin.append(report_data[each]['contract_label'].split(' ')[2])
            swap_contract_label_data.append(report_data[each]['contract_label'].split(' ')[0])
            swap_contract_label_exercise_data.append(report_data[each]['contract_label'].split(' ')[1])
            swap_open_interest.append(report_data[each]['open_interest'])
            swap_type.append(report_data[each]['contract_type'])
            swap_last_ask.append((float(report_data[each]['last_ask'])/100) if (report_data[each]['last_ask']) !=  None else 0)
            swap_last_bid.append((float(report_data[each]['last_bid'])/100) if (report_data[each]['last_bid']) !=  None else 0)
            swap_vwap.append(float(report_data[each]['vwap'])/100)
            swap_volume.append(report_data[each]['volume'])
            
            
    contrat_num = len(contract_id)
    swap_num = len(swap_id)

    contract_target = []
    swap_target = []

    for i in range(contrat_num):
        contract_target.append([contract_id[i],contract_label_coin[i],contract_label_exercise_data[i],contract_label_option[i],contract_label_strike_price[i],open_interest[i],contract_type[i],last_ask[i],last_bid[i],vwap[i],volume[i]])

    for i in range(swap_num):
        swap_target.append([swap_id[i],swap_contract_label_coin[i],swap_contract_label_data[i],swap_contract_label_exercise_data[i],swap_open_interest[i],swap_type[i],swap_last_ask[i],swap_last_bid[i],swap_vwap[i],swap_volume[i]])

    return contract_target,swap_target


def save_excel_file(contract_target,swap_target,each_day):

    ledger_option_sheet = openpyxl.load_workbook(r'options_days.xlsx')
    
    data_sheet = ledger_option_sheet.create_sheet(index = -1,title = each_day )

    data_sheet['A1'] = '合约ID'
    data_sheet['B1'] = '合约币种'
    data_sheet['C1'] = '行权日期'
    data_sheet['D1'] = '行权方向'
    data_sheet['E1'] = '行权价格'
    data_sheet['F1'] = '未平仓数量'
    data_sheet['G1'] = '合约类型'
    data_sheet['H1'] = '最新卖价'
    data_sheet['I1'] = '最新买价'
    data_sheet['J1'] = '加权平均价'
    data_sheet['K1'] = '成交量'
    
    for each in contract_target:
            data_sheet.append(each )
      
    ledger_option_sheet.save('options_days.xlsx')
          
    ledger_swap_sheet = openpyxl.load_workbook(r'swap_days.xlsx')

    data_sheet = ledger_swap_sheet.create_sheet(index = -1,title = each_day )

    data_sheet['A1'] = '互换ID'
    data_sheet['B1'] = '互换币种'
    data_sheet['C1'] = '成交日期'
    data_sheet['D1'] = '行权日期'
    data_sheet['E1'] = '未平仓数量'
    data_sheet['F1'] = '合约类型'
    data_sheet['G1'] = '最新卖价'
    data_sheet['H1'] = '最新买价'
    data_sheet['I1'] = '加权平均价'
    data_sheet['J1'] = '成交量'

    for each in swap_target:
            data_sheet.append(each)

    ledger_swap_sheet.save('swap_days.xlsx')

def main():
    
    ledger_option_sheet = openpyxl.Workbook()
    ledger_option_sheet.save('options_days.xlsx')
    
    ledger_swap_sheet = openpyxl.Workbook()
    ledger_swap_sheet.save('swap_days.xlsx')

    data_time_list = get_datetime()
    
    print('共将统计%s天的数据。' %str(len(data_time_list)))
    
    for each_day in data_time_list:
        url,each_day = get_url(each_day)
        print(each_day +'数据下载完成')
        res = get_res(url)
        file_json = json.loads(res.text)
        
        contract_target,swap_target = get_data(file_json)

        save_excel_file(contract_target,swap_target,each_day)

    print('完成全部下载')
 

if __name__ == '__main__':
    main()

加总每日成交量

import openpyxl

ledger_options_sheet = openpyxl.load_workbook('options_days.xlsx')

#根据字符串中的内容猜测”合适的数据类型
ledger_options_sheet.guess_types = True

#删除sheet
ledger_options_sheet.remove(ledger_options_sheet['Sheet'])

#创建汇总表
sum_sheet = ledger_options_sheet.create_sheet(index = 0,title ='sum_sheet' )
sum_sheet.append(['日期','call日成交量','put日成交量','日总成交量'])

for i in ledger_options_sheet.sheetnames[1:]:
    wb1 = ledger_options_sheet[i]
    call_turnover = 0
    put_turnover = 0
    for each_rows in wb1.rows:
        if each_rows[3].value == 'Call':
            call_turnover += float(each_rows[10].value)
        elif each_rows[3].value == 'Put':
            put_turnover += float(each_rows[10].value)

    wb1['M1'] = 'call当日成交量'
    wb1['M2'] = call_turnover
    wb1['N1'] =  'put当日成交量'
    wb1['N2'] = put_turnover
    
    sum_sheet.append([wb1.title,call_turnover,put_turnover,call_turnover+put_turnover])
    
ledger_options_sheet.save('options_sum.xlsx')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值