Skip to main content

Dự kiến hệ thống KRX sẽ go-live chính thức vào tháng 5 tới

· 2 min read

Theo báo Nhân Dân, hệ thống KRX dự kiến sẽ chính thức go-live vào tháng 5 năm nay. Đây là một trong những bước tiến quan trọng nhằm hiện đại hóa thị trường chứng khoán Việt Nam, nâng cao hiệu suất giao dịch và tăng cường khả năng kết nối với thị trường quốc tế.

Hệ thống KRX

Những điểm nổi bật của hệ thống KRX:

  • Tăng tốc độ xử lý giao dịch, giúp giảm thời gian chờ và nâng cao trải nghiệm của nhà đầu tư.
  • Cung cấp các sản phẩm mới, bao gồm giao dịch T+0 và các công cụ phái sinh nâng cao.
  • Nâng cao năng lực giám sát thị trường, đảm bảo minh bạch và công bằng hơn trong giao dịch chứng khoán.
  • Tích hợp công nghệ tiên tiến, hỗ trợ các chuẩn mực giao dịch hiện đại.

Hệ thống KRX đã được chuẩn bị trong nhiều năm và hiện đang trong giai đoạn thử nghiệm cuối cùng trước khi triển khai chính thức. Việc hệ thống mới đi vào hoạt động sẽ đánh dấu một cột mốc quan trọng trong quá trình chuyển đổi số của thị trường chứng khoán Việt Nam.

🔗 Xem chi tiết bài viết gốc:
Nhân Dân

🔥 NÓNG: HOSE bắt đầu kiểm thử hệ thống KRX từ 17/03/2025

· 2 min read

Theo thông tin từ CafeF, Sở Giao dịch Chứng khoán TP.HCM (HOSE) sẽ chính thức bắt đầu kiểm thử hệ thống KRX từ ngày 17/03/2025. Đây là bước quan trọng trong quá trình chuẩn bị triển khai hệ thống giao dịch mới, giúp nâng cao hiệu suất thị trường chứng khoán Việt Nam.

Hệ thống KRX

🚀 Hệ thống KRX có gì đặc biệt?

🔹 Tăng tốc độ xử lý giao dịch, giảm tải hệ thống và nâng cao trải nghiệm nhà đầu tư.
🔹 Hỗ trợ giao dịch T+0, giúp thanh khoản thị trường tốt hơn.
🔹 Cung cấp các công cụ phái sinh mới, mở rộng cơ hội đầu tư.
🔹 Nâng cao năng lực giám sát và minh bạch thị trường.

📆 Lộ trình triển khai

  • 17/03/2025: Bắt đầu kiểm thử hệ thống KRX.
  • Tháng 5/2025: Dự kiến hệ thống go-live chính thức.

Hệ thống KRX là một trong những dự án chuyển đổi số quan trọng nhất của thị trường chứng khoán Việt Nam. Việc triển khai thành công sẽ giúp thị trường tiếp cận chuẩn mực quốc tế và thu hút nhiều nhà đầu tư hơn.

📢 Bạn nghĩ gì về sự thay đổi này? Hãy chia sẻ ý kiến của bạn!

🔗 Xem chi tiết bài viết gốc:

Biểu đồ phân phối chuẩn với khoảng tin cậy 95%

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách vẽ biểu đồ phân phối chuẩn với khoảng tin cậy 95% bằng thư viện Plotly trong Python.

Mã nguồn

import numpy as np
import plotly.graph_objects as go
from scipy.stats import norm

# Xác định các giá trị cho phân phối chuẩn
mu = 0
sigma = 1
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
y = norm.pdf(x, mu, sigma)

# Tính z-score cho khoảng tin cậy 95%
confidence_level = 0.95
alpha = 1 - confidence_level
z = norm.ppf(1 - alpha / 2)

# Vùng tô màu cho khoảng tin cậy 95%
x_fill = np.linspace(-z, z, 1000)
y_fill = norm.pdf(x_fill, mu, sigma)

# Tạo biểu đồ bằng Plotly
fig = go.Figure()

# Đường phân phối chuẩn
fig.add_trace(go.Scatter(x=x, y=y, mode='lines', name='Phân phối chuẩn', line=dict(color='blue')))

# Đường z-score
fig.add_trace(go.Scatter(x=[z, z], y=[0, norm.pdf(z, mu, sigma)], mode='lines', name=f'z = {z:.2f}', line=dict(color='red', dash='dash')))
fig.add_trace(go.Scatter(x=[-z, -z], y=[0, norm.pdf(-z, mu, sigma)], mode='lines', name=f'z = -{z:.2f}', line=dict(color='red', dash='dash')))

# Vùng tô màu khoảng tin cậy 95%
fig.add_trace(go.Scatter(x=np.concatenate(([x_fill[0]], x_fill, [x_fill[-1]])),
y=np.concatenate(([0], y_fill, [0])),
fill='tozeroy', fillcolor='rgba(255, 0, 0, 0.3)',
line=dict(color='rgba(255, 0, 0, 0)'),
name='Khoảng tin cậy 95%'))

# Định dạng biểu đồ
fig.update_layout(title='Biểu đồ phân phối chuẩn với khoảng tin cậy 95%',
xaxis_title='Z-score',
yaxis_title='Mật độ xác suất',
template='plotly_white',
xaxis_rangeslider_visible=False,
width=1200, # Đặt chiều rộng lớn hơn
height=600 # Đặt chiều cao hợp lý
)

# Hiển thị biểu đồ
fig.show()

fig.write_html("bieu_do_phan_phoi_chuan.html", full_html=True, include_plotlyjs="cdn")

Kết luận

Mã nguồn trên giúp vẽ biểu đồ phân phối chuẩn với khoảng tin cậy 95% bằng Plotly. Bạn có thể xuất biểu đồ dưới dạng file HTML để dễ dàng chia sẻ hoặc nhúng vào trang web.

Phân Tích Phân Phối Giá Cổ Phiếu

· 2 min read

1. Giới Thiệu

Dữ liệu giao dịch dưới đây phản ánh sự biến động của giá cổ phiếu trong một khoảng thời gian cụ thể. Chúng ta sẽ phân tích xu hướng giá dựa trên các thông số như Open, High, Low, Close và Volume.

2. Dữ Liệu Giao Dịch

datetimeopenhighlowclosevolume
06/14/2024 19:55169.15169.16169.15169.160217
06/14/2024 19:50169.19169.19169.16169.16012
06/14/2024 19:45169.06169.06169.06169.0601
06/14/2024 19:40169.07169.07169.06169.06050
06/14/2024 19:35169.06169.07169.06169.07015
..................
06/14/2024 11:00168.04168.04167.81167.96045115
06/14/2024 10:55167.98168.06167.86168.06019597
06/14/2024 10:50167.80168.03167.73167.98213482
06/14/2024 10:45167.61167.80167.61167.77047085
06/14/2024 10:40167.38167.66167.23167.61037891

3. Nhận Định Xu Hướng

  • Biến động giá: Trong khoảng thời gian từ 10:40 đến 19:55, giá cổ phiếu dao động từ 167.38 đến 169.19.
  • Khối lượng giao dịch: Một số thời điểm có khối lượng giao dịch lớn, như 10:45 (47,085) và 11:00 (45,115), cho thấy sự quan tâm mạnh mẽ từ thị trường.
  • Mức giá cao nhất/thấp nhất: Giá cao nhất ghi nhận là 169.19, trong khi giá thấp nhất xuống đến 167.23.

4. Kết Luận

Dữ liệu trên cho thấy giá cổ phiếu có xu hướng dao động nhẹ trong ngày, với mức biến động trong khoảng 2 điểm. Việc quan sát kỹ các phiên giao dịch có khối lượng lớn có thể giúp dự đoán xu hướng tiếp theo của thị trường.

5. Chart

Đặt Lệnh Mua trên MetaTrader 5 bằng Python

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách sử dụng Python để đặt lệnh mua (BUY) trên MetaTrader 5 (MT5) bằng thư viện MetaTrader5.

Mã nguồn

# Hàm để đặt một lệnh mua
import MetaTrader5 as mt5
import math

# Kết nối tới MetaTrader 5
if not mt5.initialize(login=login, password=password, server=server):
print("Initialize() failed, error code =", mt5.last_error())
quit()
else:
symbol = 'EURUSD.sml'
lot = 0.01 # Số lượng lô mua

if not mt5.symbol_select(symbol, True):
print(f"Failed to select {symbol}, error code =", mt5.last_error())
quit()

symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
print(f"{symbol} not found")

point = symbol_info.point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20 # Độ lệch giá cho phép

request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": mt5.ORDER_TYPE_BUY,
"price": price,
"sl": price - 0.01, # Dừng lỗ (Stop Loss)
"tp": price + 0.02, # Chốt lời (Take Profit)
"deviation": deviation,
"magic": 234000,
"comment": "Autotrading K10",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_FOK,
}

result = mt5.order_send(request)
if result.retcode != mt5.TRADE_RETCODE_DONE:
print("Failed to send order :", result.retcode, result._asdict())
else:
print("Order placed BUY successfully!")
print(result)

# Đóng kết nối với MT5
mt5.shutdown()

Giải thích

  1. Khởi tạo kết nối với MT5

    • mt5.initialize(login, password, server): Kết nối với tài khoản giao dịch.
    • Nếu kết nối thất bại, chương trình thoát.
  2. Xác định tham số giao dịch

    • symbol: Cặp tiền tệ (EURUSD.sml).
    • lot: Khối lượng lệnh mua (0.01).
    • price: Giá mua theo giá ask.
    • sl, tp: Thiết lập dừng lỗ (Stop Loss) và chốt lời (Take Profit).
    • deviation: Độ lệch giá cho phép.
  3. Gửi lệnh mua

    • mt5.order_send(request): Gửi lệnh đến MT5.
    • Kiểm tra kết quả trả về.
    • Nếu lệnh được thực hiện thành công, in thông tin giao dịch.

Cải tiến

Xử lý lỗi khi không có dữ liệu giá

if price is None:
print("Không thể lấy giá hiện tại của", symbol)
mt5.shutdown()
quit()

Thêm tính năng kiểm tra số dư trước khi đặt lệnh

account_info = mt5.account_info()
if account_info is not None and account_info.balance < lot * price:
print("Số dư không đủ để đặt lệnh")
mt5.shutdown()
quit()

Ghi log giao dịch vào file CSV để theo dõi

import csv

with open("trade_log.csv", "a", newline="") as file:
writer = csv.writer(file)
writer.writerow([symbol, lot, price, "BUY", result.retcode])

📌 Tham khảo thêm: Tài liệu MetaTrader5 Python API

Gửi Lệnh Đặt Mua Cổ Phiếu qua API với requests

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách gửi lệnh đặt mua cổ phiếu bằng Python thông qua API sử dụng thư viện requests.

Mã nguồn

import requests

# Base URL for the API
base_url = "http://127.0.0.1:8000/newOrder" # Endpoint

# Parameters for the API request
params = {
"instrumentID": "VCB",
"market": "VN",
"buySell": "B",
"orderType": "ATO",
"price": 0,
"quantity": 100,
"account": "2654251",
"stopOrder": "false",
"stopPrice": 0,
"stopStep": 0,
"lossStep": 0,
"profitStep": 0,
"deviceId": "vEthernet (Default Switch):00-15-5D-C2-E5-EE|Wi-Fi:18-CC-18-C9-CB-6A",
"userAgent": "Python/3.11.6(Windows-10-10.0.19045-SP0); ssi-fctrading/2.4.2"
}

# Sending the GET request to the API
response = requests.get(base_url, params=params)

# Print the raw response
print(response)

# Handling the response
if response.status_code == 200:
data = response.json()["data"]
print(f"The stock order for account 2654251 is {data}")
else:
print(f"Error connecting to API: {response.status_code}")

Giải thích

  1. Import thư viện cần thiết

    • requests: Thư viện gửi HTTP request.
  2. Cấu hình API

    • base_url: Địa chỉ API xử lý lệnh đặt mua.
    • params: Các tham số truyền vào API, bao gồm mã chứng khoán, số lượng, loại lệnh, tài khoản giao dịch, v.v.
  3. Gửi yêu cầu API

    • requests.get(base_url, params=params): Gửi yêu cầu GET với các tham số đặt lệnh.
  4. Xử lý phản hồi

    • Nếu thành công (status_code == 200), lấy dữ liệu JSON và hiển thị kết quả.
    • Nếu thất bại, in thông báo lỗi với mã lỗi HTTP.

Cải tiến

Xử lý lỗi chi tiết hơn

try:
response = requests.get(base_url, params=params)
response.raise_for_status()
data = response.json().get("data", {})
print(f"Stock order response: {data}")
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")

Chuyển đổi dữ liệu sang Pandas DataFrame

import pandas as pd

df = pd.DataFrame([data])
print(df.head())

Gửi lệnh bằng phương thức POST thay vì GET

response = requests.post(base_url, json=params)

📌 Tham khảo thêm: Tài liệu API đặt lệnh giao dịch

Hướng dẫn đăng nhập API Entrade bằng Python

· One min read

Bài viết này hướng dẫn cách sử dụng thư viện requests trong Python để đăng nhập vào API của Entrade và lấy access token.

Đăng nhập API

Dưới đây là đoạn mã sử dụng requests để gửi yêu cầu đăng nhập:

import requests

# URL cho endpoint đăng nhập
login_url = 'https://services.entrade.com.vn/dnse-auth-service/login'

# Thông tin đăng nhập (thay thế bằng thông tin thực tế của bạn)
username = 'your_email@example.com'
password = 'your_secure_password'

# Dữ liệu gửi kèm yêu cầu POST
login_data = {
'username': username,
'password': password
}

# Gửi yêu cầu POST đến API đăng nhập
response = requests.post(login_url, json=login_data)
token = ''

# Kiểm tra phản hồi
if response.status_code == 200:
# Lấy token từ phản hồi
token = response.json().get('token')
print('Đăng nhập thành công. Access token của bạn:', token)
else:
print('Đăng nhập thất bại. Mã lỗi:', response.status_code, response.text)

Hướng dẫn đặt lệnh giao dịch trên Entrade bằng API

· 3 min read

Bài viết này hướng dẫn cách sử dụng Python để gửi lệnh giao dịch chứng khoán trên nền tảng Entrade bằng API.

Bước 1: Đăng nhập để lấy JWT TokenTrading Token

Trước khi có thể đặt lệnh, bạn cần lấy JWT TokenTrading Token. Nếu chưa có, hãy tham khảo bài viết:
Hướng dẫn lấy JWT Token và Trading Token

Bước 2: Cấu trúc API đặt lệnh

API đặt lệnh sử dụng POST request với endpoint: https://services.entrade.com.vn/dnse-order-service/v2/orders

Dưới đây là đoạn mã Python để thực hiện việc đặt lệnh:

import requests
import json

# Thay thế bằng thông tin thực tế của bạn
jwt_token = "your_actual_jwt_token_here"
trading_token = "your_actual_trading_token_here"
account_id = "your_actual_account_id_here"
loan_package_id = 1037 # Thay thế bằng ID gói vay thực tế của bạn

# URL API đặt lệnh
url = 'https://services.entrade.com.vn/dnse-order-service/v2/orders'

# Headers yêu cầu
headers = {
'Authorization': f'Bearer {jwt_token}',
'Content-Type': 'application/json',
'Trading-Token': trading_token
}

# Dữ liệu đặt lệnh
order_data = {
"symbol": "ACB", # Mã chứng khoán
"side": "NB", # NB: Mua, NS: Bán
"orderType": "ATC", # Loại lệnh: ATC, LO, MP, v.v.
"price": 100000, # Giá đặt lệnh (VNĐ)
"quantity": 100, # Số lượng đặt
"loanPackageId": loan_package_id, # ID gói vay (hoặc null nếu không dùng)
"accountNo": account_id # Số tài khoản giao dịch
}

# Gửi yêu cầu đặt lệnh
response = requests.post(url, headers=headers, data=json.dumps(order_data))

# Kiểm tra phản hồi từ API
if response.status_code in [200, 201]:
print("Lệnh đặt thành công:", response.json())
else:
print(f"Lỗi khi đặt lệnh. Mã lỗi: {response.status_code}")
print(response.text)

Dưới đây là đoạn mã Python để thực hiện việc đặt lệnh:

```python
import requests
import json

# Thay thế bằng thông tin thực tế của bạn
jwt_token = "your_actual_jwt_token_here"
trading_token = "your_actual_trading_token_here"
account_id = "your_actual_account_id_here"
loan_package_id = 1037 # Thay thế bằng ID gói vay thực tế của bạn

# URL API đặt lệnh
url = 'https://services.entrade.com.vn/dnse-order-service/v2/orders'

# Headers yêu cầu
headers = {
'Authorization': f'Bearer {jwt_token}',
'Content-Type': 'application/json',
'Trading-Token': trading_token
}

# Dữ liệu đặt lệnh
order_data = {
"symbol": "ACB", # Mã chứng khoán
"side": "NB", # NB: Mua, NS: Bán
"orderType": "ATC", # Loại lệnh: ATC, LO, MP, v.v.
"price": 100000, # Giá đặt lệnh (VNĐ)
"quantity": 100, # Số lượng đặt
"loanPackageId": loan_package_id, # ID gói vay (hoặc null nếu không dùng)
"accountNo": account_id # Số tài khoản giao dịch
}

# Gửi yêu cầu đặt lệnh
response = requests.post(url, headers=headers, data=json.dumps(order_data))

# Kiểm tra phản hồi từ API
if response.status_code in [200, 201]:
print("Lệnh đặt thành công:", response.json())
else:
print(f"Lỗi khi đặt lệnh. Mã lỗi: {response.status_code}")
print(response.text)

Lấy danh sách tài khoản từ API Entrade bằng Python

· 2 min read

Bài viết này hướng dẫn cách sử dụng Python để lấy danh sách tài khoản từ hệ thống Entrade bằng JWT token.

Bước 1: Đăng nhập để lấy JWT Token

Trước khi truy xuất danh sách tài khoản, bạn cần đăng nhập để lấy JWT Token. Xem bài viết hướng dẫn tại: Đăng nhập API Entrade bằng Python.

Bước 2: Gửi yêu cầu GET để lấy danh sách tài khoản

Dưới đây là đoạn mã sử dụng requests để gửi yêu cầu lấy danh sách tài khoản:

import requests

# Thay thế 'your_actual_jwt_token_here' bằng JWT token thực tế từ API đăng nhập.
jwt_token = "your_actual_jwt_token_here"

# Thiết lập headers cho yêu cầu GET
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {jwt_token}'
}

# URL của API lấy danh sách tài khoản
url = 'https://services.entrade.com.vn/dnse-order-service/accounts'

# Gửi yêu cầu GET
response = requests.get(url, headers=headers)

# Biến lưu trữ số tài khoản mặc định
tieukhoan = ''

# Kiểm tra phản hồi từ API
if response.status_code == 200:
# Nếu thành công, lấy ID tài khoản mặc định
tieukhoan = response.json().get('default', {}).get('id', 'Không có tài khoản mặc định')
print(tieukhoan)
print(response.json())
else:
# Nếu thất bại, in mã lỗi
print(f'Không thể lấy danh sách tài khoản. Mã lỗi: {response.status_code}')

Lấy Dữ liệu Giá Cổ phiếu Hàng ngày với ssi_fc_data

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách sử dụng thư viện ssi_fc_data để lấy dữ liệu giá cổ phiếu hàng ngày và xử lý bằng Pandas.

Mã nguồn

# Import necessary modules
from ssi_fc_data import fc_md_client, model
import config
import pandas as pd # Import Pandas for DataFrame handling
import json

# Create a Market Data Client
client = fc_md_client.MarketDataClient(config)

# Create a request for daily stock price data
req = model.daily_stock_price(symbol, from_date, to_date) # Lấy dữ liệu cho một hoặc nhiều ngày

# Request daily stock price data using the Market Data Client
data_dict = client.daily_stock_price(config, req)

print(type(data_dict))
print(data_dict)

Giải thích

  1. Import thư viện cần thiết

    • ssi_fc_data: Thư viện để truy xuất dữ liệu chứng khoán từ SSI.
    • pandas: Được sử dụng để xử lý dữ liệu dạng bảng.
    • json: Hỗ trợ xử lý dữ liệu JSON trả về từ API.
  2. Khởi tạo client

    • MarketDataClient(config): Tạo client để kết nối với dữ liệu thị trường.
  3. Tạo yêu cầu lấy dữ liệu giá cổ phiếu hàng ngày

    • model.daily_stock_price(symbol, from_date, to_date): Xây dựng yêu cầu lấy dữ liệu.
  4. Gửi yêu cầu và nhận dữ liệu

    • client.daily_stock_price(config, req): Gửi yêu cầu đến API và nhận dữ liệu.
    • Kiểm tra kiểu dữ liệu trả về (print(type(data_dict))).
    • In dữ liệu nhận được (print(data_dict)).

Cải tiến

Chuyển đổi dữ liệu sang Pandas DataFrame

# Convert JSON data to Pandas DataFrame
df = pd.DataFrame(data_dict)
print(df.head())

Xử lý lỗi khi gửi yêu cầu API

try:
data_dict = client.daily_stock_price(config, req)
df = pd.DataFrame(data_dict)
print(df.head())
except Exception as e:
print("Lỗi khi lấy dữ liệu:", str(e))

Lưu dữ liệu vào CSV để phân tích sau

df.to_csv("stock_data.csv", index=False)
print("Dữ liệu đã được lưu vào stock_data.csv")

📌 Tham khảo thêm: Tài liệu ssi_fc_data