Xây dựng sàn giao dịch vàng trực tuyến

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.

pdf120 trang | Chia sẻ: lylyngoc | Lượt xem: 2418 | Lượt tải: 2download
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:

  • pdfluan_van_version_3_99.pdf