Amibroker: Code dùng cho bộ lọc.

Discussion in 'Amibroker, Metatrader, MetaStock, TradeStation &' started by trungnghia, Apr 13, 2015.

  1. trungnghia

    trungnghia Moderator

    Joined:
    Nov 1, 2011
    Messages:
    2,909
    Likes Received:
    7,998
    Trophy Points:
    113
    Dù đối với đa số VCers Amibroker không không còn mới mẻ, việc sử dụng Amibroker, code trong Amibroker và cả việc lọc cổ phiếu không là vấn đề gì! Tuy nhiên, vẫn có một số bạn có ý tưởng nhưng không biết cách ứng dụng trong Amibroker để lọc cổ phiếu cho mình. Nhân có câu hỏi về vấn đề này, tôi trình bày một cách đơn giản để dùng Scan hoặc Explorer (trong AutoAnalysis của Amibroker) để lọc cổ phiếu.

    I. Dùng Scan:

    1. Thành phần tối thiểu:

    Có thể lọc bằng Scan với cấu trúc code đơn giản nhất, gồm một hay nhiều dòng trong các dòng sau đây:
    Buy = <điều kiện 1>;
    Sell = <điều kiện 2>;
    Short = <điều kiện 3>;
    Cover = <điều kiện 4>;

    Các thành phần trong cặp ngoặc nhọn <điều kiện> là biểu thức lôgích theo cú pháp code được Amibroker quy định.

    2. Thí dụ:

    a. Một thí dụ đơn giản nhất:

    Buy = Close> MA(Close, 200);

    hoặc:

    Buy = Cross(EMA(C,13), MA(C,21)) AND V>50000;


    Cũng với ý tưởng trên, đoạn code có thể được sử dụng phức tạp hơn (nhằm tạo được nhiều tùy chọn hơn khi sử dụng):

    //Long MA
    P = ParamField("Price field",-1);
    Periods = Param("Periods", 100, 2, 400, 1 );
    Buy = Close> MA( P, Periods );

    b. Thí dụ dùng nhiều lệnh điều kiện với điều kiện phức tạp :

    r1 = Param("Fast avg", 12, 2, 200, 1);
    r2 = Param("Slow avg", 26, 2, 200, 1);
    r3 = Param("Signal avg", 9, 2, 200, 1);
    ml = MACD(r1, r2);
    sl = Signal(r1, r2, r3);
    Buy=Cross(ml, sl);
    Sell = Cross(sl, ml);

    hay:

    LongMA = EMA(C, Param("Long Period", 50, 30, 100, 5));
    ShortMA = EMA(C, Param("Short Period", 5, 3, 50, 1));
    Buy = Cross(ShortMA, LongMA );
    Sell = Cross(LongMA, ShortMA );


    3. Kết quả:

    Với:
    Buy = Close> MA(Close, 200);

    Có kết quả:

    Ticker,Trade,Date,Close,
    AGF,Buy,2015/04/10,20.7000
    BBC,Buy,2015/04/10,57.0000
    BIC,Buy,2015/04/10,16.9000
    BID,Buy,2015/04/10,19.0000
    BMI,Buy,2015/04/10,17.3000
    BMP,Buy,2015/04/10,81.0000
    ...

    Với:

    Buy = Cross(EMA(C,13), MA(C,21)) AND V>50000;

    Kết quả nhận được:

    Ticker,Trade,Date,Close,
    BSI,Buy,2015/04/10,11.0000
    JVC,Buy,2015/04/10,21.7000
    VHC,Buy,2015/04/10,40.2000
    VIS,Buy,2015/04/10,7.7000

    Còn với:

    LongMA = EMA(C, Param("Long Period", 50, 30, 100, 5));
    ShortMA = EMA(C, Param("Short Period", 5, 3, 50, 1));
    Buy = Cross(ShortMA, LongMA );
    Sell = Cross(LongMA, ShortMA );

    Kết quả sẽ có:

    Ticker,Trade,Date,Close,
    ABT,Sell,2015/04/10,51.0000
    BCI,Sell,2015/04/10,20.8000
    CYC,Buy,2015/04/10,3.9000
    DQC,Buy,2015/04/10,57.5000
    GTA,Buy,2015/04/10,16.0000
    ...

    4. Thành phần kết quả được xuất ra có điểm chung: Gồm các cột mặc định: Ticker, Trade, Date và Close


    II. Dùng Explorer:

    Để dùng Explorer, trong code không dùng các dòng lệnh với Buy, Sell, Short hay Cover mà dùng Filter:

    Filter = <điều kiện>;

    <điều kiện> cũng là biểu thức lôgích.

    Explorer đi kèm với tối thiểu 1 lệnh khai báo cột thông tin xuất ra và cho phép xuất ra các cột dữ liệu như ý muốn. Để xuất ra các cột thông tin, thường có thể dùng thêm các câu lệnh: AddColumn (được dùng xuất dữ liệu số) hoặc AddTextColumn (được dùng xuất dữ liệu chuỗi - text).

    AddColumn(<Tên Dữ liệu>,<Tên cột>,<format>);
    <Tên Dữ liệu> - Biến hoặc các biểu thức chứa dữ liệu dạng số muốn xuất ra.
    <Tên cột> - Tiêu đề của cột sẽ được hiển thị.
    <format> - dạng dữ liệu được xuất ra

    AddTextColumn(<Tên Dữ liệu>,<Tên cột>);

    Thí dụ:

    Filter = Cross(EMA(C, 13), MA(C,21)) AND V>50000;
    AddColumn(EMA(C, 13),"EMA-13",1.2);
    AddColumn(MA(C, 21),"MA-21",1.2);
    AddColumn(Ref(C, -4),"Close-4",1.2);
    AddColumn(C,"Close",1.2);

    Kết quả xuất ra:

    Ticker,Date/Time,EMA-13,MA-21,Close-4,Close,
    BIC,2015/04/09,16.06,16.02,15.80,17.20
    BID,2015/04/08,17.91,17.88,17.90,18.50
    BSI,2015/04/10,10.81,10.81,10.50,11.00
    CCL,2015/04/09,4.04,4.03,4.00,4.10
    CII,2015/04/07,18.57,18.53,18.20,19.30
    GTN,2015/04/09,15.99,15.97,15.80,16.40
    ...

    Hai cột đầu Ticker và Date/Time là mặc định (luôn luôn xuất hiện). Trong đó, Date/Time có format phụ thuộc vào khai báo trong Region and Language (Control Panel).

    Các cột còn lại EMA-13, MA-21, Close-4 và Close là do 4 lệnh AddColumn đã khai báo ở trên.

    Một trong những ứng dụng mà tôi đã dùng để xuất file EOD Upto ....txt là đoạn code sau:

    Filter = 1;
    AddColumn(O,"Open");
    AddColumn(H,"High");
    AddColumn(L,"Low");
    AddColumn(C,"Close");
    AddColumn(V,"Volume", 1.0);

    .
     
  2. buncha99

    buncha99 New Member

    Joined:
    Jul 13, 2017
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    1
    Anh Trung Nghĩa ơi,
    em làm file lọc tất cả cp nào có ngày lọc cuối cùng có đường trix (5) cắt trix (9), nhưng lọc không ra anh ơi, nhờ anh chỉ giúp

    _SECTION_BEGIN("TRIX 5-9");
    r1 = Param("Periods", 5, 2, 200, 1 );
    Plot( Trix( 5 ), _DEFAULT_NAME(), ParamColor("color", colorCycle ), ParamStyle("Style");
    r2 = Param("Periods", 9, 2, 200, 1 );
    Plot( Trix( 9 ), _DEFAULT_NAME(), ParamColor("color", colorCycle ), ParamStyle("Style");
    Buy = Cross(r1, r2) AND V > 20000;
    _SECTION_END();
     

Share This Page

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.