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ế.

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

🐍 Ngày 39 - Python 365 ngày: Làm việc với Dữ liệu Binance bằng Python

· 2 min read

📊 Làm việc với Dữ liệu Binance bằng Python

Trong ngày hôm nay, chúng ta sẽ tìm hiểu cách kết nối với sàn giao dịch Binance để lấy dữ liệu thị trường và phân tích bằng Python. Đây là một bước quan trọng trong các dự án liên quan đến tài chính, trading bot, hoặc theo dõi giá crypto tự động.


✅ Mục tiêu

  • Cài đặt thư viện python-binance
  • Kết nối API với Binance
  • Lấy dữ liệu nến (OHLCV) từ thị trường BTC/USDT
  • Phân tích cơ bản và hiển thị

🧰 Cài đặt thư viện cần thiết

pip install python-binance pandas

🔑 Kết nối API Binance

Bạn cần đăng ký API key trên Binance để sử dụng.

from binance.client import Client
import pandas as pd

# Điền API key & secret
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'

client = Client(api_key, api_secret)

📈 Lấy dữ liệu nến 1 giờ của cặp BTC/USDT trong 7 ngày

klines = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_1HOUR, "7 day ago UTC")

# Tạo DataFrame
df = pd.DataFrame(klines, columns=[
'timestamp', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'number_of_trades',
'taker_buy_base', 'taker_buy_quote', 'ignore'
])

# Chuyển định dạng timestamp
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)

# Chỉ giữ lại các cột cần thiết
df = df[['open', 'high', 'low', 'close', 'volume']].astype(float)

print(df.head())

📊 Hiển thị biểu đồ giá đơn giản

import matplotlib.pyplot as plt

df['close'].plot(figsize=(12,6), title='BTC/USDT - Close Price (1h)')
plt.xlabel('Time')
plt.ylabel('Price (USDT)')
plt.grid(True)
plt.show()

🎯 Gợi ý mở rộng

  • Tạo script theo dõi giá theo thời gian thực
  • Lưu dữ liệu vào CSV hoặc SQLite
  • Kết hợp với chiến lược giao dịch tự động (Python Bot)
  • Hiển thị dữ liệu bằng Dash/Streamlit

💡 Tổng kết

Hôm nay bạn đã biết cách:

✅ Kết nối với Binance
✅ Lấy dữ liệu giá theo khung thời gian
✅ Xử lý và hiển thị bằng pandas & matplotlib

Hẹn gặp bạn ở Ngày 40, nơi chúng ta sẽ học cách gửi tín hiệu đến Telegram hoặc Zalo để theo dõi thị trường tự động 🚀


🎥 Video minh họa

🐍 Ngày 38 - Python 365 ngày: Làm việc với thời gian (datetime)

· 2 min read

🎯 Mục tiêu

Tìm hiểu cách sử dụng mô-đun datetime trong Python để xử lý thời gian: ngày, giờ, tính toán khoảng cách giữa hai thời điểm, v.v.


📚 Kiến thức cần biết

Python cung cấp mô-đun datetime để làm việc với:

  • Ngày (date)
  • Thời gian (time)
  • Ngày giờ (datetime)
  • Khoảng thời gian (timedelta)

📌 Một số ví dụ quan trọng

📅 Lấy thời gian hiện tại

from datetime import datetime

now = datetime.now()
print("⏰ Thời gian hiện tại:", now)
print("📅 Ngày:", now.date())
print("🕒 Giờ:", now.time())

🗓️ Tạo một đối tượng datetime cụ thể

from datetime import datetime

new_year = datetime(2025, 1, 1)
print("🎉 Năm mới:", new_year)

➖ Tính khoảng cách giữa hai thời điểm

from datetime import datetime

today = datetime.now()
new_year = datetime(2025, 1, 1)

delta = new_year - today
print("⏳ Còn lại:", delta.days, "ngày")

🎯 Bài tập thực hành

Bài 1: Tính tuổi

Yêu cầu:
Nhập ngày sinh của bạn và in ra tuổi hiện tại.

Gợi ý:

  • Sử dụng input()datetime.strptime() để chuyển đổi ngày tháng nhập vào.
  • Tính hiệu giữa ngày hiện tại và ngày sinh.

Ví dụ kết quả:

from datetime import datetime, date

def tinh_tuoi(ngay_sinh_str):
ngay_sinh = datetime.strptime(ngay_sinh_str, "%d/%m/%Y").date()
hom_nay = date.today()
tuoi = hom_nay.year - ngay_sinh.year - ((hom_nay.month, hom_nay.day) < (ngay_sinh.month, ngay_sinh.day))
return tuoi

print("Tuổi của bạn là:", tinh_tuoi("10/10/2000"))

✅ Kết quả minh họa: Tuổi của bạn là: 24


Bài 2: Đếm ngược đến Tết

Yêu cầu:
Tính số ngày còn lại đến ngày Tết Nguyên Đán 2025 (29/01/2025).

Gợi ý:

  • Sử dụng datetime.strptime() để lấy ngày Tết.
  • Tính hiệu giữa ngày hiện tại và ngày Tết.

Ví dụ kết quả:

def dem_nguoc_tet(tet_str="29/01/2025"):
ngay_tet = datetime.strptime(tet_str, "%d/%m/%Y").date()
hom_nay = date.today()
so_ngay_con_lai = (ngay_tet - hom_nay).days
return so_ngay_con_lai

print("Số ngày còn lại đến Tết: ", dem_nguoc_tet())

✅ Kết quả minh họa: Số ngày còn lại đến Tết: -80 (Tức là Tết đã qua 80 ngày tính đến hôm nay)


🎥 Video minh họa

📅 Ngày 8 – SQL Server 365 ngày Chủ đề: GROUP BY – Nhóm dữ liệu và thống kê

· 2 min read

Chủ đề: GROUP BY – Nhóm dữ liệu và thống kê


✅ Mục tiêu học hôm nay

Sử dụng GROUP BY để nhóm các bản ghi theo một hoặc nhiều cột và kết hợp với hàm tổng hợp như COUNT, SUM, AVG, MAX, MIN.


📘 Câu lệnh mẫu

SELECT Department, COUNT(*) AS TotalEmployees
FROM Employees
GROUP BY Department;

📝 Giải thích:

  • Nhóm tất cả nhân viên theo Department
  • Đếm số nhân viên trong mỗi phòng ban bằng COUNT(*)

🔄 Ví dụ nâng cao

SELECT JobTitle, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY JobTitle;

📝 Ý nghĩa:

  • Tính lương trung bình của từng chức danh công việc (JobTitle)

🧪 Thực hành

Viết truy vấn SQL để:

  1. Đếm số nhân viên theo JobTitle
  2. Tính tổng lương của mỗi phòng ban (Department)
  3. Tìm lương cao nhất theo từng JobTitle

❓ Câu hỏi trắc nghiệm

Câu lệnh nào sau đây sử dụng GROUP BY đúng cú pháp?

A)

SELECT Department, COUNT(*)
FROM Employees

B)

SELECT Department, COUNT(*)
FROM Employees
GROUP BY Salary;

C)

SELECT Department, COUNT(*)
FROM Employees
GROUP BY Department;

D)

SELECT COUNT(*) FROM Employees GROUP BY;

Đáp án: C


🎯 Ngày 7 – SQL Server 365 ngày - ORDER BY – Sắp xếp kết quả truy vấn

· 2 min read

Chủ đề: ORDER BY – Sắp xếp kết quả truy vấn


✅ Mục tiêu học hôm nay

Học cách sử dụng ORDER BY để sắp xếp kết quả theo một hoặc nhiều cột, theo:

  • Tăng dần (ASC) – mặc định
  • Giảm dần (DESC)

📘 Câu lệnh mẫu

SELECT FirstName, LastName, HireDate
FROM Employees
ORDER BY HireDate ASC;

📝 Giải thích:

  • ORDER BY HireDate ASC sắp xếp theo thứ tự tăng dần ngày tuyển dụng.
  • ASC là mặc định, có thể bỏ qua.

🔄 Ví dụ nâng cao

SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName ASC;

📝 Ý nghĩa:

  • Sắp xếp theo Salary giảm dần (cao → thấp)
  • Nếu trùng lương, sắp tiếp theo LastName tăng dần (A → Z)

🧪 Thực hành

Viết truy vấn SQL để:

  1. Sắp xếp theo FirstName tăng dần
  2. Sắp xếp theo Salary giảm dần
  3. Sắp xếp theo HireDate từ mới nhất đến cũ nhất

❓ Câu hỏi trắc nghiệm

Kết quả của truy vấn sau sẽ được sắp xếp như thế nào?

SELECT * FROM Employees
ORDER BY LastName DESC;

A) Theo họ nhân viên từ A → Z
B) Theo họ nhân viên từ Z → A
C) Theo EmployeeID tăng dần
D) Không sắp xếp gì cả

Đáp án: B

🐍 Ngày 31 - Python hằng ngày 365 ngày - Quản lý công việc với CSV

· 2 min read

🧠 Mục tiêu

Học cách đọc, ghi và cập nhật file CSV để lưu danh sách công việc (To-do List).


📂 File CSV mẫu

Task,Status
Chao co,Pending

🧪 Code Python hoàn chỉnh

import csv

FILENAME = "tasks.csv"

# Đọc dữ liệu từ file CSV
def read_tasks():
tasks = []
try:
with open(FILENAME, mode='r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
tasks.append(row)
except FileNotFoundError:
print("⚠️ File chưa tồn tại. Tạo mới khi ghi.")
return tasks

# Ghi dữ liệu trở lại file CSV
def write_tasks(tasks):
with open(FILENAME, mode='w', newline='', encoding='utf-8') as file:
fieldnames = ['Task', 'Status']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(tasks)

# Hiển thị danh sách công việc
def view_tasks(tasks):
print("\n📋 DANH SÁCH CÔNG VIỆC:")
for idx, task in enumerate(tasks, 1):
print(f"{idx}. {task['Task']} - {task['Status']}")

# Thêm công việc mới
def add_task(tasks):
task_name = input("📝 Nhập tên công việc: ")
tasks.append({"Task": task_name, "Status": "Pending"})
write_tasks(tasks)
print("✅ Đã thêm thành công!")

# Menu
def main():
while True:
print("\n===== MENU TO-DO LIST =====")
print("1. Xem danh sách")
print("2. Thêm công việc")
print("3. Thoát")
choice = input("👉 Nhập lựa chọn: ")

tasks = read_tasks()

if choice == '1':
view_tasks(tasks)
elif choice == '2':
add_task(tasks)
elif choice == '3':
print("👋 Tạm biệt!")
break
else:
print("⚠️ Lựa chọn không hợp lệ.")

if __name__ == "__main__":
main()

💾 Kết quả đầu ra

Giả sử bạn đã thêm 2 task mới:

Task,Status
Chao co,Pending
Hoc lap trinh,Pending
Di choi,Pending

🎯 Ngày 7 – SQL Server 365 ngày - ORDER BY – Sắp xếp kết quả truy vấn

· 2 min read

Chủ đề: ORDER BY – Sắp xếp kết quả truy vấn


✅ Mục tiêu học hôm nay

Học cách sử dụng ORDER BY để sắp xếp kết quả theo một hoặc nhiều cột, theo:

  • Tăng dần (ASC) – mặc định
  • Giảm dần (DESC)

📘 Câu lệnh mẫu

SELECT FirstName, LastName, HireDate
FROM Employees
ORDER BY HireDate ASC;

📝 Giải thích:

  • ORDER BY HireDate ASC sắp xếp theo thứ tự tăng dần ngày tuyển dụng.
  • ASC là mặc định, có thể bỏ qua.

🔄 Ví dụ nâng cao

SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName ASC;

📝 Ý nghĩa:

  • Sắp xếp theo Salary giảm dần (cao → thấp)
  • Nếu trùng lương, sắp tiếp theo LastName tăng dần (A → Z)

🧪 Thực hành

Viết truy vấn SQL để:

  1. Sắp xếp theo FirstName tăng dần
  2. Sắp xếp theo Salary giảm dần
  3. Sắp xếp theo HireDate từ mới nhất đến cũ nhất

❓ Câu hỏi trắc nghiệm

Kết quả của truy vấn sau sẽ được sắp xếp như thế nào?

SELECT * FROM Employees
ORDER BY LastName DESC;

A) Theo họ nhân viên từ A → Z
B) Theo họ nhân viên từ Z → A
C) Theo EmployeeID tăng dần
D) Không sắp xếp gì cả

Đáp án: B

🐍 Ngày 30 - Python hằng ngày 365 ngày - Làm việc với File CSV trong Python

· 2 min read

📘 Python To-Do List App với CSV

📝 Mục tiêu

  • Quản lý danh sách công việc sử dụng Python và lưu trữ bằng file .csv
  • Cho phép người dùng xem, thêm và lưu công việc

📁 File CSV đầu vào (tasks.csv)

Task,Status
Post Fanpage,Done
Post Group,Pending

🔧 Mã nguồn Python đầy đủ

import csv
import os

CSV_FILE = "todo_tasks.csv"

def load_tasks():
tasks = []
if os.path.exists(CSV_FILE):
with open(CSV_FILE, newline='', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
status = row["Status"].strip().lower()
tasks.append({
"Task": row["Task"],
"completed": status in ["done", "completed", "true"]
})
return tasks

def save_tasks(tasks):
with open(CSV_FILE, "w", newline='', encoding='utf-8') as csvfile:
fieldnames = ["Task", "Status"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for task in tasks:
status = "Done" if task["completed"] else "Pending"
writer.writerow({"Task": task["Task"], "Status": status})

def show_tasks(tasks):
print("\n📋 Danh sách công việc:")
for idx, task in enumerate(tasks, 1):
status = "✅" if task["completed"] else "⏳"
print(f"{idx}. {task['Task']} {status}")

def add_task(tasks):
new_task = input("🔹 Nhập tên công việc mới: ")
tasks.append({"Task": new_task, "completed": False})
print("✅ Đã thêm công việc mới.")

def main():
tasks = load_tasks()

while True:
print("\n----- MENU -----")
print("1. Xem danh sách công việc")
print("2. Thêm công việc mới")
print("3. Thoát")
choice = input("Chọn một tùy chọn: ")

if choice == "1":
show_tasks(tasks)
elif choice == "2":
add_task(tasks)
save_tasks(tasks)
elif choice == "3":
print("👋 Tạm biệt!")
break
else:
print("❌ Lựa chọn không hợp lệ. Vui lòng thử lại.")

if __name__ == "__main__":
main()

💡 Mở rộng đề xuất

  • Đánh dấu hoàn thành công việc
  • Xóa công việc
  • Sắp xếp danh sách theo trạng thái hoặc thời gian tạo

🐍 Ngày 29- Python hằng ngày 365 ngày - Lưu và Tải Dữ Liệu với JSON – Quản lý To-Do List với json

· 3 min read

Trong ngày này, chúc ta sẽ nâng cấp ứng dụng To-Do List để lưu công việc vào file data.jsontự động tải lại danh sách khi mở ứng dụng. Đây là bước đầu giúp chương trình có tính lưu trữ lâu dài.


🧠 Mục tiêu:

  • Biết sử dụng json để lưu và tải dữ liệu.
  • Tự động lưu danh sách sau mỗi thay đổi.
  • Tự động tải dữ liệu khi khởi động chương trình.

✍️ Code todo_day29.py

import json
import os

# --- CẤU TRÚC Dữ LIỆU ---
tasks = []

# --- FILE LƯU TRỨ ---
DATA_FILE = "data.json"

# --- TẢI Dữ LIỆU ---
def load_tasks():
global tasks
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r", encoding="utf-8") as f:
tasks = json.load(f)
else:
tasks = []

# --- LƯU Dữ LIỆU ---
def save_tasks():
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(tasks, f, indent=4, ensure_ascii=False)

# --- CÁC HÀM CHỨC NĂNG ---
def display_menu():
print("\n----- MENU TO-DO LIST -----")
print("1. Thêm công việc mới")
print("2. Xem danh sách công việc")
print("3. Đánh dấu hoàn thành")
print("4. Xóa công việc")
print("5. Thoát")
print("---------------------------")

def addTask(tasks_list):
task_name = input("Nhập tên công việc: ")
tasks_list.append({"name": task_name, "done": False})
save_tasks()
print("✅ Đã thêm công việc.")

def viewTasks(tasks_list):
if not tasks_list:
print("📬 Không có công việc nào.")
return
print("\n📋 DANH SÁCH CÔNG VIỆC:")
for i, task in enumerate(tasks_list, 1):
status = "✅" if task["done"] else "❌"
print(f"{i}. [{status}] {task['name']}")

def markComplete(tasks_list):
viewTasks(tasks_list)
try:
idx = int(input("Nhập số công việc đã hoàn thành: "))
tasks_list[idx - 1]["done"] = True
save_tasks()
print("🎉 Đã đánh dấu hoàn thành.")
except:
print("⚠️ Số không hợp lệ.")

def deleteTask(tasks_list):
viewTasks(tasks_list)
try:
idx_del = int(input("Nhập số công việc muốn xóa: "))
removed = tasks_list.pop(idx_del - 1)
save_tasks()
print(f"🗑️ Đã xóa: {removed['name']}")
except:
print("⚠️ Không hợp lệ.")

# --- CHẠY CHƯƠNG TRÌNH ---
def main():
load_tasks()
while True:
display_menu()
choice = input("Chọn (1-5): ")

if choice == '1':
addTask(tasks)
elif choice == '2':
viewTasks(tasks)
elif choice == '3':
markComplete(tasks)
elif choice == '4':
deleteTask(tasks)
elif choice == '5':
print("👋 Hẹn gặp lại!")
break
else:
print("❌ Lựa chọn không hợp lệ!")

if __name__ == "__main__":
main()

✅ Kết quả mong đợi

  • Bạn có thể thêm, xem, đánh dấu hoàn thành hoặc xóa công việc.
  • Khi thoát và mở lại chương trình, danh sách công việc vẫn được giữ nguyên nhờ file data.json.

💪 Thử thách:

  1. Hiển thị tổng số công việc và số đã hoàn thành.
  2. Thêm ngày tạo cho mỗi công việc.
  3. Tạo file backup_data.json trước khi thóat.

Chúc bạn quản lý công việc ngày một tốt hơn! 🌟

🧠 Ngày 28 – Python Hằng ngày 365 ngày - Hoàn thiện To-Do List App (Phần 2)

· 2 min read

✨ Mục tiêu

  • Hoàn thiện các chức năng trong app:
    • Thêm công việc mới
    • Xem danh sách công việc
    • Đánh dấu đã hoàn thành
    • Xóa công việc

1. addTask(tasks_list) - Thêm công việc mới

def addTask(tasks_list):
print("\n>> Nhập công việc mới:")
title = input("Tên công việc: ")
task = {
"title": title,
"completed": False
}
tasks_list.append(task)
print("✅ Đã thêm công việc.")

2. viewTasks(tasks_list) - Xem danh sách công việc

def viewTasks(tasks_list):
if not tasks_list:
print("📭 Danh sách công việc trống.")
return

print("\n📋 Danh sách công việc:")
for idx, task in enumerate(tasks_list, start=1):
status = "✅" if task["completed"] else "⏳"
print(f"{idx}. {task['title']} [{status}]")

3. markComplete(tasks_list) - Đánh dấu hoàn thành

def markComplete(tasks_list):
if not tasks_list:
print("❌ Không có công việc nào.")
return

viewTasks(tasks_list)
try:
idx = int(input("Nhập số thứ tự công việc cần đánh dấu hoàn thành: "))
if 1 <= idx <= len(tasks_list):
tasks_list[idx-1]["completed"] = True
print("✅ Công việc đã được đánh dấu hoàn thành.")
else:
print("❌ Số không hợp lệ.")
except ValueError:
print("⚠️ Vui lòng nhập một số.")

4. deleteTask(tasks_list) - Xóa công việc

def deleteTask(tasks_list):
if not tasks_list:
print("📭 Không có gì để xóa.")
return

viewTasks(tasks_list)
try:
idx = int(input("Nhập số thứ tự công việc cần xóa: "))
if 1 <= idx <= len(tasks_list):
removed = tasks_list.pop(idx-1)
print(f"🗑️ Đã xóa công việc: {removed['title']}")
else:
print("❌ Số không hợp lệ.")
except ValueError:
print("⚠️ Vui lòng nhập một số.")

📖 Gợi ý tiếp theo

  • Ngày 29: Lưu trữ danh sách công việc vào file .json
  • Ngày 30: Đọa luồng menu bằng các module hoặc giao diện

✨ Bạn đã hoàn thành một app console Python có tính tương tác cơ bản! Hãy lưu lại và chia sẻ với bạn bè nếu bạn tự hào nhé! ✨