Skip to main content

17 posts tagged with "Python"

Posts related to Python programming

View All Tags

Đặ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

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

Lấy Dữ liệu OHLC từ 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 để lấy dữ liệu OHLC từ nền tảng MetaTrader 5 (MT5) bằng thư viện MetaTrader5.

Mã nguồn

import MetaTrader5 as mt5
from datetime import datetime
import pandas as pd

# Kết nối tới MetaTrader 5
if not mt5.initialize():
print("Khởi tạo MT5 không thành công")
mt5.shutdown()

symbol = 'EURUSD.sml'
from_date_str = datetime.strptime('2025-03-01', '%Y-%m-%d')
to_date_str = datetime.strptime('2025-03-05', '%Y-%m-%d')
timeframe = mt5.TIMEFRAME_M1

# Lấy dữ liệu OHLC cho cặp tiền symbol trong khoảng thời gian đã xác định
ohlc_data = mt5.copy_rates_range(symbol, timeframe, from_date_str, to_date_str)
print('OHLC_Data')
print(ohlc_data)

Giải thích

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

    • mt5.initialize(): Kết nối với nền tảng MetaTrader 5.
    • Nếu không thành công, chương trình sẽ thoát.
  2. Xác định tham số

    • symbol: Cặp tiền tệ cần lấy dữ liệu (EURUSD.sml).
    • from_date_strto_date_str: Khoảng thời gian cần lấy dữ liệu.
    • timeframe: Khung thời gian (M1 - 1 phút).
  3. Lấy dữ liệu OHLC

    • mt5.copy_rates_range(symbol, timeframe, from_date_str, to_date_str): Truy vấn dữ liệu giá.
    • In dữ liệu nhận được.

Cải tiến

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

if ohlc_data is not None and len(ohlc_data) > 0:
df = pd.DataFrame(ohlc_data)
print(df.head())
else:
print("Không có dữ liệu OHLC")

Xử lý lỗi khi lấy dữ liệu

if ohlc_data is None:
print("Lỗi: Không thể lấy dữ liệu OHLC từ MT5")

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

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

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

Xác thực Token với ssi_fc_data

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách xác thực token khi sử dụng thư viện ssi_fc_data để lấy dữ liệu thị trường từ fc_md_client.

Mã nguồn

from ssi_fc_data import fc_md_client, model
import config

# Khởi tạo client từ fc_md_client
client = fc_md_client.MarketDataClient(config)

# Hàm xác thực token với xử lý lỗi
def Xacthuc_token():
try:
token = model.accessToken(config.consumerID, config.consumerSecret)
response = client.access_token(token)
print("Token xác thực:", response)
except Exception as e:
print("Lỗi xác thực token:", str(e))

# Gọi hàm
Xacthuc_token()

Giải thích

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

    • ssi_fc_data: Thư viện để lấy dữ liệu chứng khoán SSI.
    • fc_md_client: Module kết nối dữ liệu thị trường.
    • model: Chứa phương thức xác thực.
    • config: Chứa consumerIDconsumerSecret để xác thực.
  2. Khởi tạo client

    • MarketDataClient(config): Tạo client để truy cập dữ liệu thị trường.
  3. Hàm xác thực token

    • model.accessToken(config.consumerID, config.consumerSecret): Lấy token.
    • client.access_token(token): Xác thực token với server.
    • In kết quả hoặc thông báo lỗi nếu có.
  4. Gọi hàm

    • Xacthuc_token(): Chạy quy trình xác thực.

Cải tiến

Xử lý lỗi: Tránh lỗi khi config sai hoặc server lỗi. ✅ Thông báo rõ ràng: Báo lỗi cụ thể nếu xác thực thất bại. ✅ Dễ bảo trì hơn: Code có cấu trúc rõ ràng.


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

Cách lấy dữ liệu cổ phiếu từ yfinance với Python

· 3 min read

1️⃣ Giới thiệu về yfinance

yfinance là một thư viện Python giúp bạn dễ dàng lấy dữ liệu chứng khoán từ Yahoo Finance. Bạn có thể sử dụng nó để:
✅ Tải dữ liệu giá cổ phiếu theo thời gian thực
✅ Truy xuất dữ liệu lịch sử (daily, weekly, monthly)
✅ Lấy thông tin tài chính của công ty (P/E, EPS, Market Cap, ...)
✅ Phân tích các chỉ số quan trọng như Volume, Moving Average

Dữ liệu cổ phiếu từ yfinance


2️⃣ Cài đặt thư viện yfinance

Trước khi sử dụng yfinance, bạn cần cài đặt thư viện này bằng lệnh:

pip install yfinance

Nếu bạn chưa có thư viện pandas, hãy cài đặt luôn:

pip install pandas

3️⃣ Cách lấy dữ liệu giá cổ phiếu

📌 Lấy dữ liệu cổ phiếu theo mã chứng khoán

Dưới đây là cách lấy giá cổ phiếu của AAPL (Apple) từ Yahoo Finance:

import yfinance as yf

# Lấy dữ liệu cổ phiếu Apple
apple = yf.Ticker("AAPL")

# Xem thông tin chung về cổ phiếu
print(apple.info)

📌 Lấy dữ liệu giá lịch sử

Bạn có thể lấy giá cổ phiếu trong quá khứ với các khoảng thời gian khác nhau:

# Lấy dữ liệu giá lịch sử trong 1 năm qua
df = apple.history(period="1y")

# Hiển thị 5 dòng đầu tiên
print(df.head())

Bạn có thể thay đổi period để lấy dữ liệu trong thời gian khác như:

  • "1d" – Lấy dữ liệu trong 1 ngày
  • "5d" – 5 ngày
  • "1mo" – 1 tháng
  • "6mo" – 6 tháng
  • "1y" – 1 năm
  • "5y" – 5 năm
  • "max" – Toàn bộ lịch sử

4️⃣ Trực quan hóa dữ liệu giá cổ phiếu

Bạn có thể vẽ biểu đồ giá cổ phiếu với matplotlib như sau:

import matplotlib.pyplot as plt

# Vẽ biểu đồ giá đóng cửa
df['Close'].plot(figsize=(12,6), title="Giá cổ phiếu AAPL")
plt.xlabel("Ngày")
plt.ylabel("Giá đóng cửa (USD)")
plt.show()

📌 Kết quả:
Biểu đồ giá cổ phiếu Apple


5️⃣ Lấy dữ liệu nhiều cổ phiếu cùng lúc

Bạn có thể tải dữ liệu của nhiều cổ phiếu cùng một lúc bằng cách:

# Danh sách các mã chứng khoán
tickers = ["AAPL", "GOOGL", "MSFT", "AMZN"]

# Tải dữ liệu của nhiều cổ phiếu
data = yf.download(tickers, period="1y")

# Hiển thị dữ liệu
print(data.head())

6️⃣ Kết luận

yfinance là công cụ mạnh mẽ giúp bạn thu thập dữ liệu chứng khoán dễ dàng.
✅ Bạn có thể lấy dữ liệu lịch sử, giá theo thời gian thực và thông tin tài chính chỉ với vài dòng code.
✅ Kết hợp với pandasmatplotlib, bạn có thể phân tích và trực quan hóa dữ liệu hiệu quả.

Bạn muốn tìm hiểu thêm về cách phân tích cổ phiếu bằng Python? Hãy để lại bình luận bên dưới nhé! 🚀📈

Dự Đoán Giá Cổ Phiếu với Python: Hồi Quy Tuyến Tính, ARIMA, LSTM

· 4 min read

1. Giới thiệu

Dự đoán giá cổ phiếu là một trong những ứng dụng phổ biến của Machine Learning trong tài chính. Trong bài viết này, chúng ta sẽ khám phá ba mô hình chính:

  • Hồi quy tuyến tính (Linear Regression)
  • ARIMA (AutoRegressive Integrated Moving Average)
  • LSTM (Long Short-Term Memory - Mạng neuron hồi tiếp)

2. Cách lấy dữ liệu cổ phiếu từ yfinance

Chúng ta sẽ sử dụng thư viện yfinance để lấy dữ liệu giá cổ phiếu từ Yahoo Finance.

Cài đặt thư viện

pip install yfinance pandas numpy matplotlib scikit-learn tensorflow

Lấy dữ liệu cổ phiếu

import yfinance as yf

# Lấy dữ liệu cổ phiếu của Apple (AAPL) trong 5 năm
stock_data = yf.download("AAPL", start="2018-01-01", end="2023-01-01")

# Hiển thị 5 dòng dữ liệu đầu tiên
print(stock_data.head())

3. Mô hình Hồi Quy Tuyến Tính

Hồi quy tuyến tính là mô hình cơ bản nhất để dự đoán giá cổ phiếu dựa trên xu hướng lịch sử.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Chuẩn bị dữ liệu
stock_data['Date'] = stock_data.index
stock_data['Date'] = stock_data['Date'].map(pd.Timestamp.toordinal)

X = stock_data[['Date']]
y = stock_data['Close']

# Chia dữ liệu thành tập train/test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Huấn luyện mô hình
model = LinearRegression()
model.fit(X_train, y_train)

# Dự đoán
y_pred = model.predict(X_test)

# Vẽ biểu đồ
plt.figure(figsize=(10,5))
plt.scatter(X_test, y_test, color='blue', label='Thực tế')
plt.plot(X_test, y_pred, color='red', label='Dự đoán')
plt.xlabel("Ngày")
plt.ylabel("Giá đóng cửa")
plt.title("Dự đoán giá cổ phiếu bằng Linear Regression")
plt.legend()
plt.show()

4. Mô hình ARIMA

ARIMA là mô hình thống kê phổ biến trong phân tích chuỗi thời gian.

from statsmodels.tsa.arima.model import ARIMA

# Xây dựng mô hình ARIMA
model_arima = ARIMA(y, order=(5,1,0))
model_arima_fit = model_arima.fit()

# Dự đoán giá cổ phiếu
forecast = model_arima_fit.forecast(steps=30)

# Hiển thị kết quả
plt.figure(figsize=(10,5))
plt.plot(y, label="Thực tế")
plt.plot(range(len(y), len(y)+30), forecast, label="Dự đoán", color='red')
plt.legend()
plt.title("Dự đoán giá cổ phiếu bằng ARIMA")
plt.show()

5. Mô hình LSTM

LSTM là một loại mạng nơ-ron hồi tiếp (RNN) rất hiệu quả trong dự đoán chuỗi thời gian.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM

# Tiền xử lý dữ liệu
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(y.values.reshape(-1,1))

# Chia dữ liệu thành train/test
train_size = int(len(scaled_data) * 0.8)
train_data, test_data = scaled_data[:train_size], scaled_data[train_size:]

# Chuẩn bị dữ liệu cho LSTM
def create_dataset(dataset, time_step=10):
X_data, Y_data = [], []
for i in range(len(dataset) - time_step - 1):
X_data.append(dataset[i:(i+time_step), 0])
Y_data.append(dataset[i + time_step, 0])
return np.array(X_data), np.array(Y_data)

time_step = 10
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

# Xây dựng mô hình LSTM
model_lstm = Sequential([
LSTM(50, return_sequences=True, input_shape=(time_step,1)),
LSTM(50, return_sequences=False),
Dense(25),
Dense(1)
])

# Biên dịch và huấn luyện mô hình
model_lstm.compile(optimizer='adam', loss='mean_squared_error')
model_lstm.fit(X_train, y_train, epochs=50, batch_size=32)

# Dự đoán
predictions = model_lstm.predict(X_test)

# Chuyển dữ liệu về giá trị ban đầu
predictions = scaler.inverse_transform(predictions.reshape(-1,1))

# Hiển thị kết quả
plt.figure(figsize=(10,5))
plt.plot(y, label="Thực tế")
plt.plot(range(train_size+time_step+1, len(y)), predictions, label="Dự đoán LSTM", color='red')
plt.legend()
plt.title("Dự đoán giá cổ phiếu bằng LSTM")
plt.show()

6. Kết luận

Chúng ta đã khám phá ba mô hình phổ biến trong dự đoán giá cổ phiếu:

  • Hồi quy tuyến tính: Đơn giản nhưng ít hiệu quả với dữ liệu phi tuyến.
  • ARIMA: Tốt cho chuỗi thời gian nhưng hạn chế với dữ liệu phi tuyến.
  • LSTM: Mạnh mẽ nhưng cần nhiều dữ liệu và thời gian huấn luyện.

Bạn có thể thử nghiệm thêm với các mô hình khác để cải thiện độ chính xác. 🚀


📢 Xem thêm:

Học SQL trước khi học Python cho người mới bắt đầu

· 3 min read

Python là một ngôn ngữ lập trình mạnh mẽ và dễ học, đặc biệt hữu ích khi làm việc với dữ liệu. Một trong những kỹ năng quan trọng mà bất kỳ ai làm việc với dữ liệu cũng cần biết là SQL (Structured Query Language) – ngôn ngữ dùng để thao tác với cơ sở dữ liệu.

Python & SQL

1. Tại sao cần học SQL khi học Python?

  • Kết nối dữ liệu dễ dàng: Hầu hết các ứng dụng thực tế đều cần truy vấn dữ liệu từ cơ sở dữ liệu như MySQL, PostgreSQL, SQLite.
  • Khai thác dữ liệu hiệu quả: SQL giúp truy xuất, lọc, nhóm dữ liệu nhanh chóng trước khi xử lý bằng Python.
  • Tích hợp với thư viện phân tích dữ liệu: Pandas hỗ trợ tích hợp SQL để làm việc với dữ liệu thuận tiện hơn.

2. Cài đặt SQLite để thực hành

SQLite là một cơ sở dữ liệu nhẹ, không cần cài đặt máy chủ, rất phù hợp cho người mới học.

Cài đặt SQLite trong Python

Trước tiên, bạn cần cài đặt thư viện SQLite nếu chưa có:

import sqlite3

Bạn có thể tạo một kết nối đến một file database SQLite như sau:

conn = sqlite3.connect("my_database.db")  # Kết nối đến file database
cursor = conn.cursor() # Tạo con trỏ để thao tác với dữ liệu

3. Các thao tác SQL cơ bản với Python

3.1. Tạo bảng trong SQLite

Khi làm việc với SQL, bạn cần tạo bảng để lưu trữ dữ liệu.

Tạo bảng SQL

Ví dụ:

cursor.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)
''')
conn.commit()

3.2. Chèn dữ liệu vào bảng

Sau khi có bảng, bạn có thể thêm dữ liệu vào bằng câu lệnh INSERT:

cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
conn.commit()

3.3. Truy vấn dữ liệu với SQL

Bạn có thể sử dụng SELECT để lấy dữ liệu từ bảng:

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall() # Lấy toàn bộ kết quả
for row in rows:
print(row)

📌 Kết quả mong đợi:

(1, 'Alice', 25)
(2, 'Bob', 30)

3.4. Cập nhật dữ liệu

Nếu bạn muốn cập nhật dữ liệu, sử dụng UPDATE:

cursor.execute("UPDATE users SET age = 26 WHERE name = 'Alice'")
conn.commit()

3.5. Xóa dữ liệu

Xóa một dòng dữ liệu với DELETE:

cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()

4. Kết hợp SQL với Pandas

Bạn có thể sử dụng Pandas để đọc dữ liệu trực tiếp từ SQL vào DataFrame:

Pandas & SQL

import pandas as pd

df = pd.read_sql_query("SELECT * FROM users", conn)
print(df)

5. Kết luận

  • SQL là một kỹ năng quan trọng khi làm việc với dữ liệu.
  • Python hỗ trợ tốt việc thao tác SQL với thư viện sqlite3pandas.
  • Biết cách sử dụng SQL trong Python sẽ giúp bạn xử lý dữ liệu hiệu quả hơn.

Bạn đã sẵn sàng học SQL cùng Python chưa? Hãy thử ngay trên máy của bạn! 🚀

Tích hợp dữ liệu trong giao dịch tự động

· 3 min read

1️⃣ Tại sao cần tích hợp dữ liệu?

Dữ liệu là xương sống của bất kỳ hệ thống giao dịch tự động nào. Một chiến lược giao dịch tốt phải dựa trên dữ liệu chính xác, cập nhật liên tục. Việc tích hợp dữ liệu giúp:

Cập nhật giá theo thời gian thực – Giúp bot phản ứng nhanh với thị trường.
Lấy dữ liệu lịch sử – Dùng để backtest và tối ưu chiến lược.
Xử lý nhiều nguồn dữ liệu – Kết hợp giá, tin tức, chỉ báo kỹ thuật.


2️⃣ Các nguồn dữ liệu phổ biến

Dưới đây là một số nguồn dữ liệu thường được sử dụng trong giao dịch định lượng:

Nguồn dữ liệuMiêu tảAPI hỗ trợ
Yahoo Finance (yfinance)Dữ liệu cổ phiếu, tiền tệ, chỉ số, ETF miễn phíPython yfinance
Alpha VantageDữ liệu tài chính thời gian thựcAlpha Vantage API
BinanceDữ liệu tiền điện tử theo thời gian thựcBinance API
Polygon.ioDữ liệu chứng khoán, Forex, CryptoPolygon API
QuandlDữ liệu tài chính, kinh tế vĩ môQuandl API

3️⃣ Cách lấy dữ liệu từ Yahoo Finance

Ví dụ: Lấy dữ liệu giá cổ phiếu của Apple (AAPL) bằng yfinance.

import yfinance as yf

# Tải dữ liệu cổ phiếu AAPL trong 1 năm qua
data = yf.download("AAPL", period="1y")

# Hiển thị 5 dòng đầu tiên
print(data.head())

🔹 Giải thích:

  • yf.download("AAPL", period="1y"): Lấy dữ liệu giá của AAPL trong 1 năm qua.
  • Dữ liệu bao gồm: Open, High, Low, Close, Volume.

4️⃣ Kết nối API Binance để lấy dữ liệu Crypto

Dưới đây là cách lấy dữ liệu giá BTC/USDT từ Binance API:

import requests

url = "https://api.binance.com/api/v3/klines"
params = {
"symbol": "BTCUSDT",
"interval": "1d",
"limit": 10
}

response = requests.get(url, params=params)
data = response.json()

# In dữ liệu 10 ngày gần nhất
for candle in data:
print(f"Thời gian: {candle[0]}, Giá đóng cửa: {candle[4]}")

🔹 Giải thích:

  • API Binance cung cấp dữ liệu giá Bitcoin (BTC) theo từng ngày (1d).
  • limit=10: Lấy 10 ngày gần nhất.
  • Mỗi "candle" chứa giá mở cửa, cao nhất, thấp nhất, đóng cửa và khối lượng giao dịch.

5️⃣ Xử lý và lưu trữ dữ liệu

Sau khi lấy dữ liệu, bạn có thể lưu vào file CSV hoặc database để xử lý sau này.

import pandas as pd

# Lưu dữ liệu vào CSV
data.to_csv("aapl_stock.csv")

# Đọc lại từ file
df = pd.read_csv("aapl_stock.csv")
print(df.head())

🔹 Giải thích:

  • to_csv("aapl_stock.csv"): Lưu dữ liệu vào file CSV.
  • pd.read_csv("aapl_stock.csv"): Đọc lại dữ liệu từ file.

🔥 Tổng kết

Tích hợp dữ liệu là bước quan trọng trong giao dịch tự động.
Có nhiều nguồn dữ liệu như Yahoo Finance, Binance, Alpha Vantage.
Dữ liệu có thể lấy theo API và lưu trữ để xử lý.

📌 Bước tiếp theo: Kết hợp dữ liệu này vào chiến lược giao dịch tự động! 🚀

Tự Động Hóa Chiến Lược Giao Dịch với Python: schedule vs while True

· 4 min read
ChatGPT

🔥 Giới thiệu

Tự động hóa là một yếu tố quan trọng trong giao dịch định lượng (quantitative trading). Việc lên lịch trình thực hiện các lệnh giao dịch hoặc thu thập dữ liệu tài chính một cách tự động giúp giảm thiểu sai sót, tiết kiệm thời gian và tối ưu chiến lược.

Trong Python, có hai phương pháp phổ biến để tự động hóa chiến lược giao dịch theo khung thời gian (timeframe):

  1. Sử dụng thư viện schedule - Thích hợp để chạy nhiệm vụ theo lịch trình cố định.
  2. Sử dụng vòng lặp while True + time.sleep() - Phù hợp khi cần linh hoạt kiểm soát thời gian chạy.

📌 1. Tự động hóa với schedule

Thư viện schedule giúp lập lịch chạy các tác vụ mà không cần vòng lặp vô hạn, giúp tiết kiệm tài nguyên.

✅ Cài đặt thư viện

pip install schedule

✅ Ví dụ: Lấy dữ liệu giá cổ phiếu mỗi 5 phút

import schedule
import time
import yfinance as yf

def fetch_stock_data():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

# Lên lịch chạy mỗi 5 phút
schedule.every(5).minutes.do(fetch_stock_data)

while True:
schedule.run_pending()
time.sleep(1)

👉 Ưu điểm: Code dễ đọc, không chiếm CPU nhiều.
👉 Nhược điểm: Không phù hợp nếu cần kiểm soát thời gian thực.


📌 2. Tự động hóa với while True + time.sleep()

Dùng vòng lặp while True giúp linh hoạt hơn, nhưng cần tối ưu để tránh quá tải CPU.

✅ Ví dụ: Lấy dữ liệu giá cổ phiếu mỗi 30 giây

import time
import yfinance as yf

def fetch_stock_data():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

while True:
fetch_stock_data()
time.sleep(30)

👉 Ưu điểm: Kiểm soát linh hoạt thời gian chạy.
👉 Nhược điểm: Có thể gây tải CPU nếu không tối ưu.


📊 3. So sánh schedule vs while True

Tiêu chíschedulewhile True
Dễ sử dụng✅ Dễ⚠️ Cần kiểm soát
Hiệu suất✅ Tốt⚠️ Có thể tiêu tốn CPU
Linh hoạt⚠️ Hạn chế✅ Cao
Đa nhiệm⚠️ Hạn chế✅ Dễ kết hợp với threading

📌 4. Khi nào dùng schedule? Khi nào dùng while True?

🔹 Dùng schedule khi:
✔️ Chạy tác vụ theo lịch trình cố định (mỗi ngày, mỗi giờ, mỗi phút).
✔️ Không cần chạy liên tục theo thời gian thực.

🔹 Dùng while True khi:
✔️ Cần chạy liên tục để xử lý dữ liệu theo thời gian thực.
✔️ Muốn linh hoạt kiểm soát thời gian chạy của bot giao dịch.


🚀 5. Kết hợp schedule & while True trong bot giao dịch

Dưới đây là cách kết hợp cả hai phương pháp để tạo bot giao dịch tự động theo timeframe.

✅ Ví dụ: Bot giao dịch chỉ chạy trong khung giờ thị trường mở

import schedule
import time
import yfinance as yf

def trade_bot():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

if 9 <= time.localtime().tm_hour < 16:
print("=> Đang phân tích tín hiệu giao dịch...")

schedule.every(1).minutes.do(trade_bot)

while True:
schedule.run_pending()
time.sleep(1)

Ưu điểm: Tối ưu tài nguyên, chỉ chạy bot trong giờ giao dịch.


📌 6. Tổng kết

  • Dùng schedule khi muốn tự động hóa theo lịch trình cố định.
  • Dùng while True khi cần kiểm soát thời gian thực.
  • Kết hợp cả hai để tối ưu hóa bot giao dịch.

Bạn đang xây dựng bot giao dịch tự động nào? 🚀 Hãy chia sẻ ý tưởng của bạn! 🎯