마트란드는 일찍부터 제3자 데이터 획득을 위한 제3자 버전의 JS를 썼고, 저는 그의 경우의 Python 버전을 수정하여 클라우드 서버에 자신의 패키지를 내보낼 수 있도록 만들었습니다. 업데이트 12.01 및 메시지 인터페이스에는 60분 및 도선 정보의 변경이 있습니다. 원래 1440을 선택하면 60분 k선을 얻을 수 있습니다.
#coding: utf-8 import urllib2 as url import json import time def hxRecords(instrument,timeFrame=1,size=1,includeLastBar=True,to_df=True): ##从和讯获取期货实时数据 pInst=instrument.lower() if pInst[-4]!='1': pInst=pInst[:-3]+'1'+pInst[-3:] xchg=None for i in instList: if pInst[:-4] in i['inst']: xchg=i['xchg'] if xchg is None: print ("获取K线时发生错误: 找不到合约") return None tfs=[1,5,15,30,60,'D','W'] tf=None for i in range(len(tfs)): if timeFrame==tfs[i]: tf=i if tf is None: print("获取K线时发生错误: K线周期不正确") return None now=time.localtime() timestr=str(now.tm_year+1)+str(12)+str(31)+'000000' resp='http://webftcn.hermes.hexun.com/shf/kline?code=' + xchg + pInst + '&start=' + timestr + '&number=-' + str(size) + '&type=' + str(tf) try: resp=url.urlopen(resp) resp=resp.read()[1:-2] resp=json.loads(resp)['Data'] except: print '获取K线时发生错误: 不完整的JSON数据' return None re=[] pw=float(resp[4]) for i in resp[0]: res=dict(Time=time.mktime(time.strptime(str(i[0]),'%Y%m%d%H%M%S'))*1000,Open=i[2]/pw,High=i[4]/pw ,Low=i[5]/pw,Close=i[3]/pw,Volume=i[6]) re.append(res) if to_df: re=pd.DataFrame(re) col=[] for i in re.columns: if i is 'Time': i='Date' col.append(i.lower()) re.columns=col re['date']=re['date'].map(ts_dt64) return re instList = [{ "xchg": "SHFE", "inst": ["fu", "ru", "wr"] }, { "xchg": "SHFE2", "inst": ["ag", "au"] }, { "xchg": "SHFE3", "inst": ["al", "bu", "cu", "hc", "ni", "pb", "rb", "sn", "zn"] }, { "xchg": "CZCE", "inst": ["cf", "fg", "lr", "ma", "oi", "pm", "ri", "rm", "rs", "sf", "sm", "sr", "ta", "wh", "zc"] }, { "xchg": "DCE", "inst": ["a", "b", "bb", "c", "cs", "fb", "i", "j", "jd", "jm", "l", "m", "p", "pp", "v", "y"] }] def main(): Log(exchange.GetAccount())
제로이 자료는 매우 유용하고, 이 자료는 더 권위 있고, 오픈소스를 지원합니다.