Mở rộng vị thế (Kim tự tháp) và hỗ trợ đa tiền tệ trong kiểm tra ngược danh mục đầu tư AmiBroker

ha.anh
6 Min Read

1. Giới thiệu

Từ phiên bản 4.70, AmiBroker cho phép kiểm tra ngược danh mục đầu tư với khả năng mở rộng/thu hẹp vị thế (scaling in/out)quản lý nhiều loại tiền tệ. Những tính năng nâng cao này chỉ hỗ trợ trong chế độ Portfolio Backtester, không áp dụng cho Single Symbol Backtester hay hàm Equity().

2. Mở rộng vị thế (Pyramiding / Scaling)

Để hỗ trợ kim tự tháp, AmiBroker cung cấp hai hằng số đặc biệt:

  • sigScaleIn: Mở rộng (tăng) vị thế hiện có.

  • sigScaleOut: Thu hẹp (giảm) vị thế hiện có.

Cách dùng:

  • Gán sigScaleIn hoặc sigScaleOut vào biến Buy hoặc Short tương ứng.

  • Kích thước mở rộng/thu hẹp được xác định bởi PositionSize — nhưng trong trường hợp này, PositionSize chỉ định mức tăng hoặc giảm giá trị đô la, không phải tổng vị thế.

Lưu ý:

  • Tất cả các lệnh scale-in/scale-out được tính là một giao dịch duy nhất với giá nhập/xuất bình quân.

  • Chi tiết về từng lần mở rộng chỉ hiển thị khi bật chế độ “Detailed Log”.

  • Chức năng này không khả dụng trong backtest đơn hoặc khi dùng Equity() — các lệnh scale sẽ bị bỏ qua.

Ví dụ minh họa:

Ví dụ 1: Trung bình chi phí đô la mỗi tháng (DCA)

FixedDollarAmount = 500;

MonthBegin = Month() != Ref(Month(), -1);

FirstPurchase = Cum(MonthBegin) == 1;

 

Buy = IIf(FirstPurchase, 1,

       IIf(MonthBegin, sigScaleIn, 0));

Sell = 0;

 

PositionSize = FixedDollarAmount;

 

Ví dụ 2: DCA đơn giản hóa

FixedDollarAmount = 500;

MonthBegin = Month() != Ref(Month(), -1);

Buy = IIf(MonthBegin, sigScaleIn, 0);

Sell = 0;

 

PositionSize = FixedDollarAmount;

 

Ví dụ 3: Mở rộng khi lợi nhuận > 5%, thu hẹp khi lỗ > 5%

PyramidThreshold = 5;

Buy = Cross(MACD(), Signal());

Sell = Cross(Signal(), MACD());

 

e = Equity(1);

PcntProfit = 100 * (e – ValueWhen(Buy, e)) / ValueWhen(Buy, e);

InTrade = Flip(Buy, Sell);

 

DoScaleIn = ExRem(InTrade AND PcntProfit > PyramidThreshold, Sell);

DoScaleOut = ExRem(InTrade AND PcntProfit < -PyramidThreshold, Sell);

 

Buy = Buy + sigScaleIn * DoScaleIn + sigScaleOut * DoScaleOut;

PositionSize = IIf(DoScaleOut, 500, 1000);

 

Ví dụ 4: Thoát vị thế từng phần theo mục tiêu lợi nhuận

Buy = Cross(MA(C, 10), MA(C, 50));

Sell = 0;

 

FirstProfitTarget = 10;

SecondProfitTarget = 20;

TrailingStop = 10;

 

priceatbuy = 0;

highsincebuy = 0;

exit = 0;

 

for (i = 0; i < BarCount; i++) {

  if (priceatbuy == 0 AND Buy[i])

    priceatbuy = BuyPrice[i];

 

  if (priceatbuy > 0) {

    highsincebuy = Max(High[i], highsincebuy);

 

    if (exit == 0 AND High[i] >= (1 + FirstProfitTarget/100) * priceatbuy) {

      exit = 1;

      Buy[i] = sigScaleOut; // thoát 50%

    }

 

    if (exit == 1 AND High[i] >= (1 + SecondProfitTarget/100) * priceatbuy) {

      exit = 2;

      SellPrice[i] = Max(Open[i], (1 + SecondProfitTarget/100) * priceatbuy);

    }

 

    if (Low[i] <= (1 – TrailingStop/100) * highsincebuy) {

      exit = 3;

      SellPrice[i] = Min(Open[i], (1 – TrailingStop/100) * highsincebuy);

    }

 

    if (exit >= 2) {

      Buy[i] = 0;

      Sell[i] = exit + 1;

      exit = 0;

      priceatbuy = 0;

      highsincebuy = 0;

    }

  }

}

 

SetPositionSize(50, spsPercentOfEquity);

SetPositionSize(50, spsPercentOfPosition * (Buy == sigScaleOut));

 

3. Hỗ trợ nhiều loại tiền tệ (Multi-Currency Support)

Portfolio Backtester của AmiBroker hỗ trợ kiểm tra danh mục có các mã giao dịch bằng nhiều loại tiền tệ. Người dùng có thể khai báo tỷ giá cố định hoặc tỷ giá biến đổi theo thời gian.

Cách thiết lập:
  1. Vào menu Tools → Preferences → tab Currencies:

    • Xác định loại tiền cơ sở (Base Currency).

    • Khai báo các loại tiền khác, tỷ giá và lựa chọn có dùng FX symbol động.

  2. Ở mỗi mã giao dịch:

    • Vào Symbol → Information → Currency → chọn loại tiền tương ứng.

  3. Nếu dùng tỷ giá biến đổi (dynamic FX):

    • Trong tab Currencies, thêm dòng FX SYMBOL tương ứng (ví dụ: USDJPY, EURUSD).

    • FX symbol đó phải tồn tại trong cơ sở dữ liệucó dữ liệu giá cho từng ngày phân tích.

Hộp kiểm “Inverse” có nghĩa gì?

Khi tỷ giá bạn nhập là tỷ giá nghịch đảo (ví dụ: USD là tiền cơ sở, nhưng FX bạn có là JPYUSD thay vì USDJPY), bạn đánh dấu chọn ô “Inverse” để AmiBroker tự tính tỷ lệ đảo ngược.

Ví dụ:

  • Base currency = USD

  • Mã giao dịch có đơn vị EUR, tỷ giá EURUSD = 1.3

  • Nếu chọn Inverse, AmiBroker sẽ dùng 1 / 1.3 = 0.769 để quy đổi về USD

TAGGED:
Share This Article
Leave a Comment