StaticVarSet - thiết lập giá trị cho biến tĩnh

Thứ 4, 02/07/2025

::

PM
Đầu tư chứng khoán khoa học trên nền tảng phân tích dữ liệu và thống kê
StaticVarSet - thiết lập giá trị cho biến tĩnh
30/05/2023 03:37 AM 1305 Lượt xem

    StaticVarSet - thiết lập giá trị cho biến tĩnh

    SYNTAX

    StaticVarSet( ''varname'', value, persistent = False, compressionMode = cmDefault )

    RETURNS

    NUMBER

    FUNCTION

    Thiết lập giá trị cho biến tĩnh. Trả về 1 nếu thành công, 0 nếu thất bại.
    Biến tĩnh - biến có thời gian sống tĩnh (đượ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ị là Null trừ khi 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ợ từ phiên bản 5.30 và biến tĩnh MATRIX được hỗ trợ từ phiên bản 6.10.

    Vui lòng lưu ý rằng biến tĩnh mảng sẽ tiêu thụ 8 * (số_lượng_các_mẫu) 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 loại bỏ bằng cách sử dụng StaticVarRemove().

    Tính đồng nhất

    Kể từ phiên bản 5.80, có tham số mới là persist. Nếu đặt thành True, biến tĩnh sẽ được lưu trữ trong tệp PersistVars.bin khi AmiBroker đóng và được tải lại tự động khi khởi động lại, duy trì giá trị của biến tĩnh giữa các lần chạy ứng dụng). Ngoài việc lưu tự động khi thoát, biến tĩnh có thể được lưu tự động theo khoảng thời gian do người dùng chỉ định bằng cách sử dụng SetOption("StaticVarAutoSave", interval );

    Tính nén

    Kể từ phiên bản 6.10, có tham số mới là compressionMode quyết định liệu biến cụ thể có được nén hay không.Mặc định chỉ biến tĩnh bền vững sẽ được nén (cmDefault). Bạn có thể tắt hoàn toàn nén compressionMode = cmNever, hoặc bật nén cho biến bền vững và không bền vững sử dụng compressionMode = cmAlways.

    Nén được thực hiện bằng cách loại bỏ các giá trị lặp lại từ chuỗi vì các giá trị lặp lại được khôi phục khi thực hiện StaticVarGet. Nén KHÔNG tương thích với chế độ không đồng nhất của StaticVarGet. Nếu mảng đã được nén được lấy lại bằng cách sử

     dụng StaticVarGet với align=False, thì các giá trị lặp lại được tìm thấy trong mảng gốc sẽ không được lấy lại. Bật nén làm chậm quá trình StaticVarSet (vì nó cần thực hiện một số xử lý bổ sung), nhưng không ảnh hưởng đến hiệu suất của các chức năng khác, vì vậy StaticVarGet có hiệu suất tương đương với hoặc không có nén.

    Biến tĩnh so với thành phần

    Mảng tĩnh có thể nhanh hơn đến 100 lần so với AddToComposite/Foreign, tuy nhiên hai điều này không hoàn toàn tương đương.

    Có các hạn chế / khác biệt sau đây của mảng tĩnh so với Foreign/AddToComposite:

    Biến tĩnh mảng chỉ lưu trữ số lượng các mẫu hiện tại được sử dụng bởi biểu đồ cụ thể (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, làm cho việc sử dụng và lưu trữ tất cả các mẫu bắt buộc.

    Biến tĩnh mảng hoạt động tốt nhất nếu bạn đọc chúng bằng cùng một khoảng thời gian mà chúng được ghi vào. Ví dụ: Khi bạn tạo biến tĩnh mảng sử dụng biểu đồ 5 phút, để đạt được kết quả tốt nhất, hãy đọc chúng trong một biểu đồ 5 phút khác. Đọc trong các khoảng thời gian khác nhau là khả thi, nhưng phụ thuộc vào các hạn chế của đánh dấu thời gian (xem phần dưới đây).

    Khi bạn đọc biến tĩnh trong một khoảng thời gian khác so với nơi ban đầu lưu trữ, biến tĩnh thực hiện đồng bộ hóa / nén và giãn nén thời gian tự động theo cách tương tự như foreign, tuy nhiên, Foreign nén dữ liệu luôn 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 đó trong khoảng thời gian hàng ngày và bạn đọc biến tĩnh đó trong biểu đồ giờ trong ngày, bạn sẽ thấy các đường thẳng 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.
    Biến tĩnh mảng 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ì các đánh 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ố mẫu có thể có cùng đánh dấu thời gian), do đó, đồng bộ hóa thời gian không đáng tin cậy.

    Biến tĩnh mảng chậm hơn so với biến AFL bình thường, vì vậy cho hiệu suất tốt nhất, hãy sử dụng mô hình đọc-một-lần, viết-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:

    VÍ DỤ

    // start of the formula:
    temp = StaticVarGet("mystaticarray" );

    // now perform all necessary calculations using temp variable

    temp = Nz(temp) + C/2;
    ...


    // at the end of the formula store to static
    StaticVarSet("mystaticarray", temp );

    Đọc thêm

    Thu gọn

    Bài viết khác:
    Zalo
    Hotline