版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
34-RESTful&Socket-搭建交易執(zhí) 節(jié),我們簡單介紹了量化交易的歷史、嚴(yán)謹(jǐn)?shù)亩x和它的基本組成結(jié)構(gòu)。有了這些次的基本知識, 個量化交易系統(tǒng),可以說是個黑箱。這個黑箱連接交易所獲取到的數(shù)據(jù),通過策略運(yùn)算,然后再連接交易所進(jìn)行下單操作。正如我們在輸入輸出那節(jié)課說的那樣,黑箱的特性是輸入和輸出。每個設(shè)計(jì)網(wǎng)絡(luò)交互知道 級的在你搞不明白的時候,可以先在草稿紙上畫出交互拓?fù)鋱D,標(biāo)注清楚每個節(jié)點(diǎn)的輸入和輸出格式,然后想清 現(xiàn)在,我假設(shè)你對網(wǎng)絡(luò)編程只有很基本的了解。所以接下來,我將先從REST的定義講起,然后過渡到具體的交互方式——如何通過Python和交易所進(jìn)行交互,從而執(zhí)行下單、撤單、查詢訂單等網(wǎng)絡(luò)交互方REST什么是RESTAPI?什么是Socket?有過網(wǎng)絡(luò)編程經(jīng)驗(yàn)的同學(xué) REST的全稱是表征層狀態(tài)轉(zhuǎn)移(REpresentationalStateTransfer),本意是指 為了方便你更容易理解這些概念,這里我舉個例子來類比。同學(xué)不是很聰明但很懂事,每天會在他的媽媽下班回來后給泡茶。剛開始,他的會發(fā)出這樣的要求:??紅?杯?,去廚房泡杯放了糖的37.5度的普洱茶可是同學(xué)不夠聰明,很難理解這個定語很多的句子。于是,媽為了讓他更簡單明白需要做的事情,把這個指令設(shè)計(jì)成了更簡潔的樣子:泡泡廚房的茶要求杯?=放糖放糖=溫度=37.5這里的“茶”就是資源,“廚房的茶”就是資源的地址(U);“泡”是動詞;后面的要求,都是接口參數(shù)。這樣的 個接口,就是提供的 個EST接口。 臺機(jī)器,那么解析這個請求就會非常容易;而我們作為者,查看的代碼也很簡單。當(dāng)把這個接露到網(wǎng)上時,這就是 總的來說,RESTful接口通常以HTTPGET和POST形式出現(xiàn)。但并非所有的GET、POST請求接口,都是這話可能有些拗口,我們舉個例子來看。上節(jié)課中,我們獲取了Geini交易所中,對USD價格的ticker接口:GEGE POSPOS DELEDELEEPOSPOS注:PrivateAPIInvocation的為 /rest-api/#private-api-你會發(fā)現(xiàn),這個接口不夠“RESTful” 此外,如果我們?nèi)z查Geini的其他私有接口(Piva,私有接口是指需要附加驗(yàn)證信息才能的接口),我們會發(fā)現(xiàn),那些接口的設(shè)計(jì)都不是嚴(yán)格ESul的。不僅如此,大部分的交易所,比如ime、iinxKoin等等,它們提供的“EST接口”,也都不是嚴(yán)格ESul的。這些接口之所以還能被稱為“EST接口”,是因?yàn)樗麄兇蟛糠譂M足了EST接口的另個重要要求:無狀態(tài)。無狀態(tài)的意思是,每個EST請求都是獨(dú)立的,不需要服務(wù)器在會話(Session)中緩存中間狀態(tài)來完成這個請求。簡單來說,如果服務(wù)器A接收到請求的時候宕機(jī)了,而此時把這個請求發(fā)送給交易所的服務(wù)器B,也能繼續(xù)完成,那么這個接口就是無狀態(tài)的。這里,我再給你舉 個簡單的有狀態(tài)的接口的例子。服務(wù)器要求,在客戶端請求取消訂單的時候,必須發(fā)送兩次不 樣的HTT請求。并且,第 次發(fā)送讓服務(wù)器“等待取消”;第二次發(fā)送“確認(rèn)取消”。那么,就算這個接口滿足了ESul的動詞、資源分離原則,也不是 個EST接口。當(dāng)然,對于交易所的REST接口,你并不需要過于糾結(jié)“ESul”這個概念,否則很容易就被這些名詞給繞暈了。你只需要把握住最的 點(diǎn):個HTTP請求完成 次完整操作。API現(xiàn)在,你對REST和WebSocket應(yīng)該 首先,我來介紹 下交易所是什么。交易所是個撮合交易平臺:它兼容了傳統(tǒng)撮合規(guī)則撮合引擎,將托管和交割方式替換為。數(shù)字資產(chǎn)交易所,則是 個中心化的平臺,通過eb頁面或、手機(jī)客戶端的形式,讓用戶將數(shù)字資產(chǎn)充值到指定錢包地址(交易所創(chuàng)建的錢包),然后在平臺掛、賣單以實(shí)現(xiàn)數(shù)字資產(chǎn)之間的兌換。通俗來說,交易所就是 個買和賣的菜市場。有人在攤位上大聲喊著:“二斤羊肉啊,二斤羊肉,四斤牛肉來換!”這種人被稱為ake(掛單者)。有的人則于不同攤位,不動聲色地掏出兩斤牛肉,順手拿走斤羊肉。這種人被稱為taker(吃單者)交易所存在的意義,makertaker提供足夠的空間活動;另方面,讓個名叫撮合引擎的然后,我再來介紹個叫做Gemini的交易所。Gemini,雙子星交易所,全球首個獲得合法經(jīng)營的、首個推出合約的、專注于撮合大宗交易的數(shù)字貨幣交易所。Gemini位于紐約,是家數(shù)字貨幣交易所和Gemini完 另個做得很好的交易所,是Bitmex,他家的APIUI界面和測試網(wǎng)絡(luò)也是幣圈流。不過,鑒于這家是期貨交易所,對于量化初學(xué)者來說有定的門檻,我們還是選擇Gemini更方便些。在進(jìn)入正題之前,我們最后再以比特幣和之間的交易為例,介紹四個基本概念(odeook的概念這里就不介紹了,你也不用深究,你只需要知道比特幣的價格是什么就行了)。市價單(marketorder):給交易所 個方向(買或者賣)和個數(shù)量,交易所把給定數(shù)量的(或者限價單(limitorder):給交易所 ,現(xiàn)在你的賬戶多了0.099個比特幣,少了1000,交易成功。這是個市價 天中午11:59:00,告訴交易所,我要掛 個,數(shù)量為0.1比特幣,價格為10000,低于這個價格不賣。交易所收到消息,在11:59:01告訴,掛單成功,你的賬戶余額中0.1比特幣的 分鐘,交易所告訴,你的被完全執(zhí)行了(fullyexecuted),現(xiàn)在你的賬戶多了1000,少了0.1個比特幣。這就是 顯然,市價單,在交給交易所后,會立刻得到執(zhí)行,當(dāng)然執(zhí)行價格也并不受你的控制。它很快,但是也非常不安全。而限價單,則限定了交易價格和數(shù)量,安全性相對高很多。缺點(diǎn)呢,自然就是如果市場朝相反方向走,你掛的可能沒有任何人去接,也就變成了干吆喝卻沒人買。因?yàn)槲覜]有講解odeok,所以這里的說辭不完全嚴(yán)謹(jǐn),但是對于初學(xué)者理解今天的內(nèi)容,已經(jīng)夠用了。 手把你使用API下第步,你需要做的是,個Geiniadox賬號。請放心,這個測試賬號不需要你充值任何金額,后即送大量虛擬現(xiàn)金。這口吻是不是聽著特像網(wǎng)游宣傳語,接下來就是“快來貪玩藍(lán)月里找我吧”?哈哈,不過這個設(shè)定確實(shí)如此,所以趕緊來個吧。后,為了滿足好奇,你可以先嘗試著使用web界面自行下單。不過,事實(shí)上,未的情況下是無法所以第二步,我們需要來配置APIKey。UserSettings,APISettings,然后點(diǎn)GENERATEANEWACCOUNTAPIKEY.,記下Key和Secret這兩串字符。因?yàn)榇翱?先強(qiáng)調(diào)點(diǎn),在量化系統(tǒng)開發(fā)的時候,你的心中定要有清晰的數(shù)據(jù)流圖。下單邏輯是個很簡單的RESTful樣,構(gòu)造你的請求訂單、加密請求,然后postgemini importimportrequestsimportjsonimportbase64importhmacimporthashlibimportdatetimeimportbaseurl=."endpoint=url=baseurl+geminiapikey="accountgeminiapisecret=t=payloadnonce=payload="request":"/v1/order/new","nonce":payloadnonce,"symbol":"btcusd","amount":"price":"side":"type":"exchangelimit","options":["makerorcancel"]}}encodedpayload=json.dumps(payload).encode()b64=base64.b64encode(encodedpayload)signature=hmac.new(geminiapisecret,b64,requestheaders='Contentype':"text/plain",'ContentLength':"0",'XGEMNAPKEY':geminiapikey,'XGEMNPAYLOAD':b64,'XGEMNSGNAURE':signature,'CacheControl':"nocache"}response=headers=requestheaders)neworder=response.json()print(neworder)輸出{'orderid':','id':','symbol':'btcusd','exchange':'gemini','avgexecution RESTfulPOSTrequests.post來實(shí)現(xiàn)。posturl、dataheaders這里的ul等價于. vorw,但是在代碼中分兩部分寫。第 部分是交易所API地址;第二部分,以斜杠開頭,用來表示統(tǒng) 的APIndon。我們也可以在其他交易所的API中看到類似的寫法,兩者連接在 起,就構(gòu)成了最終的ul。而接下來大段命令的目的,是為了構(gòu)造request_headers這里我簡單說下HTTPrequest,這是互聯(lián)網(wǎng)中基于TCP的基礎(chǔ)協(xié)議。HTTP協(xié)議是HyperTextTransferProtocol(超文本傳輸協(xié)議)的縮寫,用于從網(wǎng)(WWW:WorldWideWeb)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。而TCP(TransmissionControlProtocol)則是面向連接的、可靠的、基于字節(jié)流的傳多提句,如果你開發(fā)網(wǎng)絡(luò)程序,建議利用閑暇時間認(rèn)真讀讀《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》這本書,它也是國內(nèi)外計(jì)算機(jī)專業(yè)必修課中廣泛采用的之。邊學(xué)習(xí),邊應(yīng)用,對于初學(xué)者的能力提升是全面回到HTTP,它的主要特點(diǎn)是,連接簡單、靈活,可以使用“簡單請求,收到回復(fù),然后斷開連接”的方 種無狀態(tài)的協(xié)議,因此充分符合RESTful的思想。HTTP發(fā)送需要個請求頭(requestheader)request_headersPython的語言表示,就是個str對str的字典。這個字典里,有'Content-Type'"text/plain'Content-Length':"0描述Content的類型和長度,這里的Content對應(yīng)于參數(shù)data。但是Gemini這里的request的data沒有任何用處,因此長度為0。還有些其他字段,例如'keep-alive來表示連接是否可持續(xù)化等,你也可以適當(dāng)注意下。要知道,網(wǎng)絡(luò)編程很多bug都會出現(xiàn)在不起眼的細(xì)節(jié)之處。繼續(xù)往下走看代碼。payload是 輯信息。這里我們可以下個limitbuy,限價,價格為3633刀。 因?yàn)榫W(wǎng)絡(luò)通信是不可靠的, 個信息包有可能會丟失,也有可能重復(fù)發(fā)送,在金融操作中,這兩者都會造成很嚴(yán)重的。丟包的話,我們重新發(fā)送就行了;但是重復(fù)的包,我們需要去重。雖然CP在某種程度上可以保證,但為了在應(yīng)用層面進(jìn) 步減少錯誤發(fā)生的機(jī)會,Geini交易所要求所有的通信palad必須帶有noe。nonce是個單調(diào)遞增的整數(shù)。當(dāng)某個后來的請求的nonce,比上 個成功收到的請求的nouce小或者相等的時候,Gemini便會這次請求。這 則是因?yàn)閚once的加入,使得加密后的同樣訂單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木材行業(yè)市場調(diào)研與營銷策劃合同4篇
- 2025年企業(yè)投資貸款合同
- 2025年家具家電購買合同
- 2025年分期付款汽車銷售合同
- 2025年天然氣輸氣管道合作協(xié)議
- 2025版住宅小區(qū)水電暖消防系統(tǒng)改造與節(jié)能評估服務(wù)合同3篇
- 2025年健身健康檢測合同
- 2025年二手房合同樣本
- 二零二五至二零二五年度通信設(shè)備采購合同2篇
- 2025版屋面防水勞務(wù)分包合同(含防水檢測服務(wù))3篇
- 獅子王影視鑒賞
- 一年級數(shù)學(xué)加減法口算題每日一練(25套打印版)
- 2024年甘肅省武威市、嘉峪關(guān)市、臨夏州中考英語真題
- DL-T573-2021電力變壓器檢修導(dǎo)則
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫附答案
- 【可行性報告】2023年電動自行車相關(guān)項(xiàng)目可行性研究報告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測與維修專業(yè)課程體系
評論
0/150
提交評論