标题: [己解决]50元求代码读取指定网页数据下载到文本 [打印本页]
作者: keshun 时间: 2020-6-13 19:02 标题: [己解决]50元求代码读取指定网页数据下载到文本
50元求代码读取指定网页数据下载到文本
具体报酬:50元人民币【己支付】。
支付方式:微信/支付宝等。
联系方式:QQ
有效期限:2020年6月20日之前。
需求描述:
https://www.okex.me/markets/spot-info/btc-usdt
win10运行代码输入日期20200401读取网页指定数据保存至文本a.txt如下:
MA7 6372.9
M30 6767.3
K 49.17
D 57.07
J 33.38
作者: wujunkai 时间: 2020-6-13 22:41
这个就算是Python,都有难度
坐等大神
作者: Gin_Q 时间: 2020-6-13 23:46
回复 2# wujunkai
触及到知识盲区,这个太难了!
作者: codegay 时间: 2020-6-14 02:44
这个主要是需要先找对API是什么
https://www.okex.me/docs/zh/#README
之后从API读数据难度应该不算太高
作者: codegay 时间: 2020-6-14 02:45
https://www.okex.me/docs/zh/#index-restful-content
作者: went 时间: 2020-6-14 03:02
数据爬取不难,计算复杂
win10保存为bat,ANSI编码- @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause&exit
- #根据时间获取数据
- function Get-Data([datetime]$inputDateTime){
- $d=$inputDateTime.AddDays(-1)
- $utcStr='{0:0000}-{1:00}-{2:00}T16:00:00.000Z' -f $d.Year,$d.Month,$d.Day
- return @('{0:0000}-{1:00}-{2:00} 00:00' -f $inputDateTime.Year,$inputDateTime.Month,$inputDateTime.Day)+(($Script:json.data -match $utcStr)[0] | Select-Object -Skip 1)
- }
- #批量获取前n天数据
- function Get-DataArray([datetime]$beginTime,$last){
- $dataArray=[System.Collections.ArrayList]::new();
- [void]$dataArray.Add((Get-Data -inputDateTime $beginTime))
- for($i=1;$i -lt $last;$i++){
- $inputDateTime=$inputDateTime.AddDays(-1)
- [void]$dataArray.Add((Get-Data -inputDateTime $inputDateTime))
- }
- return $dataArray
- }
- #URL
- $url="https://www.okex.me/v2/spot/instruments/BTC-USDT/candles?granularity=86400&size=1000&t=1592064786686"
- $resp=Invoke-WebRequest -UseBasicParsing -Uri $url
- #获取JSON
- $Script:json=$resp.Content | ConvertFrom-Json
- #输入数据
- $input=(Read-Host "输入年月日(格式:20200614)").Trim()
- $inputDateTime=[System.DateTime]::ParseExact($input,"yyyyMMdd",[cultureinfo]::InstalledUICulture)
- #爬取数据
- #计算MA7
- $MA7=0;
- $datas=Get-DataArray -beginTime $inputDateTime -last 7
- $datas | foreach { $MA7+=$_[4] }
- $MA7=[System.Math]::Round($MA7/7,1)
- #计算MA30
- $MA30=0;
- $datas=Get-DataArray -beginTime $inputDateTime -last 30
- $datas | foreach { $MA30+=$_[4] }
- $MA30=[System.Math]::Round($MA30/30,1)
- 'MA7: '+$MA7
- 'MA30: '+$MA30
- #计算KDJ
- #https://baike.baidu.com/item/KDJ%E6%8C%87%E6%A0%87/6328421?fr=aladdin
复制代码
KDJ没看懂是怎么计算的,明天再试试
链接在这儿,大家可以试试https://baike.baidu.com/item/KDJ%E6%8C%87%E6%A0%87/6328421?fr=aladdin
作者: ivor 时间: 2020-6-14 12:10
本帖最后由 ivor 于 2020-6-14 14:21 编辑
测试过数据完全准确
开始用的这个接口:https://www.okex.me/docs/zh/#spot-line,发现数据不正确, 后面发现原因日期有错位
后改用这个不算官方正规的接口:https://www.okex.me/v2/spot/inst ... amp;t=1592091928445
granularity=86400 时间粒度,86400日线
size=1000 最大k线数量,不能超过1000否则报错。- #! /usr/bin/env python3
- # -*- coding: UTF-8 -*-
-
-
- import pandas as pd
- import requests
- import json
- import numpy as np
- import datetime
-
- api_url = "https://www.okex.me/v2/spot/instruments/BTC-USDT/candles?granularity=86400&size=1000&t=1592091928445"
-
- html = requests.get(api_url)
- stock_datas = pd.DataFrame()
-
- for i in json.loads(html.text)['data']:
- date = (datetime.datetime.strptime(i[0].split('T')[0], "%Y-%m-%d") + datetime.timedelta(days=1)).strftime("%Y%m%d")
- df_insert = pd.DataFrame(
- {'date': date, 'open': i[1], 'high': i[2], 'low': i[3], 'close': np.float(i[4]), 'volume': i[5]}, index=[0])
- stock_datas = stock_datas.append(df_insert)
-
- ma_list = [7, 30] # ma移动平均
-
- for ma in ma_list:
- stock_datas['MA_' + str(ma)] = np.round(pd.Series.rolling(stock_datas['close'], window=ma).mean(), 1)
-
- low_list = stock_datas['low'].rolling(9, min_periods=9).min()
- low_list.fillna(value=stock_datas['low'].expanding().min(), inplace=True)
- high_list = stock_datas['high'].rolling(9, min_periods=9).max()
- high_list.fillna(value=stock_datas['high'].expanding().max(), inplace=True)
- rsv = (stock_datas['close'] - low_list) / (high_list - low_list) * 100
-
- stock_datas['K'] = pd.Series.ewm(rsv, com=2).mean()
- stock_datas['D'] = pd.Series.ewm(stock_datas['K'], com=2).mean()
- stock_datas['J'] = 3 * stock_datas['K'] - 2 * stock_datas['D']
-
- custom_date = input("""
- Example:20200401 2020年04月01日
- Enter datetime please:"""
- )
- result = stock_datas[stock_datas['date'] == custom_date][['date', 'K', 'D', 'J', 'MA_7', 'MA_30']]
- if result.__len__() > 0:
- result = "MA7:{}\r\nMA30:{}\r\nK:{}\r\nD:{}\r\nJ:{}\r\n".format(result['MA_7'].values[0], result['MA_30'].values[0],
- np.round(result['K'].values[0], 2),
- np.round(result['D'].values[0], 2),
- np.round(result['J'].values[0], 2))
- print(result)
- with open('a.txt', 'w+') as f:
- f.write(result)
- else:
- print("Found nothing!!!")
复制代码
Example:20200401 2020年04月01日
Enter datetime please:20200401
MA7:6372.9
MA30:6767.3
K:49.17
D:57.07
J:33.38
作者: wujunkai 时间: 2020-6-14 12:12
回复 5# codegay
居然还有api,好评
作者: went 时间: 2020-6-14 13:35
回复 7# ivor
厉害,我没看懂KDJ咋计算的
作者: ivor 时间: 2020-6-14 13:56
回复 9# went
https://blog.csdn.net/weixin_414 ... earnPai2-1.nonecase
这儿说的比较详细。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |