• 24ºC, Clouds
  • Wednesday, 21st January, 2026
  • Trang Chủ
  • Bộ Lọc
  • Nhận Định Thị Trường
  • Phân Tích Doanh Nghiệp
  • Amibroker
    • Code AFL
    • Tự học Amibroker
  • Kiến Thức Đầu Tư
    • Chỉ Báo Kỹ Thuật
    • Phân Tích Cơ Bản
    • Phương Pháp Sóng Elliot
    • Phương Pháp Wyckoff/VSA
    • Vĩ Mô Liên Thị Trường
  • Liên hệ
  • Giới Thiệu
Mới Nhất
  • Phân tích VN-Index ngày 11/08
  • Phân tích HAH
  • Bài 46: Trở thành nhà giao dịch chuyên nghiệp
  • Bài 45: GFX Functions – Bảng trạng thái giao dịch Amibroker
  1. Trang chủ
  2. Amibroker
  3. Tự học Amibroker
  4. Bài 41: Alerts – Cảnh báo email chiến lược giao dịch
Bài 41: Alerts – Cảnh báo email chiến lược giao dịch

Xem nhanh:

  • Hướng Dẫn Chi Tiết Cài Đặt Cảnh Báo Email & Âm Thanh Trong Amibroker AFL Cho Chiến Lược Giao Dịch
  • 1. Chiến Lược Giao Dịch Cùng Cảnh Báo
  • 1.1. Giải quyết vấn đề Repainting (Vẽ lại tín hiệu)
  • 2. Tích Hợp Hàm Alert() Cho Cảnh Báo Email & Âm Thanh
  • Các điểm cần lưu ý:
  • 3. Đảm Bảo Amibroker Chạy 24/7 Để Nhận Alerts

Hướng Dẫn Chi Tiết Cài Đặt Cảnh Báo Email & Âm Thanh Trong Amibroker AFL Cho Chiến Lược Giao Dịch

Chào các bạn! Tiếp nối các bài viết về hệ thống cảnh báo (Alerts) trong Amibroker, hôm nay chúng ta sẽ đi sâu vào việc tích hợp hàm Alert() vào một chiến lược giao dịch thực tế để nhận thông báo qua email và âm thanh. Đồng thời, chúng ta sẽ tìm hiểu cách giải quyết vấn đề “repainting” (vẽ lại tín hiệu) thường gặp trong Amibroker và các phương án để chạy hệ thống cảnh báo 24/7.

1. Chiến Lược Giao Dịch Cùng Cảnh Báo

Hãy xem xét một chiến lược giao dịch đơn giản làm ví dụ:

  • Chỉ báo: Đường trung bình động EMA 100 và chỉ báo RSI.
  • Điều kiện MUA:
    • Giá đóng cửa (Close) cắt lên trên EMA 100.
    • RSI lớn hơn 60.
  • Điều kiện BÁN:
    • Giá đóng cửa (Close) cắt xuống dưới EMA 100.
    • RSI nhỏ hơn 40.

1.1. Giải quyết vấn đề Repainting (Vẽ lại tín hiệu)

Một vấn đề phổ biến khi sử dụng dữ liệu giá Close để tạo tín hiệu trong Amibroker là “repainting”. Điều này xảy ra khi tín hiệu xuất hiện trên một thanh nến nhưng sau đó biến mất hoặc thay đổi trên các thanh nến sau đó (ví dụ: khi backtesting với “End-of-bar” nhưng tín hiệu tính toán dựa trên “Current-bar”). Để đảm bảo tín hiệu cảnh báo của bạn không bị vẽ lại và phản ánh đúng thực tế, chúng ta sẽ dịch chuyển tín hiệu sang thanh nến tiếp theo bằng cách sử dụng hàm Ref():

//_SECTION_BEGIN("Strategy with Email/Sound Alerts");

// Chỉ báo
EMA100 = EMA(Close, 100);
RSI_Val = RSI(14); // RSI 14 kỳ

// Điều kiện MUA và BÁN
BuyConditionRaw = Cross(Close, EMA100) AND RSI_Val > 60;
SellConditionRaw = Cross(EMA100, Close) AND RSI_Val < 40;

// CHỐNG REPAINTING: Dịch chuyển tín hiệu sang thanh nến tiếp theo
// Tín hiệu mua sẽ thực hiện vào Open của thanh nến tiếp theo
Buy = Ref(BuyConditionRaw, -1);
Sell = Ref(SellConditionRaw, -1);

// Xác định giá vào lệnh thực tế (Open của thanh nến tiếp theo sau tín hiệu)
BuyPrice = Open;
SellPrice = Open;

//_SECTION_END();

Bằng cách sử dụng Ref(Condition, -1), tín hiệu mua/bán sẽ được kích hoạt trên thanh nến tiếp theo sau khi điều kiện ban đầu thỏa mãn. Khi đó, giá vào lệnh sẽ là giá Open của thanh nến đó, đảm bảo tính nhất quán và không bị repainting.

2. Tích Hợp Hàm Alert() Cho Cảnh Báo Email & Âm Thanh

Để kiểm soát việc bật/tắt cảnh báo một cách linh hoạt, chúng ta có thể tạo một tham số bật/tắt (toggle parameter).

//_SECTION_BEGIN("Alert Implementation");

// ... (phần code chiến lược phía trên) ...

// Tham số bật/tắt Alerts
AllowAlerts = ParamToggle("Cho phép Alerts", "TẮT|BẬT", 0); // 0 = TẮT (mặc định)

if (AllowAlerts) // Chỉ kích hoạt Alerts khi tham số này được BẬT
{
    // Cảnh báo MUA
    // Boolean_Expression: Buy (tín hiệu Buy đã được chống repainting)
    // Command: Phát âm thanh và Gửi Email
    // Text: Nội dung email/popup (sử dụng Name() cho mã, FullName() cho tên đầy đủ)
    // Type: 1 (cho tín hiệu Mua)
    // Flags: 15 (1+2+4+8) để hiển thị trong Output, phát bip, và CHỈ cảnh báo một lần
    AlertIf(Buy, 
          "Sound(\"C:\\Windows\\Media\\notify.wav\"); Email(\"dia_chi_email_nhan@example.com\", \"" + FullName() + " (" + Name() + ") - TIN HIEU MUA\");",
          FullName() + " (" + Name() + ") da co tin hieu MUA tai gia: " + NumToStr(BuyPrice, 1.2) + ". RSI: " + NumToStr(RSI_Val, 1.0),
          1, // Type 1: Buy
          1 + 2 + 4 + 8 // Flags: Output + Beep + No repeats
         );

    // Cảnh báo BÁN
    AlertIf(Sell,
          "Sound(\"C:\\Windows\\Media\\Windows Ding.wav\"); Email(\"dia_chi_email_nhan@example.com\", \"" + FullName() + " (" + Name() + ") - TIN HIEU BAN\");",
          FullName() + " (" + Name() + ") da co tin hieu BAN tai gia: " + NumToStr(SellPrice, 1.2) + ". RSI: " + NumToStr(RSI_Val, 1.0),
          2, // Type 2: Sell
          1 + 2 + 4 + 8 // Flags: Output + Beep + No repeats
         );
}

// Lọc tín hiệu để hệ thống giao dịch hoạt động (nếu có backtest)
Buy = ExRem(Buy, Sell);
Sell = ExRem(Sell, Buy);

// Vẽ biểu đồ và tín hiệu (Tùy chọn)
Plot(Close, "Close", colorBlack, styleCandle);
Plot(EMA100, "EMA 100", colorBlue, styleLine);
Plot(RSI_Val, "RSI", colorGreen, styleLine);
Plot(60, "RSI 60", colorOrange, styleDashed);
Plot(40, "RSI 40", colorRed, styleDashed);

PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), colorGreen, 0, Low, -10);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed, 0, High, -10);

//_SECTION_END();

Các điểm cần lưu ý:

  • FullName() vs. Name(): FullName() trả về tên đầy đủ của công cụ (ví dụ: “Reliance Industries Ltd.”), trong khi Name() trả về mã chứng khoán (ví dụ: “RELIANCE”). Sử dụng cả hai giúp thông tin trong email rõ ràng hơn.
  • NumToStr(Value, Format): Hàm này chuyển đổi giá trị số thành chuỗi văn bản, với khả năng định dạng số thập phân.
  • Flags (1+2+4+8): Đây là giá trị mặc định (15).
    • 1: Hiển thị văn bản trong cửa sổ Output.
    • 2: Phát âm thanh beep.
    • 4: Không lặp lại cảnh báo có cùng loại trong cùng một thanh nến.
    • 8: Không lặp lại cảnh báo có cùng loại trong cùng một ngày.
    • Trong quá trình thử nghiệm, bạn có thể chỉ dùng 1 + 2 để xem tất cả các cảnh báo, nhưng khi triển khai thực tế, luôn dùng 15 để tránh “spam” cảnh báo.

3. Đảm Bảo Amibroker Chạy 24/7 Để Nhận Alerts

Mục đích chính của Alerts là nhận thông báo khi bạn không ngồi trước máy tính. Điều này yêu cầu Amibroker phải luôn hoạt động và nhận dữ liệu thời gian thực.

  • Máy tính chuyên dụng: Cách tốt nhất là có một máy tính (hoặc VPS – Virtual Private Server) chạy Amibroker liên tục.
  • Phần mềm truy cập từ xa: Bạn có thể sử dụng các phần mềm như TeamViewer, AnyDesk hoặc Chrome Remote Desktop để truy cập và kiểm tra Amibroker từ điện thoại hoặc máy tính bảng của mình.
  • Tablet/Smartphone chạy Windows: Một số máy tính bảng hoặc điện thoại thông minh chạy Windows (như Surface Pro) có thể cài đặt Amibroker đầy đủ, cho phép bạn mang theo hệ thống cảnh báo bên mình.

Lưu ý quan trọng: Amibroker không gửi tín hiệu khi nó tắt. Mục đích của alerts là thông báo cho bạn khi thị trường đang chạy và bạn không thể theo dõi trực tiếp.


Việc tích hợp Alerts tùy chỉnh bằng hàm Alert() vào chiến lược giao dịch trong Amibroker mang lại sự linh hoạt và kiểm soát tối đa. Bằng cách kết hợp các kỹ thuật chống repainting và cấu hình alerts phù hợp, bạn có thể xây dựng một hệ thống thông báo mạnh mẽ, giúp bạn không bao giờ bỏ lỡ một cơ hội giao dịch nào.

  • trancotam
❮ Prev Next ❯
Chia sẻ: Facebook WhatsApp Twitter
Chia sẻ với ứng dụng khác

Tin Xem Nhiều

Bài 1: Chiến Lược Bảo Vệ Vốn Hiệu Quả Khi Đầu Tư (Phần 1)
Chỉ Báo Kỹ Thuật
Bài 1: Chiến Lược Bảo Vệ Vốn Hiệu Quả Khi Đầu Tư…
21 Tháng 5, 2025
Phân tích BFC
Phân Tích Doanh Nghiệp
Phân tích BFC
14 Tháng 7, 2025
Bài 46: Trở thành nhà giao dịch chuyên nghiệp
Tự học Amibroker
Bài 46: Trở thành nhà giao dịch chuyên nghiệp
22 Tháng 6, 2025
Phân tích HAH
Phân Tích Doanh Nghiệp
Phân tích HAH
15 Tháng 7, 2025
Bảng công cụ phân tích thị trường
Chưa phân loại
Bảng công cụ phân tích thị trường
13 Tháng 5, 2025
Donation
Phóng to ảnh

TADOSO là nền tảng chia sẻ kiến thức và kinh nghiệm đầu tư tài chính, đặc biệt trong lĩnh vực chứng khoán, nhằm kết nối và nâng cao tư duy cho nhà đầu tư cá nhân tại Việt Nam. Với triết lý "Tạo dựng – Đồng hành – Sở hữu", TADOSO hướng đến xây dựng cộng đồng học hỏi minh bạch, trung lập, không bị chi phối bởi tổ chức tài chính nào.

Newsletter

Hãy để lại mail để chúng tôi có thể phục vụ bạn tốt hơn

Donation - Buy me a coffee

Donation

Copyright © All rights reserved | This template is made with by Tran Co Tam

  • Terms of use
  • Privacy Policy
  • Contact
Zalo Messenger
×

Liên hệ