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
Amibroker
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)
và
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:
-
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.
-
Ở mỗi mã giao dịch
: -
Vào Symbol → Information → Currency → chọn loại tiền tương ứng.
-
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ệu
và
có 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
Thông tin trong bài chỉ mang tính tham khảo, không phải khuyến nghị mua bán. Giao dịch phái sinh có rủi ro cao do sử dụng đòn bẩy; nhà đầu tư tự chịu trách nhiệm với quyết định của mình.
Tự động đặt lệnh theo tín hiệu AmiBroker thẳng vào tài khoản chứng khoán.
* Phần mềm chạy trên máy tính Windows. Giao dịch tự động vẫn có rủi ro mất vốn.



