Thuộc tính chiến lược

Mỗi chiến lược Pine có một số thuộc tính xác định hành vi của chiến lược đó:

  1. Vốn ban đầu
  2. Đơn vị tiền tệ cơ bản
  3. Kích thước đặt lệnh
  4. Pyramiding
  5. Hoa hồng
  6. Xác minh giá cho các lệnh giới hạn
  7. Trượt giá
  8. Ký quỹ
  9. Tính toán lại
  10. Backtest giá trị chính xác

Tất cả đều có sẵn trong phần cài đặt chiến lược, trong tab Properties:

Mỗi tham số được chỉ định trong các thuộc tính của chiến lược có thể được thay đổi bằng cách chỉnh sửa các đối số của lệnh gọi hàm strategy() trong tập lệnh Pine tương ứng:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick, process_orders_on_close, use_bar_magnifier)

Chúng ta hãy xem xét từng tham số đầu vào trong menu Properties và tham số tương ứng trong ngôn ngữ Pine:

1 - Vốn ban đầu (tham số: initial_capital) đại diện cho số tiền ban đầu có sẵn cho chiến lược giao dịch, bằng đơn vị tiền tệ được xác định trong Đơn vị tiền tệ cơ sở (Base Currency). Theo mặc định, giá trị này bằng 1.000.000. Bạn có thể cần phải tăng giá trị này để các giao dịch xảy ra trên một số mã giao dịch nhất định.

2 - Đơn vị tiền tệ cơ sở (tham số: currency) chỉ định đơn vị tiền tệ được sử dụng để tính toán. Kết quả xuất hiện trong tab Strategy Tester (lãi, lỗ, giảm, v.v.) được biểu thị bằng đơn vị tiền tệ này. Các lựa chọn có sẵn là:

Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Nếu lựa chọn Default được chọn, chiến lược sẽ sử dụng đơn vị tiền tệ mặc định cho mã này và không thực hiện quy đổi đơn vị tiền tệ.

3 - Kích thước lệnh (tham số: default_qty_value, default_qty_type). Điều này yêu cầu một giá trị và một chế độ tính toán. Lưu ý rằng các giá trị được tính toán có thể bị ràng buộc do số lượng tối thiểu có thể giao dịch cho mã giao dịch:

  • Hợp đồng (đối số: Strategy.fixed) - chiến lược sẽ nhập với số lượng hợp đồng/cổ phiếu/lot được chỉ định.
  • Số tiền tính theo đơn vị tiền tệ (đối số: Strategy.cash) - chiến lược sẽ nhập số tiền được chỉ định bằng đơn vị tiền tệ cơ sở.
  • Phần trăm vốn chủ sở hữu (đối số: strategy.percent_of_equity) - quy mô vị thế sẽ được tính theo phần trăm vốn chủ sở hữu khả dụng khi giao dịch mở cửa.

4 - Pyramiding (tham số: pyramiding) chỉ định số lượng tối đa các mục nhập liên tiếp được phép theo cùng một hướng. Khi tính năng Pyramiding bị vô hiệu hóa, chiến lược chỉ có thể mở một vị thế mua hoặc bán, ngay cả khi đáp ứng các điều kiện đầu vào. Pyramiding chỉ ảnh hưởng đến các mục nhập được thực hiện bằng cách sử dụng hàm Strategy.entry(). Nó không ảnh hưởng đến các lệnh được tạo bằng cách sử dụng Strategy.order().

- Hoa hồng (các tham số: commission_typecommission_value). Đây là số tiền được trả trong phí giao dịch cho mỗi giao dịch. Giá trị và chế độ tính toán phải được cung cấp. Lưu ý rằng hoa hồng được áp dụng cho cả lượt nhập và lượt ra, và khi tỷ lệ phần trăm được sử dụng, hoa hồng được tính sẽ thay đổi theo giá trị của giao dịch:

  • Phần trăm giá trị đã giao dịch (đối số: strategy.commission.percent) - áp đặt hoa hồng cho mỗi lệnh bằng phần trăm được chỉ định.
  • Đơn vị tiền tệ trên mỗi hợp đồng (đối số: strategy.commission.cash_per_contract) - áp đặt hoa hồng cho mỗi hợp đồng.
  • Đơn vị tiền tệ trên mỗi lệnh (đối số: strategy.commission.cash_per_order) - tính hoa hồng cho mỗi lệnh.

6 - Xác minh giá cho lệnh giới hạn (tham số: backtest_fill_limits_assumption) làm cho các điều kiện để nhập một vị thế sử dụng lệnh giới hạn nghiêm ngặt hơn. Theo mặc định, giá trị này là 0, tức là các lệnh giới hạn được lưu vào dữ liệu lịch sử ngay sau khi đạt đến giá được chỉ định trong lệnh. Nếu tham số không phải là 0, thì lệnh giới hạn chỉ có thể nhập một vị thế trong thanh nếu giá thị trường đã vượt quá mức của lệnh giới hạn bằng số lần tick xác định.

7 - Trượt giá (tham số: slippage) chỉ định giá trị trong tích tắc sẽ được thêm vào giá đầy đủ của thị trường hoặc lệnh dừng. Tham số này có thể được sử dụng để tính toán mức chênh lệch.

8 - Ký quỹ đối với các Vị thế Mua và Bán (tham số: margin_long, margin_short) chỉ định mức ký quỹ cho mỗi giao dịch, tức là phần trăm vị thế mà nhà giao dịch phải cấp vốn. Ví dụ: nếu Ký quỹ cho các vị thế mua được đặt thành 25%, nhà giao dịch phải có đủ tiền để chi trả 25% giao dịch mở và có khả năng chi tiêu tới 400% vốn chủ sở hữu của họ cho mỗi giao dịch.

Nếu một giao dịch đã được mở và bắt đầu thua lỗ đến mức số tiền của nhà giao dịch không đủ để trang trải phần giao dịch của anh ấy, thì một Lệnh gọi ký quỹ sẽ xảy ra và buộc phải thanh lý một phần của vị thế ban đầu. Số lượng chính xác các đơn vị sẽ được thanh lý gấp 4 lần số lượng cần thiết để bù đắp khoản lỗ. Nó được tính toán thông qua thuật toán sau:

1. Tính Số tiền đã Chi, số tiền mà nhà giao dịch đã chi để mở vị thế.

Position Size * Entry Price 

2. Tính giá trị thị trường của chứng khoán (MVS). 

Position Size * Current Price 

3. Tính lợi nhuận mở. Nếu hướng giao dịch ngắn và Open Profit là một số dương, kết quả vẫn phải là số âm, vì vậy chúng tôi nhân giá trị tuyệt đối của phép tính với -1.

ABS (MVS - Money Spent) * -1

4. Tính Vốn chủ sở hữu, tức là số tiền có sẵn cho nhà giao dịch tại thời điểm hiện tại.

Initial Capital + Net Profit + Open Profit

5. Chuyển đổi Phần trăm ký quỹ (Margin Percent) sang Tỷ lệ ký quỹ (Margin Ratio).

Margin Percent / 100

6. Tính toán Ký quỹ, tức là số tiền chính xác cần thiết để trang trải một phần của vị thế mở.

MVS * Margin Ratio

7. Tính toán Nguồn vốn khả dụng, tức là số tiền bị mất mà nhà giao dịch không thể trang trải bằng vốn chủ sở hữu hiện tại của họ.

Equity - Margin 

8. Tính tổng số tiền mà nhà giao dịch đã mất.

Available Funds / Margin Ratio

9. Tính xem nhà giao dịch sẽ cần bán bao nhiêu đơn vị để bù lỗ. Giá trị được cắt ngắn đến cùng dấu thập phân với kích thước hợp đồng tối thiểu cho mã giao dịch hiện tại.

TRUNCATE(Step #8 / Current Price) 

10. Tính xem nhà môi giới sẽ bán bao nhiêu đơn vị để bù lỗ. Nhà môi giới giả lập của chúng tôi bán gấp 4 lần số lượng đơn vị cần thiết để đảm bảo lệnh gọi ký quỹ không liên tục được kích hoạt nếu lỗ tiếp tục. Giá trị này sẽ dương đối với các giao dịch ngắn hạn vì nhà môi giới mua các đơn vị để bù lỗ thay vì bán chúng.

Step #9 * 4 

Để kiểm tra chi tiết tính toán này, hãy thêm Chiến lược siêu xu hướng tích hợp vào biểu đồ NASDAQ: TSLA trên khung thời gian 1D. Đặt Kích thước lệnh thành 300% equity và Ký quỹ cho các vị thế mua là 25%.


Lần nhập đầu tiên của chúng tôi xảy ra khi mở cửa thanh vào ngày 16 tháng 9 năm 2010. Chúng tôi mua 682438 đơn vị (Position size) với giá 4,43 USD (Giá nhập). Sau đó, vào ngày 23 tháng 9 năm 2010, khi giá ở mức 3,9 (Giá hiện tại), 111052 đơn vị đã được thanh lý cưỡng chế thông qua lệnh gọi ký quỹ.

1. Money spent: 682438 * 4.43 = 3023200.34

2. MVS: 682438 * 3.9 = 2661508.2

3. Open Profit: −361692.14

4. Equity: 1000000 + 0 − 361692.14 = 638307.86

5. Margin Ratio: 25 / 100 = 0.25

6. Margin: 2661508.2 * 0.25 = 665377.05

7. Available Funds: 638307.86 - 665377.05 = -27069.19

8. Money Lost: -27069.19 / 0.25 = -108276.76

9. Shares to cover the loss: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763

10. Margin Call Size: -27763 * 4 = - 111052

9 - Tuỳ chọn Tính toán lại quy định tần suất nên tính toán lại chiến lược. Theo mặc định, chiến lược được tính toán lại khi đóng mỗi thanh, nhưng bằng cách sử dụng các tùy chọn bên dưới, chiến lược cũng có thể được tính toán lại:

  • Sau khi Lệnh được thực hiện (tham số: calc_on_order_fills) - cho phép chiến lược thực hiện tính toán lệnh bổ sung trong thanh ngay lập tức sau khi đơn hàng được hoàn thành. Tính toán bổ sung đó xảy ra trên cả thanh lịch sử và thanh thời gian thực.
  • Trên mỗi lần thay đổi giá (tham số: calc_on_every_tick). Theo mặc định, các chiến lược chỉ tính toán khi đóng các thanh thời gian thực. Tham số này cho phép chiến lược tính toán trên mỗi lần cập nhật thanh thời gian thực, giống như một chỉ báo. Lưu ý rằng dữ liệu đánh dấu sẽ bị mất khi biểu đồ được làm mới, vì vậy các chiến lược sử dụng tùy chọn này sẽ sơn lại. Tham số này không ảnh hưởng đến hành vi của các chiến lược trên thanh lịch sử. Cũng lưu ý rằng các chiến lược sử dụng tính năng này sẽ không hiển thị kết quả thực tế trên các thanh lịch sử, vì không chứa dữ liệu đánh dấu.
  • Trên mỗi lần đóng thanh: (tham số: process_orders_on_close): Nếu đúng, chiến lược tiếp tục cố thực hiện lệnh sau khi đóng một thanh và hoàn tất việc tính toán chiến lược. Nếu lệnh là lệnh trên thị trường, trình lập giá của nhà môi giới thực thi lệnh trước khi mở thanh tiếp theo. Nếu lệnh phụ thuộc vào giá, lệnh sẽ chỉ được điền nếu đáp ứng các điều kiện về giá. Tuỳ chọn này hữu ích nếu bạn muốn thực thi lệnh khi tạo lệnh: theo mặc định, lệnh được tạo khi Đóng thanh hiện tại và được thực thi khi Mở thanh tiếp theo. Khi bật cài đặt này, lệnh sẽ được thực thi trong cùng thời điểm Đóng khi lệnh được tạo. Lưu ý rằng nhập vị thế trong cùng một lần đánh dấu khi tạo lệnh có thể gây hiểu lầm bởi điều đó có thể làm giao dịch thực tế hoàn tất.

10 - Backtest giá trị Chính xác:

  • Sử dụng Bar Magnifier (tham số: use_bar_magnifier) cho phép Trình giả lập của Nhà môi giới sử dụng dữ liệu khung thời gian thấp hơn trong khi backtest quá khứ để có thêm kết quả thực tế. Bạn có thể tìm hiểu thêm về chế độ backtest Bar Magnifier trong Trung tâm Hỗ trợ.