StaticVarGet - Lấy giá trị của biến tĩnh
CÚ PHÁP
StaticVarGet( 'varname', align = True )
TRẢ VỀ
SỐ hoặc CHUỖI
CHỨC NĂNG
Lấy giá trị của biến tĩnh.
Biến tĩnh - biến có thời gian sống tĩnh (nó được cấp phát khi chương trình bắt đầu và giải phóng khi chương trình kết thúc) và khởi tạo giá trị Null trừ khi có giá trị khác được chỉ định. Biến tĩnh cho phép chia sẻ giá trị giữa các công thức khác nhau. Biến tĩnh ARRAY được hỗ trợ (phiên bản 5.30 trở lên).
Xin lưu ý rằng biến tĩnh mảng sẽ tiêu thụ 8 * (số_lượng_thanh) byte bộ nhớ và nó sẽ không được giải phóng cho đến khi chương trình đóng hoặc biến được xóa bằng cách sử dụng StaticVarRemove().
Mảng tĩnh có thể nhanh hơn 100 lần so với AddToComposite/Foreign, tuy nhiên hai phương pháp này không hoàn toàn tương đương.
Có các hạn chế/khác biệt sau của mảng tĩnh so với Foreign/AddToComposite:
a) biến mảng tĩnh chỉ lưu trữ số thanh hiện tại được sử dụng bởi biểu đồ hiện tại (vì vậy chúng không ảnh hưởng đến QuickAFL theo bất kỳ cách nào). Điều này khác với AddToComposite, mà buộc việc sử dụng và lưu trữ tất cả các thanh.
b) biến mảng tĩnh hoạt động tốt nhất nếu bạn đọc chúng bằng cùng khoảng thời gian mà chúng đã được ghi. Ví dụ, khi bạn tạo các biến mảng tĩnh bằng biểu đồ 5 phút, để đạt kết quả tốt nhất, hãy đọc chúng trong một biểu đồ khác 5 phút. Đọc trong các khoảng thời gian khác nhau cũng có thể có thể, nhưng có giới hạn của đánh dấu thời gian (xem bên dưới)
c) khi bạn đọc biến tĩnh trong một khoảng thời gian khác so với khoảng thời gian ban đầu nó được lưu trữ, biến tĩnh thực hiện đồng bộ hóa/làm mịn và nén/giải nén thời gian tự động theo cách tương tự như Foreign, tuy nhiên Foreign luôn nén dữ liệu từ khoảng thời gian cơ sở, trong khi biến tĩnh hoạt động trên khoảng thời gian đã lưu trước đó, do đó kết quả có thể khác nhau. Ví dụ, nếu dữ liệu được lưu trữ trước đó là trong khoảng thời gian hàng ngày và bạn đọc biến tĩnh đó trong biểu đồ intraday, bạn sẽ thấy các đường thẳng hoàn toàn phẳng cho mỗi ngày, đại diện cho dữ liệu tĩnh từ khoảng thời gian hàng ngày.
d) biến mảng tĩnh không hoạt động tốt cho các khoảng thời gian không dựa trên thời gian (tick/n-volume/n-tick) vì dấu thời gian trong các khoảng thời gian đó có thể không duy nhất (tức là một số thanh có thể có cùng dấu thời gian), do đó đồng bộ hóa thời gian không đáng tin cậy.
e) biến mảng tĩnh chậm hơn chút so với biến AFL bình thường, vì vậy để có hiệu suất tốt nhất, hãy sử dụng mô hình đọc-một-lần, ghi-một-lần, sử dụng biến bình thường tạm thời cho bất kỳ xử lý nào trong quá trình thực thi công thức, như sau: Tham số align mới (mặc định = true) quyết định liệu AmiBroker thực hiện đồng bộ hóa/điều chỉnh dấu thời gian hay không.
Giá trị mặc định là True và có nghĩa là giá trị được lưu trữ trong biến tĩnh được truy xuất và điều chỉnh để phù hợp với dữ liệu/dấu thời gian của biểu đồ hiện tại trên cơ sở từng thanh để dữ liệu cho các ngày/giờ tương ứng phù hợp. Đây là cài đặt được khuyến nghị và cách hoạt động của nó trong các phiên bản trước đây.
Khi align được chuyển sang False - có nghĩa là AmiBroker không thực hiện bất kỳ kiểm tra hoặc điều chỉnh nào và sẽ điền mảng với các giá trị liên tục được lưu trữ trong mảng tĩnh bất kể dấu thời gian của chúng. Nếu có ít thanh hơn trong mảng tĩnh so với trong các mảng hiện tại, giá trị cuối cùng của mảng tĩnh sẽ được truyền cho đến BarCount - 1.
Không khuyến nghị sử dụng align=False, trừ khi bạn biết chính xác bạn đang làm gì và bạn nhận thức rằng dấu thời gian không có ý nghĩa trong biến cụ thể hoặc trong trường hợp dấu thời gian được căn chỉnh bằng phương pháp riêng của bạn.
Lưu ý rằng tốc độ khác biệt giữa align 'on' và 'off' thường không đáng kể vì thuật toán căn chỉnh rất nhanh và có độ phức tạp tương tự như sao chép bộ nhớ thông thường.
VÍ DỤ
// Đầu công thức:
temp = StaticVarGet("mystaticarray" );
// Tiến hành tất cả các tính toán cần thiết bằng biến temp
temp = Nz(temp) + C/2;
...
// Kết thúc công thức, lưu vào biến tĩnh
StaticVarSet("mystaticarray", temp );