




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
軌件詳細設(shè)計說明
書例
案卷號00001
日期
軟件詳細設(shè)計說明書(例)
作者:
完成日期:
簽收人:
簽收日期:
修改情況記錄:
版本號修改批準(zhǔn)人修改人安裝日期簽收人
目錄
1引言......................................錯誤!未定義書簽。
1.1編寫目的................................錯誤!未定義書簽。
1.2范圍....................................錯誤!未定義書簽。
1.4參考資料...............................錯誤!未定義書簽。
2總體設(shè)計..................................錯誤!未定義書簽。
2.1需求規(guī)定................................錯誤!未定義書簽。
2.2運行1環(huán)境...............................錯誤!未定義書簽。
2.3基本設(shè)計概念和處理流程.................錯誤味定義書簽。
2.4結(jié)構(gòu)....................................錯誤!未定義書簽。
2.5功能需求與程序的關(guān)系....................錯誤!未定義書簽。
2.6人工處理過程...........................錯誤味定義書簽。
2.7尚未解決的問題.........................錯誤味定義書簽。
3接口設(shè)計..................................錯誤!未定義書簽。
3.1用戶接口................................錯誤!未定義書簽。
3.2外部接口...............................錯誤!未定義書簽。
3.3內(nèi)部接口................................錯誤!未定義書簽。
4運行設(shè)計..................................錯誤!未定義書簽。
4.1運行模塊組合............................錯誤味定義書簽。
4.2運行控制J...............................................................錯誤!未定義書簽。
4.3運行時間................................錯誤!未定義書簽。
5系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計.........................錯誤!未定義書簽。
5.1邏輯結(jié)構(gòu)設(shè)計要點........................錯誤!未定義書簽。
5.2物理結(jié)構(gòu)設(shè)計要點........................錯誤!未定義書簽。
5.3數(shù)據(jù)結(jié)構(gòu)與程序的關(guān)系....................錯誤!未定義書簽。
6系統(tǒng)出錯處理設(shè)計.........................錯誤!未定義書簽。
6.1出錯信息................................錯誤味定義書簽。
6.2補救措施...............................錯誤味定義書簽。
6.3系統(tǒng)維護設(shè)計...........................錯誤!未定義書簽。
1引言
1.1編寫目的
隨著證券交易電子化程度的不斷提高,券商對于各種業(yè)務(wù)提出
了新的要求,為了滿足券商的發(fā)展需求,更好的為客戶提供服
務(wù),現(xiàn)結(jié)合原有各版本的證券交易軟件的優(yōu)點和特點,開發(fā)一套
采用Client/Server結(jié)構(gòu)的證券交易軟件管理系統(tǒng)(SQL版)。本
系統(tǒng)從底層予以優(yōu)化,使整個系統(tǒng)的運行速度得到較大提高,經(jīng)
過重新優(yōu)化數(shù)據(jù)庫內(nèi)部結(jié)構(gòu),使系統(tǒng)的可擴充性得到極大提高。
本說明書給出SQL版證券交易系統(tǒng)的設(shè)計說明,包括最終實
現(xiàn)的軟件必須滿足的功能、性能、接口和用戶界面、附屬工具程
序的功能以及設(shè)計約束等。
目的在于:
?為編碼人員提供依據(jù);
?為修改、維護提供條件;
■項目負(fù)責(zé)人將按計劃書的要求布置和控制開發(fā)工作全過程;
■項目質(zhì)量保證組將按此計劃書做階段性和總結(jié)性的質(zhì)量驗證
和確認(rèn)。
本說明書的預(yù)期讀者包括:
?項目開發(fā)人員,特別是編碼人員;
?軟件維護人員;
■技術(shù)管理人員;
?執(zhí)行軟件質(zhì)量保證計劃的專門人員;
■參與本項目開發(fā)進程各階段驗證、確認(rèn)以及負(fù)責(zé)為最后項目
驗收、鑒定提供相應(yīng)報告的有關(guān)人員。
■合作各方有關(guān)部門的復(fù)雜人;項目負(fù)責(zé)人和全體參加人員。
1.2范圍
說明:
a.待開發(fā)的軟件系統(tǒng)的名稱:模擬股票交易系統(tǒng)
b,列出本項目的任務(wù)提出者、開發(fā)者、用戶以及將運行該項
軟件的單位。
1.3定義
列出本文件中用到的專門術(shù)語的定義和縮寫詞的原詞組。
本報告用到的術(shù)語符合國家標(biāo)準(zhǔn)《軟件工程術(shù)語(GB/TU475-
1995)》o
1.4參考資料
列出要用到的參考資料,如:
本項目的經(jīng)核準(zhǔn)的計劃任務(wù)書或合同、上級機關(guān)的批
文;
b.屬于本項目的其它已發(fā)表的文件;
C.本文件中各處引用的文件、資料,包括所要用到的軟
件開發(fā)標(biāo)準(zhǔn)。
列出這些文件的標(biāo)題、文件編號、發(fā)表日期和出版單位,說明
能夠得到這些文件資料的來源。
2總體設(shè)計
2.1需求規(guī)定
說明對本系統(tǒng)的主要的輸入輸出項目、處理的功能性能要求,
詳細的說明可參見《需求分析說明書》。
2.2運行環(huán)境
簡要地說明對本系統(tǒng)的運行環(huán)境(包括硬件環(huán)境和支持環(huán)境)
的規(guī)定,詳細說明參見《需求分析說明書》。
?數(shù)據(jù)庫服務(wù)器
奔騰Pro
內(nèi)存128MB以上
硬盤9GB
100M網(wǎng)卡
-應(yīng)用服務(wù)器
奔騰Pro
內(nèi)存64MB以上
硬盤4GB
100M網(wǎng)卡
■網(wǎng)絡(luò)配置
100M/10M
-工作站(柜臺)
P100以上
內(nèi)存8MB以上
硬盤1G以上
100M/10M網(wǎng)卡
軟件
■操作系統(tǒng)
WindowsNT4.0以上
■數(shù)據(jù)庫管理系統(tǒng)
SQLServer
■相關(guān)軟件工具
WindowsNTWorkstationAVindowsNTserver
WindowsProfessional/Server
開發(fā)工具
-平臺:Windows95/98、WindowsNT>Windows
?開發(fā)工具:visualstidiosp1,C#.Net
測試環(huán)境
Windows31>Windows95/98、WindowsNT^Windows
2.3基本設(shè)計概念和處理流程
說明本系統(tǒng)的基本設(shè)計概念和處理流程,盡量使用圖表的形
式。
營業(yè)部系統(tǒng)一共有四個對象,即客戶、員工、市場和銀行,市
場的概念是交易所的細化,比如上海證券交易所的A股和B股就
是兩個市場,有了市場的概念我們就能夠把交易所這個概念細
化,并使同一個市場的共性更突出。銀行則經(jīng)過銀證轉(zhuǎn)賬業(yè)務(wù)介
入,并成為營業(yè)部系統(tǒng)不可或缺的組成部分。
上述四個對象經(jīng)過一些業(yè)務(wù)流程進行相互操作從而形成整個交
易活動。因此整個系統(tǒng)模型能夠表述為圖2-1
設(shè)計時需要將營業(yè)部系統(tǒng)所使用的各種信息分為描述四個對象
的信息和描述業(yè)務(wù)流程的信息。由于四個對象相對而言是一種穩(wěn)
定型信息,而業(yè)務(wù)流程則較易變化,且營業(yè)部之間差異很大,因
此應(yīng)將四個對象盡量定型,而將各種業(yè)務(wù)流程盡可能做成組件,
以便營業(yè)部可根據(jù)實際需求組裝成適合自己的系統(tǒng)。
客戶
市場
根據(jù)以上思想,在設(shè)計對象模型時應(yīng)充分考慮到可擴展性,盡
量做到抽象化、參數(shù)化,從而使對象需求變化時不致影響系統(tǒng)結(jié)
構(gòu)。
自動撮合系統(tǒng)
運
界
夕
?
圖2.1
2.4結(jié)構(gòu)
用一覽表及框圖的形式說明本系統(tǒng)的系統(tǒng)元素(各層模塊、子
程序、公用程序等)的劃分,扼要說明每個系統(tǒng)元素的標(biāo)識符和
功能,分層次地給出各元素之間的控制與被控制關(guān)系。
本系統(tǒng)采用c/s模式的3層結(jié)構(gòu)
按照不同會話來劃分的話能夠分為3大系統(tǒng)模塊
和據(jù)鹿
阿CG右目左妙秣五任珈
客戶端登陸模塊:
p
至
2
c
±
u-
u0
w一
一
匚
匚
之
最關(guān)鍵的交易系統(tǒng)模塊結(jié)構(gòu)圖如下:
buyStock;
sellStock
quoteStock
Cansel
Delegate
scrMoncyCount(stockData
checkUserStockCount
通過數(shù)據(jù)訪問層來訪問用戶表
在報門隊列中處理并旦返回處理結(jié)果
(radelnQueuc(stockData
newstockDtta)
Success
unSucccss
upDatcUsirlnfo
(stockData)upDateDelegate
通過調(diào)用ADOInfo(stockDat
層工廠來訪問a)
不同的數(shù)據(jù)庫同左更新的是
(更新用戶表委托臨時表RUJie
s/()d
M范
a賣
規(guī)
令
買
愉
指
數(shù)
傳
結(jié)
的
必
據(jù)
是
構(gòu)
xk
須Ila
stc
Da
股票信息發(fā)布
經(jīng)過修改我認(rèn)為每次由客戶端每5秒去查詢一次服務(wù)器更新信
息不可取,因為這會加重服務(wù)端和客戶端的負(fù)擔(dān),特別是服務(wù)器
端的運算。
修改后實現(xiàn)變更為:用戶一開始登陸后獲得一次服務(wù)器的全部
股票當(dāng)前信息。而服務(wù)器端每次發(fā)生交易后,給每一個在線月戶
發(fā)送當(dāng)前交易需要更新的股票信息,這樣就減輕了客戶機和服務(wù)
端的信息
Stockid
Stockprice
服務(wù)器每次交易返回最新信息
2.5功能需求與程序的關(guān)系
(該關(guān)系由需求分析報告編寫者根據(jù)結(jié)構(gòu)圖說明)
本條用一張如下的矩陣圖說明各項功能需求的實現(xiàn)同各塊程序的
分配關(guān)系:
獲取并發(fā)送繪制分時MD5加密發(fā)送用戶接受并識別調(diào)用數(shù)據(jù)層服務(wù)器返回
撮合交易
用戶請求圖解密交易請求用戶請求查詢客戶端信息
用戶登陸JV
查看用戶,
持倉7
實時指.
數(shù)7V
交易委托JJJJJJJ
取消交易VVVV
2.6人工處理過程
說明在本軟件系統(tǒng)的工作過程中不得不包含的人工處理過程
(如果有的話)。
沒有完成股票管理的模塊設(shè)計,因此股票必須從數(shù)據(jù)庫后臺添
加
如果有新股發(fā)行,還必須添加有關(guān)股票的交易隊列
2.7尚未解決的問題
說明在概要設(shè)計過程中尚未解決而設(shè)計者認(rèn)為在系統(tǒng)完成之前
必須解決的各個問題。
3接口設(shè)計
3.1用戶接口
說明將向用戶提供的命令和它們的語法結(jié)構(gòu),以及軟件的回答
信息O
向用戶提供簡單易用的UL以及幫助文檔。
客戶端將提供以下功能
首先彈出用戶登陸框,供用戶輸入用戶名和密碼
菜單項提供個股查詢和分時圖按鈕
菜單欄下是選項卡,提供股票實時信息和個股分時圖欄
提供用戶交易界面和交易按鈕以及查看用戶盈虧按
3.2外部接口
說明本系統(tǒng)同外界的所有接口的安排包括軟件與硬件之間的接
口、本系統(tǒng)與各支持軟件之間的接口關(guān)系。
采用基于正確公開標(biāo)準(zhǔn)的部件和技術(shù)以確保最大限度的協(xié)作能
力以及與第三方系統(tǒng)與部件集成的簡便性。這類標(biāo)準(zhǔn)包括但不限
于以下幾種;
-網(wǎng)絡(luò)協(xié)議與標(biāo)準(zhǔn)(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)過以經(jīng)的stockDataModel接口,來限定
訪問stockData類型的數(shù)據(jù)
客戶端經(jīng)過調(diào)用buyStock(stockData)和sellStock
(stockData)來訪問邏輯層,在這個函數(shù)中包含了訪問邏輯層的
接口dealTransaction(stockData)
經(jīng)過AdoFactory訪問不同的數(shù)據(jù)庫
客戶端登陸協(xié)議
D(二字節(jié))+(客戶名字長度)(4字節(jié))+(客戶名字)+(客戶密碼長
度)(4字節(jié))+(客戶密碼);
客戶買賣協(xié)議
B(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量X4字節(jié))
S(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量)(4字節(jié))
查詢交易信息并返回給客戶端
C(二字節(jié))
具體有拆包解包的類
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceProjectCenterTradingSys
(
publicclassProtocal
(
privatebyte[]messagebuffer;
privatebyte[]messagelength;
publicbyteflmessagebag;
//該函數(shù)是將字符串轉(zhuǎn)換為字節(jié)數(shù)組
publicbyte[]StringtoByte(stringstringinfo)
(
messagebuffer二
System.Text.ASCIIEncoding.ASCILGetBytes(stringlnfo);
returnmessagebuffer;
〃該函數(shù)將整型轉(zhuǎn)換為個字節(jié)
publicbyte[]InttoByte(intnumber)
(
messagelength=BitConverter.GetBytes(number);
returnmessagelength;
〃將浮點型轉(zhuǎn)換為個字節(jié)
publicbyte[]DoubletoByte(doubleprice)
(
byte[lpricebyte=BitConverter.GetBytes(price);
returnpricebyte;
〃合并一個字符串(字節(jié)數(shù)組)和她的長度作為一個包
publicbyte[]Combinarray(byte[]messle,byte[]messinfo)
(
messagebag=newbytefmessle.Length+messinfo.Length];
intindex;
for(index=0;index<messle.Length;index++)
messagebag[index]二messagelength[index];
for(intindex1=0;index1<messinfo.Length;index1++)
messagebag[index+index1]=messagebuffer[index1];
returnmessagebag;
)
〃解包頭
publicbyte[]BagHead(charhead)
(
bytef]headbyte=BitConverter.GetBytes(head);
returnheadbyte;
//讀包頭
publiccharDeBagHead(byte[]buffer)
charheadinfo=BitConvcrtcr.ToChar(buffer,0);
returnheadinfo;
〃該函數(shù)為解包信息為字符串!
publicstringdeMessgeBag(byte[]Messagebag,intstart,outint
next)
(
next=BitConverter.ToInt32(Messagebag,start);
stringmessage=
System.Text.ASCIIEncoding.ASCII.GetString(Messagebag,start+4,
next);
returnmessage;
4運行設(shè)計
4.1運行模塊組合
說明對系統(tǒng)施加不同的外界運行控制時所引起的各種不同的運
行模塊組合,說明每種運行所歷經(jīng)的內(nèi)部模塊和支持軟件。
4.2運行控制
說明每一種外界的運行控制的方式方法和操作步驟。
4.3運行時間
說明每種運行模塊組合將占用各種資源的時間。
5系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計
5.1邏輯結(jié)構(gòu)設(shè)計要點
給出本系統(tǒng)內(nèi)所使用的每個數(shù)據(jù)結(jié)構(gòu)的名稱、標(biāo)識符以及它們
之中每個數(shù)據(jù)項、記錄、文卷和系的標(biāo)識、定義、長度及它們之
間的層次的或表格的相互關(guān)系。
客戶端類圖:
windowForm:Form
Private:
userLogDialog
userNametextBox
userPasswordtextBox
userlogOKbotton
userlogCanselbutton
(接上)
MD5encrypt(string)
〃以下都要經(jīng)過
sendMestoServer
〃向主機發(fā)送信息
logOK_press(event,handl
e);
stockQuoteitem_press(e,
h);
buyStockButton_press(e,
h);
sellStockButton_press(e,
h);
?1r1IO?.,?
ClassRealTimeGraph
PrivateClassstockData
stockID
訂單號publicint
〃動態(tài)數(shù)組存儲股票價
ListID;
格
publicintUsrlD;
ArrayListstockPrice[J
publicstring
Public:
//在windowform類中
recievemess
后更新當(dāng)前價格,即在
服務(wù)器端
StockQueue
Private
stockDatadata
stockDatanext
Public
ClassTradeService
Dispose(bool)
QForml()
GetChatt.erList()
InitializeComponent0
SendtoClient(CharServer.Clientinfo,string)
serviceClient0
爭StartListeningO
豈/clientSocket
E,components
£;/lsb_client
〃m_client.
,?-;/m_serverThread
m_Tcplisten
甲m_Port
該類還要補充若干個StockQueue類型的成員變量
privatevoidStartListeningO
(
byte[Jipadre=newbyte[]{10,82,14,47);
IPAddressip=newIPAddress(ipadre);
m_Tcplisten=newrcpListener(ip,m_Port);
m_Tcplisten.Start();
while(true)
try
Sockets二m_Tcplisten.AcceptSocket();
clientSocket=s;
m_serverThread=newThrcad(new
ThreadStart(serviceClient));〃多線程deal各個連接用戶的socket
m_serverThread.Start();
)
catch(ExceptionE)
(
Console.WriteLine(E.ToStringO);
如以上startlistening代碼所示,監(jiān)聽創(chuàng)造一個連接客戶端的套
接字,再用多線程處理該連接,而服務(wù)器端則繼續(xù)監(jiān)聽新的套接
字。
這樣主要的交易代碼就能夠放入Serviceclient這個函數(shù)中,當(dāng)
有新客戶信息連入時,即可進行查詢數(shù)據(jù)庫,對比插入股票隊列
等工作
ClassClientlnfo
//這個類記錄了客戶端的socket
99Clientinfo(string,,System.Net.EndPoint,Syste
T
lCLThread
字
Host
母
3Name
Sock
clthread
endpoint
name
sock
<
數(shù)據(jù)訪問層類圖
ClassADOSQLserver
Private
ClassstockData
dataSet
//ds下可有4個dataTable訂單號publicint
userTableListID;
publicintUsrlD;
stockTablepublicstring
User_stockTable
tempTable
Public:
////驗證用戶信息
BoolCheckUserlogin(stringusridstring
password);
關(guān)于交易算法的詳細設(shè)計
5.2撮合算法
在前文中,我們已經(jīng)提到了,撮合算法是整個交易所乃至整
個證券仿真系統(tǒng)的核心部分。此算法的成功與否,直接影響著仿
真系統(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ā)生撮合。一旦
買賣隊列的價格發(fā)生了交叉,如圖2.3.1所不,發(fā)生交叉的那部分
就會進行撮合。
而事實上,由于每一筆新來的單子進入數(shù)列后都會觸發(fā)一次
比較,因此每次觸發(fā)撮合都是由新單子促成的。稱為“來一筆撮
合一次”,也就是連續(xù)競價。
麻
撮合成功
圖2.3.1
連續(xù)競價算法描述:
首先設(shè)定QueueStruct結(jié)構(gòu)為元素的買賣兩個隊列BuyQueue
和SellQueueo
為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)
建這兩個隊列。
其中BuyQueue是時間優(yōu)先、買價降序排序,而SeHQueue是
時間優(yōu)先、賣價升序排序,在連續(xù)競價條件下,能夠保證
BuyQueue[O]的price小于SellQueue[O]的priceo
連續(xù)競價算法如下:
1.)接收一個新單子newlist,判斷newlist是買單還是
賣單;如果是買單,則轉(zhuǎn)2,如果是賣單,則轉(zhuǎn)
B;
2.)取賣單隊列頭SellQueue[O],if
SellQueue[O].price>newlist.price,利用插入排序?qū)?/p>
newlist插入到買隊列BuyQueue中,轉(zhuǎn)1;
3.)ifSellQueue[0].count>newlist.count,newlist完全撮
合,SellQueue[0].count=SellQueue[0].count一
newlist.count,轉(zhuǎn)2;
4.)ifSellQueue[0].count<=newlist.count,SellQueue[O]
撮合,并將SellQueue[O]從SellQueue隊列中刪
除,newlist.count=newlist.count-
SellQueue[0].count,轉(zhuǎn)2;
5.)取買單隊列頭BuyQueue[O],if
BuyQueue[O].price<newlist.price,利用插入排序?qū)?/p>
newlist插入到賣隊列BuyQueue中,轉(zhuǎn)1;
6.)ifBuyQueue[0].count>newlist.count,newlist完全
撮合,BuyQueue[0].count=BuyQueue[O].count一
newlist.count,轉(zhuǎn)1;
7.)ifBuyQueuefO].count<=newlist.count,
BuyQueue[O]撮合,并將BuyQueuelO]從
BuyQueue隊列中刪除,
newlist.count=newlist.count-BuyQueue[0].count,轉(zhuǎn)
5;
如下面流程圖5.2.2所示:
圖3.2.2
5.2.2集合競價
集合競價是指對所有有效委托進行集中處理,深、滬兩市的
集合競價時間為交易日上午9:15至9:25o
集合競價原則:
?凡是高于開盤價的買單一定成交;
?凡是低于開盤價的賣單一定成交;
■凡是高于開盤價的賣單一定不成交;
■凡是低于開盤價的買單一定不成交;
集合競價分四步完成:
第一步:確定有效委托在有漲跌幅限制的情況下,有效委托
是這樣確定的:
根據(jù)該只證券上一交易日收盤價以及確定的漲跌幅度來計算
當(dāng)日的最高限價、最低限價。有效價格范圍就是該只證券最高限
價、最低限價之間的所有價位。
限價超出此范圍的委托為無效委托,系統(tǒng)作自動撤單處理。
第二步:系統(tǒng)根據(jù)競價規(guī)則自動確定集合競價的成交價,這
個價格就是當(dāng)日的開盤價,所有高于開盤價的買盤和所有低開開
盤價的賣盤均以此價格成交,集合競價的成交價確定原則是:以
此價格成交,能夠得到最大成交量。
第三步:集中撮合處理所有的買委托按照委托限價由高到低
的順序排列,限價相同者按照進入系統(tǒng)的時間先后排列;所有賣
委托按委托限價由低到高的順序排列,限價相同者按照進入系統(tǒng)
的時間先后排列。依序逐筆將排在前面的買委托與賣委托配對成
交,即按照“價格優(yōu)先,同等價格下時間優(yōu)先”的成交順序依次成
交,直至成交條件不滿足為止,即不存在限價高于等于成交價的
叫買委托、或不存在限價低于等于成交價的叫賣委托。
所有成交都以同一成交價成交。這司一成交價成交的買賣單
第四步:行情揭示:
1.)如該只證券的成交量為零,則將成交價位揭示為
開盤價、最近成交價、最高價、最低價,并揭示
出成交量、成交金額。
2.)剩余有效委托中,實際的最高叫買價揭示為叫買
揭示價,若最高叫買價不存在,則叫買揭示價揭
示為空;實際的最低叫賣價揭示為叫賣揭示價,
若最低叫賣價不存在,則叫賣揭示價揭不為空,
集合競價中未能成交的委托,自動進入連續(xù)競價。
按照這樣的原則和要求,我們設(shè)計了如下的集合競價撮合算
法。如圖324所示。
判斷兩隊列是否開盤價為昨日收
否都不為空盤價,成交量為0
小于0
i=j=O,M、N分別為BuyQueue[]與SellQueue[|非空元素
的數(shù)目;BOOLk;Buy=BuyQueue[O];Sell=SelQueue[O]
是
等于0
大于0
開盤價為(SelQieue『1].price+BuyQueue[i-11price)乏;總開盤價為BuyQueue[i].price;總
成交量為Selll.count成交量為SeMcount
等于0
小TO
w
開盤價為(SellQueue[j].price+BuyQueue『1].price)2開盤價為SelQueueQ.price;總成
總成交量為Buy1.count交量為Buy1.count
圖3.2.4
集合競價算法描述:
和連續(xù)競價一樣,首先設(shè)定QueueStruct結(jié)構(gòu)為元素的買
賣兩個隊列BuyQueue和SellQueueo
為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組
構(gòu)建這兩個隊列。
其中BuyQueue是時間優(yōu)先、買價降序排序,而
SellQueue是時間優(yōu)先、賣價升序排序。在開市到開盤這段時
間內(nèi),買賣單已經(jīng)分別進入了買賣隊列內(nèi)排好了序。
一旦宣布開盤,則觸發(fā)集合撮合,如下:
?判斷兩隊列是否都不為空,如是,轉(zhuǎn)2;如
否,轉(zhuǎn)21;
■判斷BuyQueue[0].prince與
SellQueue[0].prince之差,如大于等于0,轉(zhuǎn)
3:如小于0,轉(zhuǎn)21;
■定義inti=j二0;M、N分別為買賣兩隊列非空
元素的個數(shù);BOOLk;QueueStruct
Buy=BuyQueue[0];Sell=SellQueue[O];
Buyl;Selll;轉(zhuǎn)4;
■判斷BuyQueue[i].prince與
SellQueuefjl.prince之差,如大于等于0,轉(zhuǎn)
5:如小于0,轉(zhuǎn)14;
■判斷Buy.count與Sell.count之差,如大于
0,轉(zhuǎn)6;如小于等于0,轉(zhuǎn)9;
j++;k=true;Sell1.count=Sel1.count;
Sell.count=Sell.count4-SellQueue[iSellQueue]
.count;轉(zhuǎn)7;
判斷j是否小于N,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)
8;
開盤價為BuyQueue[i].price;總成交量為
Sell.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;
i++;k=false;Buy1.count=Buy.count;
Buy.count=Buy.count+BuyQueue[i].count;
轉(zhuǎn)10;
判斷i是否小于M,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)
11;
判斷Buy.count與Sell.count之差,如小于
0,轉(zhuǎn)12;如等于0,轉(zhuǎn)13;
開盤價為SellQueue[j].price;總成交量為
Buy.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;
開盤價為(SellQueue[j].price+BuyQueue[i-
l].price)/2;總成交量為sell.count;統(tǒng)計成交
數(shù)據(jù)及回報,并返回;
判斷k值,如為true,轉(zhuǎn)15;如為false,轉(zhuǎn)
18;
判斷Buyl.counl與Sell1.count之差,如大于
0,轉(zhuǎn)16;如小于0,轉(zhuǎn)17;
開盤價為BuyQueue[i].price;總成交量為
Selll.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;
開盤價為(SellQueue[j-l].price+BuyQueueti-
ll.price)/2;總成交量為Sell1.count;統(tǒng)計成
交數(shù)據(jù)及回報,并返回;
判斷Buyl.count與Sell.count之差,如小于
0,轉(zhuǎn)19;如等于0,轉(zhuǎn)20;
開盤價為SellQueue[j].price;總成交量為
Buyl.count;統(tǒng)計成交數(shù)據(jù)及回報,并返回;
開盤價為(SellQueue[j].price+BuyQueue[i-
l].price)/2;總成交量為Buy1.count;統(tǒng)計成
交數(shù)據(jù)及回報,并返回;
開盤價為昨日收盤價,成交量為0;保留所有
數(shù)據(jù)至開盤進入連續(xù)競價撮合;
5.2.3買賣隊列排序
上面我們介紹了撮合算法的核心部分,但實際上在撮合前
后都要對兩個買賣隊列進行一定的插入和排列處理,這在整
個算法中也是很重要的部分。下面我們就來具體介紹一下。
對所有的排列和插入我們考慮了效率問題之后,最后統(tǒng)一
使用了二分插入排序法。
在單子進入隊列時,我們首先統(tǒng)計出當(dāng)前隊列中的非空數(shù)
據(jù)個數(shù),然后再經(jīng)過新單子與當(dāng)前隊列中間值的價格比較,
確定新單子在隊列的前半部分還是后半部分,然后再取該區(qū)
域中間值與之比較,直到確定新單子應(yīng)在的位置。
如下列代碼所示:
intlow=0;inthigh=N-l;//N為隊列中非空元素的個數(shù)
while(low<=high)
(
intm=(low+high)/2;
if(newlist->price<SellQueue[m].price)
high=m-1;
elselow=m+l;
for(inti=N-l;i>=high+l;-i)
SellQueue[i+1]=SellQueue[i];
SellQueue[high+l]=*newlist;
這是賣隊列的排序,對于買隊列的排序與之相似,只是價
格排列是由高到底。在這里不再贅述。
這種插入排序方法完全符合了撮合算法中價格優(yōu)先、時間
優(yōu)先的要求,而且效率也是比較高的。
在集合競價前和連續(xù)競價后進行的插入排序都是這樣進行
的,而在集合競價撮合之后,對兩隊列的重新排列,我們首
先使用了memset函數(shù)將前面已全部成交的t個元素清空,然
后將t到N(原總非空元素個數(shù))前移t位。
如下列代碼所示:
for(intp=0;*t<*N;p++,*t++)
QueueStructtemp;
temp二Queue[*t];
Queue[*t]=Queue[p];
Queue[p]=temp;
5.2.4撮合算法的運行機制
在交易所正常運行時,一天內(nèi)分為開市、開盤、休市、復(fù)
開、收市等5個步驟。
開市:每天上午9:15開市。這時候,股民能夠經(jīng)過券商向交
易所遞單。同一只股票的買賣單開始分別進入這只股票的買賣隊
列中,但并不進行撮合。該過程一直持續(xù)到9:25。
開盤:每天上午9:30正式開盤。9:25-9:30為盤前處理,這段
時間也就是集合競價撮合算法運行的時間。9:25,買賣兩隊列開
市不再接收新的單子。新的單子這時都放在緩沖區(qū)中,直到兩隊
列運行完整個集合競價算法后開市重新進單時,再依序?qū)巫訌?/p>
緩存區(qū)取出讀入買賣隊列進行連續(xù)競價的撮合。買賣隊列于9:25
開始集合競價,運算完畢,得出開盤價等所有統(tǒng)計數(shù)據(jù)并發(fā)布行
情以及發(fā)送完所有回報之后,重新接收單子進入該日正常交易
中,使用連續(xù)競價算法進行撮合。
休市:每天上午11:00休市。此時,所有的券商不再接受買
賣單子,也不再給交易所遞單。交易所將此前已經(jīng)收到的所有單
子撮合之后處于休息階段。并進行各種當(dāng)日前市盤點。
復(fù)開:每天下午13:30復(fù)開。此時,券商開市接收用戶的遞
單,并將其送交交易所。交易所重新開市進入連續(xù)競價撮合
收市:每天下午15:00收市。此時交易所不再接受任何單
子,準(zhǔn)時進行最后一筆單子的撮合之后,關(guān)閉撮合線程。將最后
得到的收盤價等數(shù)據(jù)統(tǒng)計發(fā)送完之后,當(dāng)天的所有工作全部結(jié)
束。
如圖3.2.5所示。
9:25開巾15:00收市
9:33開盤13:30復(fù)開
11:00休市
開市開盤
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《籃球教學(xué)理論》課件
- 鐵路旅客運輸服務(wù)始發(fā)準(zhǔn)備96課件
- 法律事務(wù)專員協(xié)議
- 《美容護膚教程類課件》課件
- 售票作業(yè)馬丹32課件
- 財務(wù)分析與記賬代理合同
- 鐵路車站自動控制系統(tǒng)維護鐵道信號自動控制專業(yè)教學(xué)50課件
- 《Python程序設(shè)計基礎(chǔ)》課件 第五章 函數(shù)與模塊
- 地面清洗改造方案范本
- 中國鄉(xiāng)土民俗文化課件
- 砌體工程事故及事故分析
- 《改善患者就醫(yī)體驗》課件
- 《產(chǎn)科超聲之科普講》課件
- 化驗室培訓(xùn)課件
- 噬血細胞綜合征并發(fā)患者的個案護理課件
- 當(dāng)代中國外交 第三章 70年代的中國外交
- 川教版四年級《生命.生態(tài).安全》下冊全冊 課件
- 2024年中國心力衰竭診斷和治療指南2024版
- 八大員-標(biāo)準(zhǔn)員習(xí)題庫(附答案)
- 點面結(jié)合寫場景公開課-(2)省公開課獲獎?wù)n件說課比賽一等獎?wù)n件
- 國開(內(nèi)蒙古)2024年《創(chuàng)新創(chuàng)業(yè)教育基礎(chǔ)》形考任務(wù)1-3終考任務(wù)答案
評論
0/150
提交評論