Chọn Repeat task, chỉnh thời gian lặp (Every), khoảng thời gan thực hiện việc lặp
task (Duration), Duration phải lớn hơn Every.
Ví dụ: Every = 2 minutes, Duration = 6 minutes thì việc lặp sẽ được thực hiện 3
lần.
Chọn OK để kết thúc, và sau đó là Apply.
Như vậy, AutoDeleteOrder và AutoCalculateSwapFee đã được cài đặt để chạy tự
động, với sàn vàng hiện tại, thời gian cho mỗi lần thực thi task như sau:
AutoDeleteOrder: chạy hai lần mỗi ngày vào lúc 11:01 AM và 11:01 PM.
AutoCalculateSwapFee: chạy một lần mỗi ngày vào lúc 11:10 PM.
120 trang |
Chia sẻ: lylyngoc | Lượt xem: 2514 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Xây dựng sàn giao dịch vàng trực tuyến, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ính Giới tính
7 birthday datetime Thuộc tính Ngày sinh
8 nationality nvarchar(50) Thuộc tính Quốc tịch
9 house_number nvarchar(50) Thuộc tính Số nhà
10 street nvarchar(50) Thuộc tính Tên đường
11 ward nvarchar(50) Thuộc tính Phường, xã
12 district nvarchar(50) Thuộc tính Quận, huyện
13 city nvarchar(50) Thuộc tính Tỉnh, thành phố
14 identity_number varchar(20) Thuộc tính Số CMND
15 phone_number varchar(15) Thuộc tính Số điện thoại liên hệ
16 date_created datetime Thuộc tính Ngày tham gia hệ thống
17 employee_created int Thuộc tính Admin tạo
18 date_updated datetime Thuộc tính Thời gian sửa thông tin
19 employee_updated int Thuộc tính Admin sửa thông tin
20 last_login datetime Thuộc tính Lần đăng nhập cuối
21 status int Thuộc tính Trạng thái hiện tại (bình thường, khóa, xóa)
22 money float Thuộc tính Số tiền trong tài khoản
23 last_transaction datetime Thuộc tính Lần giao dịch cuối
- Bảng Lệnh - Order
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 76
STT TÊN KIỂU LOẠI GHI CHÚ
1 order_id int Khóa chính
2 order_type smallint Thuộc tính Loại lệnh
3 start_quantity int Thuộc tính Khối lượng ban đầu
4 current_quantity int Thuộc tính Khối lượng hiện tại
5 start_price int Thuộc tính Giá ban đầu
6 current_price int Thuộc tính Giá hiện tại
7 investor_id int Thuộc tính Mã nhà đầu tư
8 status int Thuộc tính Trạng thái lệnh
9 date_created datetime Thuộc tính Thời gian đặt lệnh
10 last_updated datetime Thuộc tính Thời gian sửa lệnh
11 parent_id int Thuộc tính Mã lệnh cha
12 user_created nvarchar(50) Thuộc tính Người đặt lệnh
13 user_updated nvarchar(50) Thuộc tính Người sửa lệnh
- Bảng Tin tức – News
STT TÊN KIỂU LOẠI GHI CHÚ
1 news_id int Khóa chính
2 title nvarchar(300) Thuộc tính Tiêu đề bản tin
3 short_description ntext Thuộc tính Mô tả ngắn
4 content ntext Thuộc tính Nội dung
5 image nvarchar(50) Thuộc tính Hình ảnh
6 enabled int Thuộc tính Trạng thái
7 date_created datetime Thuộc tính Ngày tạo bản tin
8 date_updated datetime Thuộc tính Ngày sửa tin
9 employee_created int Thuộc tính Nhân viên tạo bản tin
10 employee_updated int Thuộc tính Nhân viên sửa tin
- Bảng Khớp – Hit
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 77
STT TÊN KIỂU LOẠI GHI CHÚ
1 hit_id int Khóa chính
2 sell_order_id int Thuộc tính Mã lệnh bán
3 buy_order_id int Thuộc tính Mã lệnh mua
4 sell_price int Thuộc tính Giá bán
5 buy_price int Thuộc tính Giá mua
6 hit_price int Thuộc tính Giá khớp
7 hit_quantity int Thuộc tính Khối lượng khớp
8 hit_time datetime Thuộc tính Thời gian khớp
- Bảng Investor_log
STT TÊN KIỂU LOẠI GHI CHÚ
1 log_id int Khóa chính
2 investor_id int Thuộc tính Mã nhà đầu tư
3 money_before float Thuộc tính Số tiền ban đầu
4 money_after float Thuộc tính Số tiền lúc sau
5 status_before int Thuộc tính Trạng thái đầu
6 status_after int Thuộc tính Trạng thái sau
7 employee_updated int Thuộc tính Nhân viên thay đổi
8 time_updated datetime Thuộc tính Thời gian thay đổi
9 action nvarchar(200) Thuộc tính Tác vụ (nạp tiền, rút tiền…)
- Bảng Order_log
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 78
STT TÊN KIỂU LOẠI GHI CHÚ
1 log_id int Khóa chính
2 order_id int Thuộc tính Mã lệnh
3 action int Thuộc tính Tác vụ (đặt lệnh, xóa lệnh, khớp lệnh…)
4 price_before int Thuộc tính Giá ban đầu
5 price_after int Thuộc tính Giá hiện tại
6 quantity_before int Thuộc tính Khối lượng ban đầu
7 quantity_after int Thuộc tính Khối lượng hiện tại
8 time_created datetime Thuộc tính Thời gian đặt lệnh
9 time_updated datetime Thuộc tính Thời gian sửa lệnh
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 79
CHƯƠNG 4: ĐỀ XUẤT KIẾN TRÚC VÀ HIỆN THỰC HỆ THỐNG
1. Kiến trúc tổng quan
1.1. Mô hình kiến trúc tổng quan về chức năng
Hình 26. Kiến trúc tổng quan về chức năng của sàn giao dịch vàng trực tuyến.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 80
1.2. Các thành phần chính và chức năng từng thành phần:
Được xây dựng dựa trên mô hình hướng dịch vụ, kiến trúc tổng quan của sàn giao
dịch vàng trực tuyến bao gồm 4 tầng chính:
- Tầng hiển thị: bao gồm các giao diện để người dùng tương tác với hệ thống.
Thông qua tầng này, nhà đầu tư có thể trực tiếp thực hiện các thao tác giao dịch
trên sàn giao dịch (đặt lệnh mua, đặt lệnh bán, hủy lệnh, đóng lệnh), quản lý
lịch sử tài khoản cá nhân, theo dõi tin tức thị trường, quan sát sự biến động giá
trên sàn giao dịch, xem tỉ giá ngoại tệ, giá vàng, giá dầu thế giới hiện tại…
Tầng này có thể được hiện thực bằng các cách sau:
Trang web giao dịch trực tuyến: thông qua việc truy cập trang web giao
dịch trực tuyến của sàn, nhà đầu tư có thể thực hiện giao dịch ở bất kì nơi
nào được kết nối Internet.
Ứng dụng xây dựng trên máy tính cá nhân: được hiện thực độc lập với nền
tảng hệ thống hiện tại. Sau khi đã đăng ký tham gia thành viên, nhà đầu tư
sẽ nhận được một CD có chứa tập tin cài đặt ứng dụng trên máy tính cá
nhân. Khi việc cài đặt hoàn tất, nhà đầu tư có thể kết nối Internet và thực
hiện giao dịch bằng ứng dụng này. Chương trình cũng sẽ được cài đặt trên
các máy tính tại các điểm nhận lệnh của sàn, nhà đầu tư có thể đến các
điểm này để thực hiện giao dịch.
Ứng dụng viết cho nhiều loại thiết bị di động phổ biến hiện tại (điện thoại,
iPhone, PDAs…) hay các ứng dụng của hệ thống không dây xây dựng theo
chuẩn WAP (Wireless Application Protocol). Chuẩn này giúp cho các ứng
dụng không dây tương thích được với nền tảng công nghệ của các nhà cung
cấp mạng di động GSM lẫn CDMA. Nhờ đó, nhà đầu tư có thể thực hiện
giao dịch mọi lúc, mọi nơi thông qua sóng điện thoại di động.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 81
Hình 27. Kiến trúc tổng quan của sàn giao dịch vàng trực tuyến.
Hiện tại, vì vấn đề giới hạn thời gian nên đề tài chỉ dừng lại ở việc xây
dựng trang web giao dịch trực tuyến.
- Tầng điều khiển: dựa trên giao diện của tầng hiển thị, tầng điều khiển thực thi
các yêu cầu đó và làm cho ứng dụng hoạt động đúng. Trước khi yêu cầu tầng
dịch vụ truy xuất tầng cơ sở dữ liệu, tầng điều khiển phải đảm bảo được các
yêu cầu của mình là hợp lệ một cách tương đối. Ví dụ: các ô thông tin hệ thống
yêu cầu nhập vào từ phía người dùng không được bỏ trống; số điện thoại của
thuê bao viễn thông Việt Nam không bao gồm chữ và có chiều dài từ 8 đến 11
chữ số; kiểm tra tính hợp lệ của lệnh đặt trước khi gởi yêu cầu đặt lệnh (trạng
thái của nhà đầu tư đặt lệnh phải là đang kích hoạt, lệnh đặt không làm vi phạm
tỉ lệ an toàn, tức là khối lượng đặt không được vượt quá khối lượng được phép
đặt tối đa); kiểm tra chiều dài tối thiểu khi thay đổi mật khẩu… Tất cả các
bước kiểm tra này nhằm đảm bảo sự hợp lệ một cách tương đối về các thông
tin nhận được từ người dùng để đề phòng các trường hợp có nhân tố bên ngoài
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 82
cố ý phá hủy tính đúng đắn của thông tin đưa vào hệ thống. Riêng trong trường
hợp người dùng thực hiện thao tác đăng nhập vào hệ thống, tầng điều khiển có
nhiệm vụ phải mã hóa chuỗi mật khẩu bằng hàm băm MD5 trước khi gởi yêu
cầu kiểm tra đăng nhập xuống tầng dịch vụ. Mặt khác, khi thông tin đưa vào
không hợp lệ, tầng điều khiển cũng nên chỉ rõ cho người dùng biết lỗi xảy ra ở
đâu vì có thể xảy ra các trường hợp nhầm lẫn khi nhập dữ liệu. Bên cạnh đó,
trong trường hợp thông tin đưa vào hợp lệ nhưng việc ghi nhận thông tin vào
cơ sở dữ liệu thất bại (do lỗi quá tải phía server hoặc các lỗi tạm thời của hệ
thống), khi nhận được kết quả trả về không thành công từ phía tầng dịch vụ,
tầng điều khiển cũng phải đưa ra cảnh báo để người dùng quay lại thực hiện
thao tác đó sau.
- Tầng dịch vụ bao gồm hai thành phần sau đây:
Các dịch vụ web (Web Services): đây là bộ phận trung gian kết nối giữa
tầng hiển thị và tầng dữ liệu. Mọi yêu cầu truy xuất dữ liệu từ tầng hiển thị
sẽ không được phép liên lạc trực tiếp với cơ sở dữ liệu của hệ thống bên
dưới mà phải thông qua các dịch vụ web. Khi phía tầng hiển thị có yêu cầu
giao tiếp với cơ sở dữ liệu, các dịch vụ web sẽ đáp ứng bằng cách truy vấn
cơ sở dữ liệu rồi trả kết quả về cho tầng hiển thị. Các dịch vụ web được
cung cấp ở đây bao gồm: quản lý người dùng (nhân viên, nhà đầu tư), quản
lý lệnh, quản lý thông tin. Riêng dịch vụ web quản lý lệnh còn liên lạc với
trung tâm xử lý khớp lệnh thông qua socket. Khi nhà đầu tư đặt lệnh mới,
dịch vụ web sẽ ghi nhận lệnh này vào cơ sở dữ liệu hệ thống, đồng thời
thực hiện giao tiếp bằng kết nối socket để gởi ID của lệnh (mã lệnh) cho
trung tâm xử lý khớp lệnh. Trong tương lai có thể xây dựng thành một hệ
dịch vụ web phân bố, chứa trên nhiều server.
Trung tâm xử lý khớp lệnh: đây là bộ phận xử lý trung tâm của hệ thống,
được xây dựng dưới hình thức là một dịch vụ Windows (Windows
Service), hoạt động liên tục và chạy ngầm bên dưới. Trung tâm xử lý khớp
lệnh sẽ liên tục lắng nghe trên socket được mở sẵn. Khi có một ID lệnh mới
được gởi lên từ dịch vụ web quản lý lệnh, trung tâm xử lý khớp lệnh sẽ tìm
kiếm và so sánh với lệnh trái chiều tốt nhất hiện có trong cơ sở dữ liệu. Lưu
ý rằng ở đây lệnh trái chiều tốt nhất phải thuộc sở hữu của một nhà đầu tư
khác, tức là nhà đầu tư sở hữu lệnh trái chiều tốt nhất này không cùng mã
với nhà đầu tư đặt lệnh. Việc khớp lệnh sẽ dựa trên yêu cầu nghiệp vụ đặt
ra trước đó (ưu tiên về giá, thời gian). Nếu yêu cầu nghiệp vụ được thỏa
mãn, trung tâm xử lý khớp lệnh sẽ thực hiện các thao tác cần thiết trên cơ
sở dữ liệu để ghi nhận với hệ thống rằng hai lệnh này đã khớp với nhau:
thay đổi trạng thái và khối lượng hiện tại của cặp lệnh mua-bán này, lưu kết
quả khớp lệnh vào cơ sở dữ liệu, tính phí giao dịch bằng cách trừ trực tiếp
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 83
vào tài khoản hai nhà đầu tư tương ứng. Khi có nhà đầu tư đóng lệnh thành
công, tức là đã hoàn thành được một chu kỳ lệnh trên sàn, trung tâm xử lý
khớp lệnh phải tính toán được kết quả lời lỗ của việc giao dịch, chuyển
thành tiền thật và thanh toán vào tài khoản của nhà đầu tư.
- Tầng cơ sở dữ liệu: là nơi lưu trữ toàn bộ dữ liệu của hệ thống giao dịch vàng
trực tuyến, bao gồm: dữ liệu người dùng (nhân viên, nhà đầu tư), dữ liệu lệnh,
dữ liệu tin tức. Các dữ liệu này được truy xuất bởi tầng dịch vụ. Trong tương
lai có thể xây dựng thành một hệ cơ sở dữ liệu phân bố, chứa trên nhiều server.
Mọi thao tác lên cơ sở dữ liệu đều được ghi vào file lịch sử (có đuôi .log). Việc truyền
nhận ID của lệnh thông qua giao tiếp socket giữa dịch vụ web quản lý lệnh và trung tâm
xử lý khớp lệnh cũng được ghi nhận vào file lịch sử.
2. Hiện thực hệ thống
Hệ thống trong đề tài được hiện thực bằng ngôn ngữ C#, quản lý cơ sở dữ liệu bằng
SQL Server, công cụ hỗ trợ là Microsoft Visual Studio 2008. Dựa vào kiến trúc và các
chức năng đã xác định ở trên, quá trình hiện thực hệ thống sẽ được chia ra làm các công
việc độc lập sau:
Dùng web service để hiện thực các chức năng của hệ thống.
Hiện thực code behind cho các thao tác trên trang web admin và web user.
Hiện thực core khớp lệnh.
Hiện thực công cụ đặt lệnh tự động để kiểm tra thời gian đáp ứng của core khớp
lệnh.
Hiện thực công cụ tự động xóa lệnh và tính phí qua đêm cho nhà đầu tư.
2.1. Các chức năng chính của hệ thống
Hệ thống được xây dựng theo kiến trúc hướng dịch vụ (SOA) nên tất cả các chức
năng đều được hiện thực thông qua web services. Việc thao tác trên cơ sở dữ liệu sẽ
được thực hiện thông qua DataSet. Ứng với mỗi module của hệ thống sẽ có một web
service riêng, các chức năng riêng. Tuy nhiên, nhìn chung hệ thống có các chức năng
chính như tạo mới, sửa dữ liệu, xem và xóa dữ liệu (nhân viên, nhà đầu tư, lệnh, tin
tức).
Với chức năng tạo mới, service nhận vào một đối tượng thuộc lớp đã được định
nghĩa sẵn (Employee, Investor, Order, News, OrderLog, InvestorLog) và lưu các
thông tin của đối tượng này vào cơ sở dữ liệu. Service sẽ trả về ID của dòng vừa được
thêm vào cơ sở dữ liệu. Nếu trong quá trình thao tác với cơ sở dữ liệu xảy ra lỗi, phía
browser sẽ nhận được đối tượng trả về có ID = 0. Riêng với chức năng đặt lệnh và
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 84
đóng lệnh, service phải nhận mật khẩu đặt lệnh để kiểm tra tính hợp lệ. Các service
được sử dụng bao gồm:
int addEmployee (Employee employee)
int addInvestor (Investor investor)
int placeOrder (Order order)
int closeOrder (int order_id, int closePrice, int closeQuantity, string user_updated,
string orderPassword)
int addNews (News news)
bool newInvestorLog (InvestorLog investorLog)
bool newOrderLog (OrderLog orderLog)
Với chức năng sửa dữ liệu, service cũng nhận vào một đối tượng thuộc một trong
các lớp đã được định nghĩa và sau đó cập nhật lại dữ liệu của dòng có ID bằng với ID
của đối tượng được truyền vào. Đối với nhân viên, nhà đầu tư, lệnh hay tin tức có
trạng thái bị xóa (deleted) thì việc sửa dữ liệu sẽ bị thất bại. Các service sử dụng bao
gồm:
bool editEmployee (Employee employee)
bool editInvestor (Investor investor)
bool editOrder (Order order)
bool editNews (News news)
Chức năng xem dữ liệu: tùy theo yêu cầu bên phía browser mà service sẽ trả về
một đối tượng hoặc một danh sách các đối tượng được lọc theo trạng thái, theo ngày
hoặc theo mã (nhân viên, nhà đầu tư, tin tức)… Các service được sử dụng:
Employee getEmployee (int employeeID)
ArrayList getListEmployees ()
Investor getInvestor (int investorID)
ArrayList getListInvestors ()
ArrayList getListOrderForEmployee (int status)
ArrayList getListOrderForInvestor (string investorCode, int status)
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 85
ArrayList getListNews (int newsCateoryID)
…
Chức năng xóa dữ lệu: vì các bảng trong cơ sở dữ liệu có ràng buộc khóa ngoại
với nhau nên để đơn giản, một dòng trong cơ sở dữ liệu được xóa bằng cách chuyển
giá trị của field status thành “bị xóa” (deleted). Theo đó, field status sẽ có 3 giá trị là
enable, disabled và deleted, trừ field status của Order (pending – hitting – closing –
finished – deleted) vì đặc tính nghiệp vụ của đối tượng này. Việc xóa nhà đầu tư sẽ
chịu các ràng buộc như nhà đầu tư không còn lệnh đang khớp (trạng thái hitting)
trong hệ thống, sau khi xóa thì các lệnh chờ khớp (trạng thái pending và closing) của
nhà đầu tư phải được xóa theo. Đối với lệnh, một lệnh được xóa thì phải trả khối
lượng hiện có về cho lệnh cha của nó (nếu có). Các service sử dụng:
bool editEmployee (Employee employee)
bool editInvestor (Investor investor)
bool editOrder (Order order)
bool deleteNews (int newsID)
Ngoài ra còn một số service được sử dụng cho viện hiển thị trên bảng điện tử, các
service này chủ yếu được lấy từ bảng Hit và bảng Order nhưng chỉ tính các giá trị
trong ngày. Để cho bảng điện tử hiển thị chính xác các thông tin hiện có trên sàn,
bảng điện phải tự động load sau một khoảng thời gian xác định. Tuy nhiên việc load
cả trang web mất nhiều thời gian, trong khi đó, chỉ một vài phần của bảng điện cần
thay đổi theo thời gian thực (giá mua tốt nhất, giá bán tốt nhất, giá khớp…), do đó các
thành phần này của bảng điện được hiện thực bằng ajax để trang web được uyển
chuyển hơn.
2.2. Core khớp lệnh
Đây là phần quan trọng nhất của hệ thống. Core khớp lệnh của sàn vàng hiện tại
được hiện thực bằng windows service và giao tiếp với web service thông qua socket.
Giải thuật của core được xây dựng dựa trên quy trình nghiệp vụ đã tìm hiểu, cụ thể
như sau:
Core khớp lệnh nhận orderID gửi lên từ web service và tiến hành lấy lệnh dựa trên
orderID để có được các thông tin cần thiết như khối lượng hiện tại, giá hiện tại,
loại lệnh.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 86
Hình 28. Lưu đồ giải thuật core khớp lệnh – nhận orderID từ web service.
Nếu khối lượng hiện tại của lệnh bằng 0, kết thúc quá trình khớp lệnh. Ngược lại,
thực hiện việc tìm lệnh ngược chiều tốt nhất trong cơ sở dữ liệu và phải thỏa điều
kiện khớp lệnh.
Hình 29. Lưu đồ giải thuật core khớp lệnh – tìm lệnh ngược chiều tốt nhât.
Nếu lệnh tốt nhất đã được tìm thấy, kiểm tra khối lượng hiện tại của hai lệnh để
tiến hành khớp bán phần hoặc khớp toàn phần. Trong trường hợp khớp bán phần,
core khớp lệnh phải tự sinh ra một lệnh con có khối lượng bằng khối lượng khớp,
giá là giá của lệnh cha và trạng thái lệnh là hitting hoặc finished. Trạng thái và
khối lượng của các lệnh tham gia khớp lệnh phải được cập nhật lại sau khi khớp
thành công.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 87
Hình 30. Lưu đồ giải thuật core khớp lệnh – tạo lệnh con, cập nhật thông tin lệnh.
Kết quả khớp lệnh sẽ được lưu vào bảng Hit, nếu có lệnh con sinh ra thì Hit chỉ
lưu lại lệnh con đã được tạo chứ không lưu lệnh cha.
Hình 31. Lưu đồ giải thuật core khớp lệnh – lưu kết quả vào Hit table.
Core phải tự động tính phí giao dịch cho nhà đầu tư sau khi khớp lệnh thành công.
Hình 32. Lưu đồ giải thuật core khớp lệnh – tính phí giao dịch cho nhà đầu tư.
Nếu lệnh được gửi lên core có trạng thái closing, core khớp lệnh phải tự động tính
lại lời lỗ trong tài khoản nhà đầu tư.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 88
Hình 33. Lưu đồ giải thuật core khớp lệnh – tính lời lỗ trong tài khoản nhà đầu tư.
Nếu lệnh cha của lệnh con được tạo phía trên là lệnh được web service truyền lên
core khớp lệnh thì core phải lặp lại toàn bộ quá trình trên cho lệnh cha này cho đến
khi toàn bộ khối lượng lệnh đã được khớp hoặc không tìm được lệnh thích hợp để
khớp.
Hình 34. Lưu đồ giải thuật core khớp lệnh – lặp lại quá trình khớp lệnh.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 89
Để đảm bảo thời gian đáp ứng của core, core sẽ không sử dụng lại các service đã
có mà sẽ thao tác trực tiếp với cơ sở dữ liệu. Core khớp lệnh phải đảm bảo có thể thực
hiện cùng lúc hai nhiệm vụ nhận lệnh và xử lý lệnh vì vậy core sẽ gồm hai thread
chính, ReceiveOrderId để nhận orderID truyền từ web service và MainHittingProcess
để tiến hành xử lý khớp lệnh
Hình 35. Khởi tạo thread cho core khớp lệnh.
Ngoài ra core khớp lệnh còn sử dụng một queue để lưu orderID được gửi lên từ
web service. Bằng cách này, core khớp lệnh vẫn có thể nhận lệnh trong khi lệnh đang
xử lý vẫn chưa thực hiện xong. Như vậy thread ReceiveOrderId sẽ liên tục lắng nghe
từ socket để nhận orderID gửi lên và lưu vào queue, thread MainHittingProcess sẽ lấy
orderID từ queue này và tiến hành quá trình khớp lệnh. Mã giả của hai thread này có
thể hình dung như sau:
Thread ReceiveOrderId
while (true) {
// Initialize Socket Client in here
order = getOrderIdFromSocketClient();
OrderQueue.lock();
OrderQueue.add(order);
OrderQueue.unlock();
// Disconnect Socket Client in here
}
Thread MainHittingProcess
while (true) {
OrderQueue.lock();
foreach (item in OrderQueue) {
hittingProcess(item);
}
OrderQueue.unlock();
}
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 90
getOrderIdFromSocket là hàm nhận orderID truyền từ web service thông qua
socket. Core khớp lệnh lúc này sẽ đóng vai trò là socket server và web service đóng
vai trò socket client. Core khớp lệnh sẽ mở socket ở port 6789 để tránh đụng độ với
port của các chương trình khác. getOrderIdFromSocket sẽ bao gồm một vòng lặp để
thực hiện việc lắng nghe – tạo kết nối – xử lý – đóng kết nối. Cách mở một kết nối
phía socket server như sau:
Hình 36. Tạo socket phía server.
Phía web service, cụ thể là hàm placeOrder hoặc closeOrder sẽ mở một kết nối
đến socket server, truyền orderID và đóng kết nối. Cách hiện thực này sẽ đảm bảo
core khớp lệnh được gọi để xử lý ngay khi lệnh được đưa vào hệ thống. Cách mở kết
nối đến socket server và truyền dữ liệu được hiện thực như sau:
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 91
Hình 37. Tạo socket phía client.
hittingProcess là hàm thực hiện nhiệm vụ khớp lệnh của core theo đúng lưu đồ
giải thuật đã được đưa ra ở trên. Tuy nhiên, core khớp lệnh hiện tại có hai thread
thường xuyên can thiệp vào queue (một thread push liên tục và một thread pop liên
tục). Vì vậy phải có một cơ chế lock an toàn cho queue để đảm bảo sự đúng đắn dữ
liệu khi có sự can thiệp thường xuyên từ nhiều phía. Giải pháp được đưa ra là sử dụng
Lock Free Queue.
Cấu trúc của Lock Free Queue cũng tương tự như cấu trúc của queue bình thường,
bao gồm các node dữ liệu liên kết với nhau., toàn bộ cấu trúc sẽ được điều khiển
thông qua hai con trỏ head và tail. Lock Free Queue có hai hàm chính là Enqueue và
Dequeue tương ứng với hàm push và pop của queue được hiện thực theo cách thông
thường.
Cấu trúc một node của Lock Free Queue:
class Node
{
public T value;
public Pointer next;
public Node () {}
}
Struct Pointer
{
public long count;
public Node ptr;
}
Hàm khởi tạo Lock Free Queue:
public LockFreeQueue()
{
Node node = new Node();
head.ptr = tail.ptr = node;
}
Hàm Enqueue(T item) có nhiệm vụ thêm một phần tử mới vào queue. Khi push
thành công, hai giá trị phải được thay đổi là con trỏ next của tail và bản thân tail. Con
trỏ next của tail phải trỏ tới node mới được thêm vào và tail được cập nhật lại là node
mới này. Tuy nhiên, nếu trong thời gian thực thi giữa hai lần thay đổi này có sự can
thiệp của một thread khác thì tính đúng đắn dữ liệu sẽ không được bảo đảm. Do đó,
Lock Free Queue sẽ sử dụng hàm CompareExchange để đảm bảo việc thay đổi giá trị
của tail cũng như next của tail luôn chính xác. Trước khi sử dụng hàm này, chương
trình phải được khai báo using System.Threading.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 92
CompareExchange có thể được gọi như sau: Interlocked.CompareExchange
(ref T location, T value, T comparand). Trong đó, biến location sẽ được so sánh với
comparand, nếu hai giá trị này bằng nhau, location sẽ được cập nhật lại bằng giá trị
lưu trong biến vaule, ngược lại sẽ không có thao tác nào được thực thi. Hàm
CompareExchange luôn trả về giá trị ban đầu được lưu trong biến location. Hai thao
tác so sánh (compare) và hoán đổi (exchange) được thực thi như một tác vụ đơn
nguyên (atomic operation). Lock Free Queue sẽ sử dụng hàm này để hiện thực hàm
CAS (Compare – And – Swap) như sau
private bool CAS (ref Pointer destination, Pointer compared, Pointer exchange) {
if ( compared.ptr ==
Interlocked.CompareExchange( ref destination.ptr, exchange.ptr, compared.ptr) )
{
Interlocked.Exchange(ref destination.count, exchange.count);
return true;
}
return false;
}
Giải thuật hàm Enqueue:
Tạo một node mới chứa phần tử muốn thêm vào. Thành phần chính của hàm
Enqueue là một vòng lặp tìm ra vị trí mà tại đó next của tail trỏ tới null.
Tạo các biến cục bộ để lưu giữ lại giá trị của head, tail, và tail.next; liên tục kiểm
tra giá trị hiện tại của tail và giá trị đã được lưu lại trước đó. Nếu hai giá trị này bằng
nhau và next của tail trỏ tới null thì thực hiện việc gắn node mới vào queue - CAS (ref
tail.Next, null, node). Ngược lại, nếu giá trị lưu giữ của tail.next khác null, đây là
trường hợp đã có một thread hoàn thành thao tác push phần tử mới trong lúc thread
hiện tại đang thực thi, do đó phải cập nhật lại giá trị cho tail - CAS (ref tail, oldTail,
oldNext).
Giải thuật hàm Dequeue:
Với cách hiện thực hàm Enqueue như trên, tail không phải luôn bảo đảm sẽ là
node cuối cùng trong queue, tail sẽ trỏ đến node cuối cùng hoặc node ngay trước node
cuối trong queue. Vì vậy việc kiểm tra queue rỗng để tiến hành Dequeue sẽ phức tạp
hơn cho với cách hiện thực queue thông thường.
Thành phần chính của hàm Dequeue cũng là một vòng lặp để đảm bảo các biến
head và tail chứa giá trị chính xác khi có nhiều thread cùng push hoặc pop queue.
Tương tự Enqueue, hàm Dequeue cũng tạo các biến cục bộ để lưu giữ giá trị của head,
tail và head.next; liên tục kiểm tra giá trị của head và giá trị đã được lưu giữ trước đó,
nếu hai giá trị này bằng nhau, đồng thời giá trị head và tail cũ trỏ tới cùng một node,
giá trị next của head trỏ tới null, đây là trường hợp queue đang rỗng, Dequeue sẽ trả
về giá trị mặc định của kiểu dữ liệu mà queue đang chứa. Ngược lại, nếu head.next
không trỏ tới null nhưng head và tail cùng trỏ tới một node, đây là trường hợp đã có
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 93
một thread thực hiện push thành công một node mới vào queue trong khi thread hiện
tại đang thực thi, giá trị tail phải được cập nhật lại – CAS (ref tail, oldTail,
oldHeadNext).
Trong trường hợp head và tail không cùng trỏ đến một node, hàm Dequeue sẽ trả
về phần tử đầu trong queue và cập nhật lại giá trị cho biến head – CAS (head,
oldHead, oldHeadNext).
Bằng cách sử dụng Lock Free Queue, hai thread ReceiveOrderId và
MainHittingProcess của core khớp lệnh có thể Enqueue và Dequeue mà vẫn đảm bảo
tính đúng đắn của dữ liệu.
Core khớp lệnh sẽ thao tác trực tiếp trên cơ sở dữ liệu bao gồm việc truy xuất,
chỉnh sửa, tạo mới lệnh. Ngoài ra, core cũng tạo ra các file log (file có đuôi .log) để
tiện cho việc theo dõi quá trình khớp lệnh của core. Hai thread chính của core sẽ được
thực thi liên tục cho đến khi có thao tác stop windows service, toàn bộ thread sẽ
ngừng hoạt động và kết nối socket sẽ được đóng.
2.3. Các công cụ hỗ trợ
2.3.1. Đặt lệnh tự động
Để hỗ trợ cho việc tính thời gian đáp ứng của core khớp lệnh, công cụ này sẽ tự
động đặt nhiều lệnh cùng lúc với khối lượng và giá nằm trong khoảng do người
dùng định sẵn. Công cụ đặt lệnh tự động được hiện thực dưới hình thức Windows
Forms Application.
Đặt lệnh tự động được chia làm hai giai đoạn: nhận các thông số từ người dùng
để sinh tự động các lệnh và ghi vào file xml, đọc từ file xml và gọi service
placeOrder (Order order) để tiến hành đặt lệnh vào hệ thống. Giá, khối lượng và
investorID của lệnh sẽ được lấy mặc định. File xml sẽ lưu các lệnh dưới dạng node,
mỗi node có các thuộc tính: loại, giá, khối lượng, investorID.
Với công cụ đặt lệnh tự động, core khớp lệnh sẽ nhận được số lượng lệnh lớn
trong khoảng thời gian ngắn, vì vậy thời gian đáp ứng của core sẽ được tính chính
xác hơn.
2.3.2. Xóa lệnh tự động
Lệnh được đưa và hệ thống mà đến cuối phiên giao dịch vẫn không tìm được
lệnh khớp thì lệnh phải được xóa khỏi hệ thống. Công cụ xóa lệnh này được hiện
thực dưới hình thức Console Application và dùng Schedule Tasks của Windows để
định thời cuối mỗi phiên giao dịch.
Xóa lệnh tự động sử dụng service getListOrderID () để lấy về danh sách các id
của lệnh có trạng thái pending và closing hiện có trong hệ thống và gọi service
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 94
deleteOrder (int orderID, string userUpdate) để xóa các lệnh này. User update trong
trường hợp này sẽ là “AUTODELETE”.
2.3.3. Tính phí qua đêm cho nhà đầu tư
Khi lệnh của nhà đầu tư đang ở trạng thái hitting và được lưu giữ trong hệ thống
đến ngày giao dịch kế tiếp thì nhà đầu tư phải chịu phí qua đêm.Tương tự như xóa
lệnh tự động, công cụ tính phí qua đêm cho nhà đầu tư cũng được hiện thực bằng
Console Application và dùng Schedule Tasks của Windows để định thời vào cuối
phiên giao dịch cuối cùng trong ngày.
Service getListInvestorIDAndHitQuantity () được sử dụg đế lấy danh sách id của
nhà đầu tư cùng khối lượng các lệnh có trạng thái hitting ứng với mỗi nhà đầu tư.
Phí qua đêm được tính bằng tích của khối lượng lệnh và phí qua đêm do người quản
trị hệ thống định nghĩa (hiện tại là 2000 VND).
Service calculateSwapFee (int investorID, double money, int userUpdate) được
dùng để tính phí qua đêm, money sẽ được trừ trực tiếp vào tài khoản của nhà đầu tư.
Như vậy, đến thời điểm này, sàn giao dịch vàng trực tuyến đã được hiện thực để hỗ
trợ các chức năng cơ bản như một sàn vàng trên thực tế, tuy nhiên, do giới hạn của đề tài
cũng như thời gian thực hiện đề tài, việc hiện thực hệ thống cũng không tránh khỏi những
thiếu sót, hướng mở rộng của luận văn sẽ mô tả cụ thể hơn vấn đề này.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 95
CHƯƠNG 5: TỔNG KẾT, ĐÁNH GIÁ VÀ HƯỚNG MỞ RỘNG CỦA LUẬN
VĂN
1. Tổng kết và đánh giá luận văn
1.1. Đánh giá chung
Về cơ bản, nhóm đã xây dựng một hệ thống sàn giao dịch vàng trực tuyến với đầy
đủ các chức năng cần thiết để đưa vào hoạt động. Các sản phẩm trong đề tài này gồm
có:
- Tầng hiển thị: Với sự hỗ trợ của công nghệ ASP.NET, hiện tại nhóm đã phát
triển được trang web giao dịch trực tuyến phục vụ cho việc giao tiếp giữa sàn
giao dịch và nhà đầu tư cũng như đáp ứng được yêu cầu quản lý, điều khiển
hoạt động của nhà quản trị hệ thống. Giao diện trang web khá thân thiện với
người dùng, các thao tác thực hiện giao dịch không quá phức tạp.
- Tầng điều khiển: Về cơ bản, hoạt động của trang web được đảm bảo khá tốt.
Có một số vấn đề bảo mật đường truyền cần được quan tâm hơn nữa. Tuy
nhiên, vì thời gian hạn chế nên hiện tại vấn đề này chưa được chú trọng đúng
mức.
- Tầng dịch vụ:
Các lớp điều khiển: Hiện thực bằng các dịch vụ web, các lớp điều khiển
được xây dựng tương đối đầy đủ nhằm phục vụ cho mục đích liên lạc trung
gian giữa tầng hiển thị và tầng cơ sở dữ liệu. Hiện tại có 3 lớp điều khiển
chính, phục vụ cho các yêu cầu quản lý người dùng (nhân viên, nhà đầu tư),
quản lý lệnh, quản lý tin tức.
Trung tâm xử lý khớp lệnh: Trung tâm xử lý khớp lệnh đã đạt được các yêu
cầu cơ bản đặt ra ban đầu, xử lý đúng yêu cầu nghiệp vụ đặt ra khi có lệnh
vào hệ thống. Đồng thời, việc cài đặt vào hệ thống máy chủ cũng khá dễ
dàng, sau khi cài đặt trung tâm xử lý khớp lệnh sẽ được chạy ngầm bên
dưới, nhà quản trị không cần phải can thiệp gì thêm. Hiện tại trung tâm xử
lý khớp lệnh có thời gian đáp ứng tương đối chấp nhận được (dưới 1 giây).
- Tầng cơ sở dữ liệu bao gồm: Dữ liệu người dùng (nhân viên, nhà đầu tư), dữ
liệu lệnh, dữ liệu tin tức. Hiện tại, cơ sở dữ liệu của hệ thống vẫn theo mô hình
hệ cơ sở dữ liệu tập trung, dùng hệ quản trị cơ sở dữ liệu SQL Server 2005,
phiên bản Express. Do đó, khi khối lượng dữ liệu tăng đến mức giới hạn hỗ trợ
của phiên bản Express (4GB), hệ thống sẽ có nhiều hạn chế.
Hệ thống hiện tại có thể hoạt động như một sân chơi thực thụ cho các nhà đầu tư
vàng, góp phần vào làn sóng phát triển mạnh mẽ của xu hướng kinh doanh và giao
dịch trực tuyến của thị trường vàng trong nước và thế giới.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 96
1.2. Đánh giá thời gian đáp ứng của trung tâm xử lý khớp lệnh
Nhằm phục vụ cho mục đích đánh giá thời gian đáp ứng của trung tâm xử lý khớp
lệnh, tận dụng sự hỗ trợ của Visual Studio 2008, nhóm đã xây dựng một chương trình
đặt lệnh giao dịch tự động theo bó, tức là cùng lúc sẽ có số lượng lớn lệnh đi vào hệ
thống – điều này sát với thực tế hoạt động của các sàn giao dịch vì trong thời gian
giao dịch, cùng một thời điểm có thể có rất nhiều nhà đầu tư đặt lệnh. Từ đó có thể đo
đạc các số liệu về thời gian và hiệu suất của trung tâm xử lý khớp lệnh một cách
tương đối gần đúng.
Để sử dụng chương trình này, người dùng cần nhập vào các thông số sau đây: số
lượng lệnh đặt vào hệ thống, khoảng dao động để chương trình tự động chọn ra các
giá trị ngẫu nhiên về giá và khối lượng, thời gian trễ cách nhau giữa các lệnh đặt. Từ
các giá trị này, hệ thống sẽ sinh một cách ngẫu nhiên các lệnh, sau đó ghi vào tập tin
có đuôi .xml. Sau khi giai đoạn sinh lệnh ngẫu nhiên được hoàn tất (tức tập tin .xml
đã được ghi xong), sẽ có một quá trình khác thực hiện đọc các tập tin .xml này và lấy
ra các lệnh rồi gởi lên hệ thống, việc hệ thống có ghi nhận lệnh gởi thành công hay
không cũng sẽ được lưu trữ trong tập tin lịch sử có đuôi .log. Sở dĩ phải chia ra thành
hai quá trình bởi vì dữ liệu được đưa vào hệ thống cần phải được lưu trữ ở dạng tập
tin có hỗ trợ dữ liệu cấu trúc để khi cần có thể tra cứu nhằm xác minh số liệu, đồng
thời quản lý chặt chẽ nguồn dữ liệu đưa vào hệ thống để đảm bảo các yếu tố về tính
an toàn và đúng đắn của dữ liệu.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 97
Hình 38. Giao diện công cụ đặt lệnh tự động theo bó.
Dưới đây là các số liệu đặt lệnh:
Số lượng lệnh (lệnh) Thời gian đáp ứng (ms/lệnh)
1000 2.7625754527162978
2000 7.6984771573604061
3000 10.766576454668471
4000 11.905337361530716
5000 11.406237176856791
6000 10.238890745071835
7000 12.369923484402589
8000 11.685779237181107
9000 12.660658655985758
10000 14.068623481781376
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 98
Biểu đồ thời gian đáp ứng của trung tâm xử lý khớp lệnh
0
2
4
6
8
10
12
14
16
10
00
20
00
30
00
40
00
50
00
60
00
70
00
80
00
90
00
10
00
0
số lệnh
m
s/
lệ
nh
Thời gian đáp ứng
2. Hướng phát triển của luận văn
- Trong tương lai có thể xây dựng ở tầng hiển thị các ứng dụng để nhà đầu tư giao
tiếp với hệ thống thông qua thiết bị di động, giúp cho việc giao dịch được thực
hiện dễ dàng mọi lúc, mọi nơi thông qua sóng di động. Đối với việc xây dựng tầng
hiển thị có thể thiết kế lại sao cho việc thay đổi các thành phần là ít nhất khi cần
hiện thực tầng hiển thị ở các nền tảng khác nhau.
- Trên tầng điều khiển, việc bảo mật dữ liệu trên đường truyền nhằm tránh mất mát
và rò rỉ thông tin cũng cần được chú ý hơn.
- Ở tầng dịch vụ, bảo mật các dịch vụ web cũng là một hướng mở rộng cần thiết,
điều này nhằm đảm bảo chỉ có những máy chủ xác định trước, được cấp quyền
mới có thể sử dụng các dịch vụ web của sàn giao dịch vàng trực tuyến, tránh việc
can thiệp và sửa đổi cơ sở dữ liệu với các mục đích không tốt hay cố ý phá hoại.
Mặt khác chú ý cải tiến giải thuật của trung tâm xử lý khớp lệnh để thời gian đáp
ứng giảm xuống. Về phía trang web quản trị, cần chỉ ra 2 lệnh nào được khớp với
nhau, trong trường hợp chẻ lệnh, một lệnh khớp với nhiều lệnh cũng cần được
hiển thị lên. Nếu có 2 lệnh cùng chiều, cùng giá, cùng thời gian vào hệ thống,
trung tâm xử lý khớp lệnh cần cho phép nhà quản trị quyết định lệnh nào sẽ được
khớp.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 99
- Bên cạnh đó, cũng có thể mở rộng đề tài theo hướng song song hóa: tầng dịch vụ
dùng các dịch vụ web phân bố và tầng cơ sở dữ liệu dùng hệ cơ sở dữ liệu phân
bố.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 100
TÀI LIỆU THAM KHẢO
[1]. Trang web của trung tâm giao dịch vàng ACB -
[2]. Quy chế giao dịch HASTC -
TypeGrp=1&menuid=201110&menulink=200000&menupage=Quydinh_CocheGD
01.asp&stocktype=2
[3]. Quy chế giao dịch HOSE -
[4]. Trang web Marketcetera -
tera+Community
[5]. Trang web những định nghĩa cơ bản về chứng khoán -
d%E1%BB%8Bnh-nghia-c%C6%A1-b%E1%BA%A3n-v%E1%BB%81-
ch%E1%BB%A9ng-khoan/
[6]. Trang web khớp lệnh trong chứng khoán -
E1%BA%BFnth%E1%BB%A9cch%E1%BB%A9ngkho%C3%A1n/%C4%90%E1
%BB%8Bnhngh%C4%A9av%C3%A0thu%E1%BA%ADtng%E1%BB%AF/Ph%C
6%B0%C6%A1ngth%E1%BB%A9ckh%E1%BB%9Bpl%E1%BB%87nh/tabid/116
/Default.aspx
[7]. Trang web Industrial And Commercial Bank of China -
/gold%20expert%20personal%20account%20gold%20trading/
[8]. Trang web Industrial Bank Co, LTD, China -
ersonal_Gold_Trading_service.html
[9]. Trang web Saxo Bank, UK -
[10]. Understanding SOA with Web Services, By Eric Newcomer - Greg Lomow,
Addison Wesley Professional, 14/12/2004.
[11]. Service-Oriented Modeling: Service Analysis, Design and Architecture, By Michael
Bell, John Wiley & Sons Inc., 2008.
[12]. Luận văn tốt nghiệp của sinh viên Nguyễn Ngọc Duy – 50400415.
[13]. How To Schedule Tasks in Windows XP:
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Trang 101
[14]. Authentication in ASP.NET: .NET Security Guidance:
[15]. Web Services Security in The .NET Framework By Mansoor Ahmed Siddiqui:
[16]. Lock – Free Data Structures: The Queue:
[17]. Managing Transactions using TransactionScope:
scope.aspx
[18]. Hosting the WCF Service As a Windows Service:
[19]. Listen for Socket Request in Thread:
Thread.htm
[20]. ASP.NET Master Pages Overview:
us/library/wtxbf3hh.aspx
[21]. Visual C# 2005: How to Program, Second Edition, By H.M.Deitel – Deitel &
Associates, Inc, P/J.Deitel – Deitel & Associates, Inc., 15/12/2005.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - a
PHỤ LỤC
A. Thuật ngữ
1. Thuật ngữ về nghiệp vụ
B
Bước nhảy về khối lượng: độ chênh lệch tối thiểu giữa hai mức khối lượng, thông
thường là 5 lượng.
Bước nhảy về giá: độ chênh lệch tối thiểu giữa hai mức giá, thông thường là 1000
VND.
C
Core khớp lệnh: hay còn gọi là trung tâm khớp lệnh, là phần quan trọng nhất của
một sàn giao dịch. Nó đảm nhận nhiệm vụ tìm và khớp giữa hai lệnh trái chiều
thích hợp.
Chốt lời: là mức giá mà tại đó nhà đầu tư mong muốn lệnh được khớp khi giá thế
giới lên đến mức này.
D
Dừng lỗ: là mức giá mà tại đó nhà đầu tư mong muốn lệnh được khớp khi giá thế
giới xuống đên mức này, để đảm bảo rủi ro thấp nhất cho tài khoản.
Đ
Đơn vị yết giá: đơn vị tiền tệ/đơn vị tính.
Đấu giá trực tiếp: dựa vào giá thế giới, nhà đầu tư chọn mức giá mua/bán thích
hợp và tiến hành giao dịch.
Đấu giá thế giới: nhà đầu tư chấp nhận/từ chối giao dịch với mức giá do sàn vàng
đưa ra.
K
Khớp lệnh: hai lệnh trái chiều được gọi là khớp với nhau nếu thỏa điều kiện giá
mua lớn hơn hoặc bằng giá bán. Khi đó, các thông tin về giá, khối lượng và trạng
thái của hai lệnh tham gia khớp sẽ được sửa tương ứng với trường hợp khớp toàn
phần hay khớp bán phần.
Khớp toàn phần: khối lượng hai lệnh mua và bán tham gia quá trình khớp bằng
nhau.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - b
Khớp bán phần: khối lượng hai lệnh mua và bán tham gia quá trình khớp không
bằng nhau.
Khớp lệnh định kỳ: các lệnh được đưa vào hệ thống và sẽ tiến hành khớp vào cuối
mỗi phiên giao dịch
Khớp lệnh liên tục: lệnh được đưa vào hệ thống và khớp lập tức với lệnh trái chiều
tốt nhất trong cơ sở dữ liệu (nếu có).
L
Lô tối thiểu: khối lượng tối thiểu của một lệnh để có thể tiến hành giao dịch.
P
Phí giao dịch: phí mà nhà đầu tư phải trả khi một lệnh giao dịch được khớp. Phí
giao dịch hiện tại là 2000 VND/lượng.
Phí qua đêm (swap): phí mà nhà đầu tư phải trả để duy trì lệnh ở trạng thái đang
khớp sang ngày giao dịch kế tiếp. Phí qua đêm hiện tại là 2000 VND/lượng/đêm.
T
Tỷ lệ kí quỹ: là tỷ lệ mà tài khoản nhà đầu tư phải đảm bảo để có thể tiến hành giao
dịch, tỷ lệ kí quỹ hiện tại thường là 7%.
Tỷ lệ cảnh báo: là tỷ lệ mà khi tài khoản nhà đầu tư xuống dưới mức này, nhà đầu
tư buộc phải nộp thêm tiền vào tài khoản mới có thể tiếp tục giao dịch, nếu không
tài khoản nhà đầu tư sẽ bị khóa.
Tỷ lệ xử lý: là tỷ lệ mà khi tài khoản nhà đầu tư xuống dưới mức này thì toàn bộ
lệnh và tài khoản của nhà đầu tư sẽ được tất toán.
Tất toán: khi giá vàng dao động mạnh, dẫn đến số tiền trong tài khoản của nhà đầu
tư không đủ để đảm bảo tỷ lệ xử lý thì phía sàn vàng sẽ bán hoặc mua toàn bộ các
lệnh đang ở trạng thái hitting, hoặc có thể đóng tài khoản nhà đầu tư.
2. Thuật ngữ về công nghệ
A
ACL: Access Control List
Active Directory: dịch vụ hệ thống với vai trò quản lý dữ liệu người dùng, máy
tính, nhóm, các chính sách cũng như nhiều thông tin khác.
C
CDMA: Code Division Multiple Access
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - c
COM/DCOM: Distributed Common Object Model.
CORBA: Common Object Request Broker Architecture.
G
GSM: Global System for Mobile communications
H
HTTP/HTTPS: Hyper Text Transfer Protocol
I
IIS: Internet Information Services.
K
Kerberos: giao thức mật mã dùng để xác thực trong các mạng máy tính hoạt động
trên những đường truyền không an toàn.
M
M&As: Mergers and Acquisitions
MD5: Message –Digest algorithm 5
N
NTML: NT Lan Manager.
O
OOP: Object Oriented Programming
S
SOA: Service Oriented Architecture.
SOAP: Simple Object Access Protocol
U
UDDI: Universal Description, Discovery and Intergration
W
WAP: Wireless Application Protocol.
WSDL: Web Service Description Language
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - d
X
XML: eXtensible Markup Language
B. Hướng dẫn cài đặt và sử dụng
1. Cài đặt core khớp lệnh (trung tâm khớp lệnh)
Để cài đặt core khớp lệnh, ta chạy tập tin trong thư mục
HittingCore\HittingCoreSetUp\Release\setup.exe.
Sau khi chạy tập tin cài đặt, sẽ hiện ra cửa sổ sau:
Hình 39. Cài đặt core khớp lệnh – màn hình welcome.
Chọn “Next” để thực hiện việc cài đặt.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - e
Hình 40. Cài đặt core khớp lệnh – chọn đường dẫn.
Chọn đường dẫn cài đặt và các người dùng có thể sử dụng chương trình này.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - f
Hình 41. Cài đặt core khớp lệnh – hoàn tất cài đặt.
Chọn “Close” để hoàn tất cài đặt.
Sau đó vào bảng quản trị các dịch vụ của Windows và kích hoạt cho trung tâm xử
lý khớp lệnh hoạt động. Chú ý rằng chỉ có lần hoạt động đầu tiên, người dùng mới
phải thực hiện thao tác này. Vì thuộc tính mặc định của trung tâm xử lý khớp lệnh là
tự động (Automatic) nên ở các lần sau, chỉ cần máy được khởi động lên là chương
trình sẽ tự hoạt động.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - g
Hình 42. Khởi động windows service.
Người dùng cũng có thể tùy chỉnh thuộc tính của chương trình sang chế độ khởi
động bằng tay (Manual), tức mỗi lần muốn trung tâm xử lý khớp lệnh hoạt động thì
vào bảng quản trị các dịch vụ của Windows và khởi động.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - h
Hình 43. Chọn chế độ khởi động của windows service.
2. Hướng dẫn cách giao dịch
Với Sàn giao dịch vàng trực tuyến được xây dưng trong đề tài, nhà đầu tư sẽ giao dịch
thông qua trang web giao dịch của sàn.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - i
Hình 44. Trang chủ của trang web gao dịch.
Tại đây, nhà đầu tư không cần đăng nhập mà vẫn có thể xem các thông tin về sàn
vàng, bảng giá trực tuyến, tin tức có liên quan và các thông tin liên hệ khi nảy sinh vấn
đề. Ngoài ra, nhà đầu tư có thể tham khảo giá ở các sàn giao dịch vàng khác như ACB,
Sacombank…
Hình 45. Thông tin các sàn giao dịch vàng khác.
Trước khi tiến hành giao dịch, nhà đầu tư phải biết được giá giao dịch hiện tại trên
sàn, thông tin này được hiển thị cụ thể qua bảng giá trực tuyến, để quan sát được bảng giá
này, nhà đầu tư chọn thẻ “Bảng giá” trên trang web giao dịch.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - j
Hình 46. Bảng giá trực tuyến trên trang web giao dịch.
Để có thể tham gia giao dịch, nhà đầu tư phải đăng nhập thành công vào trang web
của sàn giao dịch vàng trực tuyến với tên và mật khẩu đã được cung cấp.
Hình 47. Nhà đầu tư đăng nhập vào trang web.
Sau khi đăng nhập thành công, nhà đầu tư có thể vào thẻ “Giao dịch” trên trang web.
Tại đây sẽ hiện ra thông tin tài khoản, tỷ lệ ký quỹ hiện tại (nếu nhà đầu tư không có lệnh
nào được khớp thì tỷ lệ ký quỹ sẽ không được hiển thị) và các lệnh thuộc sở hữu của nhà
tư này (được phân chia theo trạng thái).
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - k
Hình 48. Giao diện trang Giao dịch.
Để đặt lệnh, nhà đầu tư nhấp chuột vào nút “Đặt lệnh”, sau đó nhập vào các thông số
cần thiết: loại lệnh, khối lượng đặt, giá, xác nhận mật khẩu đặt lệnh. Sau khi nhấp chuột
vào nút “Đồng ý”, thông tin lệnh sẽ được gởi lên hệ thống.
Hình 49. Nhà đầu tư tiến hành đặt lệnh.
Hình 50. Nhà đầu tư đặt lệnh thành công.
Nhà đầu tư có thể trở lại thẻ “Giao dịch” để kiểm tra xem lệnh vừa đặt có thực sự vào
hệ thống hay chưa, ở đây, lệnh mới vừa đặt sẽ được chuyển vào ở trạng thái “Các lệnh
chưa khớp”.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - l
Hình 51. Lệnh vừa đặt được đưa vào hệ thống.
Tương tự đặt lệnh, khi nhà đầu tư muốn đóng lệnh, chọn trong danh sách “Các lệnh
đang khớp” và chọn lệnh mà nhà đầu tư muốn đóng, nhấp vào nút “Đóng lệnh đã chọn”.
Hình 52. Nhà đầu chọn lệnh để đóng.
Các thông tin để đóng lệnh bao gồm: khối lượng đóng, giá đóng, xác nhận mật khẩu
đặt lệnh. Khối lượng đóng không được phép vượt quá khối lượng đã khớp của lệnh.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - m
Hình 53. Nhà đầu tư nhập các thông tin để tiến hành đóng lệnh.
Nếu đóng lệnh thành công, và lệnh vừa đóng vẫn chưa tìm được lệnh khớp, nhà đầu
tư có thể quan sát lệnh này tại thẻ “Giao dịch”
Hình 54. Lệnh được đóng thành công.
Nếu cảm thấy lệnh với mức giá vừa đặt không thích hợp, nhà đầu tư có thể xóa lệnh
này, lệnh có thể xóa phải nằm trong danh sách “Các lệnh chưa khớp” hoặc “Các lệnh
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - n
đang đóng”. Nhà đầu tư chọn lệnh cần xóa và nhấn vào nút “Xóa lệnh đã chọn”, sau đó
xác nhận “Xóa lệnh”.
Hình 55. Xác nhận yêu cầu xóa lệnh.
Ngoài ra, nhà đầu tư có thể xem lại lịch sử giao dịch của mình tại góc cá nhân.
Hình 56. Góc cá nhân của nhà đầu tư.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - o
Hình 57. Lịch sử giao dịch của nhà đầu tư.
Nhà đầu tư cũng có thể thay đổi mật khẩu để đăng nhập vào trang web giao dịch (mật
khẩu đặt lệnh là cố định và do sàn giao dịch cung cấp). Tại góc cá nhân của mình, nhà
đầu tư chọn “Đổi mât khẩu”, nhập mật khẩu cũ, mật khẩu mới, xác nhận mật khẩu mới và
nhấp vào nút “Đổi mật khẩu”. Nếu việc đổi mật khẩu thành công, nhà đầu tư sẽ được trở
về trang chủ với trạng thái vẫn đang đăng nhập, trường hợp đổi mật khẩu thất bại, nhà
đầu tư sẽ nhận được thông báo lỗi.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - p
Hình 58. Lỗi khi nhà đầu tư đổi mật khẩu.
Sau khi tiến hành giao dịch, nhà đầu tư có thể chọn “Thoát” ở góc cá nhân để đăng
xuất khỏi trang web.
3. Cài đặt các công cụ hỗ trợ
Để cài đặt các công cụ hỗ trợ cho hoạt động của sàn giao dịch vàng, ta sẽ dùng
Scheduled Tasks của Windows.
Công cụ xóa lệnh tự động (AutoDeleteOrder) và tính phí qua đêm cho nhà đầu tư
(AutoCalculateSwapFee) phải được chạy tự động vào cuối mỗi phiên giao dịch hoặc ở
cuối phiên giao dịch cuối cùng trong ngày. Ta sẽ dùng file .exe của mỗi project để
tiến hành việc định thời trong Windows. File .exe của mỗi project sẽ được tìm thấy
trong thư mục …\bin\Debug\filename.exe. Các thao tác sau được tiến hành trên hệ
điều hành Windows XP.
Để mở Scheduled Tasks, chọn Start All Programs Accessories System
Tools Scheduled Tasks.
Thêm 1 task mới, double click vào Add Scheduled Task, sau đó chọn Next.
Hình 59. Màn hình Scheduled Tasks.
Tiếp theo, chọn Browse đến thư mục chứa file exe cần định thời.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - q
Hình 60. Thêm chương trình vào Scheduled Tasks.
Đặt tên cho task và chọn một trong các tùy chọn:
Daily
Weekly
Monthly
One time only
When my computer starts (before a user logs on)
When I log on (only after the current user logs on)
Sau đó chọn Next, chọn thời gian bắt đầu (Start time), ngày bắt đầu (Start date) và
cách thức task thực thi (thời gian ở đây phụ thuộc vào cách chọn tùy chọn ở bước
trước đó, ở hình bên dưới là Daily).
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - r
Hình 61. Tùy chỉnh thời gian thực thi cho task.
Tiếp tục chọn Next, nhâp password của tài khoản được chọn để thực thi task này.
Mặc định sẽ lấy tên của tài khoản đang đăng nhập.
Ghi chú: tài khoản không có password không thể thực hiện được chức năng Add
scheduled task.
Cuối cùng, chọn Next và sau đó Finish.
Ngoài ra ta có thể sử dụng chức năng Advanced để đặt chức năng lặp cho task
(thời gian giữa 2 lần lặp nhỏ hơn 24 giờ) như sau:
Click phải vào task hiện có và chọn Properties. Chọn tab Schedule và chọn
Advanced.
Xây dựng sàn giao dịch vàng trực tuyến 1/2010
Báo cáo luận văn tốt nghiệp Phụ lục - s
Hình 62. Advances Schedule Options.
Chọn Repeat task, chỉnh thời gian lặp (Every), khoảng thời gan thực hiện việc lặp
task (Duration), Duration phải lớn hơn Every.
Ví dụ: Every = 2 minutes, Duration = 6 minutes thì việc lặp sẽ được thực hiện 3
lần.
Chọn OK để kết thúc, và sau đó là Apply.
Như vậy, AutoDeleteOrder và AutoCalculateSwapFee đã được cài đặt để chạy tự
động, với sàn vàng hiện tại, thời gian cho mỗi lần thực thi task như sau:
AutoDeleteOrder: chạy hai lần mỗi ngày vào lúc 11:01 AM và 11:01 PM.
AutoCalculateSwapFee: chạy một lần mỗi ngày vào lúc 11:10 PM.
Các file đính kèm theo tài liệu này:
- luan_van_version_3_99.pdf