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

下載本文檔

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

文檔簡(jiǎn)介

1、案卷號(hào)00001日期軟件詳細(xì)設(shè)計(jì)說明書例作 者:完成日期:簽收人:簽收日期:修改情況記錄:版本號(hào)修改批準(zhǔn)人修改人安裝日期簽收人目錄1引言31.1編寫目的31.2范圍41.3定義41.4參考資料42總體設(shè)計(jì)52.1需求規(guī)定52.2運(yùn)行環(huán)境52.3根本設(shè)計(jì)概念和處理流程 62.4結(jié)構(gòu) 82.5功能需求與程序的關(guān)系 112.6人工處理過程132.7尚未解決的問題 133接口設(shè)計(jì)133.1用戶接口 133.2外部接口 143.3內(nèi)部接口 144運(yùn)行設(shè)計(jì)184.1 運(yùn)行模塊組合 184.2運(yùn)行控制 184.3運(yùn)行時(shí)間185系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 195.1邏輯結(jié)構(gòu)設(shè)計(jì)要點(diǎn) 195.2物理結(jié)構(gòu)設(shè)計(jì)要點(diǎn) 15.3

2、數(shù)據(jù)結(jié)構(gòu)與程序的關(guān)系 46系統(tǒng)出錯(cuò)處理設(shè)計(jì)46.1岀錯(cuò)信息46.2補(bǔ)救措施56.3系統(tǒng)維護(hù)設(shè)計(jì)51引言1.1編寫目的隨著證券交易電子化程度的不斷提高,券商對(duì)于各種業(yè)務(wù)提出了新的要求,為了滿足券商的開展需求,更好的為客戶提供效勞,現(xiàn)結(jié)合原有各版本的證券交易軟件的優(yōu)點(diǎn)和特點(diǎn), 開發(fā)一套采用 Client/Server結(jié)構(gòu)的證券交易軟件管理系統(tǒng) SQL版。本系統(tǒng)從底層予以優(yōu) 化,使整個(gè)系統(tǒng)的運(yùn)行速度得到較大提高,通過重新優(yōu)化數(shù)據(jù)庫內(nèi)部結(jié)構(gòu),使系統(tǒng)的可擴(kuò)充性得到極大提高。本說明書給出SQL版證券交易系統(tǒng)的設(shè)計(jì)說明,包括最終實(shí)現(xiàn)的軟件必須滿足的功能、性能、接口和用戶界面、附屬工具程序的功能以及設(shè)計(jì)約束等

3、。目的在于:? 為編碼人員提供依據(jù);? 為修改、維護(hù)提供條件;? 工程負(fù)責(zé)人將按方案書的要求布置和控制開發(fā)工作全過程;? 工程質(zhì)量保證組將按此方案書做階段性和總結(jié)性的質(zhì)量驗(yàn)證和確認(rèn)。本說明書的預(yù)期讀者包括:? 工程開發(fā)人員,特別是編碼人員;? 軟件維護(hù)人員;? 技術(shù)管理人員;? 執(zhí)行軟件質(zhì)量保證方案的專門人員;? 參與本工程開發(fā)進(jìn)程各階段驗(yàn)證、確認(rèn)以及負(fù)責(zé)為最后工程驗(yàn)收、鑒定提供相應(yīng)報(bào) 告的有關(guān)人員。? 合作各方有關(guān)部門的復(fù)雜人;工程負(fù)責(zé)人和全體參加人員。1.2范圍說明:a. 待開發(fā)的軟件系統(tǒng)的名稱:模擬股票交易系統(tǒng)b. 列出本工程的任務(wù)提出者、開發(fā)者、用戶以及將運(yùn)行該項(xiàng)軟件的單位。1.3定義

4、列出本文件中用到的專門術(shù)語的定義和縮寫詞的原詞組。本報(bào)告用到的術(shù)語符合國家標(biāo)準(zhǔn)?軟件工程術(shù)語(GB/T11475-1995 )?。1.4參考資料列出要用到的參考資料,如:a. 本工程的經(jīng)核準(zhǔn)的方案任務(wù)書或合同、上級(jí)機(jī)關(guān)的批文;b. 屬于本工程的其他已發(fā)表的文件;c. 本文件中各處引用的文件、資料,包括所要用到的軟件開發(fā)標(biāo)準(zhǔn)。列出這些文件的標(biāo)題、 文件編號(hào)、發(fā)表日期和出版單位, 說明能夠得到這些文件資料的 來源。2總體設(shè)計(jì)2.1需求規(guī)定詳細(xì)的說明可參見?需求的規(guī)定,詳細(xì)說明參見?需說明對(duì)本系統(tǒng)的主要的輸入輸出工程、處理的功能性能要求,分析說明書?。2.2運(yùn)行環(huán)境簡(jiǎn)要地說明對(duì)本系統(tǒng)的運(yùn)行環(huán)境包括硬

5、件環(huán)境和支持環(huán)境 求分析說明書?。? 數(shù)據(jù)庫效勞器奔騰Pro內(nèi)存128MB以上硬盤9GB100M網(wǎng)卡? 應(yīng)用效勞器奔騰Pro內(nèi)存64MB以上 硬盤4GB100M網(wǎng)卡? 網(wǎng)絡(luò)配置100M / 10M? 工作站柜臺(tái)P100以上內(nèi)存8MB以上 硬盤1G以上100M/10 M 網(wǎng)卡軟件? 操作系統(tǒng)Windows NT 4.0 以上? 數(shù)據(jù)庫管理系統(tǒng)SQL Server 2005? 相關(guān)軟件工具Win dows NT Workstation/Wi ndows NT serverWin dows 2000 Professio nal/ Server開發(fā)工具? 平臺(tái): Windows95/98、Window

6、s NT、Windows 2000? 開發(fā)工具:visual stidio 2005 sp1,C#.Net測(cè)試環(huán)境Windows31、Windows95/98、Windows NT、Windows 20002.3根本設(shè)計(jì)概念和處理流程說明本系統(tǒng)的根本設(shè)計(jì)概念和處理流程,盡量使用圖表的形式。營業(yè)部系統(tǒng)一共有四個(gè)對(duì)象,即客戶、員工、市場(chǎng)和銀行,市場(chǎng)的概念是交易所的細(xì)化, 比方上海證券交易所的A股和E股就是兩個(gè)市場(chǎng),有了市場(chǎng)的概念我們就可以把交易所這個(gè)概念細(xì)化,并使同一個(gè)市場(chǎng)的共性更突出。銀行那么通過銀證轉(zhuǎn)賬業(yè)務(wù)介入,并成為營業(yè)部系統(tǒng)不可或缺的組成局部。上述四個(gè)對(duì)象通過一些業(yè)務(wù)流程進(jìn)行相互操作從而形

7、成整個(gè)交易活動(dòng)。因此整個(gè)系統(tǒng)模型可以表述為圖2-1設(shè)計(jì)時(shí)需要將營業(yè)部系統(tǒng)所使用的各種信息分為描述四個(gè)對(duì)象的信息和描述業(yè)務(wù)流程的信息。由于四個(gè)對(duì)象相對(duì)而言是一種穩(wěn)定型信息, 而業(yè)務(wù)流程那么較易變化,且營業(yè)部之間 差異很大,因此應(yīng)將四個(gè)對(duì)象盡量定型, 而將各種業(yè)務(wù)流程盡可能做成組件, 以便營業(yè)部可 根據(jù)實(shí)際需求組裝成適合自己的系統(tǒng)。根據(jù)以上思想,在設(shè)計(jì)對(duì)象模型時(shí)應(yīng)充分考慮到可擴(kuò)展性,盡量做到抽象化、參數(shù)化, 從而使對(duì)象需求變化時(shí)不致影響系統(tǒng)結(jié)構(gòu)。臼云訂掘合希統(tǒng)-二圖2.12.4結(jié)構(gòu)用一覽表及框圖的形式說明本系統(tǒng)的系統(tǒng)元素各層模塊、子程序、公用程序等的劃分,扼要說明每個(gè)系統(tǒng)元素的標(biāo)識(shí)符和功能,分層次

8、地給出各元素之間的控制與被控制關(guān)系。本系統(tǒng)采用C/S模式的3層結(jié)構(gòu)按照不同會(huì)話來劃分的話可以分為3大系統(tǒng)模塊接口處理子系統(tǒng)局域網(wǎng)客戶端登陸模塊:數(shù)據(jù)庫系統(tǒng)維護(hù)子系統(tǒng)I柜臺(tái)管理查詢管理圖2-2交易系統(tǒng)體系結(jié)構(gòu)-Is通mt卜*系統(tǒng)監(jiān)控日終管理系統(tǒng)管理最關(guān)鍵的交易系統(tǒng)模塊結(jié)構(gòu)圖如下:sellStockquoteStockcheckUserMoneyCount ( stockData) Or checkUserStockCount要通過數(shù)據(jù)訪問層來訪問用戶表Ca nselDelegate在撮合隊(duì)列中處理并且返回處理結(jié)果trade In Queue ( stockData newstockData)Su

9、ccessiunSuccessupDateUserInfo(stockData)通過調(diào)用ADO層工廠來訪問不同的數(shù)據(jù)庫(更新用戶表adoFactoryupDateDelegate Info ( stockDat同左更新的是a)委托臨時(shí)表IadoFactory通過該模塊可動(dòng)態(tài)建立不同數(shù)據(jù) 庫的連接Orical、sql通過該模塊可動(dòng)態(tài)建立不同數(shù)據(jù)庫的連接Orical、sqlserver, accessRule s/ Mod el 標(biāo)準(zhǔn) 買賣 指令 傳輸 的數(shù) 據(jù)結(jié) 構(gòu)必 須是 stockData 形式Chec k股票信息發(fā)布經(jīng)過修改我認(rèn)為每次由客戶端每5秒去查詢一次效勞器更新信息不可取,因?yàn)檫@會(huì)加

10、重效勞端和客戶端的負(fù)擔(dān),特別是效勞器端的運(yùn)算。修改后實(shí)現(xiàn)變更為:用戶一開始登陸后獲得一次效勞器的全部股票當(dāng)前信息。而效勞器端每次發(fā)生交易后,給每一個(gè)在線用戶發(fā)送當(dāng)前交易需要更新的股票信息,這樣就減輕了客戶機(jī)和效勞端的信息第一次登陸發(fā)送請(qǐng)求獲得所有2.5功能需求與程序的關(guān)系該關(guān)系由需求分析報(bào)告編寫者根據(jù)結(jié)構(gòu)圖說明本條用一張如下的矩陣圖說明各項(xiàng)功能需求的實(shí)現(xiàn)同各塊程序的分配關(guān)系:獲取并發(fā)送 用戶請(qǐng)求繪制分時(shí) 圖MD5加密解密發(fā)送用戶 交易請(qǐng)求接受并識(shí)別 用戶請(qǐng)求調(diào)用數(shù)據(jù)層 查詢撮合交易效勞器返回 客戶端信息用戶登陸VVVV查看用戶 持倉VVV實(shí)時(shí)指 數(shù)VVV交易委托VVVVVVV取消交易VVVVV

11、V2.6人工處理過程說明在本軟件系統(tǒng)的工作過程中不得不包含的人工處理過程如果有的話沒有完成股票管理的模塊設(shè)計(jì),所以股票必須從數(shù)據(jù)庫后臺(tái)添加如果有新股發(fā)行,還必須添加有關(guān)股票的交易隊(duì)列2.7尚未解決的問題說明在概要設(shè)計(jì)過程中尚未解決而設(shè)計(jì)者認(rèn)為在系統(tǒng)完成之前必須解決的各個(gè)問題。3接口設(shè)計(jì)3.1用戶接口說明將向用戶提供的命令和它們的語法結(jié)構(gòu),以及軟件的答復(fù)信息。向用戶提供簡(jiǎn)單易用的 UI,以及幫助文檔。客戶端將提供以下功能首先彈出用戶登陸框,供用戶輸入用戶名和密碼菜單項(xiàng)提供個(gè)股查詢和分時(shí)圖按鈕菜單欄下是選項(xiàng)卡,提供股票實(shí)時(shí)信息和個(gè)股分時(shí)圖欄提供用戶交易界面和交易按鈕以及查看用戶盈虧按鍵3.2外部接

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

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

14、ss Protocalprivatebyte messagebuffer;privatebyte messagelength;public byte messagebag;/該函數(shù)是將字符串轉(zhuǎn)換為字節(jié)數(shù)組public byte StringtoByte( string stringInfo)ASCIIEncoding .ASCII.GetBytes(stringlnfo);messagebuffer = System.Text. return messagebuffer;/該函數(shù)將整型轉(zhuǎn)換為個(gè)字節(jié)public byte InttoByte( int number)messagelength=B

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

16、ndex;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 = BitConverter .GetBytes(head);ret

17、urn 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 .Tolnt32(Messagebag, start);string message = System.Text. ASCIIEncoding .ASCII.Get

18、String(Messagebag, start + 4,next);return message;4運(yùn)行設(shè)計(jì)4.1運(yùn)行模塊組合說明每種運(yùn)說明對(duì)系統(tǒng)施加不同的外界運(yùn)行控制時(shí)所引起的各種不同的運(yùn)行模塊組合, 行所歷經(jīng)的內(nèi)部模塊和支持軟件。4.2運(yùn)行控制說明每一種外界的運(yùn)行控制的方式方法和操作步驟。4.3運(yùn)行時(shí)間說明每種運(yùn)行模塊組合將占用各種資源的時(shí)間。5系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)5.1邏輯結(jié)構(gòu)設(shè)計(jì)要點(diǎn)給出本系統(tǒng)內(nèi)所使用的每個(gè)數(shù)據(jù)結(jié)構(gòu)的名稱、標(biāo)識(shí)符以及它們之中每個(gè)數(shù)據(jù)項(xiàng)、記錄、 文卷和系的標(biāo)識(shí)、定義、長度及它們之間的層次的或表格的相互關(guān)系??蛻舳祟悎D:windowForm : FormPrivate:use

19、rLogDialog userNametextBox userPasswordtextBox userlogOKbott on userlogCa nselbutt on tabPage Me nuBar stockRealtimeGraphitem stock Quote Dialog dataGridView userBuyStockID userBuyStockcount userBuyStockprice userBuyStockButt on .sell userStocklistView userStockLookButt on send Mesto Server(stri ng

20、Info)該函數(shù)用來向主機(jī)發(fā)送請(qǐng)求精選 協(xié)議U :發(fā)送用戶名,密碼B : buy 股票 id,count,price,user S sell(接上)MD5encrypt (string)以下都要通過sen dMestoServer向主機(jī)發(fā)送信息logOK_press(eve nt,ha ndle); stockQuoteitem_press(e,h); buyStockButt on _press(e,h); sellStockButt on _press(e,h); stocklookButt on _press(e,h);/該函數(shù)調(diào)用drawPicture畫圖 stockRealtimeG

21、raphitem_press(e,h)Class stockData訂單號(hào) public int ListID;public int UsrID;public string StockIndex; public flout Price;public int Count; public bool Isbuy;該類即為向效勞端傳送數(shù)據(jù)時(shí)的包Class RealTime GraphPrivatestockID/動(dòng)態(tài)數(shù)組存儲(chǔ)股票價(jià)格ArrayList stockPricePublic :/在 windowform 類中 recievemess 后更新當(dāng)前價(jià)格,即在數(shù)組后添加一項(xiàng)最新價(jià)格updatePr

22、ice ( price, sotckPrice)drawPicture ( stockID stockPrice)效勞器端StockQueuePrivatestockData datastockData next PublicDeleteQueueHead();AddStockData();Class TradeService* D i spose Qj ool)P F Qrnl ()一“ tChatlarLi El 0.* Iniliali(J.* S endtoCLi uii (CharS ex ver. ClientLufCj wtrinc)學(xué) serviceCli ent 0亭 S t

23、 ar tLi st tiling ()clintScket當(dāng) compDikitts./.上 m_dien(n_s*rverThread管 ni _T cpl l st an孑J(n_Pflr 七該類還要補(bǔ)充假設(shè)干個(gè)StockQueue類型的成員變量private void StartListening()byte ipadre = new byte 10, 82, 14, 47; IPAddress ip=new IPAddress(ipadre);m_Tcplisten = new TcpListener(ip,m_Port); m_Tcplisten.Start();while (tr

24、ue)trySocket s = m_Tcplisten.AcceptSocket();clientSocket = s;m_serverThread = new Thread(new ThreadStart(serviceClient); 多線程 deal各個(gè)連接用戶的socketm_serverThread.Start();catch (Exception E)Console.WriteLine(E.ToString();如以上startlistening代碼所示,監(jiān)聽創(chuàng)造一個(gè)連接客戶端的套接字,再用多線程處理該連接,而效勞器端那么繼續(xù)監(jiān)聽新的套接字。這樣主要的交易代碼就可以放入Servi

25、ceClient這個(gè)函數(shù)中,當(dāng)有新客戶信息連入時(shí),即可進(jìn)行查詢數(shù)據(jù)庫,比照插入股票隊(duì)列等工作Class Clie ntlnfo/這個(gè)類記錄了客戶端的socket數(shù)據(jù)訪問層類圖Class ADOSQLserverPrivateClass stockData訂單號(hào) public int ListID; public int UsrID; public string StockIndex; public int Prince; public int Count; public bool Isbuy;該類即為向效勞端傳送數(shù)據(jù)時(shí)的包dataSet/ds 下可有 4 個(gè) dataTableuserTabl

26、estockTableUser_stockTabletempTablePublic:/驗(yàn)證用戶信息Bool CheckUserlogin(string usridstring password);Bool CheckUserMo ney(stri nguserID);Bool CheckUserStockCou nt(stri ng userID);/交易成功修改用戶和股票信息Void updateUserTable( Class stockData)Void updateStockTable( Class stockData)Void updateUser_stockTable(Class

27、stockData)/還未成功的交易放入臨時(shí)表,Void updateTemTable( Class stockData)注意,每次交易成功要?jiǎng)h除臨時(shí)表的信息Vcirlrlalatalnfc ( Caaa關(guān)于交易算法的詳細(xì)設(shè)計(jì)5.2撮合算法在前文中,我們已經(jīng)提到了,撮合算法是整個(gè)交易所乃至整個(gè)證券仿真系統(tǒng) 的核心局部。此算法的成功與否,直接影響著仿真系統(tǒng)是否能實(shí)現(xiàn)以及實(shí)現(xiàn)效率 的上下。按照真實(shí)的交易原那么,撮合算法分為連續(xù)競(jìng)價(jià)和集中競(jìng)價(jià)兩種方式。下面我們將分別對(duì)這兩種方式進(jìn)行實(shí)現(xiàn)。連續(xù)競(jìng)價(jià)連續(xù)競(jìng)價(jià)是在絕大局部交易時(shí)間使用的撮合算法。連續(xù)競(jìng)價(jià)原那么:1. 價(jià)格優(yōu)先原那么:價(jià)格較高的買入申報(bào)優(yōu)先于

28、價(jià)格較低的買入申報(bào),價(jià)格較低的賣出申報(bào)優(yōu)先于價(jià)格較高的賣出申報(bào)。2. 時(shí)間優(yōu)先原那么:同價(jià)位申報(bào)、依照申報(bào)時(shí)序決定優(yōu)先順序,即買賣方向、 價(jià)格相同的,先申報(bào)者先于后申報(bào)者。先后順序按證券交易所主機(jī)接受申報(bào)的時(shí) 間確定。在正常情況下,買隊(duì)列的第一筆報(bào)價(jià)最高的報(bào)價(jià)一定小于賣隊(duì)列的第一 筆最低報(bào)價(jià)的報(bào)價(jià)。此時(shí)不發(fā)生撮合。一旦買賣隊(duì)列的價(jià)格發(fā)生了交叉,女口 圖所示,發(fā)生交叉的那局部就會(huì)進(jìn)行撮合。而事實(shí)上,由于每一筆新來的單子進(jìn)入數(shù)列后都會(huì)觸發(fā)一次比擬,所以每次 觸發(fā)撮合都是由新單子促成的。稱為“來一筆撮合一次,也就是連續(xù)競(jìng)價(jià)。圖 連續(xù)競(jìng)價(jià)算法描述:首先設(shè)定QueueStruct結(jié)構(gòu)為元素的買賣兩個(gè)隊(duì)列

29、 BuyQueue和SellQueue。為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)建這兩個(gè)隊(duì)列。其中BuyQueue是時(shí)間優(yōu)先、買價(jià)降序排序,而 SellQueue是時(shí)間優(yōu)先、賣 價(jià)升序排序,在連續(xù)競(jìng)價(jià)條件下,可以保證BuyQueueO的price小于 SellQueueO的 price。連續(xù)競(jìng)價(jià)算法如下:1. )接收一個(gè)新單子newlist,判斷newlist是買單還是賣單;如果是買單,那么轉(zhuǎn)2,如果是賣單,那么轉(zhuǎn)B;2. )取 賣 單 隊(duì) 列 頭 SellQueue0 , ifSellQueueO.price>newlist.price ,利 用插入排序?qū)?newlist插

30、入到買隊(duì)列BuyQueue中,轉(zhuǎn)1 ;3. )if SellQueue0.count>newlist.count, newlist 完全撮合,SellQueue0.cou nt= SellQueue0.cou ntnewlist.count ,轉(zhuǎn) 2;4. )if SellQueue0.count<=newlist.count, SellQueueO撮合,并將 SellQueueO從 SellQueue 隊(duì)列中刪除, newlist.count=newlist.count-SellQueue0.count,轉(zhuǎn) 2;5. )取 買 單 隊(duì) 列 頭 BuyQueueO , ifBuyQ

31、ueueO.price<newlist.price,禾U 用插入排序?qū)ewlist插入到賣隊(duì)列BuyQueue中,轉(zhuǎn)1;6. )if BuyQueue0.count>newlist.count,newlist 完全撮合,BuyQueue0.co unt = BuyQueue0.co unt n ewlist.co unt,轉(zhuǎn)1;7. )if BuyQueue0.co unt<=n ewlist.co unt,BuyQueue0撮合, 并將 BuyQueue0從 BuyQueue隊(duì)列中刪 除, n ewlist.co unt=n ewlist.co un t-BuyQueue

32、0.co unt,轉(zhuǎn)5;如下面流程圖所示:為空 不為空BuyQueueneWtlhdlK進(jìn)SeUeue判BluyQueue判斷其為買判SlQieue是否為空賣單單還是賣單是否為空不為空 為空無法交易進(jìn)大于判斷差價(jià)判斷差價(jià) 小匚TSQeu排序newtlprice-BuyQueueWOppCQcSleeiOliptTCe/BuyQueMei小于等于大于等于插入排序找到其 置通分插入排序找到其交易,判斷差量可交易,判斷差量甬2分、您Ceu中的位 置nesWIcount -BuyQueeW.OOuQeMOl.counBuyCue 的位'; / / /I大于等于小于小于'大于等于 L A

33、 S0eu被0BuyQueueO nes完 '被完全磨合全被磨合完全磨合BuyC內(nèi)全部非一.±、空成員向前進(jìn)一位 返回成交信息SQeSe全部非空成員向前進(jìn)一位圖 522集合競(jìng)價(jià)集合競(jìng)價(jià)是指對(duì)所有有效委托進(jìn)行集中處理,深、滬兩市的集合競(jìng)價(jià)時(shí)間為 交易日上午9: 15至9: 25。集合競(jìng)價(jià)原那么:?但凡高于開盤價(jià)的買單一定成交;?但凡低于開盤價(jià)的賣單一定成交;?但凡高于開盤價(jià)的賣單一定不成交;?但凡低于開盤價(jià)的買單一定不成交;集合競(jìng)價(jià)分四步完成:第一步:確定有效委托在有漲跌幅限制的情況下,有效委托是這樣確定的:根據(jù)該只證券上一交易日收盤價(jià)以及確定的漲跌幅度來計(jì)算當(dāng)日的最高限 價(jià)、

34、最低限價(jià)。有效價(jià)格范圍就是該只證券最高限價(jià)、最低限價(jià)之間的所有價(jià) 位。限價(jià)超出此范圍的委托為無效委托,系統(tǒng)作自動(dòng)撤單處理。第二步:系統(tǒng)根據(jù)競(jìng)價(jià)規(guī)那么自動(dòng)確定集合競(jìng)價(jià)的成交價(jià), 這個(gè)價(jià)格就是當(dāng)日 的開盤價(jià), 所有高于開盤價(jià)的買盤和所有低開開盤價(jià)的賣盤均以此價(jià)格成交, 集合競(jìng)價(jià)的成交價(jià)確定原那么是:以此價(jià)格成交,能夠得到最大成交量。第三步:集中撮合處理所有的買委托按照委托限價(jià)由高到低的順序排列,限價(jià)相同者按照進(jìn)入系統(tǒng)的時(shí)間先后排列;所有賣委托按委托限價(jià)由低到高的順序 排列,限價(jià)相同者按照進(jìn)入系統(tǒng)的時(shí)間先后排列。 依序逐筆將排在前面的買委 托與賣委托配對(duì)成交,即按照"價(jià)格優(yōu)先,同等價(jià)格下時(shí)

35、間優(yōu)先"的成交順序依次 成交,直至成交條件不滿足為止,即不存在限價(jià)高于等于成交價(jià)的叫買委托、 或 不存在限價(jià)低于等于成交價(jià)的叫賣委托。所有成交都以同一成交價(jià)成交。這同一成交價(jià)成交的買賣單一般量都是很大的,如圖323所示圖323所示第四步:行情揭示:1. )如該只證券的成交量為零,那么將成交價(jià)位揭示為開盤價(jià)、最近成交價(jià)、最高價(jià)、最低價(jià),并揭示出成交量、成交金額。2. )剩余有效委托中,實(shí)際的最高叫買價(jià)揭示為叫買揭示價(jià),假設(shè)最高叫買價(jià)不存在,那么叫買揭示價(jià)揭示為空;實(shí)際的最低叫 賣價(jià)揭示為叫賣揭示價(jià),假設(shè)最低叫賣價(jià)不存在,那么叫賣揭示 價(jià)揭示為空。集合競(jìng)價(jià)中未能成交的委托,自動(dòng)進(jìn)入連續(xù)競(jìng)

36、價(jià)。按照這樣的原那么和要求,我們?cè)O(shè)計(jì)了如下的集合競(jìng)價(jià)撮合算法。如圖324所示。BuyQueue判斷兩隊(duì)列是 否都不為空開盤價(jià)為昨日收盤價(jià),成交量為0SellQueue否小于0判斷差價(jià)BuyQueue0.price-SellQueue0.price大于等于0i=j=0, M、N分別為BuyQueue 與SellQueue非空元素 的數(shù)目;BOOL k; Buy=BuyQueue0; Sell=SellQueue0判斷差價(jià)BuyQueuei.price-SellQueuej.price大于等于0小于0判斷差量 小于等于0大于0i+; k=false; Buy1.count=Buy.count; B

37、uy.count=Buy.count+BuyQueuei.count;j+; k=true; Sell1.count=Sell.count;Sell.count=Sell.count+SellQueueiSellQueue.count;判斷是否i<M判斷是否j<N 是判斷 否開盤價(jià)為 BuyQueuei.price;總成交量為Sell.count小于0等于0開盤價(jià)為 SellQueuej.price;總成交量為Buy.count開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2 總成交量為sell.count判斷 trueV判斷k值等于0于0開盤價(jià)

38、為(SellQueuej-1.price+BuyQueuei-1.price)/2 總開盤價(jià)為 BuyQueuei.price 總、成交量為Sell1.count成交量為Sell1.count成交量為Sell1.countfalse斷 等于0開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.count小于0V開盤價(jià)為 SellQueuej.price;總成交量為 Buy1.count圖 集合競(jìng)價(jià)算法描述:和連續(xù)競(jìng)價(jià)一樣,首先設(shè)定QueueStruct 結(jié)構(gòu)為元素的買賣兩個(gè) 隊(duì)列 BuyQueue 和 SellQueue 。為了盡可能的提高

39、效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)建這 兩個(gè)隊(duì)列。其中BuyQueue是時(shí)間優(yōu)先、買價(jià)降序排序,而SellQueue 是時(shí) 間優(yōu)先、賣價(jià)升序排序。在開市到開盤這段時(shí)間內(nèi),買賣單已經(jīng)分別 進(jìn)入了買賣隊(duì)列內(nèi)排好了序。一旦宣布開盤,那么觸發(fā)集合撮合,如下:?判斷兩隊(duì)列是否都不為空,如是,轉(zhuǎn)2 ;如否,轉(zhuǎn)21 ;判斷 BuyQueueO.prinee 與 SellQueueO.prinee 之差,如大于等于0,轉(zhuǎn)3 :如小于0,轉(zhuǎn)21 ; 定義int i=j=O ; M、N分別為買賣兩隊(duì)列非空元素的個(gè)數(shù);BOOL k ; QueueStruct Buy=BuyQueue0 ; Sell=SellQu

40、eue0 ; Buy1 ; Sell1 ;轉(zhuǎn) 4; 判斷 BuyQueuei.prinee與 SellQueuej.prinee之差,如大于等于0,轉(zhuǎn)5 :如小于0 ,轉(zhuǎn)14 ;判 斷Buy.eount與Sell.eount之差,如大于0,轉(zhuǎn)6;如小于等于0,轉(zhuǎn)9;j+ ; k=true ;Selll.eo un t=Sell.eo unt;Sell.eou nt=Sell.cou nt+SellQueueiSellQueue.count ;轉(zhuǎn) 7 ;判斷j是否小于N,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)8 ;開盤價(jià)為 BuyQueuei.priee ; 總成交量為Sell.eount;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),

41、并返回;i+ ; k=false ;Buyl.eo un t=Buy.eo unt;Buy.eount=Buy.eount+BuyQueuei.eount;轉(zhuǎn) 10 ;判斷i是否小于M,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)11 ;判 斷Buy.count 與Sell.count之差,如小于0,轉(zhuǎn)12 ;如等于0,轉(zhuǎn)13 ;開盤價(jià)為 SellQueuej.price; 總成交量為Buy.count ;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為sell.count;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;判斷k值,如為true ,轉(zhuǎn)15 ;如

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

43、lQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.count ;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并 返回;開盤價(jià)為昨日收盤價(jià),成交量為0;保存所有數(shù)據(jù)至 開盤進(jìn)入連續(xù)競(jìng)價(jià)撮合;523買賣隊(duì)列排序上面我們介紹了撮合算法的核心局部,但實(shí)際上在撮合前后都要 對(duì)兩個(gè)買賣隊(duì)列進(jìn)行一定的插入和排列處理,這在整個(gè)算法中也是很 重要的局部。下面我們就來具體介紹一下。對(duì)所有的排列和插入我們考慮了效率問題之后,最后統(tǒng)一使用了 二分插入排序法。在單子進(jìn)入隊(duì)列時(shí),我們首先統(tǒng)計(jì)出當(dāng)前隊(duì)列中的非空數(shù)據(jù)個(gè) 數(shù),然后再通過新單子與當(dāng)前隊(duì)列中間值的價(jià)格比擬,確定新單子在 隊(duì)列的前半局部還是后半局部,

44、然后再取該區(qū)域中間值與之比擬,直 到確定新單子應(yīng)在的位置。如以下代碼所示:int low=0; int high=N-1;N 為隊(duì) 列中非 空元素 的個(gè)數(shù)while(low<=high)int m=(low+high)/2;if(n ewlist->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;這是賣隊(duì)列的排序,對(duì)于買隊(duì)列的排序與之相似,只是價(jià)格排列 是由高到底。在這里不

45、再贅述這種插入排序方法完全符合了撮合算法中價(jià)格優(yōu)先、時(shí)間優(yōu)先的 要求,而且效率也是比擬高的。在集合競(jìng)價(jià)前和連續(xù)競(jìng)價(jià)后進(jìn)行的插入排序都是這樣進(jìn)行的,而 在集合競(jìng)價(jià)撮合之后,對(duì)兩隊(duì)列的重新排列,我們首先使用了 memset 函數(shù)將前面已全部成交的t個(gè)元素清空,然后將t到N(原總非空元 素個(gè)數(shù))前移t位。如以下代碼所示:for (int p=0; *t < *N; p+,*t+)QueueStruct temp; temp=Queue*t;Queue*t=Queuep; Queuep=temp;撮合算法的運(yùn)行機(jī)制在交易所正常運(yùn)行時(shí),一天內(nèi)分為開市、開盤、休市、復(fù)開、收市等5個(gè)步驟。開市:每天上午9:15開市。這時(shí)候,股民可以通過券商向交易所遞單。同 一只股票的買賣單開始分別進(jìn)入這只股票的買賣隊(duì)列中,但并不進(jìn)行

溫馨提示

  • 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)論