軟件詳細設計說明書(例_第1頁
軟件詳細設計說明書(例_第2頁
軟件詳細設計說明書(例_第3頁
軟件詳細設計說明書(例_第4頁
軟件詳細設計說明書(例_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上案卷號00001日期軟件詳細設計說明書(例) 作 者: 完成日期: 簽 收 人: 簽收日期: 修改情況記錄:版本號修改批準人修改人安裝日期簽收人 目錄 1 引言11.1 編寫目的11.2 范圍11.3 定義11.4 參考資料12 總體設計12.1 需求規(guī)定12.2 運行環(huán)境22.3 基本設計概念和處理流程22.4 結(jié)構(gòu)22.5 功能需求與程序的關系22.6 人工處理過程22.7 尚未解決的問題33 接口設計33.1 用戶接口33.2 外部接口33.3 內(nèi)部接口34 運行設計34.1 運行模塊組合34.2 運行控制34.3 運行時間45 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設計45.1 邏輯結(jié)

2、構(gòu)設計要點45.2 物理結(jié)構(gòu)設計要點45.3 數(shù)據(jù)結(jié)構(gòu)與程序的關系46 系統(tǒng)出錯處理設計56.1 出錯信息56.2 補救措施56.3 系統(tǒng)維護設計5專心-專注-專業(yè)1 引言1.1 編寫目的隨著證券交易電子化程度的不斷提高,券商對于各種業(yè)務提出了新的要求,為了滿足券商的發(fā)展需求,更好的為客戶提供服務,現(xiàn)結(jié)合原有各版本的證券交易軟件的優(yōu)點和特點,開發(fā)一套采用Client/Server結(jié)構(gòu)的證券交易軟件管理系統(tǒng)(SQL版)。本系統(tǒng)從底層予以優(yōu)化,使整個系統(tǒng)的運行速度得到較大提高,通過重新優(yōu)化數(shù)據(jù)庫內(nèi)部結(jié)構(gòu),使系統(tǒng)的可擴充性得到極大提高。本說明書給出SQL版證券交易系統(tǒng)的設計說明,包括最終實現(xiàn)的軟件必

3、須滿足的功能、性能、接口和用戶界面、附屬工具程序的功能以及設計約束等。目的在于:§ 為編碼人員提供依據(jù);§ 為修改、維護提供條件;§ 項目負責人將按計劃書的要求布置和控制開發(fā)工作全過程;§ 項目質(zhì)量保證組將按此計劃書做階段性和總結(jié)性的質(zhì)量驗證和確認。本說明書的預期讀者包括:§ 項目開發(fā)人員,特別是編碼人員;§ 軟件維護人員;§ 技術管理人員;§ 執(zhí)行軟件質(zhì)量保證計劃的專門人員;§ 參與本項目開發(fā)進程各階段驗證、確認以及負責為最后項目驗收、鑒定提供相應報告的有關人員。§ 合作各方有關部門的復雜人;

4、項目負責人和全體參加人員。1.2 范圍說明:a 待開發(fā)的軟件系統(tǒng)的名稱:模擬股票交易系統(tǒng)b 列出本項目的任務提出者、開發(fā)者、用戶以及將運行該項軟件的單位。 1.3 定義 列出本文件中用到的專門術語的定義和縮寫詞的原詞組。 本報告用到的術語符合國家標準軟件工程術語(GB/T11475-1995)。1.4 參考資料列出要用到的參考資料,如:a 本項目的經(jīng)核準的計劃任務書或合同、上級機關的批文;b 屬于本項目的其他已發(fā)表的文件;c 本文件中各處引用的文件、資料,包括所要用到的軟件開發(fā)標準。列出這些文件的標題、文件編號、發(fā)表日期和出版單位,說明能夠得到這些文件資料的來源。2 總體設計2.1 需求規(guī)定說

5、明對本系統(tǒng)的主要的輸入輸出項目、處理的功能性能要求,詳細的說明可參見需求分析說明書。2.2 運行環(huán)境簡要地說明對本系統(tǒng)的運行環(huán)境(包括硬件環(huán)境和支持環(huán)境)的規(guī)定,詳細說明參見需求分析說明書。§ 數(shù)據(jù)庫服務器奔騰Pro內(nèi)存128MB以上硬盤9GB100M 網(wǎng)卡§ 應用服務器奔騰Pro內(nèi)存64MB以上硬盤4GB100M 網(wǎng)卡§ 網(wǎng)絡配置100M / 10M§ 工作站(柜臺)P100以上內(nèi)存8MB以上硬盤1G以上100M/10M網(wǎng)卡 軟件§ 操作系統(tǒng)Windows NT 4.0以上§ 數(shù)據(jù)庫管理系統(tǒng)SQL Server 2005§

6、 相關軟件工具Windows NT Workstation/Windows NT serverWindows 2000 Professional/ Server開發(fā)工具§ 平臺:Windows95/98、Windows NT、Windows 2000§ 開發(fā)工具:visual stidio 2005 sp1,C#.Net 測試環(huán)境Windows31、Windows95/98、Windows NT、Windows 20002.3 基本設計概念和處理流程說明本系統(tǒng)的基本設計概念和處理流程,盡量使用圖表的形式。營業(yè)部系統(tǒng)一共有四個對象,即客戶、員工、市場和銀行,市場的概念是交易所

7、的細化,比如上海證券交易所的股和股就是兩個市場,有了市場的概念我們就可以把交易所這個概念細化,并使同一個市場的共性更突出。銀行則通過銀證轉(zhuǎn)賬業(yè)務介入,并成為營業(yè)部系統(tǒng)不可或缺的組成部分。上述四個對象通過一些業(yè)務流程進行相互操作從而形成整個交易活動。因此整個系統(tǒng)模型可以表述為圖2-1設計時需要將營業(yè)部系統(tǒng)所使用的各種信息分為描述四個對象的信息和描述業(yè)務流程的信息。由于四個對象相對而言是一種穩(wěn)定型信息,而業(yè)務流程則較易變化,且營業(yè)部之間差異很大,因此應將四個對象盡量定型,而將各種業(yè)務流程盡可能做成組件,以便營業(yè)部可根據(jù)實際需求組裝成適合自己的系統(tǒng)。根據(jù)以上思想,在設計對象模型時應充分考慮到可擴展性

8、,盡量做到抽象化、參數(shù)化,從而使對象需求變化時不致影響系統(tǒng)結(jié)構(gòu)。 圖 2.12.4 結(jié)構(gòu)用一覽表及框圖的形式說明本系統(tǒng)的系統(tǒng)元素(各層模塊、子程序、公用程序等)的劃分,扼要說明每個系統(tǒng)元素的標識符和功能,分層次地給出各元素之間的控制與被控制關系。本系統(tǒng)采用c/s模式的3層結(jié)構(gòu)按照不同會話來劃分的話可以分為3大系統(tǒng)模塊局域網(wǎng)數(shù)據(jù)庫柜臺管理查詢管理報表管理資金管理數(shù)據(jù)轉(zhuǎn)換銀證轉(zhuǎn)賬委托服務日終管理系統(tǒng)管理系統(tǒng)監(jiān)控接口處理子系統(tǒng)系統(tǒng)維護子系統(tǒng)圖2-2 交易系統(tǒng)體系結(jié)構(gòu)客戶端登陸模塊:最關鍵的交易系統(tǒng)模塊結(jié)構(gòu)圖如下:股票信息發(fā)布經(jīng)過修改我認為每次由客戶端每5秒去查詢一次服務器更新信息不可取,因為這會加重

9、服務端和客戶端的負擔,特別是服務器端的運算。修改后實現(xiàn)變更為:用戶一開始登陸后獲得一次服務器的全部股票當前信息。而服務器端每次發(fā)生交易后,給每一個在線用戶發(fā)送當前交易需要更新的股票信息,這樣就減輕了客戶機和服務端的信息2.5 功能需求與程序的關系(該關系由需求分析報告編寫者根據(jù)結(jié)構(gòu)圖說明)本條用一張如下的矩陣圖說明各項功能需求的實現(xiàn)同各塊程序的分配關系:獲取并發(fā)送用戶請求繪制分時圖MD5加密解密發(fā)送用戶交易請求接受并識別用戶請求調(diào)用數(shù)據(jù)層查詢撮合交易服務器返回客戶端信息用戶登陸查看用戶持倉實時指數(shù)交易委托取消交易2.6 人工處理過程說明在本軟件系統(tǒng)的工作過程中不得不包含的人工處理過程(如果有的

10、話)。沒有完成股票管理的模塊設計,所以股票必須從數(shù)據(jù)庫后臺添加如果有新股發(fā)行,還必須添加有關股票的交易隊列2.7 尚未解決的問題說明在概要設計過程中尚未解決而設計者認為在系統(tǒng)完成之前必須解決的各個問題。3 接口設計3.1 用戶接口說明將向用戶提供的命令和它們的語法結(jié)構(gòu),以及軟件的回答信息。向用戶提供簡單易用的UI,以及幫助文檔??蛻舳藢⑻峁┮韵鹿δ苁紫葟棾鲇脩舻顷懣?,供用戶輸入用戶名和密碼菜單項提供個股查詢和分時圖按鈕菜單欄下是選項卡,提供股票實時信息和個股分時圖欄 提供用戶交易界面和交易按鈕以及查看用戶盈虧按鍵3.2 外部接口說明本系統(tǒng)同外界的所有接口的安排包括軟件與硬件之間的接口、本系統(tǒng)與

11、各支持軟件之間的接口關系。采用基于正確公開標準的部件和技術以確保最大限度的協(xié)作能力以及與第三方系統(tǒng)與部件集成的簡便性。這類標準包括但不限于以下幾種:§ 網(wǎng)絡協(xié)議與標準 (TCP/IP, HTTP, SSL, etc)§ 語言(SQL, C#.net, etc.)§ 數(shù)據(jù)庫連接性(ADO。net)3.3 內(nèi)部接口說明本系統(tǒng)之內(nèi)的各個系統(tǒng)元素之間的接口的安排。邏輯層和數(shù)據(jù)訪問層通過以經(jīng)的stockDataModel接口,來限定訪問stockData類型的數(shù)據(jù)客戶端通過調(diào)用buyStock(stockData)和sellStock(stockData)來訪問邏輯層,在這

12、個函數(shù)中包含了訪問邏輯層的接口dealTransaction(stockData) 通過AdoFactory訪問不同的數(shù)據(jù)庫客戶端登陸協(xié)議D(二字節(jié))+(客戶名字長度)(4字節(jié))+(客戶名字)+(客戶密碼長度)(4字節(jié))+(客戶密碼);客戶買賣協(xié)議B(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量)(4字節(jié))S(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量)(4字節(jié))查詢交易信息并返回給客戶端C(二字節(jié))具體有拆包解包的類using System;using System.Collections.Generic;using System.Text;namespace ProjectCenterT

13、radingSys public class Protocal private byte messagebuffer; private byte messagelength; public byte messagebag; /該函數(shù)是將字符串轉(zhuǎn)換為字節(jié)數(shù)組 public byte StringtoByte(string stringInfo) messagebuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(stringInfo); return messagebuffer; /該函數(shù)將整型轉(zhuǎn)換為個字節(jié) public byte InttoByte

14、(int number) messagelength=BitConverter.GetBytes(number); return messagelength; /將浮點型轉(zhuǎn)換為個字節(jié) public byte DoubletoByte(double price) byte pricebyte = BitConverter.GetBytes(price); return pricebyte; /合并一個字符串(字節(jié)數(shù)組)和他的長度作為一個包 public byte Combinarray(byte messle, byte messinfo) messagebag=new bytemessle.L

15、ength+messinfo.Length; int index; for (index = 0; index < messle.Length; index+) messagebagindex = messagelengthindex; for (int index1 = 0; index1 < messinfo.Length; index1+) messagebagindex + index1 = messagebufferindex1; return messagebag; /解包頭 public byte BagHead(char head) byte headbyte =

16、BitConverter.GetBytes(head); return headbyte; /讀包頭 public char DeBagHead(byte buffer) char headinfo = BitConverter.ToChar(buffer, 0); return headinfo; /該函數(shù)為解包信息為字符串! public string deMessgeBag(byte Messagebag,int start,out int next) next = BitConverter.ToInt32(Messagebag, start); string message = Sys

17、tem.Text.ASCIIEncoding.ASCII.GetString(Messagebag, start + 4, next); return message; 4 運行設計4.1 運行模塊組合說明對系統(tǒng)施加不同的外界運行控制時所引起的各種不同的運行模塊組合,說明每種運行所歷經(jīng)的內(nèi)部模塊和支持軟件。4.2 運行控制說明每一種外界的運行控制的方式方法和操作步驟。4.3 運行時間說明每種運行模塊組合將占用各種資源的時間。5 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設計5.1 邏輯結(jié)構(gòu)設計要點給出本系統(tǒng)內(nèi)所使用的每個數(shù)據(jù)結(jié)構(gòu)的名稱、標識符以及它們之中每個數(shù)據(jù)項、記錄、文卷和系的標識、定義、長度及它們之間的層次的或表格的

18、相互關系。客戶端類圖:windowForm:FormPrivate: userLogDialog userNametextBox userPasswordtextBox userlogOKbotton userlogCanselbutton tabPage MenuBar stockRealtimeGraphitem stock Quote Dialog dataGridView userBuyStockID userBuyStockcount userBuyStockprice userBuyStockButton .sell userStocklistView userStockLookB

19、utton send Mesto Server(string Info) /該函數(shù)用來向主機發(fā)送請求 協(xié)議U:發(fā)送用戶名,密碼 B:buy股票id,count,price,user S: sell. Q:查詢信息 Receive MesFromServer() (接上)MD5encrypt(string)/以下都要通過sendMestoServer/向主機發(fā)送信息logOK_press(event,handle);stockQuoteitem_press(e,h);buyStockButton_press(e,h);sellStockButton_press(e,h);stocklookBut

20、ton_press(e,h);/該函數(shù)調(diào)用drawPicture畫圖stockRealtimeGraphitem_press(e,h)Class RealTime GraphPrivate stockID/動態(tài)數(shù)組存儲股票價格 ArrayList stockPricePublic:/在windowform類中recievemess后更新當前價格,即在數(shù)組后添加一項最新價格updatePrice(price,sotckPrice) drawPicture(stockID,stockPrice) Class stockData 訂單號 public int ListID; public int U

21、srID; public string StockIndex; public flout Price; public int Count; public bool Isbuy;該類即為向服務端傳送數(shù)據(jù)時的包服務器端StockQueuePrivate stockData data stockData nextPublic DeleteQueueHead(); AddStockData(); Class TradeService該類還要補充若干個StockQueue類型的成員變量private void StartListening() byte ipadre = new byte 10, 82,

22、 14, 47; IPAddress ip=new IPAddress(ipadre); m_Tcplisten = new TcpListener(ip,m_Port); m_Tcplisten.Start(); while (true) try Socket s = m_Tcplisten.AcceptSocket(); clientSocket = s; m_serverThread = new Thread(new ThreadStart(serviceClient);/多線程deal各個連接用戶的socket m_serverThread.Start(); catch (Except

23、ion E) Console.WriteLine(E.ToString(); 如以上startlistening代碼所示,監(jiān)聽創(chuàng)造一個連接客戶端的套接字,再用多線程處理該連接,而服務器端則繼續(xù)監(jiān)聽新的套接字。這樣主要的交易代碼就可以放入ServiceClient這個函數(shù)中,當有新客戶信息連入時,即可進行查詢數(shù)據(jù)庫,對比插入股票隊列等工作Class ClientInfo/這個類記錄了客戶端的socket 數(shù)據(jù)訪問層類圖Class ADOSQLserverPrivate dataSet /ds下可有4個dataTable userTable stockTable User_stockTable t

24、empTablePublic:/驗證用戶信息 Bool CheckUserlogin(string usridstring password); Bool CheckUserMoney(string userID); Bool CheckUserStockCount(string userID);/交易成功修改用戶和股票信息 Void updateUserTable(Class stockData) Void updateStockTable(Class stockData) Void updateUser_stockTable(Class stockData)/還未成功的交易放入臨時表, V

25、oid updateTemTable(Class stockData) 注意,每次交易成功要刪除臨時表的信息 Void deleteInfo(Class stockData) Class stockData 訂單號 public int ListID; public int UsrID; public string StockIndex; public int Prince; public int Count; public bool Isbuy;該類即為向服務端傳送數(shù)據(jù)時的包 關于交易算法的詳細設計5.2 撮合算法在前文中,我們已經(jīng)提到了,撮合算法是整個交易所乃至整個證券仿真系統(tǒng)的核心部分。

26、此算法的成功與否,直接影響著仿真系統(tǒng)是否能實現(xiàn)以及實現(xiàn)效率的高低。按照真實的交易原則,撮合算法分為連續(xù)競價和集中競價兩種方式。下面我們將分別對這兩種方式進行實現(xiàn)。5.2.1 連續(xù)競價連續(xù)競價是在絕大部分交易時間使用的撮合算法。連續(xù)競價原則:1.) 價格優(yōu)先原則:價格較高的買入申報優(yōu)先于價格較低的買入申報,價格較低的賣出申報優(yōu)先于價格較高的賣出申報。2.) 時間優(yōu)先原則:同價位申報、依照申報時序決定優(yōu)先順序,即買賣方向、價格相同的,先申報者先于后申報者。先后順序按證券交易所主機接受申報的時間確定。在正常情況下,買隊列的第一筆(報價最高)的報價一定小于賣隊列的第一筆(最低報價)的報價。此時不發(fā)生撮

27、合。一旦買賣隊列的價格發(fā)生了交叉,如圖2.3.1所示,發(fā)生交叉的那部分就會進行撮合。而事實上,由于每一筆新來的單子進入數(shù)列后都會觸發(fā)一次比較,所以每次觸發(fā)撮合都是由新單子促成的。稱為“來一筆撮合一次”,也就是連續(xù)競價。b 圖2.3.1連續(xù)競價算法描述:首先設定QueueStruct結(jié)構(gòu)為元素的買賣兩個隊列BuyQueue和SellQueue。為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)建這兩個隊列。其中BuyQueue是時間優(yōu)先、買價降序排序,而SellQueue是時間優(yōu)先、賣價升序排序,在連續(xù)競價條件下,可以保證BuyQueue0的price小于SellQueue0的price。連續(xù)

28、競價算法如下:1.) 接收一個新單子newlist,判斷newlist是買單還是賣單;如果是買單,則轉(zhuǎn)2,如果是賣單,則轉(zhuǎn)B; 2.) 取賣單隊列頭SellQueue0,if SellQueue0.price>newlist.price,利用插入排序?qū)ewlist插入到買隊列BuyQueue中,轉(zhuǎn)1; 3.) if SellQueue0.count>newlist.count,newlist完全撮合,SellQueue0.countSellQueue0.countnewlist.count,轉(zhuǎn)2;4.) if SellQueue0.count<=newlist.count,

29、SellQueue0撮合,并將SellQueue0從SellQueue隊列中刪除,newlist.count=newlist.count-SellQueue0.count,轉(zhuǎn)2; 5.) 取買單隊列頭BuyQueue0,if BuyQueue0.price<newlist.price,利用插入排序?qū)ewlist插入到賣隊列BuyQueue中,轉(zhuǎn)1; 6.) if BuyQueue0.count>newlist.count,newlist完全撮合,BuyQueue0.countBuyQueue0.countnewlist.count,轉(zhuǎn)1;7.) if BuyQueue0.coun

30、t<=newlist.count,BuyQueue0撮合, 并將BuyQueue0從BuyQueue隊列中刪除, newlist.count=newlist.count-BuyQueue0.count,轉(zhuǎn)5; 如下面流程圖5.2.2所示: 圖.2 集合競價集合競價是指對所有有效委托進行集中處理,深、滬兩市的集合競價時間為交易日上午9:15至9:25。集合競價原則:§ 凡是高于開盤價的買單一定成交;§ 凡是低于開盤價的賣單一定成交;§ 凡是高于開盤價的賣單一定不成交;§ 凡是低于開盤價的買單一定不成交;集合競價分四步完成: 第一步:確

31、定有效委托在有漲跌幅限制的情況下,有效委托是這樣確定的: 根據(jù)該只證券上一交易日收盤價以及確定的漲跌幅度來計算當日的最高限價、 最低限價。有效價格范圍就是該只證券最高限價、最低限價之間的所有價位。 限價超出此范圍的委托為無效委托,系統(tǒng)作自動撤單處理。 第二步:系統(tǒng)根據(jù)競價規(guī)則自動確定集合競價的成交價,這個價格就是當日的開盤價, 所有高于開盤價的買盤和所有低開開盤價的賣盤均以此價格成交, 集合競價的成交價確定原則是:以此價格成交,能夠得到最大成交量。 第三步:集中撮合處理所有的買委托按照委托限價由高到低的順序排列, 限價相同者按照進入系統(tǒng)的時間先后排列;所有賣委托按委托限價由低到高的順序排列 ,

32、 限價相同者按照進入系統(tǒng)的時間先后排列。依序逐筆將排在前面的買委托與賣委托配對成交,即按照"價格優(yōu)先,同等價格下時間優(yōu)先"的成交順序依次成交,直至成交條件不滿足為止,即不存在限價高于等于成交價的叫買委托、或不存在限價低于等于成交價的叫賣委托。 所有成交都以同一成交價成交。 這同一成交價成交的買賣單一般量都是很大的,如圖3.2.3所示圖3.2.3所示第四步:行情揭示:1.) 如該只證券的成交量為零,則將成交價位揭示為開盤價、最近成交價、最高價、最低價,并揭示出成交量、成交金額。2.) 剩余有效委托中,實際的最高叫買價揭示為叫買揭示價,若最高叫買價不存在,則叫買揭示價揭示為空;

33、實際的最低叫賣價揭示為叫賣揭示價,若最低叫賣價不存在,則叫賣揭示價揭示為空。 集合競價中未能成交的委托,自動進入連續(xù)競價。按照這樣的原則和要求,我們設計了如下的集合競價撮合算法。如圖3.2.4所示。 圖3.2.4集合競價算法描述:和連續(xù)競價一樣,首先設定QueueStruct結(jié)構(gòu)為元素的買賣兩個隊列BuyQueue和SellQueue。為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)建這兩個隊列。其中BuyQueue是時間優(yōu)先、買價降序排序,而SellQueue是時間優(yōu)先、賣價升序排序。在開市到開盤這段時間內(nèi),買賣單已經(jīng)分別進入了買賣隊列內(nèi)排好了序。一旦宣布開盤,則觸發(fā)集合撮合,如下:&#

34、167; 判斷兩隊列是否都不為空,如是,轉(zhuǎn)2;如否,轉(zhuǎn)21;§ 判斷BuyQueue0.prince與SellQueue0.prince之差,如大于等于0,轉(zhuǎn)3:如小于0,轉(zhuǎn)21;§ 定義int i=j=0;M、N分別為買賣兩隊列非空元素的個數(shù);BOOL k;QueueStruct Buy=BuyQueue0;Sell=SellQueue0;Buy1;Sell1;轉(zhuǎn)4;§ 判斷BuyQueuei.prince與SellQueuej.prince之差,如大于等于0,轉(zhuǎn)5:如小于0,轉(zhuǎn)14;§ 判斷Buy.count與Sell.count之差,如大于0,轉(zhuǎn)6

35、;如小于等于0,轉(zhuǎn)9;§ j+; k=true; Sell1.count=Sell.count;Sell.count=Sell.count+SellQueueiSellQueue.count;轉(zhuǎn)7;§ 判斷j是否小于N,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)8;§ 開盤價為BuyQueuei.price;總成交量為Sell.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ i+;k=false; Buy1.count=Buy.count;Buy.count=Buy.count+BuyQueuei.count;轉(zhuǎn)10;§ 判斷i是否小于M,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)11;

36、§ 判斷Buy.count與Sell.count之差,如小于0,轉(zhuǎn)12;如等于0,轉(zhuǎn)13;§ 開盤價為SellQueuej.price;總成交量為Buy.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ 開盤價為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為sell.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ 判斷k值,如為true,轉(zhuǎn)15;如為false,轉(zhuǎn)18;§ 判斷Buy1.count與Sell1.count之差,如大于0,轉(zhuǎn)16;如小于0,轉(zhuǎn)17;§ 開盤價為BuyQueuei.price

37、;總成交量為Sell1.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ 開盤價為(SellQueuej-1.price+BuyQueuei-1.price)/2;總成交量為Sell1.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ 判斷Buy1.count與Sell.count之差,如小于0,轉(zhuǎn)19;如等于0,轉(zhuǎn)20;§ 開盤價為SellQueuej.price;總成交量為Buy1.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;§ 開盤價為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.count;統(tǒng)計成交數(shù)據(jù)及回報,

38、并返回;§ 開盤價為昨日收盤價,成交量為0;保留所有數(shù)據(jù)至開盤進入連續(xù)競價撮合;5.2.3 買賣隊列排序上面我們介紹了撮合算法的核心部分,但實際上在撮合前后都要對兩個買賣隊列進行一定的插入和排列處理,這在整個算法中也是很重要的部分。下面我們就來具體介紹一下。對所有的排列和插入我們考慮了效率問題之后,最后統(tǒng)一使用了二分插入排序法。在單子進入隊列時,我們首先統(tǒng)計出當前隊列中的非空數(shù)據(jù)個數(shù),然后再通過新單子與當前隊列中間值的價格比較,確定新單子在隊列的前半部分還是后半部分,然后再取該區(qū)域中間值與之比較,直到確定新單子應在的位置。如下列代碼所示:int low=0; int high=N-1

39、; /N為隊列中非空元素的個數(shù)while(low<=high)int m=(low+high)/2;if(newlist->price<SellQueuem.price)high=m-1;else low=m+1;for(int i=N-1; i>=high+1; -i)SellQueuei+1=SellQueuei; SellQueuehigh+1=*newlist;這是賣隊列的排序,對于買隊列的排序與之相似,只是價格排列是由高到底。在這里不再贅述。這種插入排序方法完全符合了撮合算法中價格優(yōu)先、時間優(yōu)先的要求,而且效率也是比較高的。在集合競價前和連續(xù)競價后進行的插入排序都是這樣進行的,而在集合競價撮合之后,對兩隊列的重新排列,我們首先使用了memset函數(shù)將前面已全部成交的t個元素清空,然后將t到N(原總非空元素個數(shù))前移t位。如下列代碼

溫馨提示

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

評論

0/150

提交評論