• 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 23: Flow Control Statements – Xây dựng Trailing Stop Amibroker
Bài 23: Flow Control Statements – Xây dựng Trailing Stop Amibroker

Xem nhanh:

  • Hướng Dẫn Chi Tiết Xây Dựng Trailing Stop Loss Với Vòng Lặp For Trong Amibroker AFL
  • Khái Niệm Cơ Bản: TrailArea (Mảng) và TrailStop (Biến Vô Hướng)
  • Cấu Trúc Mã AFL Cho Trailing Stop Loss
  • 1. Khởi Tạo Cơ Sở và Tín Hiệu Giao Dịch
  • 2. Vòng Lặp Chính (For Loop) và Logic Giao Dịch
  • 3. Trực Quan Hóa (Plotting)
  • Tại Sao Đây Là Mã Nâng Cao?

Hướng Dẫn Chi Tiết Xây Dựng Trailing Stop Loss Với Vòng Lặp For Trong Amibroker AFL

Chào các bạn! Trong thế giới giao dịch tài chính, quản lý rủi ro là yếu tố then chốt, và Trailing Stop Loss (Cắt lỗ theo sau) là một công cụ cực kỳ hiệu quả để bảo vệ lợi nhuận và hạn chế thua lỗ. Trong hướng dẫn này, chúng ta sẽ đi sâu vào cách triển khai một hệ thống Trailing Stop Loss tùy chỉnh bằng cách sử dụng Amibroker Formula Language (AFL) và sức mạnh của vòng lặp For.

Đây là một chủ đề nâng cao, đòi hỏi bạn phải có kiến thức vững chắc về BarCount, BarIndex, và cách hoạt động của vòng lặp For trong AFL. Hãy sẵn sàng để tập trung cao độ!


Khái Niệm Cơ Bản: TrailArea (Mảng) và TrailStop (Biến Vô Hướng)

Trước khi đi vào code, hãy hiểu rõ hai khái niệm quan trọng sẽ được sử dụng để xây dựng Trailing Stop Loss:

  • trailARRAY (Mảng theo dõi Trailing Stop):
    • Đây là một mảng (Array), tương tự như Close, High, Low.
    • Nó được khởi tạo với các Null Values (Null).
    • Mỗi phần tử trong trailARRAY sẽ lưu trữ giá trị của Trailing Stop Loss cho từng thanh nến tương ứng. Chúng ta sẽ plot (vẽ) mảng này lên biểu đồ để trực quan hóa đường Trailing Stop.
  • trailstop (Biến vô hướng – Scalar Variable):
    • Đây là một biến vô hướng (scalar), nghĩa là nó chỉ lưu trữ một giá trị duy nhất tại một thời điểm.
    • trailstop sẽ được cập nhật liên tục bên trong vòng lặp For để giữ giá trị Trailing Stop Loss hiện tại (giá trị mới nhất) cho thanh nến đang được xử lý.
    • Nó là “bộ nhớ tạm thời” của chúng ta cho giá trị dừng lỗ thay đổi theo từng bar.

Sự khác biệt quan trọng: trailARRAY là một mảng lưu trữ lịch sử các giá trị stop, trong khi trailstop là một biến đơn lẻ, lưu trữ giá trị stop “hiện tại” trong quá trình tính toán.


Cấu Trúc Mã AFL Cho Trailing Stop Loss

Chúng ta sẽ phân tích từng phần của đoạn code mới được sử dụng để tạo Trailing Stop Loss:

StopLevel = 1 - Param("trailing stop %", 3, 0.1, 10, 0.1)/100;

Buy = Cross( MACD(), Signal() );
Sell = 0;
trailARRAY = Null;
trailstop = 0;
for( i = 1; i < BarCount; i++ )
{
   if( trailstop == 0 AND Buy[ i ] ) 
   { 
     trailstop = High[ i ] * StopLevel;
   }
   else Buy[ i ] = 0; // remove excess buy signals
   if( trailstop > 0 AND Low[ i ] < trailstop )
   {
     Sell[ i ] = 1;
     SellPrice[ i ] = trailstop;
     trailstop = 0;
   }
   if( trailstop > 0 )
   {
     trailstop = Max( High[ i ] * StopLevel, trailstop );
     trailARRAY[ i ] = trailstop;
   }
}
PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
Plot( Close,"Price",colorBlack,styleBar);
Plot( trailARRAY,"trailing stop level", colorRed );

1. Khởi Tạo Cơ Sở và Tín Hiệu Giao Dịch

StopLevel = 1 - Param("trailing stop %", 3, 0.1, 10, 0.1)/100;
Buy = Cross( MACD(), Signal() );
Sell = 0;
trailARRAY = Null;
trailstop = 0;
  • StopLevel = 1 - Param("trailing stop %", 3, 0.1, 10, 0.1)/100;: Dòng này tạo một tham số tùy chỉnh trong cửa sổ Amibroker, cho phép bạn dễ dàng điều chỉnh phần trăm dừng lỗ.
    • "trailing stop %": Tên hiển thị của tham số.
    • 3: Giá trị mặc định là 3% (tức là dừng lỗ 3% dưới đỉnh).
    • 0.1: Giá trị tối thiểu.
    • 10: Giá trị tối đa.
    • 0.1: Bước nhảy khi điều chỉnh.
    • Công thức 1 - ... / 100 chuyển đổi phần trăm thành hệ số để tính toán giá.
  • Buy = Cross( MACD(), Signal() );: Định nghĩa tín hiệu mua (ví dụ: MACD cắt lên đường tín hiệu).
  • Sell = 0;: Khởi tạo biến bán, logic bán sẽ được định nghĩa bên trong vòng lặp.
  • trailARRAY = Null;: Tạo một mảng rỗng để lưu trữ đường Trailing Stop Loss trên biểu đồ.
  • trailstop = 0;: Tạo một biến vô hướng để tính toán giá trị Trailing Stop Loss theo thời gian. Giá trị 0 ban đầu báo hiệu rằng chúng ta chưa có vị thế.

2. Vòng Lặp Chính (For Loop) và Logic Giao Dịch

Đây là phần quan trọng nhất, nơi vòng lặp For sẽ duyệt qua từng thanh nến để xác định tín hiệu Mua, Bán và cập nhật Trailing Stop Loss.

for( i = 1; i < BarCount; i++ )
{
   if( trailstop == 0 AND Buy[ i ] ) 
   { 
     trailstop = High[ i ] * StopLevel;
   }
   else Buy[ i ] = 0; // remove excess buy signals
   if( trailstop > 0 AND Low[ i ] < trailstop )
   {
     Sell[ i ] = 1;
     SellPrice[ i ] = trailstop;
     trailstop = 0;
   }
   if( trailstop > 0 )
   {
     trailstop = Max( High[ i ] * StopLevel, trailstop );
     trailARRAY[ i ] = trailstop;
   }
}
  • for (i = 1; i < BarCount; i++): Vòng lặp duyệt qua từng thanh nến từ thanh nến thứ hai (BarIndex = 1) đến thanh nến cuối cùng. Bắt đầu từ 1 vì chúng ta cần tham chiếu đến giá trị của trailstop từ thanh nến trước đó (ngầm định là trailstop giữ giá trị cuối cùng từ lần lặp trước đó).
  • Logic Mua (Mở vị thế):
    if( trailstop == 0 AND Buy[ i ] ) 
    { 
      trailstop = High[ i ] * StopLevel;
    }
    else Buy[ i ] = 0; // remove excess buy signals
    
    • if (trailstop == 0 AND Buy[i]):
      • Kiểm tra nếu chưa có vị thế (trailstop == 0).
      • Và có tín hiệu Mua mới (Buy[i] là True tại thanh nến hiện tại).
    • Nếu đúng, khởi tạo trailstop bằng High[i] * StopLevel. Đây là mức dừng lỗ ban đầu, đặt theo phần trăm đã định trước dưới giá cao nhất của thanh nến kích hoạt tín hiệu mua.
    • else Buy[i] = 0;: Quan trọng! Dòng này đảm bảo rằng chỉ tín hiệu mua đầu tiên khi chưa có vị thế mới được giữ lại. Các tín hiệu mua tiếp theo khi đã có vị thế sẽ bị loại bỏ, tránh việc mở nhiều vị thế không cần thiết.
  • Logic Bán (Đóng vị thế):
    if( trailstop > 0 AND Low[ i ] < trailstop )
    {
      Sell[ i ] = 1;
      SellPrice[ i ] = trailstop;
      trailstop = 0;
    }
    
    • if (trailstop > 0 AND Low[i] < trailstop):
      • Kiểm tra nếu đang có vị thế (trailstop > 0).
      • Và giá thấp nhất của thanh nến hiện tại (Low[i]) thấp hơn giá trị Trailing Stop hiện tại (trailstop).
    • Nếu đúng, kích hoạt tín hiệu bán (Sell[i] = 1), lưu giá bán (SellPrice[i] = trailstop), và đặt lại trailstop = 0 (báo hiệu đã thoát vị thế).
  • Logic Cập nhật Trailing Stop Loss khi đang giữ vị thế:
    if( trailstop > 0 )
    {
      trailstop = Max( High[ i ] * StopLevel, trailstop );
      trailARRAY[ i ] = trailstop;
    }
    
    • if (trailstop > 0): Nếu đang có vị thế và chưa bị cắt lỗ.
    • trailstop = Max( High[i] * StopLevel, trailstop );: Đây là phần cốt lõi của Trailing Stop. trailstop được gán bằng giá trị lớn nhất giữa:
      1. High[i] * StopLevel: Mức dừng lỗ mới tính từ đỉnh của thanh nến hiện tại.
      2. trailstop: Mức dừng lỗ hiện tại. Hàm Max() đảm bảo rằng Trailing Stop chỉ có thể đi lên hoặc giữ nguyên, không bao giờ đi xuống, bảo vệ lợi nhuận đã đạt được.
    • trailARRAY[i] = trailstop;: Gán giá trị trailstop đã được cập nhật vào mảng trailARRAY tại BarIndex hiện tại để có thể vẽ trên biểu đồ.

3. Trực Quan Hóa (Plotting)

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);

Plot( Close,"Price",colorBlack,styleBar);
Plot( trailARRAY,"trailing stop level", colorRed );
  • PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);: Vẽ mũi tên MUA (màu xanh lá) tại vị trí Low của nến khi có tín hiệu Buy.
  • PlotShapes(Sell*shapeDownArrow,colorRed,0,High);: Vẽ mũi tên BÁN (màu đỏ) tại vị trí High của nến khi có tín hiệu Sell.
  • Plot( Close,"Price",colorBlack,styleBar);: Vẽ biểu đồ giá đóng cửa dưới dạng nến.
  • Plot( trailARRAY,"trailing stop level", colorRed );: Vẽ đường Trailing Stop Loss mà chúng ta đã tính toán và lưu vào mảng trailARRAY với màu đỏ.
Kết quả

Kết quả

Ví dụ

Ví dụ


Tại Sao Đây Là Mã Nâng Cao?

  • Phụ thuộc vào thanh nến trước: Logic này yêu cầu Amibroker phải biết trạng thái của trailstop (từ lần lặp trước) để quyết định hành động cho thanh nến hiện tại. Điều này chỉ có thể thực hiện được hiệu quả với vòng lặp For.
  • Duy trì trạng thái: Biến trailstop đóng vai trò duy trì “trạng thái” của vị thế (đang có hay không có vị thế) và mức dừng lỗ hiện tại qua từng thanh nến.
  • Xử lý tín hiệu “dư thừa”: Đoạn code bao gồm logic (else Buy[i] = 0;) để tránh nhận các tín hiệu mua liên tiếp khi đã có vị thế, đảm bảo mỗi vị thế chỉ được mở một lần.
  • Tích hợp tham số: Việc sử dụng Param() giúp bạn dễ dàng điều chỉnh mức dừng lỗ mà không cần phải chỉnh sửa trực tiếp trong code, tăng tính linh hoạt cho hệ thống.

Việc xây dựng một hệ thống Trailing Stop Loss tùy chỉnh bằng vòng lặp For trong AFL là một minh chứng rõ ràng cho sức mạnh và sự linh hoạt của ngôn ngữ này. Nó cho phép bạn kiểm soát hoàn toàn logic giao dịch của mình, bảo vệ vốn và tối ưu hóa lợi nhuận trong mọi điều kiện thị trường.

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