• 26ºC, Rain
  • Saturday, 14th February, 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 37: BackTesting – Quản lý quy mô vị thế Amibroker
Bài 37: BackTesting – Quản lý quy mô vị thế Amibroker

Xem nhanh:

  • Scaling In Có Điều Kiện Trong Amibroker AFL: Tăng Tối Đa Lợi Nhuận Khi Xu Hướng Thuận Lợi
  • 1. Logic Chiến Lược Scaling In Có Điều Kiện
  • 2. Hàm SumSice() để Đếm Số Lần Scale In
  • 3. Lập Trình Chiến Lược Trong Amibroker AFLcode with the one shown in your image:
  • 4. Backtesting Đúng Cách và Kiểm Thử Ngoài Mẫu (Out-of-Sample Testing)

Scaling In Có Điều Kiện Trong Amibroker AFL: Tăng Tối Đa Lợi Nhuận Khi Xu Hướng Thuận Lợi

Chào các bạn! Trong các bài viết trước, chúng ta đã tìm hiểu về khái niệm Scaling (thay đổi quy mô vị thế). Hôm nay, chúng ta sẽ đi sâu hơn vào việc xây dựng một chiến lược Scaling In có điều kiện trong Amibroker Formula Language (AFL). Mục tiêu là tận dụng tối đa các xu hướng mạnh mẽ bằng cách tăng thêm vị thế khi thị trường tiếp tục đi đúng hướng kỳ vọng, đồng thời thảo luận về tầm quan trọng của việc backtesting đúng cách để tránh bị đánh lừa bởi kết quả quá khứ.

1. Logic Chiến Lược Scaling In Có Điều Kiện

Ý tưởng cốt lõi là chỉ tăng thêm vị thế khi các điều kiện mua ban đầu vẫn tiếp tục được duy trì hoặc cải thiện.

Các chỉ báo và điều kiện:

  • Chỉ báo chính: EMA (Exponential Moving Average) 50 và MACD (Moving Average Convergence Divergence).
  • Điều kiện MUA BAN ĐẦU (Entry):
    1. Giá đóng cửa (Close) phải lớn hơn EMA 50.
    2. Đường MACD phải lớn hơn 0.
  • Điều kiện SCALING IN (Thêm vị thế):
    1. Các điều kiện mua ban đầu (Close > EMA 50 và MACD > 0) vẫn tiếp tục đúng.
    2. Chỉ thực hiện Scaling In tối đa 2 lần sau lệnh mua ban đầu (tức là tổng cộng 3 vị thế: 1 lệnh mua + 2 lệnh scaling in).
    3. Quy mô vị thế:
      • Lệnh mua ban đầu: 50% tổng quy mô vị thế mong muốn.
      • Mỗi lệnh Scaling In tiếp theo: 10% tổng quy mô vị thế mong muốn.
  • Điều kiện BÁN (Exit):
    1. Giá đóng cửa (Close) phải nhỏ hơn EMA 50.
    2. Đường MACD phải nhỏ hơn 0.

2. Hàm SumSice() để Đếm Số Lần Scale In

entry = SumSince(sellcond, buycond);: Đây là một phần rất quan trọng. Hàm SumSince(Condition, Array) tính tổng các giá trị Array (ở đây là buycond – mỗi khi buycond đúng nó được coi là 1, sai là 0) kể từ lần cuối cùng Condition (ở đây là sellcond) là true.

  • Nếu sellcond (điều kiện bán) vừa đúng, thì entry sẽ được reset về 0 (hoặc bắt đầu đếm lại từ 1 nếu buycond đúng ngay sau đó).
  • Khi buycond đúng và sellcond chưa đúng kể từ lần cuối cùng, entry sẽ tăng lên 1 đơn vị.
  • Mục đích của biến entry là đếm số lần liên tiếp các điều kiện mua được đáp ứng kể từ lần thoát lệnh gần nhất, giúp kiểm soát việc mở rộng vị thế.

3. Lập Trình Chiến Lược Trong Amibroker AFLcode with the one shown in your image:

_SECTION_BEGIN("Scaling In Conditional Strategy - Based on Image");

// 1. Tính toán các chỉ báo
EMA50 = EMA(C, 50); // C refers to Close price

// 2. Định nghĩa điều kiện MUA và BÁN (as per the image)
buycond = C > EMA50 AND MACD() > 0;
sellcond = C < EMA50 AND MACD() < 0;

// 3. Đếm số lần vào lệnh/scale in kể từ lần thoát lệnh cuối cùng (as per the image)
// cumulative addition of buycond array since last true in sellcond
entry = SumSince(sellcond, buycond);

// 4. Định nghĩa điều kiện SCALING IN (entrycond and firstentry as per the image)
entrycond = entry <= 3;
firstentry = entry == 1;

// 5. Định nghĩa Tín hiệu MUA/SCALING IN (Buy) and BÁN (Sell) (as per the image)
Buy = IIf(buycond AND entrycond, sigScaleIn, 0); // sigScaleIn is likely a constant or variable defined elsewhere for scaling behavior
Sell = sellcond;

// 6. Cài đặt Quy mô Vị thế (as per the image)
SetPositionSize(IIf(firstentry, 50, 10), spsPercentOfEquity); // If firstentry is true (entry == 1), set to 50, otherwise 10.

// 7. Lọc tín hiệu trùng lặp (not explicitly in the image, but good practice. Assuming it's not needed for direct image replication.)
// The image's code doesn't explicitly show ExRem, so we will omit it to directly match the image.

// 8. Vẽ các chỉ báo và tín hiệu (as per the image)
Plot(EMA(C, 50), "ema50", colorBlue);
PlotShapes(IIf(Buy == sigScaleIn, shapeUpArrow, shapeNone), colorGreen);

_SECTION_END();
Ví dụ

Ví dụ

Kết quả

Kết quả

4. Backtesting Đúng Cách và Kiểm Thử Ngoài Mẫu (Out-of-Sample Testing)

Sau khi có code, bước tiếp theo là backtest chiến lược. Tuy nhiên, việc backtest cần được thực hiện một cách khoa học để tránh over-optimization (tối ưu hóa quá mức) và đưa ra kết luận sai lầm về hiệu suất trong tương lai.

  • Chia dữ liệu: Đây là nguyên tắc vàng. Luôn chia dữ liệu lịch sử của bạn thành hai phần:
    • In-Sample Data (Dữ liệu trong mẫu): Ví dụ: 60-70% dữ liệu đầu tiên. Dùng để phát triển, tối ưu hóa và tinh chỉnh chiến lược.
    • Out-of-Sample Data (Dữ liệu ngoài mẫu): Ví dụ: 30-40% dữ liệu cuối cùng. Tuyệt đối không chạm vào phần dữ liệu này trong quá trình phát triển.
  • Quy trình Backtest:
    1. Chỉ phát triển và tối ưu chiến lược trên In-Sample Data.
    2. Khi bạn đã hài lòng với hiệu suất trên In-Sample Data và không còn muốn tinh chỉnh gì thêm, hãy backtest chiến lược trên Out-of-Sample Data.
    3. Đánh giá:
      • Nếu chiến lược hoạt động tốt trên cả hai tập dữ liệu (In-Sample và Out-of-Sample) với các tham số tương tự, thì chiến lược đó có khả năng mạnh mẽ và đáng tin cậy hơn.
      • Nếu chiến lược hoạt động tốt trên In-Sample nhưng thua lỗ hoặc hoạt động kém trên Out-of-Sample, thì có thể chiến lược đó đã bị tối ưu hóa quá mức cho dữ liệu quá khứ và không có khả năng hoạt động tốt trong tương lai.
  • Tránh tối ưu hóa quá mức: Mục tiêu là tìm ra các quy tắc giao dịch mạnh mẽ và ổn định, không phải là một “đường cong vốn hoàn hảo” trên dữ liệu quá khứ. Một hệ thống quá phức tạp hoặc phụ thuộc quá nhiều vào các tham số cụ thể thường không hoạt động trong thị trường thực.
  • Số lượng giao dịch: Một chiến lược cần có đủ số lượng giao dịch (tối thiểu 800-1000) để kết quả backtest có ý nghĩa thống kê.

Trong ví dụ được đề cập, chiến lược có thể chỉ mang lại lợi nhuận khi thị trường đi lên (bull market) và hoạt động kém trong thị trường đi ngang hoặc đi xuống. Điều này nhấn mạnh tầm quan trọng của việc kiểm thử trên nhiều giai đoạn thị trường khác nhau để có cái nhìn toàn diệ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
Phân tích ANV
Phân Tích Doanh Nghiệp
Phân tích ANV
14 Tháng 7, 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ệ