• 32ºC, Clouds
  • Saturday, 13th December, 2025
  • 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 45: GFX Functions – Bảng trạng thái giao dịch Amibroker
Bài 45: GFX Functions – Bảng trạng thái giao dịch Amibroker

Xem nhanh:

  • Xây Dựng Bảng Hiển Thị Trạng Thái Giao Dịch Tùy Chỉnh Với Gfx Functions Trong Amibroker AFL
  • 1. Logic Chiến Lược Giao Dịch (Ví Dụ)
  • 2. Logic Hiển Thị Trạng Thái & Màu Sắc Bảng
  • 3. Các Thành Phần Chính Trong Mã AFL
  • 4. Mã AFL Hoàn Chỉnh
  • 5. Cách Sử Dụng Bảng Hiển Thị Này
  • 6. Lời Khuyên & Tùy Biến

Xây Dựng Bảng Hiển Thị Trạng Thái Giao Dịch Tùy Chỉnh Với Gfx Functions Trong Amibroker AFL

Chào các bạn! Sau khi đã làm quen với các hàm đồ họa cơ bản, chúng ta sẽ áp dụng kiến thức này để tạo ra một công cụ trực quan mạnh mẽ: một bảng hiển thị trạng thái giao dịch tùy chỉnh ngay trên biểu đồ Amibroker. Bảng này sẽ cho phép bạn theo dõi giá mua/bán, trạng thái vị thế (đang giữ lệnh hay không), và lợi nhuận/thua lỗ (P&L) của vị thế hiện tại, với màu sắc thay đổi theo tình trạng lãi/lỗ.


1. Logic Chiến Lược Giao Dịch (Ví Dụ)

Để minh họa, chúng ta sẽ sử dụng một chiến lược giao dịch đơn giản dựa trên hai đường trung bình động:

  • Fast MA (EMA 20): Đường trung bình động nhanh.
  • Slow MA (EMA 50): Đường trung bình động chậm.
  • Điều kiện MUA: Fast MA cắt lên trên Slow MA (Tín hiệu mua khi xu hướng tăng bắt đầu).
  • Điều kiện BÁN: Fast MA cắt xuống dưới Slow MA (Tín hiệu bán khi xu hướng giảm bắt đầu).
  • Giá mua/bán: Giá Close của thanh nến tín hiệu.

Để quản lý liên tục trạng thái vị thế (đang giữ lệnh mua hay không, đang giữ lệnh bán hay không), chúng ta sẽ sử dụng biến liên tục BuyContinuous và SellContinuous với hàm Flip().

  • BuyContinuous: Flip(Buy, Sell) – Luôn là TRUE từ khi có tín hiệu Buy cho đến khi có tín hiệu Sell.
  • SellContinuous: Flip(Sell, Buy) – Luôn là TRUE từ khi có tín hiệu Sell cho đến khi có tín hiệu Buy.

2. Logic Hiển Thị Trạng Thái & Màu Sắc Bảng

Điểm nổi bật của bảng hiển thị này là khả năng thay đổi màu nền dựa trên trạng thái vị thế và P&L:

  • Màu xanh lá cây (Green): Khi đang trong vị thế MUA và đang có lãi.
  • Màu đỏ (Red): Khi đang trong vị thế MUA và đang bị lỗ.
  • Màu nâu (Brown): Khi không có vị thế nào (đã chốt lời/lỗ hoặc chưa vào lệnh).

Logic màu sắc này được xây dựng bằng cách sử dụng các câu lệnh điều kiện lồng nhau và áp dụng cho GfxSelectSolidBrush().


3. Các Thành Phần Chính Trong Mã AFL

Chúng ta sẽ sử dụng các hàm Gfx đã học để tạo bảng, vẽ văn bản và hiển thị dữ liệu:

  • GfxSelectPen( Color, Width, PenStyle ): Chọn màu và độ dày viền của bảng.
  • GfxSelectSolidBrush( Color ): Chọn màu nền của bảng (màu này sẽ thay đổi theo P&L).
  • GfxRoundRect( X1, Y1, X2, Y2, ArcWidth, ArcHeight ): Vẽ khung bảng hình chữ nhật bo góc.
  • GfxSetBkMode( Mode ): Đặt chế độ nền cho văn bản (1 cho trong suốt để văn bản không che mất biểu đồ nền).
  • GfxSelectFont( FaceName, PointSize, Weight, Italic, Underline, StrikeOut ): Chọn font chữ, kích thước, độ đậm cho văn bản.
  • GfxSetTextColor( Color ): Chọn màu chữ.
  • GfxTextOut( Text, X, Y ): In văn bản ra biểu đồ.
  • SelectedValue( Array ): Rất quan trọng! Chúng ta dùng hàm này để lấy giá trị đơn lẻ từ một mảng (như giá Close, BuyPrice, SellPrice, ColorArray) tại thanh nến đang được chọn trên biểu đồ. Điều này cho phép bảng hiển thị dữ liệu thay đổi linh hoạt khi bạn di chuyển con trỏ chuột qua các thanh nến khác nhau.
  • Precision( Value, Decimals ): Định dạng số thập phân để hiển thị các giá trị như MA, P&L một cách gọn gàng.
  • IIf( Condition, TrueValue, FalseValue ): Hàm điều kiện để chọn văn bản hoặc giá trị dựa trên trạng thái (ví dụ: “BUY” hoặc “NOT IN TRADE”).

4. Mã AFL Hoàn Chỉnh

Dưới đây là toàn bộ mã AFL để tạo bảng hiển thị trạng thái giao dịch:

//_SECTION_BEGIN("Bảng Trạng Thái Giao Dịch Động với Gfx Functions");

// =========================================================
// 1. LOGIC CHIẾN LƯỢC GIAO DỊCH (Ví dụ: MA Cross)
// =========================================================

// Tham số cho MA
FastMAPeriod = Param("Fast MA Period", 20, 5, 50, 1);
SlowMAPeriod = Param("Slow MA Period", 50, 20, 100, 1);

// Tính toán MA
FastMA = EMA(Close, FastMAPeriod);
SlowMA = EMA(Close, SlowMAPeriod);

// Điều kiện Buy/Sell
Buy = Cross(FastMA, SlowMA);
Sell = Cross(SlowMA, FastMA);

// Giá mua/bán (dùng Close để đơn giản trong ví dụ này, có thể dùng Open cho chống repainting)
BuyPrice = Close;
SellPrice = Close;

// Loại bỏ tín hiệu trùng lặp cho Backtest
Buy = ExRem(Buy, Sell);
Sell = ExRem(Sell, Buy);

// Quản lý vị thế liên tục
BuyContinuous = Flip(Buy, Sell); // TRUE khi đang trong lệnh Buy
SellContinuous = Flip(Sell, Buy); // TRUE khi đang trong lệnh Sell (hoặc Short, Cover nếu có)

// =========================================================
// 2. LOGIC MÀU NỀN CHO BẢNG HIỂN THỊ
// =========================================================

// Xác định màu nền dựa trên trạng thái vị thế và P&L
// (Chỉ áp dụng khi đang trong lệnh BuyContinuous)
ColorByPNL = IIf(BuyContinuous AND Close > ValueWhen(Buy, BuyPrice), colorGreen, // Đang mua & lãi -> Xanh lá
                 IIf(BuyContinuous AND Close < ValueWhen(Buy, BuyPrice), colorRed,   // Đang mua & lỗ -> Đỏ
                     colorBrown)); // Không trong lệnh -> Nâu

// =========================================================
// 3. CÀI ĐẶT CHUNG CHO GFX
// =========================================================

// Chế độ nền văn bản: 1=Transparent (trong suốt), 2=Opaque (đục)
GfxSetBkMode(1); 

// Chế độ lớp phủ: 1=Transparent Overlay (trong suốt, nhìn xuyên biểu đồ nền)
// (Nếu là 0, bảng sẽ che hoàn toàn biểu đồ; nếu là 2, chỉ thấy bảng, biểu đồ nền biến mất)
GfxSetOverlayMode(1);

// Thiết lập viền bảng
GfxSelectPen(colorWhite, 2, 0); // Viền trắng, độ dày 2px, nét liền

// Thiết lập màu nền bảng (dựa trên màu động đã tính toán)
// Quan trọng: Phải dùng SelectedValue() để lấy màu tại thanh nến đang được chọn
GfxSelectSolidBrush(SelectedValue(ColorByPNL)); 

// Vẽ khung bảng hiển thị (Round Rectangle)
// Tọa độ và kích thước của bảng trên biểu đồ (Pixel Mode 0)
// (Bạn có thể điều chỉnh các giá trị này để phù hợp với màn hình của mình)
GfxRoundRect(50, 50, 250, 200, 20, 20); // (X1, Y1, X2, Y2, ArcWidth, ArcHeight)

// =========================================================
// 4. HIỂN THỊ VĂN BẢN TRÊN BẢNG
// =========================================================

// Thiết lập font chữ chung cho văn bản
// Font: "Tahoma", Cỡ chữ: 14, Độ đậm: 700 (Bold)
GfxSelectFont("Tahoma", 14, 700, False, False, False);

// Thiết lập màu chữ chung
GfxSetTextColor(colorWhite); // Màu chữ trắng

// --- Hiển thị Fast MA ---
// Ghi chú: Dùng NumToStr để định dạng số thập phân, thêm khoảng trắng để căn chỉnh
GfxTextOut("    Fast MA: " + NumToStr(SelectedValue(FastMA), 1.2), 70, 70); 

// --- Hiển thị Slow MA ---
GfxTextOut("    Slow MA: " + NumToStr(SelectedValue(SlowMA), 1.2), 70, 100);

// --- Hiển thị Trạng Thái Vị Thế ---
PositionStatusText = WriteIf(SelectedValue(BuyContinuous), "BUY",      // Nếu đang trong lệnh Buy
                         WriteIf(SelectedValue(SellContinuous), "SELL", // Nếu đang trong lệnh Sell (nếu có Short/Cover)
                             "NO TRADE"));                          // Không trong lệnh

GfxTextOut("    Status: " + PositionStatusText, 70, 130);

// --- Hiển thị Giá Mua/Bán & P&L (Chỉ khi đang trong lệnh BuyContinuous) ---
if (SelectedValue(BuyContinuous)) 
{
    // Hiển thị Giá Mua
    GfxTextOut("    Buy Price: " + NumToStr(SelectedValue(ValueWhen(Buy, BuyPrice)), 1.2), 70, 160);

    // Hiển thị P&L (Lãi/Lỗ theo điểm)
    CurrentPNL = SelectedValue(Close - ValueWhen(Buy, BuyPrice));
    GfxTextOut("    P&L (Pts): " + NumToStr(CurrentPNL, 1.2), 70, 190); 
}
else // Khi không trong lệnh BuyContinuous
{
    // Hiển thị Giá Bán gần nhất (nếu có)
    GfxTextOut("    Sell Price: " + NumToStr(SelectedValue(ValueWhen(Sell, SellPrice)), 1.2), 70, 160);
}


// =========================================================
// 5. VẼ BIỂU ĐỒ NỀN (CHO MỤC ĐÍCH VISUAL)
// =========================================================

Plot(Close, "Close", colorBlack, styleCandle);
Plot(FastMA, "Fast MA", colorBlue, styleLine);
Plot(SlowMA, "Slow MA", colorRed, styleLine);

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

//_SECTION_END();
Kết quả

Kết quả


5. Cách Sử Dụng Bảng Hiển Thị 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ụ: LiveTradeStatus.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ỳ.

Bây giờ, khi bạn di chuyển con trỏ chuột qua các thanh nến khác nhau trên biểu đồ, bảng trạng thái tùy chỉnh sẽ hiển thị thông tin tương ứng với thanh nến đó, bao gồm giá MA, trạng thái vị thế, giá mua/bán và P&amp;L (nếu đang trong lệnh mua), với màu nền thay đổi linh hoạt.


6. Lời Khuyên & Tùy Biến

  • Điều chỉnh tọa độ: Các giá trị pixel (50, 50, 250, 200 trong GfxRoundRect) cần được điều chỉnh để bảng hiển thị ở vị trí và kích thước mong muốn trên màn hình của bạn. Hãy thử nghiệm!
  • Tùy chỉnh thông tin: Bạn có thể thêm bất kỳ thông tin nào khác vào bảng hiển thị (ví dụ: Stop Loss, Take Profit, khối lượng giao dịch, v.v.) bằng cách sử dụng các hàm GfxTextOut() khác.
  • Hiểu SelectedValue(): Đây là chìa khóa để bảng hiển thị thông tin động theo thanh nến được chọn. Nếu bạn muốn bảng chỉ hiển thị thông tin của thanh nến cuối cùng, hãy thay thế SelectedValue() bằng LastValue().
  • Ứng dụng thực tế: Công cụ này cực kỳ hữu ích cho việc giao dịch giấy (paper trading) hoặc theo dõi vị thế trực tiếp trong thời gian thực, cung cấp cái nhìn nhanh chóng về trạng thái giao dịch của bạn.

Việc xây dựng một bảng hiển thị trạng thái giao dịch tùy chỉnh bằng Gfx Functions không chỉ nâng cao khả năng phân tích trực quan mà còn giúp bạn hiểu sâu hơn về cách Amibroker xử lý và hiển thị dữ liệu.

  • 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
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 BFC
Phân Tích Doanh Nghiệp
Phân tích BFC
14 Tháng 7, 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ệ