restfulsocket-搭建交易執(zhí)行層核心-for vip user_第1頁
restfulsocket-搭建交易執(zhí)行層核心-for vip user_第2頁
restfulsocket-搭建交易執(zhí)行層核心-for vip user_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

最新文檔

評論

0/150

提交評論