• 24ºC, Clear
  • 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 42: Alerts – Hàm say, play sound & send email
Bài 42: Alerts – Hàm say, play sound & send email

Xem nhanh:

  • Các Hàm Cảnh Báo Chuyên Biệt Trong Amibroker AFL: Say(), PlaySound(), SendEmail() và Ứng Dụng Thực Tế
  • 1. Các Hàm Hỗ Trợ Quan Trọng
  • a. SelectedValue( Array )
  • b. LastValue( Array )
  • c. Now()
  • 2. Các Hàm Cảnh Báo Chuyên Biệt
  • a. Hàm Say( Text )
  • b. Hàm PlaySound( FilePath )
  • c. Hàm SendEmail( Subject, Message )
  • 3. Tích Hợp Vào Chiến Lược Giao Dịch & Ví Dụ Thực Tế
  • 4. Cách Sử Dụng Mã AFL Này
  • 5. Lợi Ích & Lưu Ý Khi Sử Dụng Các Hàm Chuyên Biệt

Các Hàm Cảnh Báo Chuyên Biệt Trong Amibroker AFL: Say(), PlaySound(), SendEmail() và Ứng Dụng Thực Tế

Chào các bạn! Bên cạnh hàm Alert() đa năng, Amibroker Formula Language (AFL) còn cung cấp các hàm cảnh báo chuyên biệt khác giúp bạn tùy chỉnh thông báo một cách linh hoạt hơn. Hôm nay, chúng ta sẽ tìm hiểu về ba hàm quan trọng: Say() (nói), PlaySound() (phát âm thanh), và SendEmail() (gửi email), cùng với các hàm hỗ trợ như SelectedValue(), LastValue(), và Now().

1. Các Hàm Hỗ Trợ Quan Trọng

Trước khi đi vào các hàm cảnh báo chính, hãy hiểu rõ hai hàm giúp bạn lấy dữ liệu theo ngữ cảnh cụ thể:

a. SelectedValue( Array )

  • Chức năng: Trả về giá trị của Array tại thanh nến đang được chọn (select) trên biểu đồ.
  • Đặc điểm: Giá trị trả về thay đổi khi bạn di chuyển con trỏ chuột và chọn các thanh nến khác nhau. Nó hữu ích khi bạn muốn xem giá trị cụ thể tại một điểm nào đó trên biểu đồ mà bạn đang xem xét thủ công.
  • Ví dụ: SelectedValue(Close) sẽ trả về giá đóng cửa của thanh nến mà bạn click chuột vào.

b. LastValue( Array )

  • Chức năng: Trả về giá trị của Array tại thanh nến cuối cùng của dữ liệu đang được hiển thị.
  • Đặc điểm: Giá trị trả về không thay đổi dù bạn chọn thanh nến nào trên biểu đồ. Nó luôn lấy giá trị mới nhất hoặc cuối cùng trong chuỗi dữ liệu.
  • Ví dụ: LastValue(Close) sẽ trả về giá đóng cửa của thanh nến mới nhất/cuối cùng.

c. Now()

  • Chức năng: Trả về thời gian hiện tại của hệ thống (máy tính) dưới dạng giá trị ngày/giờ.
  • Ứng dụng: Hữu ích khi bạn muốn ghi lại thời điểm chính xác mà cảnh báo được kích hoạt trong nội dung email hoặc log.
  • Ví dụ: "Cảnh báo kích hoạt lúc: " + Now()

2. Các Hàm Cảnh Báo Chuyên Biệt

Các hàm này cho phép bạn kiểm soát chính xác loại cảnh báo nào sẽ được kích hoạt. Chúng thường được sử dụng trong các khối if hoặc trong chế độ khám phá (Exploration) của Amibroker.

a. Hàm Say( Text )

  • Chức năng: Amibroker sẽ đọc to (phát âm thanh giọng nói) nội dung Text bạn cung cấp. Điều này yêu cầu máy tính của bạn có cấu hình Text-to-Speech (chuyển văn bản thành giọng nói).
  • Cú pháp: Say( "Tín hiệu mua đã được tạo cho " + Name() )
  • Ứng dụng: Rất hữu ích khi bạn muốn nhận cảnh báo bằng giọng nói mà không cần nhìn màn hình hay kiểm tra email.

b. Hàm PlaySound( FilePath )

  • Chức năng: Phát một file âm thanh .wav được chỉ định từ đường dẫn FilePath trên máy tính của bạn.
  • Cú pháp: PlaySound( "C:\\Windows\\Media\\notify.wav" )
  • Ứng dụng: Cho phép bạn sử dụng các âm thanh tùy chỉnh cho các loại tín hiệu khác nhau (ví dụ: một âm thanh cho tín hiệu mua, một âm thanh khác cho tín hiệu bán) để dễ dàng nhận biết.

c. Hàm SendEmail( Subject, Message )

  • Chức năng: Gửi một email với Subject và Message được chỉ định.
  • Cú pháp: SendEmail( "Amibroker Alert: Tín hiệu MUA", "Mã: " + FullName() + ", Giá: " + Close + ", RSI: " + RSI_Val )
  • Ứng dụng: Cung cấp thông tin chi tiết qua email, giúp bạn kiểm tra và đưa ra quyết định từ xa.
  • Lưu ý quan trọng: Cần cấu hình cài đặt Email trong Amibroker (Tools -> Preferences -> Alerts -> Email Settings) và có Mật khẩu ứng dụng cho Gmail như đã hướng dẫn ở bài trước.

3. Tích Hợp Vào Chiến Lược Giao Dịch & Ví Dụ Thực Tế

Chiến lược mẫu của chúng ta sẽ dựa trên sự kết hợp của Đường trung bình động hàm mũ (EMA) và chỉ báo Relative Strength Index (RSI).

  • Chỉ báo sử dụng:
    • EMA 100: Xác định xu hướng chính.
    • RSI 14: Xác định điều kiện quá mua/quá bán và động lượng.
  • Điều kiện MUA:
    • Giá đóng cửa (Close) cắt lên trên đường EMA 100.
    • RSI 14 lớn hơn 60 (cho thấy động lượng tăng mạnh).
  • Điều kiện BÁN:
    • Giá đóng cửa (Close) cắt xuống dưới đường EMA 100.
    • RSI 14 nhỏ hơn 40 (cho thấy động lượng giảm mạnh).

, kết hợp với kỹ thuật chống repainting:

Dưới đây là toàn bộ mã AFL của chiến lược, sẵn sàng để bạn sao chép và sử dụng:

Code snippet

//_SECTION_BEGIN("Chiến Lược EMA-RSI Kèm Cảnh Báo Đầy Đủ");

// =========================================================
// 1. CÀI ĐẶT THAM SỐ CÁC CHỈ BÁO & CẢNH BÁO
// =========================================================

// Tham số cho EMA
EMAPeriod = Param("EMA Period", 100, 10, 200, 1);

// Tham số cho RSI
RSIPeriod = Param("RSI Period", 14, 5, 30, 1);
RSIBuyLevel = Param("RSI Buy Level", 60, 50, 80, 1);
RSISellLevel = Param("RSI Sell Level", 40, 20, 50, 1);

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

// =========================================================
// 2. TÍNH TOÁN CÁC CHỈ BÁO
// =========================================================
EMA_Val = EMA(Close, EMAPeriod);
RSI_Val = RSI(RSIPeriod);

// =========================================================
// 3. ĐỊNH NGHĨA ĐIỀU KIỆN MUA VÀ BÁN (RAW SIGNALS)
// =========================================================

// Điều kiện mua ban đầu (chưa chống repainting)
BuyConditionRaw = Cross(Close, EMA_Val) AND RSI_Val > RSIBuyLevel;

// Điều kiện bán ban đầu (chưa chống repainting)
SellConditionRaw = Cross(EMA_Val, Close) AND RSI_Val < RSISellLevel;

// =========================================================
// 4. XỬ LÝ CHỐNG REPAINTING & XÁC ĐỊNH GIÁ VÀO LỆNH
// =========================================================

// Dịch chuyển tín hiệu sang thanh nến tiếp theo để chống repainting
// Lệnh Buy sẽ kích hoạt vào Open của thanh nến tiếp theo
Buy = Ref(BuyConditionRaw, -1);
// Lệnh Sell sẽ kích hoạt vào Open của thanh nến tiếp theo
Sell = Ref(SellConditionRaw, -1);

// Xác định giá vào lệnh/ra lệnh thực tế (Open của thanh nến tín hiệu đã dịch chuyển)
BuyPrice = Open;
SellPrice = Open;

// =========================================================
// 5. TÍCH HỢP HỆ THỐNG CẢNH BÁO (ALERTS)
// =========================================================

if (AllowAlerts)
{
    // CẢNH BÁO MUA
    if (Buy)
    {
        // Cảnh báo giọng nói
        Say("Tín hiệu MUA đã được tạo cho " + FullName() + " tại giá " + NumToStr(BuyPrice, 1.2));
        
        // Phát âm thanh tùy chỉnh (thay đổi đường dẫn file WAV của bạn)
        PlaySound("C:\\Windows\\Media\\notify.wav"); 
        
        // Gửi Email chi tiết
        SendEmail(
            "AMIBROKER - TIN HIEU MUA: " + Name(), // Tiêu đề Email
            "Thoi gian: " + Now() +                 // Thời gian kích hoạt
            "\nMa CK: " + FullName() + " (" + Name() + ")" + // Tên đầy đủ và mã CK
            "\nGia mua du kien: " + NumToStr(BuyPrice, 1.2) + // Giá mua
            "\nRSI hien tai: " + NumToStr(RSI_Val, 1.0)       // Giá trị RSI
        );
    }
    
    // CẢNH BÁO BÁN
    if (Sell)
    {
        // Cảnh báo giọng nói
        Say("Tín hiệu BAN đã được tạo cho " + FullName() + " tại giá " + NumToStr(SellPrice, 1.2));
        
        // Phát âm thanh tùy chỉnh (thay đổi đường dẫn file WAV của bạn)
        PlaySound("C:\\Windows\\Media\\Windows Ding.wav"); 
        
        // Gửi Email chi tiết
        SendEmail(
            "AMIBROKER - TIN HIEU BAN: " + Name(), // Tiêu đề Email
            "Thoi gian: " + Now() +                 // Thời gian kích hoạt
            "\nMa CK: " + FullName() + " (" + Name() + ")" + // Tên đầy đủ và mã CK
            "\nGia ban du kien: " + NumToStr(SellPrice, 1.2) + // Giá bán
            "\nRSI hien tai: " + NumToStr(RSI_Val, 1.0)       // Giá trị RSI
        );
    }
}

// =========================================================
// 6. THIẾT LẬP LỆNH MUA/BÁN CHO BACKTEST (NẾU CÓ)
// =========================================================

// Lọc tín hiệu để đảm bảo không có tín hiệu trùng lặp trong backtest
Buy = ExRem(Buy, Sell);
Sell = ExRem(Sell, Buy);

// Thiết lập quy mô vị thế (ví dụ: 100% vốn cho mỗi lệnh)
SetPositionSize(100, spsPercentOfEquity); 

// =========================================================
// 7. VẼ BIỂU ĐỒ (VISUALIZATION)
// =========================================================

Plot(Close, "Close", colorBlack, styleCandle);
Plot(EMA_Val, "EMA " + EMAPeriod, colorBlue, styleLine);
Plot(RSI_Val, "RSI " + RSIPeriod, colorGreen, styleLine);
Plot(RSIBuyLevel, "RSI Buy Level", colorOrange, styleDashed);
Plot(RSISellLevel, "RSI Sell Level", colorRed, styleDashed);

// Vẽ mũi tên tín hiệu trên biểu đồ
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), colorGreen, 0, Low, -10);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed, 0, High, -10);

//_SECTION_END();

4. Cách Sử Dụng Mã AFL Này

  1. Sao chép mã: Sao chép toàn bộ mã AFL trên.
  2. Mở Amibroker: Mở phần mềm Amibroker của bạn.
  3. Tạo Formula mới: Đi tới File -> New -> Formula.
  4. Dán mã: Dán mã đã sao chép vào cửa sổ Formula Editor.
  5. Lưu Formula: Nhấn Ctrl + S và đặt tên cho Formula của bạn (ví dụ: MyEMA_RSI_Alerts.afl).
  6. Áp dụng vào biểu đồ: Kéo và thả Formula này vào biểu đồ của một mã chứng khoán bất kỳ.
  7. Cấu hình Alerts: Đảm bảo bạn đã cài đặt SSL Add-on và cấu hình Email Settings trong Amibroker (Tools -> Preferences -> Alerts) với Mật khẩu ứng dụng của Google cho tài khoản Gmail của bạn.
  8. Bật Alerts: Trong cửa sổ Parameters (tham số) của Formula, chuyển tùy chọn “Cho phép Alerts” từ TẮT sang BẬT.

5. Lợi Ích & Lưu Ý Khi Sử Dụng Các Hàm Chuyên Biệt

  • Kiểm soát chi tiết: Bạn có thể quyết định chính xác loại cảnh báo nào sẽ được kích hoạt cho từng điều kiện cụ thể.
  • Thông tin phong phú: Dễ dàng nhúng các giá trị động (giá, RSI, thời gian, tên mã) vào nội dung cảnh báo.
  • Phân biệt tín hiệu: Sử dụng các âm thanh hoặc giọng nói khác nhau giúp bạn nhanh chóng phân biệt tín hiệu mua và bán.
  • Vận hành liên tục: Để các cảnh báo này hoạt động, Amibroker cần phải được chạy liên tục với dữ liệu thời gian thực.
  • Thử nghiệm cẩn thận: Luôn thử nghiệm các cài đặt cảnh báo và nội dung email/âm thanh trong môi trường thử nghiệm trước khi áp dụng vào giao dịch thực tế.

Việc làm chủ các hàm cảnh báo chuyên biệt trong Amibroker AFL sẽ mở ra khả năng tự động hóa và giám sát thị trường hiệu quả hơn, giúp bạn quản lý giao dịch chuyên nghiệp và hiệu suất hơn.

  • 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ệ