| Gọi API Claude và OpenAI bằng Python — AI vào app của bạn

Được viết bởi Đặng Trí Thanh vào ngày 09/08/2026 lúc 13:38 | 4 lượt xem

Gọi API Claude và OpenAI bằng Python — AI vào app của bạn

Ngày 52 – 2026-08-13 | Chuỗi Python 365 ngày | Hướng Nghiệp Dữ Liệu

Meta mô tả (SEO): Anthropic Messages API, OpenAI Chat Completions, gọi AI bằng urllib thuần, xử lý lỗi — Ngày 52 Python 365.

Từ khóa: gọi API Claude Python, OpenAI API, Anthropic API, urllib, AI API, Python 365

Video: https://www.youtube.com/shorts/VIDEO_ID_52

Lưu ý: Sau khi upload video Ngày 52, thay VIDEO_ID_52 trong YAML youtube bằng ID thật từ YouTube Studio.


Mục lục

  1. AI API là gì — nhúng AI vào ứng dụng
  2. Chuẩn bị API key (Anthropic & OpenAI)
  3. Mẫu POST JSON chung với urllib
  4. Gọi Anthropic Claude — Messages API
  5. Đọc response của Claude — content blocks
  6. Gọi OpenAI — Chat Completions
  7. Đọc response của OpenAI — choices
  8. Script Ngày 52 từng bước
  9. Xử lý lỗi — key, 401, quota, timeout
  10. Ứng dụng — AI viết code, sentiment, tự động hóa
  11. Câu hỏi thường gặp (FAQ)
  12. Kết luận

1. AI API là gì — nhúng AI vào ứng dụng

Từ các bài trước, bạn đã biết cách gọi API để lấy dữ liệu: Binance cho giá (Ngày 39), CoinGecko cho crypto (Ngày 50), REST/JSON (Ngày 41). Hôm nay ta đi xa hơn một bước: gọi API AI — gửi một câu hỏi (prompt) lên Claude hoặc GPT và nhận về câu trả lời bằng ngôn ngữ tự nhiên hoặc code.

Luồng hoạt động:

flowchart LR
    A[Script Python] -->|POST JSON /v1/messages| B[Anthropic Claude]
    A -->|POST JSON /v1/chat/completions| C[OpenAI GPT]
    B -->|JSON content blocks| D[Parse & in kết quả]
    C -->|JSON choices| D

Điểm khác biệt so với API dữ liệu thường: bạn không lấy một con số mà lấy văn bản do mô hình sinh ra. Điều đó mở ra hàng loạt ứng dụng: AI viết code, AI giải thích lỗi, AI tóm tắt tin tức, AI phân tích cảm xúc, AI đọc ảnh…

Quan trọng: bài này chỉ dùng urllib trong thư viện chuẩn — không cần pip install openai, không cần pip install anthropic. Hiểu được cơ chế HTTP bên dưới sẽ giúp bạn sửa lỗi nhanh và biết các SDK kia thực chất đang làm gì.

Ngày 52 (Day 52_Goi API Claude OpenAI.py) có 2 hàm lõi: call_anthropic()call_openai(). Cả hai đều là POST JSON có xác thực — cấu trúc gần giống nhau, chỉ khác URL, header và cách đọc response.

Bạn có thể hình dung AI API như một nhân viên thông thái thuê ngoài: gửi mô tả công việc (prompt), nhận kết quả (text/code), trả phí theo lượng “từ” xử lý — AI gọi là token. Khoảng 1 token ≈ ¾ một từ tiếng Anh; tiếng Việt có dấu thường tốn nhiều token hơn. Hiểu khái niệm token giúp bạn ước lượng chi phí và độ dài phản hồi.

Điểm quan trọng để không bỡ ngỡ: prompt chính là “dữ liệu vào”. API dữ liệu truyền số/giá; API AI truyền câu lệnh. Cùng một hàm call_*, đổi prompt là đổi “nghề” của AI: viết code, tóm tắt, dịch, phân tích cảm xúc, tư vấn…


2. Chuẩn bị API key (Anthropic & OpenAI)

Để gọi AI API bạn cần một API key — giống “chìa khóa” xác thực tài khoản:

Nền tảng Nơi lấy Định dạng key Giá trị demo
Anthropic (Claude) console.anthropic.com sk-ant-... ANTHROPIC_API_KEY
OpenAI (GPT) platform.openai.com sk-... OPENAI_API_KEY

Chỉ cần 1 trong 2 key là đủ để chạy demo — script sẽ bỏ qua nền tảng còn lại nếu thiếu key.

Script đọc cấu hình từ file .env (tạo từ .env.example):

# .env
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...

Hàm đọc .env dùng chung (không cần thư viện ngoài):

from pathlib import Path

BASE_DIR = Path(__file__).parent
ENV_FILE = BASE_DIR / ".env"

def load_env() -> dict:
    env = {}
    if ENV_FILE.exists():
        for line in ENV_FILE.read_text(encoding="utf-8").splitlines():
            line = line.strip()
            if line and not line.startswith("#") and "=" in line:
                k, _, v = line.partition("=")
                env[k.strip()] = v.strip().strip('"').strip("'")
    return env

env = load_env()
ANTHROPIC_KEY = env.get("ANTHROPIC_API_KEY", "")
OPENAI_KEY = env.get("OPENAI_API_KEY", "")

Bảo mật: không bao giờ commit .env lên GitHub. Key nằm trong biến môi trường hoặc file cục bộ, không viết cứng vào code.

Mẹo thực hành khi tạo key:
– Tạo key riêng cho từng dự án — dễ thu hồi khi không dùng, tránh lộ lan.
– Một số nền tảng cho phép đặt giới hạn chi tiêu (spending limit) — hãy bật để không bị “hóa đơn sốc” khi chạy vòng lặp quên tắt.
– Key Anthropic đôi khi phải cấu hình theo khu vực (region); nếu gặp lỗi vùng, vào console kiểm tra endpoint chính thức.
– Kiểm tra key còn hiệu lực bằng một request nhỏ (max_tokens thấp) trước khi chạy demo dài.


3. Mẫu POST JSON chung với urllib

Cả hai API đều nhận HTTP POST với body là JSON. Mẫu chung:

import json
import urllib.request

HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) PythonDay52"}

def post_json(url: str, payload: dict, extra_headers: dict) -> dict:
    body = json.dumps(payload).encode("utf-8")
    req = urllib.request.Request(
        url, data=body,
        headers={"Content-Type": "application/json", **extra_headers, **HEADERS})
    with urllib.request.urlopen(req, timeout=60) as resp:
        return json.loads(resp.read().decode("utf-8"))

Ba điểm đáng nhớ:
1. data=body — khi gửi kèm data thì urllib tự chuyển thành POST.
2. Content-Type: application/json — báo server body là JSON.
3. timeout=60 — AI API đôi khi trả lời lâu (nghĩ vài giây), timeout ngắn dễ vỡ.

Giải mã từng dòng của post_json:
json.dumps(payload) — chuyển dict Python thành chuỗi JSON; .encode("utf-8") để gửi dạng bytes (bắt buộc vì có tiếng Việt có dấu).
urllib.request.Request(url, data=body, headers=...) — đóng gói request; khi có data, phương thức mặc định là POST.
with ... urlopen(req, timeout=60) — mở kết nối; with đảm bảo đóng response, tránh rò rỉ tài nguyên.
json.loads(resp.read().decode("utf-8")) — đọc bytes rồi giải mã JSON thành dict.

Đây chính là nền mà các SDK như anthropic hay openai bọc lại — bạn vừa tự tay viết được lớp tương đương mà không cần cài gì.


4. Gọi Anthropic Claude — Messages API

Endpoint: POST https://api.anthropic.com/v1/messages

Header riêng của Anthropic:
x-api-key: ANTHROPIC_KEY
anthropic-version: 2023-06-01 (bắt buộc, báo phiên bản API)

Body tối thiểu: model, max_tokens, messages.

def call_anthropic(prompt: str, model: str = "claude-sonnet-4-20250514") -> str:
    url = "https://api.anthropic.com/v1/messages"
    body = json.dumps({
        "model": model,
        "max_tokens": 1024,
        "messages": [{"role": "user", "content": prompt}],
    }).encode("utf-8")
    req = urllib.request.Request(
        url, data=body,
        headers={
            "Content-Type": "application/json",
            "x-api-key": ANTHROPIC_KEY,
            "anthropic-version": "2023-06-01",
            **HEADERS,
        })
    with urllib.request.urlopen(req, timeout=60) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    # Response của Anthropic: data["content"] là list các block
    return "".join(block.get("text", "") for block in data.get("content", []))

Vì sao dùng messages với role: "user"? Vì API này hỗ trợ hội thoại nhiều lượt — sau này bạn có thể thêm role: "assistant" để nhắc Claude nhớ ngữ cảnh trước đó (nền cho chatbot).

Khi muốn AI nhớ ngữ cảnh hội thoại, bạn nối lịch sử vào messages:

messages = [
    {"role": "user", "content": "Bạn là trợ lý tài chính."},
    {"role": "assistant", "content": "Chào bạn, tôi giúp gì được?"},
    {"role": "user", "content": "Giải thích drawdown là gì?"},
]

Lưu ý max_tokens: đây là số token tối đa AI được sinh ra, không phải tổng. Với câu trả lời dài như code, để 1024–4096; với câu ngắn, để thấp để tiết kiệm phí.

Anthropic còn hỗ trợ tham số system (chỉ dẫn chung) ở tầng body:

body = {
    "model": model,
    "max_tokens": 1024,
    "system": "Bạn là trợ lý Python, luôn trả lời ngắn gọn kèm ví dụ code.",
    "messages": [{"role": "user", "content": prompt}],
}

5. Đọc response của Claude — content blocks

Khác OpenAI, response của Anthropic không đặt câu trả lời trong một chuỗi đơn giản mà trong mảng content gồm nhiều block. Mỗi block có type — thường là "text", nhưng cũng có thể là "tool_use", "thinking"

Ví dụ response:

{
  "content": [
    { "type": "text", "text": "Đây là câu trả lời..." }
  ],
  "model": "claude-sonnet-4-20250514",
  "stop_reason": "end_turn",
  "usage": { "input_tokens": 12, "output_tokens": 30 }
}

Để an toàn, ta nối tất cả block có text:

return "".join(block.get("text", "") for block in data.get("content", []))

Nếu bạn muốn debug, hãy print(json.dumps(data, indent=2, ensure_ascii=False)) trước — nhìn thấy cấu trúc thật sẽ dễ hình dung hơn.


6. Gọi OpenAI — Chat Completions

Endpoint: POST https://api.openai.com/v1/chat/completions

Header riêng:
Authorization: Bearer OPENAI_KEY

Body tương tự, chỉ khác tên trường giống nhau hết sức:

def call_openai(prompt: str, model: str = "gpt-4o-mini") -> str:
    url = "https://api.openai.com/v1/chat/completions"
    body = json.dumps({
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
    }).encode("utf-8")
    req = urllib.request.Request(
        url, data=body,
        headers={
            "Content-Type": "application/json",
            "Authorization": f"Bearer {OPENAI_KEY}",
            **HEADERS,
        })
    with urllib.request.urlopen(req, timeout=60) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return data["choices"][0]["message"]["content"]

Bạn cũng có thể truyền thêm tham số sinh văn bản:
temperature (0–2, mặc định 1): càng thấp càng “kỷ luật”, càng cao càng sáng tạo.
max_tokens / max_completion_tokens: giới hạn độ dài câu trả lời.

payload = {
    "model": model,
    "messages": [{"role": "user", "content": prompt}],
    "temperature": 0.3,
    "max_tokens": 1024,
}

Với bài toán xác định (sinh code, trích xuất dữ liệu) nên dùng temperature thấp; với viết văn/sáng tạo, dùng cao hơn.

Nhận xét: hai API gần như cùng một khuôn — chỉ khác:
– URL (/v1/messages vs /v1/chat/completions)
– Cách xác thực (x-api-key vs Bearer)
– Cách đọc kết quả (content blocks vs choices[0].message.content)

Nếu bạn đã nắm REST/JSON từ Ngày 41–50, việc nhảy sang AI API chỉ là đổi vài dòng header.


7. Đọc response của OpenAI — choices

Response OpenAI:

{
  "choices": [
    { "message": { "role": "assistant", "content": "Câu trả lời..." } }
  ],
  "usage": { "prompt_tokens": 12, "completion_tokens": 30 }
}

Câu trả lời nằm ở data["choices"][0]["message"]["content"]. Vì choices là mảng, sau này muốn lấy nhiều phương án (n=3) bạn chỉ việc duyệt vòng lặp:

# Lấy 3 phương án khác nhau
body["n"] = 3
data = post_json(url, body, {"Authorization": f"Bearer {OPENAI_KEY}"})
for i, ch in enumerate(data["choices"]):
    print(f"--- Phương án {i + 1} ---")
    print(ch["message"]["content"])

8. Script Ngày 52 từng bước

Ghép lại toàn bộ script Day 52_Goi API Claude OpenAI.py:

import json
import os
import urllib.error
import urllib.request
from pathlib import Path

BASE_DIR = Path(__file__).parent
ENV_FILE = BASE_DIR / ".env"

HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) PythonDay52"}

def load_env() -> dict:
    env = {}
    if ENV_FILE.exists():
        for line in ENV_FILE.read_text(encoding="utf-8").splitlines():
            line = line.strip()
            if line and not line.startswith("#") and "=" in line:
                k, _, v = line.partition("=")
                env[k.strip()] = v.strip().strip('"').strip("'")
    return env

env = load_env()
ANTHROPIC_KEY = os.environ.get("ANTHROPIC_API_KEY") or env.get("ANTHROPIC_API_KEY", "")
OPENAI_KEY = os.environ.get("OPENAI_API_KEY") or env.get("OPENAI_API_KEY", "")

def call_anthropic(prompt, model="claude-sonnet-4-20250514"):
    url = "https://api.anthropic.com/v1/messages"
    body = json.dumps({
        "model": model, "max_tokens": 1024,
        "messages": [{"role": "user", "content": prompt}],
    }).encode("utf-8")
    req = urllib.request.Request(url, data=body, headers={
        "Content-Type": "application/json",
        "x-api-key": ANTHROPIC_KEY,
        "anthropic-version": "2023-06-01", **HEADERS})
    with urllib.request.urlopen(req, timeout=60) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return "".join(b.get("text", "") for b in data.get("content", []))

def call_openai(prompt, model="gpt-4o-mini"):
    url = "https://api.openai.com/v1/chat/completions"
    body = json.dumps({
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
    }).encode("utf-8")
    req = urllib.request.Request(url, data=body, headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {OPENAI_KEY}", **HEADERS})
    with urllib.request.urlopen(req, timeout=60) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return data["choices"][0]["message"]["content"]

def main():
    prompt = ("Viết bằng Python một hàm tính lãi kép (compound interest), "
              "kèm docstring tiếng Việt và 1 ví dụ gọi hàm.")
    if ANTHROPIC_KEY:
        print("▶ Gọi Anthropic Claude:\n")
        try:
            print(call_anthropic(prompt))
        except urllib.error.HTTPError as exc:
            print(f"   ⚠️ HTTP {exc.code}: {exc.reason}")
    else:
        print("ℹ️  Chưa có ANTHROPIC_API_KEY - bỏ qua Claude.")

    print("\n" + "=" * 60 + "\n")

    if OPENAI_KEY:
        print("▶ Gọi OpenAI:\n")
        try:
            print(call_openai(prompt))
        except urllib.error.HTTPError as exc:
            print(f"   ⚠️ HTTP {exc.code}: {exc.reason}")
    else:
        print("ℹ️  Chưa có OPENAI_API_KEY - bỏ qua OpenAI.")

    if not ANTHROPIC_KEY and not OPENAI_KEY:
        print("\n❌ Chưa có key nào. Tạo .env từ .env.example rồi điền ít nhất 1 key.")

if __name__ == "__main__":
    main()

Chạy:

python "Day 52_Goi API Claude OpenAI.py"

Bạn sẽ thấy Claude/GPT trả về một hàm compound_interest hoàn chỉnh — được sinh ra từ prompt 1 câu.


9. Xử lý lỗi — key, 401, quota, timeout

AI API là dịch vụ có phí và có giới hạn, nên lỗi rất thường gặp. Bảng tra nhanh:

HTTP Ý nghĩa Cách xử lý
401 Sai key / key hết hạn Kiểm tra .env, tạo lại key
403 Key không có quyền Kiểm tra tài khoản/vùng (region)
429 Vượt quota / rate limit Chờ vài giây rồi thử lại
400 Body sai (thiếu model, max_tokens…) Đọc thông báo lỗi chi tiết
5xx Lỗi phía server Thử lại sau vài giây

Bắt lỗi trong script:

try:
    print(call_anthropic(prompt))
except urllib.error.HTTPError as exc:
    print(f"   ⚠️ HTTP {exc.code}: {exc.reason}")
    print("   (Kiểm tra key/giới hạn tài khoản)")

Mẹo: đọc phần body của lỗi — nhiều khi API trả JSON chứa lý do cụ thể (vd max_tokens quá nhỏ, hoặc prompt chứa nội dung bị chặn). Thêm vào:

except urllib.error.HTTPError as exc:
    detail = exc.read().decode("utf-8", "replace")
    print(f"HTTP {exc.code}: {detail[:400]}")

Khi chạy production, thêm retry có backoff cho lỗi 429:

import time

def call_with_retry(fn, tries=3):
    for attempt in range(tries):
        try:
            return fn()
        except urllib.error.HTTPError as exc:
            if exc.code == 429 and attempt < tries - 1:
                time.sleep(2 ** attempt)   # 1s, 2s, 4s
                continue
            raise

10. Ứng dụng — AI viết code, sentiment, tự động hóa

Chỉ với một hàm call_* đơn giản, bạn đã có thể xây:

  1. AI viết code — prompt mô tả yêu cầu, nhận code mẫu (demo hôm nay).
  2. AI giải thích code — đưa đoạn code vào prompt, nhận lời giải từng dòng.
  3. Tóm tắt tin tức — kết hợp web scraping (Ngày 46) + gọi AI → bản tin tóm tắt.
  4. Phân tích cảm xúc (sentiment) — đưa đoạn văn, hỏi AI đánh giá tích cực/tiêu cực.
  5. Bot tự động hóa — ví dụ: giá coin vượt ngưỡng (Ngày 51) → gọi AI viết bình luận → gửi Telegram.
def analyze_sentiment(text: str) -> str:
    prompt = (f"Phân tích cảm xúc của đoạn sau (tích cực/tiêu cực/trung lập) "
              f"và giải thích ngắn:\n\n{text}")
    return call_openai(prompt)  # hoặc call_anthropic

Ví dụ tóm tắt tin tức tự động (kết hợp Ngày 46 — web scraping):

def summarize_news(text: str) -> str:
    prompt = f"Tóm tắt đoạn tin sau thành 3 ý chính, mỗi ý 1 câu:\n\n{text}"
    return call_anthropic(prompt)

# Giả sử đã lấy được article_text từ BeautifulSoup
# print(summarize_news(article_text))

Ví dụ đọc ảnh (vision) — Claude hỗ trợ gửi ảnh dạng base64. Ý tưởng: chụp màn hình bảng giá → AI đọc giá trị:

import base64

def describe_image(png_path: str) -> str:
    b64 = base64.b64encode(Path(png_path).read_bytes()).decode()
    body = {
        "model": model,
        "max_tokens": 512,
        "messages": [{
            "role": "user",
            "content": [
                {"type": "image", "source": {"type": "base64",
                                              "media_type": "image/png",
                                              "data": b64}},
                {"type": "text", "text": "Mô tả nội dung ảnh này."},
            ],
        }],
    }
    # Gửi qua urlopen như call_anthropic, đọc data["content"]

Luồng tổng quát cho mọi ứng dụng AI:

flowchart TD
    A[Thu thập dữ liệu] --> B[Tạo prompt có ngữ cảnh]
    B --> C[Gọi AI API]
    C --> D[Parse response]
    D --> E[Lưu / báo cáo / gửi thông báo]

Đạo đức & chi phí: AI API tính phí theo token (input + output). Demo ngắn rất rẻ, nhưng khi chạy vòng lặp hàng nghìn lần hãy để ý usage. Luôn đặt max_tokens giới hạn để tránh hóa đơn bất ngờ. Không gửi dữ liệu nhạy cảm của khách hàng lên API công cộng.


11. Câu hỏi thường gặp (FAQ)

H1: Không cài pip thì gọi AI API kiểu gì?
Dùng urllib.request trong thư viện chuẩn — gửi POST JSON như bài hướng dẫn. SDK chỉ là lớp bọc quanh HTTP này thôi.

H2: Cần key của cả Claude và OpenAI không?
Không. Chỉ cần 1 trong 2 là chạy được demo; script tự bỏ qua nền tảng thiếu key.

H3: Vì sao gặp HTTP 429?
Bạn đã vượt quota hoặc rate limit. Chờ vài giây (hoặc theo Retry-After trong response) rồi thử lại.

H4: Response của Claude nằm ở đâu?
Trong data["content"] — một mảng các block; nối các block có text lại là câu trả lời.

H5: Response của OpenAI nằm ở đâu?
Trong data["choices"][0]["message"]["content"].

H6: Sao phải có anthropic-version?
Anthropic yêu cầu header này để định nghĩa phiên bản API; thiếu sẽ bị lỗi 400.

H7: Prompt mạnh nhất là gì?
Rõ ràng + có ngữ cảnh + đưa ví dụ. “Viết hàm tính lãi kép” hay hơn nhiều so với “giúp tôi code”.

H8: AI API có miễn phí không?
Có gói free với giới hạn thấp (nhất là Claude với một số khu vực); thường trả phí theo token. Đọc trang pricing của từng nền tảng.

H9: Học tiếp theo học gì?
Bot Telegram (Ngày 51) + AI API (Ngày 52) = bot báo tin có AI. Tiếp theo có thể là web scraping (Ngày 46) + sentiment, hoặc đọc ảnh bằng vision model.

H10: QuantTrade / PyNhiQuaiBot?
Bot hedging nâng cao dùng Python để đọc dữ liệu, ra quyết định, tự động hóa — tư duy gọi API và xử lý lỗi hôm nay chính là nền của lộ trình đó.

H11: max_tokens bị báo lỗi với OpenAI?
Một số model mới dùng max_completion_tokens thay vì max_tokens. Nếu gặp lỗi 400, đổi tên tham số cho khớp tài liệu model.

H12: Có cần vòng lặp while True không?
Với bot cảnh báo thì có (như Ngày 51). Với gọi AI một lần thì không — gọi xong là xong.

H13: AI trả lời sai (hallucination) thì sao?
AI sinh văn bản xác suất nên có thể “bịa”. Luôn yêu cầu AI trích nguồn, hoặc kiểm tra chéo bằng code khi output là dữ liệu cần chính xác.

H14: Dữ liệu tôi gửi lên API có được lưu không?
Tùy điều khoản từng nền tảng — thường có tùy chọn không lưu (no-retention) cho khách trả phí. Đọc chính sách trước khi gửi dữ liệu nhạy cảm.


12. Kết luận

Ngày 52 đã cho bạn một siêu năng lực: gọi AI từ Python chỉ với vài dòng urllib. Bạn học được:

  • Cấu trúc POST JSON + API key cho cả Anthropic lẫn OpenAI.
  • Đọc response kiểu content blocks (Claude) và choices (OpenAI).
  • Xử lý lỗi 401/429/timeout đúng cách.
  • Nền tảng để xây bot AI, tóm tắt, sentiment, tự động hóa.

Thực hành: đổi prompt của main() thành “giải thích đoạn code sau”, hoặc “tóm tắt tin này”, rồi chạy lại — bạn sẽ thấy chỉ cần đổi 1 dòng là AI làm việc khác.

Hẹn gặp Ngày 53 — web scraping giá coin bằng BeautifulSoup, kết hợp thêm dữ liệu từ web vào pipeline AI của bạn!

Cầu nối khóa PyNhiQuaiBot · QuantTrade

Cùng tư duy đọc dữ liệu → xử lý bằng Python → tự động hóa, khóa PyNhiQuaiBot (định vị quant trên fanpage: QuantTrade · Master Quantitative Trading) là lộ trình thực chiến bot hedging và tự động hóa nâng cao. Đăng ký tại hub: https://www.huongnghiepdulieu.com/lap-trinh-python-nang-cao-hedging-tu-dong-hoa/

QuantTrade là cách giới thiệu khóa PyNhiQuaiBot cho audience quant finance — cùng một khóa, không phải khóa riêng.

Theo dõi chuỗi Python 365 ngày: https://www.youtube.com/playlist?list=PLlvatcRiI_TLt4teIBQgtXBlGLAerk9Ce

Hashtag gợi ý: #Python365 · #HướngNghiệpDữLiệu · #Python · #DataPass

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
1.344 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.