restfulsocket-搭建交易執(zhí)行層核心-for vip user_第1頁
restfulsocket-搭建交易執(zhí)行層核心-for vip user_第2頁
restfulsocket-搭建交易執(zhí)行層核心-for vip user_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余10頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

34-RESTful&Socket-搭建交易執(zhí) 節(jié),我們簡單介紹了量化交易的歷史、嚴(yán)謹(jǐn)?shù)亩x和它的基本組成結(jié)構(gòu)。有了這些次的基本知識(shí), 個(gè)量化交易系統(tǒng),可以說是個(gè)黑箱。這個(gè)黑箱連接交易所獲取到的數(shù)據(jù),通過策略運(yùn)算,然后再連接交易所進(jìn)行下單操作。正如我們?cè)谳斎胼敵瞿枪?jié)課說的那樣,黑箱的特性是輸入和輸出。每個(gè)設(shè)計(jì)網(wǎng)絡(luò)交互知道 級(jí)的在你搞不明白的時(shí)候,可以先在草稿紙上畫出交互拓?fù)鋱D,標(biāo)注清楚每個(gè)節(jié)點(diǎn)的輸入和輸出格式,然后想清 現(xiàn)在,我假設(shè)你對(duì)網(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),本意是指 為了方便你更容易理解這些概念,這里我舉個(gè)例子來類比。同學(xué)不是很聰明但很懂事,每天會(huì)在他的媽媽下班回來后給泡茶。剛開始,他的會(huì)發(fā)出這樣的要求:??紅?杯?,去廚房泡杯放了糖的37.5度的普洱茶可是同學(xué)不夠聰明,很難理解這個(gè)定語很多的句子。于是,媽為了讓他更簡單明白需要做的事情,把這個(gè)指令設(shè)計(jì)成了更簡潔的樣子:泡泡廚房的茶要求杯?=放糖放糖=溫度=37.5這里的“茶”就是資源,“廚房的茶”就是資源的地址(U);“泡”是動(dòng)詞;后面的要求,都是接口參數(shù)。這樣的 個(gè)接口,就是提供的 個(gè)EST接口。 臺(tái)機(jī)器,那么解析這個(gè)請(qǐng)求就會(huì)非常容易;而我們作為者,查看的代碼也很簡單。當(dāng)把這個(gè)接露到網(wǎng)上時(shí),這就是 總的來說,RESTful接口通常以HTTPGET和POST形式出現(xiàn)。但并非所有的GET、POST請(qǐng)求接口,都是這話可能有些拗口,我們舉個(gè)例子來看。上節(jié)課中,我們獲取了Geini交易所中,對(duì)USD價(jià)格的ticker接口:GEGE POSPOS DELEDELEEPOSPOS注:PrivateAPIInvocation的為 /rest-api/#private-api-你會(huì)發(fā)現(xiàn),這個(gè)接口不夠“RESTful” 此外,如果我們?nèi)z查Geini的其他私有接口(Piva,私有接口是指需要附加驗(yàn)證信息才能的接口),我們會(huì)發(fā)現(xiàn),那些接口的設(shè)計(jì)都不是嚴(yán)格ESul的。不僅如此,大部分的交易所,比如ime、iinxKoin等等,它們提供的“EST接口”,也都不是嚴(yán)格ESul的。這些接口之所以還能被稱為“EST接口”,是因?yàn)樗麄兇蟛糠譂M足了EST接口的另個(gè)重要要求:無狀態(tài)。無狀態(tài)的意思是,每個(gè)EST請(qǐng)求都是獨(dú)立的,不需要服務(wù)器在會(huì)話(Session)中緩存中間狀態(tài)來完成這個(gè)請(qǐng)求。簡單來說,如果服務(wù)器A接收到請(qǐng)求的時(shí)候宕機(jī)了,而此時(shí)把這個(gè)請(qǐng)求發(fā)送給交易所的服務(wù)器B,也能繼續(xù)完成,那么這個(gè)接口就是無狀態(tài)的。這里,我再給你舉 個(gè)簡單的有狀態(tài)的接口的例子。服務(wù)器要求,在客戶端請(qǐng)求取消訂單的時(shí)候,必須發(fā)送兩次不 樣的HTT請(qǐng)求。并且,第 次發(fā)送讓服務(wù)器“等待取消”;第二次發(fā)送“確認(rèn)取消”。那么,就算這個(gè)接口滿足了ESul的動(dòng)詞、資源分離原則,也不是 個(gè)EST接口。當(dāng)然,對(duì)于交易所的REST接口,你并不需要過于糾結(jié)“ESul”這個(gè)概念,否則很容易就被這些名詞給繞暈了。你只需要把握住最的 點(diǎn):個(gè)HTTP請(qǐng)求完成 次完整操作。API現(xiàn)在,你對(duì)REST和WebSocket應(yīng)該 首先,我來介紹 下交易所是什么。交易所是個(gè)撮合交易平臺(tái):它兼容了傳統(tǒng)撮合規(guī)則撮合引擎,將托管和交割方式替換為。數(shù)字資產(chǎn)交易所,則是 個(gè)中心化的平臺(tái),通過eb頁面或、手機(jī)客戶端的形式,讓用戶將數(shù)字資產(chǎn)充值到指定錢包地址(交易所創(chuàng)建的錢包),然后在平臺(tái)掛、賣單以實(shí)現(xiàn)數(shù)字資產(chǎn)之間的兌換。通俗來說,交易所就是 個(gè)買和賣的菜市場。有人在攤位上大聲喊著:“二斤羊肉啊,二斤羊肉,四斤牛肉來換!”這種人被稱為ake(掛單者)。有的人則于不同攤位,不動(dòng)聲色地掏出兩斤牛肉,順手拿走斤羊肉。這種人被稱為taker(吃單者)交易所存在的意義,makertaker提供足夠的空間活動(dòng);另方面,讓個(gè)名叫撮合引擎的然后,我再來介紹個(gè)叫做Gemini的交易所。Gemini,雙子星交易所,全球首個(gè)獲得合法經(jīng)營的、首個(gè)推出合約的、專注于撮合大宗交易的數(shù)字貨幣交易所。Gemini位于紐約,是家數(shù)字貨幣交易所和Gemini完 另個(gè)做得很好的交易所,是Bitmex,他家的APIUI界面和測(cè)試網(wǎng)絡(luò)也是幣圈流。不過,鑒于這家是期貨交易所,對(duì)于量化初學(xué)者來說有定的門檻,我們還是選擇Gemini更方便些。在進(jìn)入正題之前,我們最后再以比特幣和之間的交易為例,介紹四個(gè)基本概念(odeook的概念這里就不介紹了,你也不用深究,你只需要知道比特幣的價(jià)格是什么就行了)。市價(jià)單(marketorder):給交易所 個(gè)方向(買或者賣)和個(gè)數(shù)量,交易所把給定數(shù)量的(或者限價(jià)單(limitorder):給交易所 ,現(xiàn)在你的賬戶多了0.099個(gè)比特幣,少了1000,交易成功。這是個(gè)市價(jià) 天中午11:59:00,告訴交易所,我要掛 個(gè),數(shù)量為0.1比特幣,價(jià)格為10000,低于這個(gè)價(jià)格不賣。交易所收到消息,在11:59:01告訴,掛單成功,你的賬戶余額中0.1比特幣的 分鐘,交易所告訴,你的被完全執(zhí)行了(fullyexecuted),現(xiàn)在你的賬戶多了1000,少了0.1個(gè)比特幣。這就是 顯然,市價(jià)單,在交給交易所后,會(huì)立刻得到執(zhí)行,當(dāng)然執(zhí)行價(jià)格也并不受你的控制。它很快,但是也非常不安全。而限價(jià)單,則限定了交易價(jià)格和數(shù)量,安全性相對(duì)高很多。缺點(diǎn)呢,自然就是如果市場朝相反方向走,你掛的可能沒有任何人去接,也就變成了干吆喝卻沒人買。因?yàn)槲覜]有講解odeok,所以這里的說辭不完全嚴(yán)謹(jǐn),但是對(duì)于初學(xué)者理解今天的內(nèi)容,已經(jīng)夠用了。 手把你使用API下第步,你需要做的是,個(gè)Geiniadox賬號(hào)。請(qǐng)放心,這個(gè)測(cè)試賬號(hào)不需要你充值任何金額,后即送大量虛擬現(xiàn)金。這口吻是不是聽著特像網(wǎng)游宣傳語,接下來就是“快來貪玩藍(lán)月里找我吧”?哈哈,不過這個(gè)設(shè)定確實(shí)如此,所以趕緊來個(gè)吧。后,為了滿足好奇,你可以先嘗試著使用web界面自行下單。不過,事實(shí)上,未的情況下是無法所以第二步,我們需要來配置APIKey。UserSettings,APISettings,然后點(diǎn)GENERATEANEWACCOUNTAPIKEY.,記下Key和Secret這兩串字符。因?yàn)榇翱?先強(qiáng)調(diào)點(diǎn),在量化系統(tǒng)開發(fā)的時(shí)候,你的心中定要有清晰的數(shù)據(jù)流圖。下單邏輯是個(gè)很簡單的RESTful樣,構(gòu)造你的請(qǐng)求訂單、加密請(qǐng)求,然后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等價(jià)于. 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ò)程序,建議利用閑暇時(shí)間認(rèn)真讀讀《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》這本書,它也是國內(nèi)外計(jì)算機(jī)專業(yè)必修課中廣泛采用的之。邊學(xué)習(xí),邊應(yīng)用,對(duì)于初學(xué)者的能力提升是全面回到HTTP,它的主要特點(diǎn)是,連接簡單、靈活,可以使用“簡單請(qǐng)求,收到回復(fù),然后斷開連接”的方 種無狀態(tài)的協(xié)議,因此充分符合RESTful的思想。HTTP發(fā)送需要個(gè)請(qǐng)求頭(requestheader)request_headersPython的語言表示,就是個(gè)str對(duì)str的字典。這個(gè)字典里,有'Content-Type'"text/plain'Content-Length':"0描述Content的類型和長度,這里的Content對(duì)應(yīng)于參數(shù)data。但是Gemini這里的request的data沒有任何用處,因此長度為0。還有些其他字段,例如'keep-alive來表示連接是否可持續(xù)化等,你也可以適當(dāng)注意下。要知道,網(wǎng)絡(luò)編程很多bug都會(huì)出現(xiàn)在不起眼的細(xì)節(jié)之處。繼續(xù)往下走看代碼。payload是 輯信息。這里我們可以下個(gè)limitbuy,限價(jià),價(jià)格為3633刀。 因?yàn)榫W(wǎng)絡(luò)通信是不可靠的, 個(gè)信息包有可能會(huì)丟失,也有可能重復(fù)發(fā)送,在金融操作中,這兩者都會(huì)造成很嚴(yán)重的。丟包的話,我們重新發(fā)送就行了;但是重復(fù)的包,我們需要去重。雖然CP在某種程度上可以保證,但為了在應(yīng)用層面進(jìn) 步減少錯(cuò)誤發(fā)生的機(jī)會(huì),Geini交易所要求所有的通信palad必須帶有noe。nonce是個(gè)單調(diào)遞增的整數(shù)。當(dāng)某個(gè)后來的請(qǐng)求的nonce,比上 個(gè)成功收到的請(qǐng)求的nouce小或者相等的時(shí)候,Gemini便會(huì)這次請(qǐng)求。這 則是因?yàn)閚once的加入,使得加密后的同樣訂單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論