| Backend FastAPI Cho Bot Auto Trading

Được viết bởi thanhdt vào ngày 08/12/2025 lúc 13:27 | 302 lượt xem

Xây Dựng Backend FastAPI Cho Bot Auto Trading

Hệ thống giao dịch tự động (Auto Trading Bot) đòi hỏi tính ổn định, tốc độ cao và khả năng mở rộng. FastAPI – nhờ vào tốc độ xử lý vượt trội và mô hình async – trở thành lựa chọn hoàn hảo để xây dựng nền tảng backend cho bot giao dịch hiện đại trên các sàn như Binance, Bitget, Bybit hoặc OKX.

Dưới đây là hướng dẫn đầy đủ về kiến trúc, thiết kế API, xử lý tín hiệu và triển khai thực tế.


1. Kiến trúc tổng thể Backend Bot Trading

Hệ thống có thể chia thành các khối sau:

  1. Webhook Receiver (nhận tín hiệu TradingView)
  2. Strategy Engine (xử lý chiến lược)
  3. Exchange API Handler (Bitget, Binance, Bybit)
  4. Order Management
  5. Monitor – Logging – Alert
  6. Database Layer (MongoDB, PostgreSQL)
  7. Dashboard Admin
  8. Background Tasks Scheduler

Hình minh họa gợi ý 1 – Kiến trúc tổng thể Bot Auto Trading

Một sơ đồ dạng block với các module:

  • Người dùng
  • TradingView
  • FastAPI Backend
  • Strategy Engine
  • Database
  • Exchange API
  • Dashboard Monitoring

2. Khởi tạo dự án FastAPI

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

pip install fastapi uvicorn ccxt python-dotenv pymongo

Cấu trúc thư mục chuẩn

backend/
    main.py
    config/
        settings.py
    services/
        exchange_service.py
        strategy_service.py
    routes/
        webhook.py
    database/
        mongo.py
    utils/
        logger.py

Hình minh họa gợi ý 2 – Cấu trúc thư mục Backend FastAPI

Một hình folder tree trực quan, có highlight các thư mục chính như:
routes, services, config, database


3. Làm Webhook để nhận tín hiệu TradingView

TradingView gửi tín hiệu thông qua Webhook. Đây là nơi để bot tiếp nhận lệnh Buy/Sell.

Tạo Webhook endpoint

from fastapi import APIRouter, Request

router = APIRouter()

@router.post("/webhook")
async def webhook_handler(request: Request):
    data = await request.json()
    print("Received:", data)
    return {"status": "ok"}

Hình minh họa gợi ý 3 – TradingView gửi tín hiệu qua Webhook

Hình gồm:
TradingView chart → Alerts → Webhook URL → API FastAPI


4. Kết nối API Sàn giao dịch bằng CCXT

Đây là bước quan trọng để bot có thể thực hiện lệnh tự động.

Ví dụ kết nối Bitget

import ccxt

exchange = ccxt.bitget({
    "apiKey": "YOUR_KEY",
    "secret": "YOUR_SECRET",
    "password": "YOUR_PASSPHRASE"
})

Hàm đặt lệnh Market

def open_order(symbol, side, amount):
    order = exchange.create_order(
        symbol=symbol,
        type="market",
        side=side,
        amount=amount
    )
    return order

Hình minh họa gợi ý 4 – Sơ đồ API Flow của sàn giao dịch

Flow:
Bot → Exchange API → Khớp lệnh → Trả về Order ID → Lưu DB


5. Xử lý chiến lược giao dịch (Strategy Engine)

Bot có thể chạy theo:

  • Price Action
  • Moving Average Cross
  • RSI / MACD
  • SMC
  • Turtle
  • Volume Breakout
  • AI/ML predictions

Ví dụ chiến lược đơn giản:

async def execute_strategy(data):
    symbol = data["symbol"]
    signal = data["signal"]

    if signal == "BUY":
        return open_order(symbol, "buy", 0.01)

    if signal == "SELL":
        return open_order(symbol, "sell", 0.01)

Hình minh họa gợi ý 5 – Trading bot logic

Sơ đồ Decision Tree:
Signal → Check Conditions → Execute Buy/Sell → Log Order


6. Lưu lịch sử lệnh và trạng thái vào Database

Ví dụ dùng MongoDB:

from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
db = client.auto_trading

def save_order(order):
    db.orders.insert_one(order)

Hình minh họa gợi ý 6 – Database model của Bot

Bảng orders gồm:
orderId, symbol, side, amount, entryPrice, tp, sl, status


7. Background Tasks: Kiểm tra TP/SL tự động

Bot cần liên tục kiểm tra giá để tự đóng lệnh.

Bạn có thể dùng:

  • FastAPI Background Tasks
  • APScheduler
  • Celery

Ví dụ:

from fastapi import BackgroundTasks

@app.post("/webhook")
async def webhook_handler(request: Request, background_tasks: BackgroundTasks):
    data = await request.json()
    order = await execute_strategy(data)
    background_tasks.add_task(check_tp_sl, order)
    return order

Hình minh họa gợi ý 7 – Price Monitoring Engine

Giá thị trường → Bot Check → Hit TP/SL → Đóng lệnh


8. Bảo mật Backend Bot Trading

  1. Bảo vệ Webhook bằng secret token
  2. Verify TradingView signature
  3. Chỉ cho phép IP whitelist
  4. Tách API đặt lệnh khỏi API public
  5. Dùng HTTPS để tránh sniffing
  6. Giới hạn tốc độ request (Rate limit)
  7. Mã hóa API key (dotenv)

Hình minh họa gợi ý 8 – Security Diagram

Các lớp bảo vệ: Firewall → API Gateway → Signature → Backend


9. Triển khai Backend FastAPI lên server

Bạn có thể triển khai qua:

  • Docker
  • DigitalOcean
  • AWS EC2
  • Hostinger VPS
  • Google Cloud Run

Lệnh chạy:

uvicorn main:app --host 0.0.0.0 --port 8000

Hình minh họa gợi ý 9 – Deployment Pipeline
Local development → Docker build → Deploy VPS → Reverse Proxy → Bot Running


10. Dashboard giám sát và quản lý bot

Một Dashboard chuyên nghiệp có các mục:

  • Trạng thái bot
  • Lệnh đang mở
  • Lịch sử giao dịch
  • Equity curve
  • Risk management
  • Cấu hình TPSL
  • Cài đặt chiến lược
  • Tắt/Mở bot

Hình minh họa gợi ý 10 – Dashboard quản lý bot

Một layout gồm:

  • Sidebar
  • Chart PnL
  • Bảng Orders
  • Nút Start/Stop bot

Kết luận

FastAPI mang lại tốc độ cao, cú pháp rõ ràng và khả năng mở rộng tuyệt vời cho backend bot auto trading. Với khả năng xử lý async, bảo mật tốt và tích hợp mạnh mẽ cùng Python ecosystem, đây là giải pháp phù hợp để xây dựng hệ thống giao dịch tự động từ đơn giản đến chuyên nghiệp.

Backend FastAPI kết hợp với TradingView Webhook, CCXT Exchange API và một kiến trúc database hợp lý sẽ tạo nên một nền tảng Auto Trading hoàn chỉnh, ổn định và có khả năng vận hành 24/7.

| Hành trình Phân Tích Token & Định Giá Crypto Bằng AI

Được viết bởi thanhdt vào ngày 04/12/2025 lúc 10:35 | 291 lượt xem

Phân Tích Token & Định Giá Crypto Bằng AI

Xem chi tiết hành trình tại đây: https://hndatadaotao.web.app/phan-tich-token-dinh-gia-crypto-bang-ai

Hành trình mỗi sáng thức dậy: không phải mở biểu đồ, không phải xem tin tức, mà là mở code và chạy mô hình dự đoán!

Tại sao cần AI để định giá crypto?

Crypto không giống như cổ phiếu, không thể áp dụng các chỉ số truyền thống như P/E, P/B… Giá token bị ảnh hưởng bởi:

Dữ liệu on-chain
Thanh khoản & volume
Dòng tiền vào/ra
Cộng đồng & social sentiment
Tokenomics
Market structure
Tin tức & sự kiện nóng

Chính vì vậy, AI là công cụ tối ưu để gom tất cả dữ liệu này, xử lý, lọc nhiễu và đưa ra dự đoán xu hướng chính xác.

Xem chi tiết hành trình tại đây: https://hndatadaotao.web.app/phan-tich-token-dinh-gia-crypto-bang-ai

#Crypto #AI #PhanTichToken #DinhGiaCrypto

https://hndatadaotao.web.app/phan-tich-token-dinh-gia-crypto-bang-ai

| Pandas DataFrame trong Bot Auto Trading

Được viết bởi thanhdt vào ngày 03/12/2025 lúc 07:25 | 328 lượt xem

Pandas DataFrame và vai trò quan trọng trong Bot Auto Trading

https://miro.medium.com/v2/resize%3Afit%3A1358/format%3Awebp/1%2Apo-aQt5CvnTupGcJwql1Fw.png
https://editor.analyticsvidhya.com/uploads/27128newplot.png

6

Trong thế giới giao dịch tự động (Auto Trading), dữ liệu là yếu tố cốt lõi quyết định hiệu quả chiến lược. Một Bot Auto Trading chỉ thông minh và chính xác khi dữ liệu đầu vào của nó sạch, có cấu trúc và có thể xử lý nhanh chóng theo thời gian thực. Đây chính là lý do Pandas DataFrame trở thành công cụ quan trọng nhất khi xây dựng bot giao dịch bằng Python.

Pandas không chỉ là một thư viện phân tích dữ liệu phổ biến mà còn là nền tảng để hình thành toàn bộ logic của bot, bao gồm xử lý nến, tính toán chỉ báo, xác định tín hiệu Buy/Sell, backtest chiến lược và kiểm tra hiệu suất.


1. DataFrame là gì?

DataFrame là cấu trúc dữ liệu dạng bảng của Pandas, gồm các hàng và cột tương tự Excel nhưng mạnh mẽ hơn nhiều lần. Nó cho phép:

  • Lưu trữ dữ liệu giá theo thời gian (OHLCV)
  • Tính toán nhanh các chỉ báo như MA, RSI, MACD
  • Tạo các cột tín hiệu Buy/Sell
  • Xử lý dữ liệu lớn với tốc độ cao
  • Kết hợp dữ liệu nhiều nguồn (API, CSV, Webhook)

Trong Auto Trading, DataFrame chính là “bộ não xử lý” cho toàn bộ chiến lược.


2. Tại sao DataFrame quan trọng với Bot Auto Trading?

2.1 Xử lý dữ liệu nến (OHLC) chuẩn xác

Mọi chiến lược giao dịch đều bắt đầu từ dữ liệu nến. Khi bot tải dữ liệu từ Binance, Bitget hoặc MT5, dữ liệu này được đưa vào DataFrame để chuẩn hóa, làm sạch và tính toán.

Ví dụ cột dữ liệu chuẩn:

timestamp | open | high | low | close | volume

DataFrame giúp đảm bảo dữ liệu luôn ở đúng định dạng và không bị lỗi trước khi tính chỉ báo.


2.2 Tính toán chỉ báo kỹ thuật

Những chỉ báo như Moving Average, RSI, ATR, MACD đều được tính dựa trên DataFrame.
Ví dụ tính MA20:

df["MA20"] = df["close"].rolling(window=20).mean()

DataFrame giúp tính toán nhanh, chính xác và dễ dàng mở rộng.


2.3 Tạo tín hiệu Buy/Sell

Dựa vào giá và chỉ báo, bot tạo ra các cột tín hiệu:

df["buy_signal"] = (df["close"] > df["MA20"]) & (df["MA20"].shift(1) > df["MA20"].shift(2))
df["sell_signal"] = (df["close"] < df["MA20"])

Những tín hiệu này là điều kiện để bot mở và đóng lệnh giao dịch.


2.4 Dùng DataFrame để Backtest chiến lược

Backtest là bước quan trọng nhất trước khi triển khai bot thực chiến.
DataFrame cho phép mô phỏng:

  • Entry và exit điểm nào
  • Profit từng giao dịch
  • Drawdown
  • Winrate
  • Tốc độ khớp lệnh

Việc đánh giá chiến lược hoàn toàn dựa trên DataFrame.


2.5 Kết hợp dữ liệu realtime cho bot chạy 24/7

Khi bot nhận dữ liệu nến mới từ API, DataFrame được cập nhật liên tục:

df = df.append(new_candle, ignore_index=True)

Sau đó bot tính toán lại các tín hiệu và quyết định có vào lệnh hay không.


3. Quy trình hoạt động Bot Auto Trading sử dụng DataFrame

https://miro.medium.com/1%2AkPMKD2UISQHd_nlSdpHw7A.png
https://www.biz4group.com/blog/images/how-to-create-an-ai-trading-bot/step-by-step-guide-how-to-create-an-ai-trading-bot.webp
https://cdn.activestate.com/wp-content/uploads/2020/05/Trading_hero.jpg

6

Quy trình đầy đủ gồm 6 bước:

  1. Lấy dữ liệu từ API (Binance, Bitget, MT5)
  2. Đưa dữ liệu vào DataFrame và chuẩn hóa
  3. Tính chỉ báo kỹ thuật
  4. Xác định tín hiệu Buy/Sell
  5. Gửi lệnh qua API
  6. Lưu lịch sử giao dịch vào DataFrame để theo dõi hiệu suất

DataFrame tham gia ở tất cả các bước, từ xử lý dữ liệu đến ra quyết định giao dịch.


4. Ví dụ DataFrame trong bot giao dịch

Dưới đây là ví dụ DataFrame sau khi bot tính xong chỉ báo và tín hiệu:

time        close   MA20    RSI    buy  sell
10:15       102.3   101.8   62     1     0
10:16       103.0   102.0   65     0     0
10:17       101.5   102.1   48     0     1

Mỗi dòng thể hiện một thời điểm bot đánh giá thị trường và đưa ra hành động.


5. Kết luận

Pandas DataFrame không chỉ là công cụ xử lý dữ liệu; nó là nền tảng để xây dựng toàn bộ hệ thống Auto Trading.
Không có DataFrame, bot sẽ:

  • Không thể tính toán chỉ báo
  • Không thể xác định tín hiệu giao dịch
  • Không thể backtest chính xác
  • Không thể chạy ổn định theo thời gian thực

Hiểu và làm chủ DataFrame nghĩa là bạn đã nắm 50% tư duy xây dựng bot giao dịch chuyên nghiệp bằng Python.

| Chia sẻ PostgreSQL Database qua mạng LAN

Được viết bởi thanhdt vào ngày 02/12/2025 lúc 07:36 | 224 lượt xem

Chia sẻ PostgreSQL Database qua mạng LAN

Khi làm việc trong nhóm hoặc trong môi trường nội bộ doanh nghiệp, bạn thường cần cho nhiều máy trong mạng LAN cùng truy cập vào một PostgreSQL server. Bài viết này hướng dẫn cách cấu hình PostgreSQL để các máy khác trong LAN có thể kết nối an toàn và ổn định.


1. Kiểm tra địa chỉ IP của máy cài PostgreSQL

Bạn cần biết IP nội bộ của máy chủ PostgreSQL để các máy khác trong LAN kết nối.

https://www.lifewire.com/thmb/J345qu1vMBa30IVmwAsWOWVn4po%3D/1500x0/filters%3Ano_upscale%28%29%3Amax_bytes%28150000%29%3Astrip_icc%28%29/2019-03-19_16h09_50-5c914cb946e0fb0001770166.png
https://support.intermedia.com/euf/assets/images/answers/osvc/27175/27175_2.png

Mở Command Prompt → nhập:

ipconfig

Tìm mục IPv4 Address. Ví dụ:

IPv4 Address. . . . . . . . . . . : 192.168.1.10

Đây sẽ là địa chỉ để các máy khác truy cập.


2. Chỉnh sửa file postgresql.conf để mở cổng LAN

File cấu hình nằm tại:

  • Windows: C:\Program Files\PostgreSQL\<version>\data\postgresql.conf
  • Ubuntu: /etc/postgresql/<version>/main/postgresql.conf

Mở file và tìm dòng:

#listen_addresses = 'localhost'

Sửa thành:

listen_addresses = '*'

Hoặc giới hạn trong LAN, ví dụ:

listen_addresses = '192.168.1.10'
https://databasefaqs.com/wp-content/uploads/2021/09/Postgresql-listen_addresses-address-all.png
https://databasefaqs.com/wp-content/uploads/2021/09/Postgresql-listen_addresses-example-1.png

3. Chỉnh sửa file pg_hba.conf để cho phép máy khác kết nối

File này nằm cùng thư mục với postgresql.conf.

Thêm dòng sau để cho phép toàn bộ LAN truy cập:

host    all     all     192.168.1.0/24     md5

Giải thích:

  • 192.168.1.0/24 là toàn bộ dải LAN.
  • Có thể thay đổi theo dải IP bạn sử dụng.
  • md5 là yêu cầu xác thực bằng mật khẩu.
https://help.theatremanager.com/sites/default/files/images/PCIinstall/PostgresEditing4Mac.jpg
https://i.sstatic.net/AEg7I.png

4. Mở cổng tường lửa (Firewall)

PostgreSQL mặc định chạy port 5432, cần mở để máy khác truy cập.

Trên Windows

Command Prompt (Run as Administrator):

netsh advfirewall firewall add rule name="PostgreSQL" dir=in action=allow protocol=TCP localport=5432

Trên Ubuntu

sudo ufw allow 5432/tcp
https://greenwebpage.com/community/wp-content/uploads/2025/02/word-image-13516-8.png

5. Khởi động lại PostgreSQL

Windows:

services.msc

Chọn PostgreSQL → Restart.

Ubuntu:

sudo systemctl restart postgresql

6. Kết nối từ máy khác trong LAN

Từ máy client, mở DBeaver / PgAdmin và kết nối:

  • Host: 192.168.1.10
  • Port: 5432
  • User: user PostgreSQL của bạn
  • Database: tên database
https://chemicloud.com/kb/wp-content/uploads/2021/04/115.png
https://www.tecmint.com/wp-content/uploads/2022/03/Create-SSH-Tunneling-in-pgadmin4.png

7. Lưu ý bảo mật

  • Không mở toàn mạng Internet, chỉ LAN.
  • Sử dụng mật khẩu mạnh.
  • Có thể cấu hình SSL nếu muốn kết nối an toàn hơn.

8. Tóm tắt nhanh

BướcNội dung
1Lấy IP LAN của server (ipconfig / ifconfig)
2Sửa postgresql.conflisten_addresses='*'
3Sửa pg_hba.conf → cho phép LAN 192.168.1.0/24
4Mở firewall port 5432
5Restart PostgreSQL
6Client kết nối qua IP LAN

| Ngày 6: Sử dụng các toán tử logic (AND, OR, NOT) trong SQL Server

Được viết bởi thanhdt vào ngày 02/12/2025 lúc 07:30 | 161 lượt xem

Ngày 6: Sử dụng các toán tử logic (AND, OR, NOT) trong SQL Server

Mục tiêu buổi học:

  • Hiểu cách sử dụng các toán tử logic trong điều kiện WHERE.
  • Kết hợp nhiều điều kiện với AND, OR, NOT.
  • Tránh những lỗi phổ biến khi dùng toán tử logic.

1. Giới thiệu toán tử logic

Khi viết truy vấn SQL, chúng ta thường cần lọc dữ liệu theo nhiều điều kiện. SQL Server cung cấp 3 toán tử logic quan trọng:

Toán tửÝ nghĩaVí dụ
ANDChỉ chọn các dòng thỏa mãn tất cả điều kiệnChọn nhân viên có lương > 5000  chức vụ là “Manager”
ORChọn các dòng thỏa mãn ít nhất một điều kiệnChọn nhân viên có lương > 5000 hoặc có chức vụ là “Manager”
NOTLọc bỏ những dòng thỏa mãn điều kiệnChọn tất cả nhân viên ngoại trừ những người có chức vụ là “Intern”

2. Ví dụ minh họa

🔹 Sử dụng AND

Giả sử bạn có bảng Employees với các cột EmployeeID, FirstName, Salary, JobTitle.

Bạn muốn tìm những nhân viên có lương trên 5000 và giữ chức vụ Manager:

SELECT * FROM Employees
WHERE Salary > 5000 AND JobTitle = 'Manager';

Giải thích: Câu lệnh trên chỉ trả về các nhân viên có cả hai điều kiện đúng.

Sử dụng O​R​ 

Bây giờ, bạn muốn tìm những nhân viên có lương trên 5000 hoặc giữ chức vụ Manager:

SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager';

Giải thích: Chỉ cần một trong hai điều kiện đúng là bản ghi sẽ được chọn.

Sử dụng NOT 

Giả sử bạn muốn tìm tất cả nhân viên ngoại trừ những người có chức vụ “Intern”:

SELECT * FROM Employees
WHERE NOT JobTitle = 'Intern';

Giải thích: SQL Server sẽ lọc tất cả các bản ghi ngoại trừ những người có JobTitle là “Intern”.

Kết hợp AND, OR, NOT Bạn có thể kết hợp nhiều toán tử logic trong cùng một câu truy vấn. Ví dụ: Tìm những nhân viên có lương trên 5000 hoặc là Manager, nhưng không phải là Intern:

SELECT * FROM Employees
WHERE (Salary > 5000 OR JobTitle = 'Manager') AND NOT JobTitle = 'Intern';

Lưu ý: Dùng dấu ngoặc tròn ()` để kiểm soát thứ tự ưu tiên của điều kiện.

3. Những lỗi thường gặp khi sử dụng toán tử logic Quên dấu ngoặc làm thay đổi thứ tự ưu tiên

SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager' AND NOT JobTitle = 'Intern';

Sai: SQL sẽ ưu tiên thực hiện AND trước OR, có thể gây sai kết quả.

Sửa đúng: Dùng dấu ngoặc để đảm bảo điều kiện chạy đúng.

4. Bài tập thực hành 

Tìm nhân viên có lương trên 7000 và làm ở bộ phận “IT”.

Tìm nhân viên có chức vụ là “Sales” hoặc có lương trên 6000.

Tìm tất cả nhân viên ngoại trừ những người có chức vụ “HR”.

Gợi ý đáp án:

-- Bài 1
SELECT * FROM Employees
WHERE Salary > 7000 AND Department = 'IT';

-- Bài 2
SELECT * FROM Employees
WHERE JobTitle = 'Sales' OR Salary > 6000;

-- Bài 3
SELECT * FROM Employees
WHERE NOT JobTitle = 'HR';

Chúc bạn học tốt! Ngày mai, chúng ta sẽ học cách sắp xếp dữ liệu với ORDER BY. Hẹn gặp lại ở Ngày 7 nhé! 🎯

| Ngày 35 – Python hằng ngày 365 ngày – Tạo và ghi file

Được viết bởi thanhdt vào ngày 02/12/2025 lúc 00:01 | 179 lượt xem

🐍 Ngày 35 – Python hằng ngày 365 ngày – Tạo và ghi file

🎯 Mục tiêu

Học cách tạo, ghi và đọc file văn bản (.txt) trong Python.

🧠 Kiến thức chính

  • Dùng open(“filename”, “mode”) để mở file:
    • “w”: ghi mới (xoá nội dung cũ nếu có)
    • “a”: ghi tiếp vào cuối file
    • “r”: chỉ đọc
  • Nên dùng with open(…) để đảm bảo đóng file tự động.

📦 Ví dụ: Ghi và đọc file

# Ghi nội dung vào file
with open("demo.txt", "w", encoding="utf-8") as f:
    f.write("Xin chào Python!\n")
    f.write("Hôm nay là ngày 35\n")

# Đọc lại nội dung file
with open("demo.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

📂 Sau khi chạy, bạn sẽ thấy file demo.txt trong thư mục hiện tại.

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

Bài 1: Tạo file note.txt và ghi 3 dòng bất kỳ

Bài 2: Ghi danh sách vào file

lines = ["Dòng 1", "Dòng 2", "Dòng 3"]
  • Ghi từng dòng vào file lines.txt (mỗi phần tử 1 dòng)
  • Đọc lại nội dung và in ra màn hình.

💡 Gợi ý

  • Dùng vòng lặp for để ghi nhiều dòng.
  • Dùng f.write(line + “\n”) để đảm bảo mỗi dòng cách dòng.

📌 Ghi chú

  • File sẽ nằm cùng thư mục với file Python nếu không chỉ định đường dẫn cụ thể.
  • Dùng os.path.exists() để kiểm tra file có tồn tại không trước khi đọc.

🚀 Bắt đầu với Python

Bạn có thể mở bài học này trên Google Colab để chạy trực tiếp:

📺 Ngày 35 – Tạo và ghi file trong Python

Trong video này, bạn sẽ học cách tạo và ghi file trong Python bằng các chế độ "w" và "a". Một kỹ năng cực kỳ quan trọng để lưu trữ dữ liệu hoặc log!

https://www.tiktok.com/embed/v2/7492630437529980178

in Sự kiện

| Async trong Python & FastAPI

Được viết bởi thanhdt vào ngày 01/12/2025 lúc 14:23 | 132 lượt xem

Async trong Python & FastAPI: Lập trình bất đồng bộ từ A–Z

https://raw.githubusercontent.com/talkpython/async-techniques-python-course/master/readme_resources/async-python.png
https://media2.dev.to/dynamic/image/width%3D1000%2Cheight%3D420%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bzcmzv9h4unl7z85huu.png
https://i.ytimg.com/vi/RlM9AfWf1WU/maxresdefault.jpg

4

Lập trình bất đồng bộ (asynchronous programming) là nền tảng giúp FastAPI đạt hiệu năng vượt trội so với nhiều framework Python truyền thống.
Bài viết này giúp bạn hiểu:

  • Async là gì & vì sao nó quan trọng
  • Khác nhau giữa blocking vs non-blocking
  • Coroutine, event loop hoạt động ra sao
  • FastAPI xử lý async thế nào
  • So sánh hiệu năng khi gọi API tuần tự vs song song

1. Async là gì? Tại sao phải dùng trong Backend?

Trong backend, phần lớn thời gian không phải CPU chạy code, mà là:

  • Chờ database trả về
  • Chờ API ngoài trả về
  • Chờ đọc file
  • Chờ network I/O

Các “khoảng chờ” này nếu dùng lập trình thông thường (blocking) sẽ làm tắc luồng, giảm throughput của server.

Async giải quyết vấn đề này bằng cách:

  • Không chặn luồng khi đang “chờ”
  • Cho phép server xử lý các request khác song song
  • Tận dụng tối đa tài nguyên khi hệ thống I/O nhiều
https://infonw.laurensstoop.nl/_images/sync_async.png
https://nikgrozev.com/images/blog/async-await/AsyncAwaitExample.png

2. Blocking vs Non-blocking – Khác nhau thế nào?

Blocking (truyền thống)

result = call_api()
process(result)

Trong lúc call_api() chờ phản hồi, toàn bộ hàm bị đứng lại → không làm gì được.


Non-blocking (async)

result = await call_api_async()
process(result)

Khi “chờ”, Python nhường quyền cho tác vụ khác → server có thể xử lý hàng trăm request cùng lúc.


3. Event Loop & Coroutine – Trái tim của Async

Coroutine

Một hàm có thể tạm dừng & tiếp tục chạy ở đúng vị trí cũ.

async def get_data():
    return 123

Event Loop

Bộ điều phối coroutine — quyết định hàm nào chạy tiếp, hàm nào tạm dừng để chờ I/O.

https://www.pythontutorial.net/wp-content/uploads/2022/07/python-event-loop.svg
https://blog.davidvassallo.me/wp-content/uploads/2020/01/image.png

FastAPI chạy trên ASGI (Asynchronous Server Gateway Interface), tận dụng tối đa event loop để xử lý concurrency.


4. Async trong FastAPI hoạt động như thế nào?

Ví dụ:

from fastapi import FastAPI

app = FastAPI()

@app.get("/user")
async def get_user():
    return {"name": "Thanh", "role": "Backend"}

Lưu ý:

  • Chỉ cần dùng async def → route của bạn trở thành bất đồng bộ
  • FastAPI sẽ dùng event loop để xử lý đồng thời nhiều request
  • Nếu hàm bên trong có await (như DB, API bên ngoài), server sẽ cực kỳ hiệu quả

5. Ví dụ thực tế: Gọi API tuần tự vs song song

Giả sử ta cần gọi 3 API khác nhau.

Cách 1 – Blocking (mất 3 giây)

import time
import requests

def call_api():
    res = requests.get("https://httpbin.org/delay/1")
    return res.status_code

start = time.time()
call_api()
call_api()
call_api()
print("Total:", time.time() - start)

Kết quả: khoảng 3 giây


Cách 2 – Async (chỉ ~1 giây)

import httpx
import asyncio
import time

async def call_api_async():
    async with httpx.AsyncClient() as client:
        r = await client.get("https://httpbin.org/delay/1")
        return r.status_code

async def main():
    start = time.time()
    await asyncio.gather(
        call_api_async(),
        call_api_async(),
        call_api_async()
    )
    print("Total:", time.time() - start)

asyncio.run(main())

Kết quả: ~1 giây
→ do cả 3 request thực thi cùng lúc.

https://www.baeldung.com/wp-content/uploads/sites/4/2024/02/concurrent-async.jpg
https://i0.wp.com/blog.blackfire.io/wp-content/uploads/2022/01/python-sync-flow.png?fit=512%2C196&ssl=1

6. Khi nào nên dùng async trong FastAPI?

✔ Dùng async khi:

  • Gọi database (PostgreSQL async driver, MongoDB, Redis…)
  • Gọi API ngoài (payment, trading, AI API…)
  • Đọc/ghi file
  • Xử lý nhiều request đồng thời
  • Viết microservices

✘ Không cần async khi:

  • Bạn xử lý CPU-bound (ML training, thuật toán nặng)
    → Dùng multiprocessing hoặc background tasks phù hợp hơn.

7. Lưu ý quan trọng khi dùng async trong FastAPI

1. Không mix requests (sync) trong async

Sai:

async def task():
    res = requests.get("http://...")

→ requests là thư viện sync → block event loop → mất hết lợi ích async.

Dùng httpx.AsyncClient.


2. ORM sync không tận dụng được async

Dùng SQLAlchemy sync trong async → kém hiệu quả.

Giải pháp:

  • SQLAlchemy Async
  • Tortoise ORM
  • Gino

8. Demo endpoint async thực tế trong FastAPI

import httpx
from fastapi import FastAPI

app = FastAPI()

@app.get("/prices")
async def get_prices():
    async with httpx.AsyncClient() as client:
        btc = await client.get("https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT")
        eth = await client.get("https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT")
    return {
        "btc": btc.json(),
        "eth": eth.json()
    }

Endpoint này xử lý đồng thời nhiều request tới Binance → nhanh hơn cực nhiều so với gọi tuần tự.


9. Minh họa kiến trúc FastAPI dùng Async

https://miro.medium.com/0%2AyGZ5EF4hsMe2JSOu
https://media2.dev.to/dynamic/image/width%3D1280%2Cheight%3D720%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bzcmzv9h4unl7z85huu.png

10. Kết luận

  • Async giúp FastAPI mạnh hơn Flask/Django REST trong các hệ thống I/O-bound
  • Tối ưu tài nguyên server, tăng throughput
  • Rất phù hợp cho microservices, AI API, trading API, data API
  • Là kỹ năng bắt buộc nếu muốn code backend FastAPI một cách hiện đại và chuyên nghiệp

Tham khảo khóa học FastAPI thực chiến

👉 Python API Development với FastAPI
https://www.huongnghiepdulieu.com/python-fastapi/

Khóa học gồm:

  • Async & concurrency
  • CRUD + PostgreSQL + ORM
  • Authentication JWT
  • Upload file & xử lý media
  • Docker + Deploy
  • Project hoàn chỉnh

| FastAPI đang trở thành tiêu chuẩn mới

Được viết bởi thanhdt vào ngày 01/12/2025 lúc 14:12 | 260 lượt xem

Tại sao FastAPI đang trở thành tiêu chuẩn mới cho Backend Python

https://admin.wac.co/uploads/Microservice_Architecture_f548e0b471.png

FastAPI đã nhanh chóng trở thành một trong những framework Python được ưa chuộng nhất trong thế giới backend hiện đại — đặc biệt ở các dự án AI, Fintech, Data Engineering và Microservices.
Sự kết hợp giữa hiệu năng cao, cú pháp rõ ràng, hỗ trợ async và hệ sinh thái tài liệu tự sinh giúp FastAPI trở thành chuẩn mới cho backend Python.


1. FastAPI là gì? Vì sao nó ra đời?

FastAPI là một web framework hiện đại dùng để xây dựng API với Python 3.7+.
Nó được thiết kế dựa trên 4 nguyên tắc:

  • Nhanh → performance gần ngang Node.js & Go
  • Dễ viết → cú pháp ngắn, dựa trên Python type hints
  • Tin cậy → validate dữ liệu tự động bằng Pydantic
  • Tự sinh tài liệu API → Swagger UI & ReDoc sẵn
https://fastapi.tiangolo.com/img/tutorial/metadata/image02.png
https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png

Chỉ cần chạy server là bạn đã có ngay API docs đẹp, thử request trực tiếp mà không cần viết một dòng frontend nào.


2. So sánh FastAPI – Flask – Django REST

FastAPI – Hiệu năng cao, hướng API-first

  • Viết API nhanh, rõ ràng
  • Hỗ trợ async/await (I/O bound workload cực mạnh)
  • Auto docs cực hợp teamwork
  • Rất phù hợp microservices, mobile backend, AI API

Flask – Tối giản, linh hoạt

  • Microframework
  • Phù hợp web nhỏ, prototype
  • Không có async native, không auto docs

Django REST Framework – Full hệ sinh thái

  • Đi kèm admin, ORM, middleware
  • Phù hợp hệ thống lớn, nhiều module
  • Cấu trúc nặng hơn, ít phù hợp microservices
https://miro.medium.com/v2/resize%3Afit%3A1400/0%2AJg6HNu-sS2XM8q7R.jpg
https://reflex.dev/blog/github-python_top_language_2024.webp

3. Những ưu điểm làm FastAPI trở thành “tiêu chuẩn mới”

(1) Hỗ trợ bất đồng bộ (Async)

FastAPI chạy trên ASGI thay vì WSGI, cho phép xử lý hàng nghìn request đồng thời.
Điều này cực kỳ quan trọng khi backend cần:

  • Gọi API ngoài (binance, bitget, service payment…)
  • Gọi database nhiều lần
  • Upload file
  • Xử lý streaming

(2) Type Hints → Kiểm tra dữ liệu tự động

Ví dụ:

class User(BaseModel):
    name: str
    age: int

Chỉ cần khai báo như vậy:

  • FastAPI tự validate input
  • Tự tạo docs
  • Tự báo lỗi sai kiểu dữ liệu

(3) Tự sinh tài liệu API (Swagger UI / ReDoc)

Đây là lý do nhiều công ty lớn chọn FastAPI.

https://swagger.io/getmedia/7bd69649-e725-4342-bda0-b68b7b00bc4f/SwaggerHub-UI-Example?height=366&width=800
https://redocly.com/assets/redoc.5fd07fdbd3a7f473764d77c385b3ddb00fb410cd7a3f8591d6fafe9fe1b5a950.6ca80170.png

Trong môi trường enterprise + microservices, API docs là thứ sống còn.

(4) Performance mạnh

Benchmark cho thấy FastAPI nhanh hơn phần lớn framework Python truyền thống.

(5) Rất phù hợp với AI / Fintech / Data API

Các hệ thống này thường:

  • I/O-bound (gọi tới model, tới DB, tới external API)
  • Cần tốc độ phản hồi nhanh
  • Cần nhiều endpoint auto-documented
  • Dễ deploy microservice

FastAPI đáp ứng toàn bộ.


4. Demo API đầu tiên – Chạy trong 10 giây

Tạo file main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
async def hello():
    return {"message": "Hello, FastAPI!"}

Chạy server:

uvicorn main:app --reload

Mở trình duyệt tại:

https://i.sstatic.net/SK1rl.png
https://christophergs.com/assets/images/ultimate-fastapi-tut-pt-7/diagram-overall.jpeg

5. Kiến trúc Backend chuẩn với FastAPI

Dưới đây là một mô hình kiến trúc phổ biến:

https://admin.wac.co/uploads/Microservice_Architecture_f548e0b471.png
https://d3373sevsv1jc.cloudfront.net/uploads/communities_production/article_block/4363/54DBE4C912DA4BA59B22FD884E8D4E78.png
https://cdn.sayonetech.com/media/media/2025/01/21/in1-4.jpg

Các layer chính:

  1. Router Layer – định nghĩa endpoint
  2. Service Layer – xử lý logic
  3. Repository Layer – giao tiếp database
  4. Model Layer (Pydantic + ORM) – validate input & mapping database
  5. Docs tự sinh – Swagger UI / ReDoc
  6. Deployment Layer – Docker, Kubernetes, Nginx, Uvicorn

Mô hình này giúp bạn xây dựng được backend cực kỳ sạch, dễ mở rộng.


6. Khi nào nên dùng FastAPI?

✔ Rất phù hợp nếu bạn làm:

  • Microservices
  • Backend cho mobile app
  • API cho AI/ML models
  • API trading (Binance, Bitget, MT5)
  • Fintech / thanh toán
  • Hệ thống phân tán, scale nhiều service
  • Backend nhẹ, muốn ship nhanh

✘ Không phù hợp nếu bạn cần:

  • Web app HTML truyền thống
  • CMS, admin mạnh (Django hợp hơn)

7. Tham khảo khóa học: Python FastAPI Backend

Để học chuyên sâu + thực chiến, bạn có thể xem khóa học tại:

👉 https://www.huongnghiepdulieu.com/python-fastapi/

Khóa học bao gồm:

  • Kiến thức FastAPI từ cơ bản đến nâng cao
  • Authentication JWT
  • Kết nối database PostgreSQL
  • API CRUD theo chuẩn enterprise
  • Deploy cloud (Docker + Uvicorn + Nginx)
  • Project hoàn chỉnh: User → Login → CRUD → Upload → Dashboard

| 3 loại bot trên sàn Bitget: Bot tự tạo, Bot của sàn và Bot Copy Trade

Được viết bởi thanhdt vào ngày 30/11/2025 lúc 10:15 | 318 lượt xem

3 loại bot trên sàn Bitget: Bot tự tạo, Bot của sàn và Bot Copy Trade

Bitget là một trong những nền tảng hiếm hoi hỗ trợ đầy đủ ba hình thức bot giao dịch: bot tự lập trình, bot có sẵn của sàn và bot sao chép giao dịch. Mỗi loại bot phù hợp cho một kiểu trader khác nhau, với mức độ tự động hóa, rủi ro và tính linh hoạt riêng. Dưới đây là phân tích chi tiết về ba loại bot này.


1. Bot tự tạo (Custom API Bot)

https://i.ytimg.com/vi/IGV7KoSxYr8/hqdefault.jpg
https://miro.medium.com/v2/resize%3Afit%3A1400/1%2A_IiXl-nZs1yVq1T4AjZopg.jpeg

Bot tự tạo là loại bot do người dùng lập trình và kết nối trực tiếp với Bitget thông qua API. Đây là hình thức bot linh hoạt nhất, cho phép bạn xây dựng chiến lược giao dịch riêng theo ý muốn.

Đặc điểm

  • Hoạt động dựa trên API Key.
  • Tự do xây dựng chiến lược: trend-following, breakout, SMC, AI Trading, scalping.
  • Có thể chạy trên server riêng (VPS, Cloud, máy cá nhân).
  • Hoàn toàn quyết định toàn bộ logic vào – thoát lệnh.

Ưu điểm

  • Tính tự do và linh hoạt cao nhất.
  • Tối ưu theo phong cách giao dịch cá nhân.
  • Tự động hóa được cả quản lý rủi ro, trailing stop, quản lý vốn.

Hạn chế

  • Cần kiến thức lập trình và vận hành server.
  • Dễ gặp lỗi API, timeout, bot dừng đột ngột nếu thiết lập sai.
  • Không ổn định bằng bot chạy trực tiếp trên hệ thống sàn.

Bot tự tạo phù hợp với người dùng muốn kiểm soát 100% chiến lược và tối ưu hóa lợi nhuận bằng thuật toán riêng.


2. Bot của sàn (Built-in Trading Bots)

https://img.bgstatic.com/multiLang/web/aee18b819f89b903f8cbfc0bb0a2cae41689902713807.jpeg
https://img.bgstatic.com/multiLang/web/9d21ace8fafe4811ac6bdae809ebacde1689662894123.jpg
https://img.bgstatic.com/multiLang/web/d7ef2e45247c135fbb486f5fbc437c23.png

Đây là các bot được Bitget cung cấp sẵn và hoạt động trực tiếp trên server nội bộ của sàn. Người dùng không cần code, không cần vận hành server và không lo bot dừng giữa chừng.

Các bot nổi bật của Bitget

  • Bot Grid (Spot và Futures)
  • AI Grid Bot
  • DCA Bot
  • Martingale Bot
  • Combo Bot

Ưu điểm

  • Ổn định cao vì chạy trực tiếp trên hạ tầng Bitget.
  • Không bị lỗi API, không bị timeout.
  • Dễ sử dụng, phù hợp người mới.
  • Có thống kê hiệu suất và mô phỏng thử ngay trong sàn.

Hạn chế

  • Chiến lược cố định, không quá linh hoạt.
  • Khó tối ưu mức lợi nhuận như bot tự code.
  • Một số bot có rủi ro cao nếu dùng sai (Martingale).

Bot của sàn phù hợp với người muốn sự ổn định, đơn giản và không cần phải tự lập trình.


3. Bot Copy Trade (Sao chép giao dịch)

https://img.bgstatic.com/multiLang/web/d15a155c7ff3f565426eb4d15173fd52.jpeg
https://mtr-cdn.com/images/Cara_Membuka_Akun_Copy_Trading.width-648.png
https://coinsutra.com/wp-content/uploads/2022/07/Copy-trading-crypto.jpg

Bot Copy Trade hoạt động bằng cách sao chép lệnh của một trader chuyên nghiệp. Khi trader mở lệnh, tài khoản người sao chép sẽ mở theo. Đây cũng được xem là một dạng bot tự động hóa vì người dùng không cần thao tác gì.

Đặc điểm

  • Theo dõi trader thật trên thị trường.
  • Lệnh vào – thoát 100% tự động.
  • Chọn trader theo thống kê: Winrate, PnL, Drawdown, phong cách giao dịch.

Ưu điểm

  • Dễ dàng bắt đầu, không cần kiến thức kỹ thuật.
  • Đi theo kinh nghiệm và chiến lược của người khác.
  • Có thể chọn nhiều trader để phân tán rủi ro.

Hạn chế

  • Rủi ro phụ thuộc hoàn toàn vào trader.
  • Kết quả của master không đồng nghĩa bạn cũng có lợi nhuận.
  • Một số trader dùng đòn bẩy cao hoặc giao dịch cảm tính.

Bot Copy Trade phù hợp với người ít kinh nghiệm hoặc không có thời gian theo dõi thị trường.


Kết luận

Ba loại bot trên Bitget bổ sung cho nhau, phục vụ ba nhóm người dùng khác nhau:

  • Bot tự tạo: tối ưu nhất cho trader có chuyên môn kỹ thuật và muốn chiến lược riêng.
  • Bot của sàn: ổn định và dễ sử dụng, phù hợp cho phần lớn người dùng.
  • Bot Copy Trade: đơn giản, chỉ cần chọn trader tốt là có thể bắt đầu.

Sự đa dạng này khiến Bitget trở thành một trong số ít sàn cung cấp đầy đủ giải pháp tự động hóa giao dịch cho cả người mới và trader chuyên nghiệp.

| Hướng dẫn thay đổi Position Mode trên Bitget

Được viết bởi thanhdt vào ngày 29/11/2025 lúc 17:57 | 262 lượt xem

Hướng dẫn thay đổi Position Mode trên Bitget

(Cập nhật cho người dùng Bot Auto Trading)

https://img.bgstatic.com/multiLang/web/bd16e20ed0fb7fa11987aa5945699bb5.png

6

1. Position Mode là gì

Bitget hỗ trợ hai chế độ quản lý vị thế khi giao dịch Futures:

One-Way Mode (Chế độ 1 chiều)

  • Mỗi cặp chỉ có duy nhất một vị thế (net position).
  • Khi mở Long rồi mở Short, lệnh Short sẽ đóng vị thế Long.
  • Dùng cho bot trend-following, swing trading, chiến lược một chiều.
  • API sử dụng:
    positionSide = "net" hoặc không gửi positionSide.

Hedge Mode (Chế độ phòng hộ – 2 chiều)

  • Có thể giữ Long và Short cùng lúc trên cùng một cặp.
  • Long và Short được quản lý riêng biệt.
  • Dùng cho grid bot, market making, hedging.
  • API sử dụng:
    positionSide = "long" hoặc positionSide = "short".

Việc đặt sai Position Mode sẽ dẫn đến lỗi API như:
40774 – The order type for unilateral position must also be the unilateral position type.


2. Cách kiểm tra Position Mode trên Bitget

Bước 1: Truy cập vào Futures USDT-M

Trên menu chính của Bitget, chọn Futures → USDT-M Futures → Giao dịch.

Bước 2: Mở phần Cài đặt

Nhấp vào biểu tượng bánh răng (Settings) ở góc phải trên của màn hình giao dịch Futures.

Bước 3: Tìm mục “Chế độ vị thế”

Trong phần “Kỳ hạn và vĩnh cửu” sẽ có mục:

  • Chế độ vị thế:
    • Chế độ tài sản đơn lẻ (One-way)
    • Chế độ phòng hộ (Hedge Mode)

Trạng thái hiện tại sẽ được hiển thị tại đây.

https://img.bgstatic.com/multiLang/web/0a8c73166cbc0ac5d56779d9d6a96bd4.png
https://img.bgstatic.com/multiLang/web/33d6a8636274b3564797a9da55237068.jpg
https://img.bgstatic.com/multiLang/web/2739d46ffe0eef3b1fa4d3c2f92883ac.jpg

6


3. Cách chuyển giữa One-Way và Hedge Mode

Chuyển sang One-Way Mode

  1. Mở Settings trong giao diện Futures.
  2. Chọn “Chế độ vị thế”.
  3. Chọn “Chế độ tài sản đơn lẻ”.
  4. Xác nhận thay đổi.

One-Way phù hợp khi bot hoặc hệ thống giao dịch của bạn chỉ cần mở một chiều tại một thời điểm và không muốn giữ Long và Short đồng thời.

API sử dụng khi ở One-Way Mode:

positionSide = "net"
hoặc bỏ positionSide

Chuyển sang Hedge Mode

  1. Mở Settings trong giao diện Futures.
  2. Chọn “Chế độ vị thế”.
  3. Chọn “Chế độ phòng hộ”.
  4. Xác nhận thay đổi.

Hedge Mode phù hợp khi bot cần mở Long và Short độc lập, grid trading hoặc hedging.

API sử dụng khi ở Hedge Mode:

positionSide = "long"
positionSide = "short"
reduceOnly = True/False

4. Vị trí hiển thị Position Mode trên màn hình Futures

Trong giao diện giao dịch Futures, Position Mode nằm gần khu vực đặt lệnh, cạnh các nút:

  • Cross / Isolated
  • Leverage (x10, x20…)
  • Nút mở Long / mở Short

Khi One-way Mode đang bật, thường sẽ hiển thị dưới dạng “Chế độ tài sản đơn lẻ”.
Khi Hedge Mode bật, sẽ hiển thị “Chế độ phòng hộ”.

https://img.bgstatic.com/multiLang/web/ab56921be4b1b5d66f7d9a310965359c.png
https://img.bgstatic.com/multiLang/web/80e19e4648f93e0c67b8d7df79f3ea4c.jpeg
https://img.bgstatic.com/multiLang/web/2ae51039cd27eb0c369697834e14219e.png

6


5. Lưu ý quan trọng cho bot Auto Trading

  1. Sai chế độ → bot đặt lệnh lỗi ngay.
  2. Một số cặp Futures yêu cầu tối thiểu 5 USDT cho mỗi lệnh (min notional).
  3. Khi chuyển chế độ, bot cần được cấu hình lại theo đúng Position Mode.
  4. CCXT cần gửi đúng tham số positionSide, nếu không sẽ gặp lỗi 40774.

6. Kết luận

Việc thiết lập đúng Position Mode rất quan trọng đối với hệ thống giao dịch tự động. One-Way Mode phù hợp cho bot theo xu hướng hoặc tín hiệu một chiều, trong khi Hedge Mode phục vụ cho chiến lược nâng cao như hedging hoặc mở vị thế hai chiều đồng thời.

Sau khi thay đổi Position Mode trên Bitget, hãy đảm bảo bot của bạn gửi đúng tham số trong API tương ứng với chế độ đang sử dụng.