📌Demo dự đoán tăng/giảm phiên tiếp theo🧾

Mình sẽ làm demo dự đoán tăng/giảm phiên tiếp theo dùng OHLC 5 phiên gần nhất với mô hình rất nhẹ (Logistic Regression).

Lưu ý: với 5 mẫu thì model sẽ rất nhạt—chỉ phục vụ minh hoạ. Để thật sự dùng ML phải có ≥ vài trăm mẫu 📈


🧾 Dữ liệu mẫu OHLC 5 phiên

Giả sử chúng ta có dữ liệu như sau:

NgàyOpenHighLowClose
D178.580.077.879.3
D279.381.278.680.1
D380.181.079.279.9
D479.981.579.881.3
D581.382.080.781.8

Anh muốn dự đoán tăng (1) hay giảm (0) cho phiên tiếp theo D6.


📌 Cách làm

❗ Tạo các features từ OHLC:

🎯 Ta có thể tạo:

  • Return = (Close − Open) / Open

  • High-Low range

  • %B (close khác so với high/low)

Với 5 dòng dữ liệu ta sẽ có 5 feature, và label là tăng/giảm của phiên đó (+1 nếu close > trước đó, else 0).


🧠 Model: Logistic Regression

Đơn giản, nhẹ, phù hợp bài binary classification.


🧪 Code Python (demo)

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression

# --- 1) Dữ liệu OHLC 5 phiên ---
data = [
    {"open": 78.5, "high": 80.0, "low": 77.8, "close": 79.3},
    {"open": 79.3, "high": 81.2, "low": 78.6, "close": 80.1},
    {"open": 80.1, "high": 81.0, "low": 79.2, "close": 79.9},
    {"open": 79.9, "high": 81.5, "low": 79.8, "close": 81.3},
    {"open": 81.3, "high": 82.0, "low": 80.7, "close": 81.8},
]
df = pd.DataFrame(data)

# --- 2) Tạo feature ---
df["return"] = (df["close"] - df["open"]) / df["open"]
df["range"] = (df["high"] - df["low"]) / df["open"]

# --- 3) Tạo label tăng/giảm (phiên tiếp theo) ---
df["label"] = 0
for i in range(len(df)-1):
    df.at[i, "label"] = 1 if df.at[i+1, "close"] > df.at[i, "close"] else 0

# Bỏ dòng cuối vì không có phiên tiếp
df = df[:-1]

# --- 4) Chuẩn bị dữ liệu ---
X = df[["return", "range"]].values
y = df["label"].values

# --- 5) Train model ---
model = LogisticRegression()
model.fit(X, y)

# --- 6) Tạo feature cho phiên D6 giả định ---
# Giả sử D6 OHLC:
ohcl_D6 = {"open": 81.8, "high": 82.3, "low": 81.2, "close": 0}
return_D6 = (ohcl_D6["high"] - ohcl_D6["open"]) / ohcl_D6["open"]
range_D6 = (ohcl_D6["high"] - ohcl_D6["low"]) / ohcl_D6["open"]
X_D6 = np.array([[return_D6, range_D6]])

# Dự đoán ↑/↓
pred = model.predict(X_D6)[0]
print("DỰ ĐOÁN phiên tiếp theo:", "TĂNG 📈" if pred == 1 else "GIẢM 📉")

📊 Giải thích nhanh

StepÝ nghĩa
Tạo featuresChuyển giá thành số để máy học
labelNếu close phiên sau > close hiện tại → 1 (tăng)
LogisticRegressionDự đoán rời rạc 0/1
D6 featureCoi phiên mới có pattern như thế nào

⚠️ Giới hạn

✅ Demo minh hoạ nhanh
❌ Với 5 phiên không đủ dữ liệu thật
❌ Model sẽ quá khớp / quá yếu
✔ Muốn thật: cần ≥ vài trăm mẫu, thêm chỉ báo MA, RSI…


📈 Muốn nâng cấp?

Mình có thể làm tiếp:

🔹 Dùng MA/RSI thay vì chỉ OHLC
🔹 LSTM (DL) dự đoán chuỗi time-series
🔹 Backtest hiệu quả dự đoán với dữ liệu VNM 1 năm


✨🤖 Made by AI – Coded with Clarity & Curiosity ⚙️📊✨

Nhận xét

Bài đăng phổ biến từ blog này

🌈 Tự Động Highlight Code Trong Blogger

🧭CRUD CHUẨN LARAVEL

🚀01 giờ học cách sử dụng Developer Console