[Chia sẻ] Code tự động đánh dấu pivot đỉnh đáy như MarketSmith của IBD

Thảo luận trong 'Bàn luận về Amibroker, Metastock, Metatrader 4' bắt đầu bởi nguyenjoe, 25/3/23.

Lượt xem : 4,971

  1. nguyenjoe

    nguyenjoe Well-Known Member

    Tham gia ngày:
    18/7/21
    Bài viết:
    93
    Đã được thích:
    166
    Giới tính:
    Nam
    Mình là 1 Fan của Oneil và thích mô phỏng những gì có ở trong nhật báo IBD. Trước đây mình có chia sẻ code mô phỏng RS line của IBD rồi. Hôm nay mình sẽ chia sẻ code đánh dấu các điểm pivot đỉnh đáy như MarketSmith của IBD. Mục đích code này để xác định xu hướng và các mẫu hình cho trực quan chứ không phải để bắt đỉnh hay đáy vì nó có độ trễ nhé các bạn.
    upload_2023-3-25_7-23-11.png

    OK phần sau đây là giải thích về code. Điểm pivot high được đánh dấu nếu nó là đỉnh cao nhất so với 9 nến bên trái và 9 nến bên phải. Tương tự điểm pivot low được đánh dấu nếu nó là đáy thấp nhất so với 9 nến bên trái và 9 nến bên phải. Có thể vào parameter để điều chỉnh số nến tăng hoặc giảm. Lưu ý là chu kỳ càng nhỏ thì càng nhiễu và nguyên gốc IBD lấy chu kỳ 9 nến chắc là có lý do hoặc nghiên cứu j đó nên mình sẽ dùng mặc định là 9 nến.

    ////////////////////////////////////////////////////
    Một số code khác mà minh đã chia sẻ

    Cách hiển thị tên của watchlist trong explorer và trên Chart

    Thống kê số lượng mã nằm trên/dưới MA20 và cách ứng dụng

    Elder Chart: Xác định vùng nào nên tham gia

    Code RSLine cho từng mã cổ phiếu.

    Gửi tín hiệu từ Amibroker lên telegram

    Code đưa toàn bộ list vừa lọc filter sang watchlist

    Ngoài ra mình cũng có 1 room chat Telegram hỗ trợ nhau để viết code Amibroker nhanh hơn. Sắp tới mình đang chuẩn bị triển khai thêm chương trình đào tạo viết code amibroker. Bạn nào muốn giao lưu về viết code hoặc muốn học thì tham gia room nhé. Khi nào mở lớp mình sẽ thông báo trên room này.

    Link group Telegram: https://t.me/joinchat/eOv7MEmjN-I2NTA9

    ////////////////////////////////////////////////////
    Phần code bài này mình để bên dưới.

    Mã:
    _SECTION_BEGIN("Pivot high low");
    
    procedure alternate_proc( pk, tr, sumpk, sumtr )
    {
        global pkg;
        global trg;
    
        pkg = pk;
        trg = tr;
        idxpk = 0;
        idxtr = 0;
        flgtr = 0;
        flgpk = 0;
    
        for( i = 1; i < BarCount; i++ )
        {
            if( pk[i] AND sumpk[i] == 1 AND !tr[i] AND flgpk == 0 )
            {
                idxpk = i;
                flgtr = 0;
            }
            else
                if( ( pk[i] AND sumpk[i] > 1 AND !tr[i] ) OR( pk[i] AND flgpk == 1 ) )
                {
                    if( H[i] > H[idxpk] )
                    {
                        pkg[idxpk] = 0;
                        idxpk = i;
                        flgpk = 0;
                    }
                    else
                        if( H[i] <= H[idxpk] )
                        {
                            pkg[i] = 0;
                            flgpk = 0;
                        }
                }
                else
                    if( tr[i] AND sumtr[i] == 1 AND !pk[i] AND flgtr == 0 )
                    {
                        idxtr = i;
                        flgpk = 0;
                    }
                    else
                        if( ( tr[i] AND sumtr[i] > 1 AND !pk[i] ) OR( tr[i] AND flgtr == 1 ) )
                        {
                            if( L[i] < L[idxtr] )
                            {
                                trg[idxtr] = 0;
                                idxtr = i;
                                flgtr = 0;
                            }
                            else
                                if( L[i] >= L[idxtr] )
                                {
                                    trg[i] = 0;
                                    flgtr = 0;
                                }
                        }
                        else
                            if( pk[i] AND tr[i] )
                            {
                                if( sumpk[i - 1] > sumtr[i - 1] )
                                {
                                    pkg[i] = 0;
                                    flgtr = 1;
                                    idxtr = i;
                                }
                                else
                                    if( sumtr[i - 1] > sumpk[i - 1] )
                                    {
                                        trg[i] = 0;
                                        flgpk = 1;
                                        idxpk = i;
                                    }
                            }
        }
    }
    
    // Fractal Pivots
    x = bi = BarIndex();
    fvb = FirstVisibleValue( bi );
    lvb = LastVisibleValue( bi );
    
    rightstrength = Param( "Right Strength", 9, 2, 50, 1 );
    leftstrength = Param( "Left Strength", 9, 2, 50, 1 );
    leftstrength = rightstrength;
    
    pk = H == HHV( H, leftstrength ) AND Ref( HHV( H, rightstrength ), rightstrength ) < H;
    tr = L == LLV( L, leftstrength ) AND Ref( LLV( L, rightstrength ), rightstrength ) > L;
    
    sumpk = Sum( pk, BarsSince( tr ) );
    sumtr = Sum( tr, BarsSince( pk ) );
    alternate_proc( pk, tr, sumpk, sumtr );
    pk = pkg;
    tr = trg;
    
    for( i = 0; i < 3; i++ )
    {
        VarSet( "px" + i, ValueWhen( pk, bi, i ) );
        VarSet( "tx" + i, ValueWhen( tr, bi, i ) );
        VarSet( "ph" + i, ValueWhen( pk, H, i ) );
        VarSet( "tl" + i, ValueWhen( tr, L, i ) );
    }
    
    ll = tr AND tl1 < tl2;
    hl = tr AND tl1 > tl2;
    hh = pk AND ph1 > ph2;
    lh = pk AND ph1 < ph2;
    dt = pk AND ph1 == ph2;
    db = tr AND tl1 == tl2;
    
    
    clrpk = colorblack;
    clrtr = colorblack;
    
    for( i = lvb; i > fvb; i-- )
    {
        // troughs
        if( ll[i] )
        {
            str = "" + WriteVal(L[i],8.2);
            PlotTextSetFont( str, "Arial", 8, i, L[i], clrtr, colorDefault, -30 );
        }
    
        if( hl[i] )
        {
            str = "" + WriteVal(L[i],8.2);
            PlotTextSetFont( str, "Arial", 8, i, L[i], clrtr, colorDefault, -30 );
        }
    
        if( db[i] )
        {
            str = "DB";
            PlotTextSetFont( str, "Arial", 8, i, L[i], clrtr, colorDefault, -30 );
        }
    
        //peaks
        if( hh[i] )
        {
            str = ""+WriteVal(H[i],8.2);
            PlotTextSetFont( str, "Arial", 8, i, H[i], clrpk, colorDefault, 20 );
        }
    
        if( lh[i] )
        {
            str = "" +WriteVal(H[i],8.2);
            PlotTextSetFont( str, "Arial", 8, i, H[i], clrpk, colorDefault, 20 );
        }
    
        if( dt[i] )
        {
            str = "DT";
            PlotTextSetFont( str, "Arial", 8, i, H[i], clrpk, colorDefault, 20 );
        }
    }
    
    GraphXSpace = 8;
    Plot( Close,"Price",colorBlack,styleCandle);
     
  2. Đang tải...

    Bài viết tương tự Diễn đàn Date
    [Chia sẻ] Tính năng Chart in Chart: Xem chart Tuần, Tháng nổi ngay trong Chart Daily Bàn luận về Amibroker, Metastock, Metatrader 4 8/8/23
    [Chia sẻ] Combo Bảng giá theo ngành + Top CP + DM theo dõi + Bắn Tele cảnh báo giá + Click đổi chart Bàn luận về Amibroker, Metastock, Metatrader 4 9/7/23
    [Chia sẻ] Tặng code xem bảng giá mini + Top CP, click để thay đổi mã trực tiếp trên Chart. Bàn luận về Amibroker, Metastock, Metatrader 4 2/5/23
    [Chia sẻ] Code Volume theo phong cách Dan Zanger và Pivot Pocket Volume Bàn luận về Amibroker, Metastock, Metatrader 4 29/3/23

  3. kk123

    kk123 Member

    Tham gia ngày:
    9/3/22
    Bài viết:
    6
    Đã được thích:
    1
    Giới tính:
    Nam
    tuyệt vời
     
  4. nguyenjoe

    nguyenjoe Well-Known Member

    Tham gia ngày:
    18/7/21
    Bài viết:
    93
    Đã được thích:
    166
    Giới tính:
    Nam
    anh em chú ý mình code trên nền trắng và chữ đen nên anh em nào để nền tối có thể sẽ hơi khó nhìn. Code khi chạy nó sẽ như thế này

    upload_2023-3-25_17-59-17.png
     
    May thích bài này.
  5. Kingsman37

    Kingsman37 Active Member

    Tham gia ngày:
    1/12/21
    Bài viết:
    30
    Đã được thích:
    5
    Giới tính:
    Nam
    bác có thể chỉnh sửa code này để lọc các cổ phiếu có mẫu hình 2 đáy ngắn được không ạ. Đáy sau thấp hơn hoặc bằng đáy trước có xác suất khá cao
     
  6. nguyenjoe

    nguyenjoe Well-Known Member

    Tham gia ngày:
    18/7/21
    Bài viết:
    93
    Đã được thích:
    166
    Giới tính:
    Nam
    Cái này có độ trễ vì sau khi qua đáy nó mới xác định được. Do đó chức năng chính là để confirm xu hướng chứ ko phải là mua bán đỉnh đáy.
     
    thanhthai63 thích bài này.

Lượt bình luận : 4

Chia sẻ trang này