Lập trình tín hiệu giao dịch bằng biểu đồ nến và price action

2025-04-12 — Admin

Lập trình tín hiệu giao dịch bằng biểu đồ nến và price action

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!

← Xem tất cả bài viết · Trang chủ