Lập trình tín hiệu giao dịch bằng biểu đồ nến và price action
2025-04-12 — Admin
Price action và mẫu nến là công cụ mạnh để xác định tín hiệu giao dịch. Bài viết này hướng dẫn bạn cách lập trình nhận diện các mẫu nến phổ biến và tự động hóa cảnh báo bằng Python.
1. Phân tích mẫu nến: Doji, Engulfing, Pin bar
- Doji: Nến có thân nhỏ, giá mở cửa và đóng cửa gần nhau, thể hiện sự lưỡng lự.
- Engulfing: Nến tăng/giảm lớn bao trùm hoàn toàn nến trước đó, báo hiệu đảo chiều.
- Pin bar: Nến có bóng dài, thân nhỏ, thể hiện lực từ chối giá mạnh.
2. Lập trình nhận diện pattern bằng ta và mplfinance
Nhận diện Doji, Engulfing, Pin bar:
import pandas as pd
import ta
import numpy as np
def is_doji(row, threshold=0.1):
return abs(row['Open'] - row['Close']) < threshold * (row['High'] - row['Low'])
def is_bullish_engulfing(df):
return (df['Close'].shift(1) < df['Open'].shift(1)) & \
(df['Close'] > df['Open']) & \
(df['Open'] < df['Close'].shift(1)) & (df['Close'] > df['Open'].shift(1))
def is_pinbar(row, ratio=2):
body = abs(row['Open'] - row['Close'])
upper = row['High'] - max(row['Open'], row['Close'])
lower = min(row['Open'], row['Close']) - row['Low']
return (upper > ratio * body) or (lower > ratio * body)
# Áp dụng cho DataFrame df
signals = pd.DataFrame()
signals['doji'] = df.apply(is_doji, axis=1)
signals['bullish_engulfing'] = is_bullish_engulfing(df)
signals['pinbar'] = df.apply(is_pinbar, axis=1)
Vẽ biểu đồ nến và highlight tín hiệu:
import mplfinance as mpf
apdict = [mpf.make_addplot(signals['doji']*df['High'], type='scatter', markersize=100, marker='o', color='orange')]
mpf.plot(df, type='candle', addplot=apdict, style='yahoo')
3. Tự động hóa hệ thống cảnh báo
- Gửi email, Telegram khi xuất hiện tín hiệu mạnh
- Lưu log, báo cáo các lần xuất hiện pattern
Ví dụ cảnh báo Telegram:
import requests
TELEGRAM_TOKEN = 'your_token'
TELEGRAM_CHAT_ID = 'your_chat_id'
def send_telegram(msg):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": TELEGRAM_CHAT_ID, "text": msg})
if signals['bullish_engulfing'].iloc[-1]:
send_telegram("Bullish Engulfing detected!")
Tổng kết
- Nhận diện mẫu nến giúp tăng xác suất giao dịch thành công
- Kết hợp lập trình Python với ta, mplfinance để tự động hóa phân tích và cảnh báo
- Có thể mở rộng với nhiều pattern và hệ thống alert khác
Chúc bạn thành công với price action và lập trình tín hiệu giao dịch!