• 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 19: Flow Control Statements – cú pháp If-Else AFL
Bài 19: Flow Control Statements – cú pháp If-Else AFL

Xem nhanh:

  • Làm Chủ Câu Lệnh If-Else Trong Amibroker AFL: Xây Dựng Logic Giao Dịch “Thanh Nến Theo Thanh Nến”
  • Cú Pháp Và Hoạt Động Của Câu Lệnh If-Else
  • Ví Dụ Thực Tế: Tín Hiệu Mua/Bán Crossover với If-Else
  • Lưu Ý Quan Trọng Khi Sử Dụng If-Else

Làm Chủ Câu Lệnh If-Else Trong Amibroker AFL: Xây Dựng Logic Giao Dịch “Thanh Nến Theo Thanh Nến”

Chào các bạn! Trong chuỗi bài học về các câu lệnh điều khiển luồng (Flow Control Statements), chúng ta đã hiểu rằng chúng hoạt động theo cơ chế “thanh nến theo thanh nến” và tầm quan trọng của việc indexing (truy cập chỉ mục) dữ liệu mảng. Hôm nay, chúng ta sẽ đi sâu vào một trong những câu lệnh điều khiển luồng được sử dụng phổ biến nhất và mạnh mẽ nhất: Câu lệnh If-Else.

If-Else là trái tim của mọi logic quyết định trong lập trình, và trong Amibroker Formula Language (AFL) cũng không ngoại lệ. Nó cho phép bạn ra lệnh cho Amibroker thực hiện các hành động khác nhau dựa trên việc một điều kiện nào đó là đúng hay sai.


Cú Pháp Và Hoạt Động Của Câu Lệnh If-Else

Cú pháp cơ bản của If-Else trong AFL:

if (expression)
{
    statement1; // Thực hiện nếu expression là TRUE
}
else
{
    statement2; // Thực hiện nếu expression là FALSE
}

Giải thích các thành phần:

  • if: Từ khóa bắt đầu câu lệnh điều kiện.
  • (expression): Đây là một biểu thức logic (Boolean expression) mà Amibroker sẽ đánh giá. Nếu biểu thức này trả về True (hoặc một giá trị khác 0), khối lệnh của if sẽ được thực thi. Nếu nó trả về False (hoặc 0), khối lệnh của else sẽ được thực thi.
    • Lưu ý quan trọng: Vì If-Else hoạt động “thanh nến theo thanh nến”, expression ở đây phải được indexed (truy cập giá trị của một thanh nến cụ thể) nếu bạn đang kiểm tra một mảng dữ liệu. Bạn không thể truyền toàn bộ mảng vào đây. Ví dụ: if (Buy[0]) là đúng, if (Buy) là sai.
  • statement1: Một hoặc nhiều câu lệnh sẽ được thực thi nếu expression là True.
  • else: Từ khóa tùy chọn. Nếu bạn không có phần else, thì khi expression là False, chương trình sẽ bỏ qua khối lệnh của if và tiếp tục thực thi các dòng code sau câu lệnh if.
  • statement2: Một hoặc nhiều câu lệnh sẽ được thực thi nếu expression là False.
  • {} (Dấu ngoặc nhọn): Được gọi là “curly brackets” (khối lệnh).
    • Khi chỉ có một câu lệnh: Trong AFL, nếu chỉ có một câu lệnh bên trong if hoặc else, bạn không bắt buộc phải dùng dấu ngoặc nhọn. Tuy nhiên, luôn khuyến khích sử dụng dấu ngoặc nhọn để mã dễ đọc hơn, tránh nhầm lẫn và dễ bảo trì khi bạn thêm nhiều câu lệnh sau này.
    • Khi có nhiều câu lệnh: Nếu bạn có nhiều hơn một câu lệnh bên trong if hoặc else, bắt buộc phải sử dụng dấu ngoặc nhọn để nhóm chúng lại.

Ví Dụ Thực Tế: Tín Hiệu Mua/Bán Crossover với If-Else

Hãy cùng xem một ví dụ thực tế sử dụng chiến lược đơn giản: chiến lược cắt nhau của hai đường EMA (EMA nhanh cắt lên EMA chậm là MUA, EMA nhanh cắt xuống EMA chậm là BÁN). Chúng ta sẽ sử dụng If-Else để vẽ các hình mũi tên lên/xuống trên biểu đồ.

Mã AFL ví dụ:

// Khai báo và tính toán các đường EMA
FastEMA = EMA(Close, 5);  // EMA nhanh 5 kỳ
SlowEMA = EMA(Close, 20); // EMA chậm 20 kỳ

// Định nghĩa tín hiệu mua/bán (dạng mảng)
BuySignal = Cross(FastEMA, SlowEMA); // Tín hiệu mua khi EMA nhanh cắt lên EMA chậm
SellSignal = Cross(SlowEMA, FastEMA); // Tín hiệu bán khi EMA chậm cắt lên EMA nhanh

// Plot các đường EMA lên biểu đồ
Plot(Close, "Close", colorBlack, styleCandle);
Plot(FastEMA, "Fast EMA", colorBlue, styleLine);
Plot(SlowEMA, "Slow EMA", colorRed, styleLine);

// --- Sử dụng If-Else để vẽ hình mũi tên dựa trên tín hiệu ---

// Khai báo biến để lưu vị trí mũi tên (cho dễ quản lý)
PlotPosition = Low - 0.05 * ATR(10); // Vị trí dưới nến cho mũi tên mua
PlotPosition2 = High + 0.05 * ATR(10); // Vị trí trên nến cho mũi tên bán

// Lặp qua từng thanh nến (vì If-Else hoạt động bar by bar)
// (Chúng ta sẽ học về vòng lặp For chi tiết hơn sau, tạm thời ta sẽ ví dụ cho một bar cụ thể)
// GIẢ SỬ CHÚNG TA CHỈ KIỂM TRA CHO THANH NẾN HIỆN TẠI (INDEX CUỐI CÙNG)
// Lưu ý: Đối với việc vẽ trên toàn bộ biểu đồ, thường dùng PlotShapes trực tiếp với mảng
// Tuy nhiên, ví dụ này minh họa cú pháp If-Else với indexed array.
// Để minh họa "bar by bar" đúng nghĩa, chúng ta cần một vòng lặp FOR, sẽ được học sau.
// Tạm thời, để đơn giản và phù hợp với nội dung bài, ta sẽ dùng index cụ thể.

// Kiểm tra tín hiệu MUA cho thanh nến hiện tại (thanh nến cuối cùng)
// (Lưu ý: BuySignal[BarIndex] sẽ trả về True/False cho thanh nến hiện tại)
if (BuySignal[0]) // Kiểm tra nếu tín hiệu MUA là TRUE tại thanh nến hiện tại
{
    // Vẽ mũi tên MUA màu xanh lá
    PlotShapes(shapeUpArrow, colorGreen, 0, PlotPosition, 0);
}
// Nếu không có tín hiệu MUA, kiểm tra xem có tín hiệu BÁN không
else if (SellSignal[0]) // Kiểm tra nếu tín hiệu BÁN là TRUE tại thanh nến hiện tại
{
    // Vẽ mũi tên BÁN màu đỏ
    PlotShapes(shapeDownArrow, colorRed, 0, PlotPosition2, 0);
}
else // Nếu không có cả MUA và BÁN tại thanh nến hiện tại
{
    // Không làm gì cả (hoặc có thể vẽ một hình khác)
    // PlotShapes(shapeNone);
}
Ví dụ

Ví dụ

Kết quả

Kết quả


Phân tích ví dụ:
  • BuySignal[BarIndex]: Đây là điểm mấu chốt. BuySignal là một mảng, nhưng chúng ta chỉ đang kiểm tra giá trị của nó tại thanh nến hiện tại (BarIndex). Điều này tuân thủ nguyên tắc If-Else không chấp nhận mảng làm đối số trực tiếp.
  • PlotShapes(): Hàm này được sử dụng để vẽ các hình dạng trên biểu đồ. Chúng ta đặt điều kiện cho việc vẽ hình mũi tên UpArrow (mua) hoặc DownArrow (bán).
  • Không có else (tùy chọn): Bạn cũng có thể chỉ sử dụng câu lệnh if mà không có else. Nếu điều kiện của if là False, Amibroker sẽ đơn giản bỏ qua khối lệnh của if và tiếp tục thực thi các dòng code bên dưới. Tuy nhiên, if-else thường được sử dụng phổ biến hơn vì nó bao gồm tất cả các trường hợp có thể xảy ra.

Lưu Ý Quan Trọng Khi Sử Dụng If-Else

  • == để so sánh bằng: Khi bạn muốn kiểm tra xem một biến có bằng một giá trị cụ thể hay không (ví dụ: if (variable == 1)), hãy sử dụng dấu bằng kép (==). Dấu bằng đơn (=) được dùng để gán giá trị.
  • True/False: Trong AFL, True tương đương với 1 và False tương đương với 0. Vì vậy, if (BuySignal[BarIndex]) cũng tương đương với if (BuySignal[BarIndex] == 1).
  • Lồng ghép If-Else (Nested If-Else): Bạn có thể đặt các câu lệnh if-else khác bên trong một khối if hoặc else để tạo ra logic phức tạp hơn. Việc sử dụng dấu ngoặc nhọn {} một cách nhất quán sẽ giúp bạn dễ dàng theo dõi các khối lệnh lồng nhau này.

Làm chủ câu lệnh If-Else là bước đệm quan trọng để bạn có thể xây dựng những hệ thống giao dịch tự động thông minh và phản ứng linh hoạt với các điều kiện thị trường khác nhau trong Amibroker.

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