[Chia sẻ] Tặng code xem bảng giá mini + Top CP, click để thay đổi mã trực tiếp trên Chart.

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

Lượt xem : 8,387

  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
    Hello anh em,

    Nhân dịp nghỉ lễ 30/4, mình chia sẻ một bộ code vừa làm xong cho anh em nào thích vọc hoặc sử dụng. Hầu như tất cả các code mình làm đều do nhu cầu sử dụng cá nhân và sau đó share lại cho anh em hoàn toàn miễn phí.
    • Chức năng chính bộ code này là một bảng giá mini. Ý tưởng tạo một bảng giá theo ngành trên Amibroker này không mới và được share trong group telegram của mình. Tuy nhiên mình đã chỉnh sửa lại loại bỏ các thông tin thừa để có thể thu gọn thành bảng giá mini để vẫn có thể nhìn được đồ thị giá trong cùng màn hình.
    • Chức năng phụ là một bộ lọc đơn giản lấy ra TOP 15 cổ phiếu tăng tốt nhất 10 - 20 ngày trong watchlist.
    • Bảng giá và bộ lọc tự động sắp xếp theo thứ tự mã tăng nhiều nhất và đổi màu trực quan để dễ theo dõi.
    • Thêm vào đó mình cũng đưa thêm chức năng click trực tiếp vào mã để thay đổi đồ thị tương ứng.
    • Do kích thước màn hình khác nhau nên anh em tự vào parameter để chỉnh lại chiều cao và độ rộng cũng như số cột trong bảng giá.
    Một số hình ảnh của bộ code:

    upload_2023-5-2_15-36-18.png

    upload_2023-5-2_15-36-1.png

    upload_2023-5-2_15-36-46.png

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    Một số code khác mà minh đã chia sẻ lưu lại đây để dễ tìm ////
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    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

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

    [Chia sẻ] Code Volume theo phong cách Dan Zanger và Pivot Pocket Volume


    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


    /////////////////////////////////////////////////////////////////////////////////////////////////

    Cuối cùng, sau đây là đoạn code để sử dụng:

    Mã:
    bi = BarIndex();
    fbr = Status("firstbarinrange");
    explore = Status("action") == actionExplore;
    fvb = IIf(explore, LastValue(ValueWhen(fbr,bi)), Status("firstvisiblebar"));
    GfxSetOverlayMode( 0 ); 
    // formatted text output sample via low-level gfxfunctions 
    CellHeight = Param("Cell Height",28,0,100,1); 
    CellWidth = Param("Cell Width",128,0,200,1);
    start_x = Param("Vi tri Table X",0,0,2000,1); 
    start_y = Param("Vi tri Table Y",30,0,500,1); 
    BtnOffsetXY = 1;
    x1= start_x;
    y1= start_y;
    y2=y1 + CellHeight;
    x2 = x1 + CellWidth;
    col = Param("col",4,1,10,1);
    function PointInside(x0, y0, x, y, width, height) {
        global _x0, _y0;
        x = x+_x0; y = y+_y0;
        x0 = x0+_x0; y0 = y0+_y0;
        return ((x0 >= x) && (y0 >= y) && (x0 <= (x+width)) && (y0 <= (y+height)));
    }
    _cursorMouseButtons = GetCursorMouseButtons();
    DT_CENTER = 1; DT_VCENTER = 4 | 32; 
    function LeftClickInside(x, y, width, height) {
        global _cursorMouseButtons, _x0, _y0;
        local px, py, res;
       
        // x = x+_x0; y = y+_y0;
        res = False;
        if (_cursorMouseButtons & 8) { // click
            px = GetCursorXPosition(1); 
            py = GetCursorYPosition(1); 
            res = PointInside(px, py, x, y, width, height);
        }
        return res;
    }
    global IDset;
    if( typeof( IDset ) == "undefined" ) IDset = 0; 
    function GuiButtonTrigger( ButtonName, x, y, width, Height ) {
        /// @link http://forum.amibroker.com/t/guibuttons-for-everyone/1716/4
        /// by beaver & fxshrat
        /// version 1.1
       
        //_TRACEF( "IDset before: %g", IDset );   
        GuiButton( ButtonName, ++IDset, x, y, width, height, 1 ); 
        //_TRACEF( "IDset after: %g", IDset );
       
        id = GuiGetEvent( 0, 0 );// receiving button id
        event = GuiGetEvent( 0, 1 );// receiving notifyflag
        clickevent = event == 1;
        ButtonClicked = id == IDset && clickevent;
       
        return ButtonClicked;
    }
    click = GetCursorMouseButtons() == 9;
    Px = GetCursorXPosition( 1 );
    Py = GetCursorYPosition( 1 );
    GfxSetBkMode( 1 ); 
    procedure SetOrigin(x0, y0) {
        global _x0, _y0;
        _x0 = x0; _y0 = y0;
    }
    procedure GfxSetColors(fgColor, bgColor) {
        GfxSetTextColor(fgColor); GfxSetBkColor(bgColor); 
        GfxSelectPen(fgColor); GfxSelectSolidBrush(bgColor);
    }
    function GfxGetState(id) {
        return Nz(StaticVarGet("GfxState"+id+GetChartID()), 0);
    }
    procedure GfxSetState(id, val) {
        StaticVarSet("GfxState"+id+GetChartID(), val);
    }
    procedure GfxLabel(text, x, y, width, height, format) {
        GfxSelectFont( "Arial", CellHeight/3.2, 600 );
        GfxSetTextColor(colorYellow);
        GfxDrawText( text, x, y, x+width, y+height, format | DT_VCENTER ); 
    }
    function GfxHTabs(id, headers, headheight, x, y, width, height, colorfg, colorbg) {
        local px,choice,na,i,G,header,w, wi, prevwi;
       
        choice = GfxGetState(id);
        GfxSetColors(colorfg, colorbg);
       
        for(G = 0; (header = StrExtract(headers,G)) != ""; ++G) {};
        w = width/G; wi = x; prevwi = x;
        if (LeftClickInside(x,y,width,headheight)) {
            px = GetCursorXPosition( 1 );
            // choice = floor((px - x)/w);
            // wi = x; prevwi = x;
            for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
                wi = wi + (width+5)/2;
                if ((px > prevwi) && (px < wi))  { choice = i; break; }
            }
            GfxSetState(id, choice); // StaticVarSet(na, choice);
        }
        GfxSetBkMode(1);
        // Draw Zone & Tabs
        wi = x; prevwi = x;
        for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
            wi = wi + (width+5)/2;
            //GfxSelectPen(colorLightYellow,2);
            // GfxSelectSolidBrush(colorbg); 
            GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5); 
            if (i != choice) {
                 
                GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5); 
                GfxSelectSolidBrush( colorbg );
            } else {
                wic = wi; prevwic = prevwi;
            }
            GfxSelectFont( "Arial", CellHeight/3, 600 );
            GfxDrawText(header, prevwi, y, wi, y+headheight+5, 1|4|32);
            prevwi = wi;
        }
        return choice;
    }
    //////////////////////////////////////////////////// 
    // HEADER 
    ////////////////////////////////////////////////// 
    //Datetime
       
    GfxSelectFont( "Arial",CellHeight/3 ); 
    GfxSelectSolidBrush(  colorDarkGreen);
    GfxRoundRect(x1, y1-3, x1 + CellWidth*col+3, y1 + CellHeight*2+5,15,15);
    GfxSetTextColor(colorYellow);
    GfxSetBkMode(1);//set transparent mode 
    dt = SelectedValue(DateTime());
    GfxDrawText( "Created by Nguyen Joe\nContact: 0979019012" ,x1+BtnOffsetXY, y1, x1 + CellWidth*2+10,y1 + CellHeight*2, 1 );
    index_fc = Foreign("Vnindex","close");
    index_rfc = WriteVal(ROC(index_fc,1),5.2);
    index_chg = index_fc - Ref(index_fc,-1);
    colorindex = IIf(index_fc>Ref(index_fc,-1),colorbrightGreen,IIf(index_fc == Ref(index_fc,-1),colorGold,colorRed));
       
    GfxSetTextColor(colorindex[BarCount-1]);
    GfxSelectFont("arial",CellHeight/3,500);
    GfxDrawText( " VNINDEX " +index_fc+"\n"+ DateTimeToStr( dt[BarCount-1],1 )+" "+index_rfc+"%"  ,x1+CellWidth*2+10, y1, x1 + CellWidth*col-50,y1 + CellHeight*2, 1 );
        if ( px > x1+CellWidth*2+10 AND px<x1 + CellWidth*3 AND py> y1+5 AND py <y1 + CellHeight*2 AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = "Vnindex" ;
        }
    // ON OFF BUTTON
    id = GuiGetEvent( 0, 0 ); event = GuiGetEvent( 0, 1 );
    MyChartID = GetChartID();
    ToggleButton = Nz( StaticVarGet( "ToggleButton" + MyChartID ));
    GuiButtonTrigger( "Off", x1+CellWidth*col-45, y1+CellHeight/2, 40, 30 );
    GuiSetColors(IDset,IDset,2,colorWhite, colorGreen, colorYellow, colorWhite, colorGreen, colorYellow, colorGold, colorDarkTeal, colorYellow );
    //////////////////////////////////////////////////// 
    //DRAWING TABLE OF BUTTONS 
    ////////////////////////////////////////////////// 
    GfxSelectFont( "Arial",CellHeight/3.2 ); 
    VN30=ParamStr("VN30","ACB,BID,BVH,CTG,FPT,GAS,GVR,HDB,HPG,KDH,MBB,MSN,MWG,NVL,PDR,PLX,PNJ,POW,SAB,SSI,STB,TCB,TPB,VCB,VHM,VIC,VJC,VNM,VPB,VRE");
    NGANHANG=ParamStr("NGAN HANG","SHB,HDB,MBB,TPB,ACB,MSB,VIB,CTG,LPB,BID,EIB,SSB,STB,TCB,VCB,VPB");
    SymCount1 = StrCount( NGANHANG, "," ) + 1;
    row1 = ceil(SymCount1/col);
    py1 = y1+CellHeight*4+5;
    CHUNGKHOAN=ParamStr("CHUNG KHOAN","SHS,ORS,BSI,FTS,HCM,CTS,MBS,APS,APG,SBS,SSI,VCI,VIX,VND");
    SymCount2 = StrCount( CHUNGKHOAN, "," ) + 1;
    row2 = ceil(SymCount2/col);
    py2 = py1 + CellHeight+ CellHeight*row1;
    BATDONGSAN=ParamStr("BAT DONG SAN","NLG,DIG,PDR,NVL,KDH,FIR,VHM,CEO,HDC,HPX,HQC,HPX,IDJ,IJC,KHG,SCR,DXG,KOS,DRH,TCH,LDG,VIC,VPI");
    SymCount3 = StrCount( BATDONGSAN, "," ) + 1;
    row3 = ceil(SymCount3/col);
    py3 = py2 + CellHeight+ CellHeight*row2;
    BDSKCN=ParamStr("BDS-KCN","KBC,PHR,SZC,GVR,IDC,VGC");
    SymCount4 = StrCount( BDSKCN, "," ) + 1;
    row4 = ceil(SymCount4/col);
    py4 = py3 + CellHeight+ CellHeight*row3;
    XD_VLXD=ParamStr("XD_VLXD","CTD,C4G,CII,BCG,HBC,VPG,HUT,L14,LCG,HHV,FCN,BCC,DPG,VCG");
    SymCount5 = StrCount( XD_VLXD, "," ) + 1;
    row5 = ceil(SymCount5/col);
    py5 = py4 + CellHeight+ CellHeight*row4;
    HANGHOA=ParamStr("HANG HOA","HT1,PLC,KSB,NKG,HPG,HSG,PTB,DPM,DCM,DGC,AAA");
    SymCount6 = StrCount( HANGHOA, "," ) + 1;
    row6 = ceil(SymCount6/col);
    py6 = py5 + CellHeight+ CellHeight*row5;
    BLECONGNGHE=ParamStr("CONG NGHE - BAN LE","PET,MWG,FRT,DGW,VRE,PNJ");
    SymCount7 = StrCount( BLECONGNGHE, "," ) + 1;
    row7 = ceil(SymCount7/col);
    py7 = py6 + CellHeight+ CellHeight*row6;
    THUCPHAMXK=ParamStr("THUC PHAM-XK","PAN,DBC,KDC,TAR,HAG,HNG,MSN,BAF,SBT,VNM,SAB");
    SymCount8 = StrCount( THUCPHAMXK, "," ) + 1;
    row8 = ceil(SymCount8/col);
    py8= py7 + CellHeight+ CellHeight*row7;
    DMTS=ParamStr("DET MAY THUY SAN","TNG,GIL,TCM,ANV,VHC,IDI,ASM");
    SymCount9 = StrCount( DMTS, "," ) + 1;
    row9 = ceil(SymCount9/col);
    py9 = py8 + CellHeight+ CellHeight*row8;
    DIEN_DK=ParamStr("DIEN_DAU KHI","BSR,PLX,PVS,PVD,PVC,GAS,GEX,REE,POW,NT2,GEG,PC1");
    SymCount10 = StrCount( DIEN_DK, "," ) + 1;
    row10 = ceil(SymCount10/col);
    py10 = py9 + CellHeight+ CellHeight*row9;
    CANGVANTAI=ParamStr("CANG-VAN TAI","HAH,VTP,GMD,PVT");
    SymCount11 = StrCount( CANGVANTAI, "," ) + 1;
    row11 = ceil(SymCount11/col);
    py11 = py10 + CellHeight+ CellHeight*row10;
    row_num = row1 + row2+ row3+ row4+ row5 + row6+ row7+ row8 + row9 + row10+ row11 ;
    //Stockprice Dashboard
    //GfxFillSolidRect( x1, y1, x1+CellWidth*col, y1+CellHeight*row, colorGrey40 );
    function SymPicker(tickerlist,x1, y1,CellHeight,CellWidth,col)
    {
    GfxSelectPen( colorGrey40 ); 
    color = Null;
    sym_num = StrCount(tickerlist, ",")+1;
    mat = Matrix(sym_num, 2);
    rownum = MxGetSize(mat, 0);
    last_bar = BarCount-1;
        for ( i = 0; i < sym_num; i++ )
        {
           
        Ticker = StrExtract( tickerlist, i, ',' );
        fC = Foreign( Ticker, "C" );
        idx = Max(Min(NullCount(fc),last_bar), fvb);
           
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,1);
                mat[i][0] = LastValue( relP ); 
                mat[i][1] = i;        
                }
        }
        mat = MxSortRows(mat, False, 0);
        for ( i = 0; i < rownum; i++ ) 
        {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val)) 
        {   
            Ticker = StrExtract(tickerlist, n);
            if (val[i] >= 6.7)
            color = ColorRGB(255,128,255);
            else if (val[i] >= 3 AND val[i]< 6.7)
            color = ColorRGB(0,255,0); 
            else if (val[i] >= 1 AND val[i]< 3)
            color = ColorRGB(102,225,102); 
                else if (val[i] > 0 AND val[i]< 1)
                color = ColorRGB(178,256,102); 
                    else if (val[i] == 0 )
                    color = ColorRGB(255,255,128); 
                        else if (val[i] < 0 AND val[i] >= -1)
                        color = ColorRGB(255,204,153); 
                            else if (val[i] < -1 AND val[i] >= -3)
                            color = ColorRGB(255,128,0);
                                else if (val[i] < -3 AND val[i] >= -6.7)
                                color = ColorRGB(255,51,51);
                                    else ColorRGB(0,255,255);
           
            GfxSelectSolidBrush(  color);
            GfxSelectFont( "Arial",CellHeight/3.2 ); 
            GfxSelectPen(colorWhite);
            GfxRoundRect( x1, y1, x1+CellWidth, y1+CellHeight , 20, 20 ) ;   
            GfxSetTextColor(colorBlack);
            GfxTextOut( Ticker + WriteVal(val,5.1)+"%", x1+10, y1+3 );
           
            if ( px > x1 AND px<x1+CellWidth AND py> y1 AND py < y1+CellHeight AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = Ticker;
            }
           
            if( x1 + CellWidth >= CellWidth*col ) 
            {
                y1 += CellHeight ;
                x1 = start_x ;
            }
                else x1 += CellWidth ;
            }       
        }
    }
    function toplist(TickerList,topn,period,text,_x0,_y0,CellWidth,CellHeight)
    {
            GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(topn+2)+10,15,15);
            GfxLabel(text,_x0, _y0+10, CellWidth*col,CellHeight,1);
               
            sym_num = StrCount(tickerlist, ",")+1;
           
            mat = Matrix(sym_num, 2);
            rownum = MxGetSize(mat, 0);
            last_bar = BarCount-1;
            for ( i = 0; i< sym_num; i++ )
            {
            symbol = StrExtract( tickerlist, i, ',' );
            fc = Foreign( symbol, "C" ); 
            idx = Max(Min(NullCount(fc),last_bar), fvb);
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,period);
                mat[i][0] = LastValue( relP ); 
                mat[i][1] = i;        
                }
            }
            mat = MxSortRows(mat, False, 0);
            for ( i = 0; i < topn AND i < sym_num; i++ ) {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val))
                {
                    if (val[i] >= 35)
                    color = ColorRGB(255,128,255);
                        else if (val[i] >= 20 AND val[i]< 35)
                        color = ColorRGB(0,255,0); 
                            else if (val[i] >= 5 AND val[i]< 20)
                            color = ColorRGB(102,225,102); 
                                else if (val[i] > 0 AND val[i]< 5)
                                color = ColorRGB(178,256,102); 
                                    else if (val[i] == 0 )
                                    color = ColorRGB(255,255,128); 
                                        else if (val[i] < 0 AND val[i] >= -5)
                                        color = ColorRGB(255,204,153); 
                                            else if (val[i] < -5 AND val[i] >= -20)
                                            color = ColorRGB(255,128,0);
                                                else if (val[i] < -20 AND val[i] >= -35)
                                                color = ColorRGB(255,51,51);
                                                    else ColorRGB(0,255,255);
                   
                symbol = StrExtract(tickerlist, n);
                SetForeign(symbol);
                fc1 = LastValue(close);
                GTGD=LastValue(Volume)*fc1/1000000;
                nganh = IndustryID(1);
                RestorePriceArrays();
                ////////////
                textname=symbol;
                textgia=WriteIf(fc1<10,"0"+WriteVal(fc1,1.2),WriteVal(fc1,1.2));   
                //mauneno=ColorBlend( colorLavender, colorLavender, 0 );
                GfxSelectFont( "Arial", CellHeight/3.2, 500 );
                GfxSetTextColor( colorGold);
                GfxDrawText("Ticker     %                       Industry",_x0 +8 , _y0 + cellHeight+5, _x0+cellWidth*4, _y0+2*cellHeight+5, 0);
                GfxSelectSolidBrush(color);
                GfxRoundRect(_x0,_y0 + (i+2) * cellHeight+3,_x0+cellWidth*col, (i+3) * cellHeight+_y0 +3,15,15);
                if ( px > _x0 AND px<_x0+cellWidth*col AND py> _y0 + (i+2) * cellHeight+3 AND py < (i+3) * cellHeight+_y0 +3 AND Click )    {
                AB = CreateObject( "Broker.Application" );
                doc = AB.ActiveDocument;
                doc.Name = symbol;
                }
                GfxSetTextColor( colorBlack);
                GfxDrawText(textname,_x0  , _y0 + (i+2) * cellHeight +  5, _x0+cellWidth/1.8, (i+3) * cellHeight+_y0 +5, 1);
               
                //GfxDrawText(textgia,_x0 + cellWidth/1.8,_y0 + (i+2) * cellHeight +  5, cellWidth, (i+3) * cellHeight+_y0 +5 , 1);
               
                GfxDrawText(StrFormat( "%s  %.1f%%", "    ",val),_x0 + cellWidth/3.5,_y0 + (i+2) * cellHeight +  5, _x0 +  150, (i+3) * cellHeight+_y0 +5 , 1);
           
                GfxDrawText(nganh,_x0 + cellWidth*1.2  ,_y0 + (i+2) * cellHeight +  5, _x0 + cellWidth*col, (i+3) * cellHeight+_y0 +5 , 0);
               
                }
            }
           
           
    }
    procedure GfxHT(x,y) {
        SetOrigin(x1,y1+CellHeight*3);
        G = GfxHTabs("HTab1", "BANG GIA MINI, TOP CO PHIEU", 30, _x0, _y0-CellHeight+5, CellWidth*col, CellHeight, colorWhite, colorGrey40); 
        chooselist = ParamList("Pick list","listnum,list default",1);
        listnum = Param("list Num",0,0,63,1);
        switch(G)
        {
            case 0: 
               
                GfxSelectSolidBrush(colorDarkGreen);
                GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(row_num+11)+10,15,15);
                GfxSetTextColor(colorYellow);
                GfxLabel(" NGAN HANG",_x0, _y0+12, CellWidth*col,CellHeight,4);
                SymPicker( NGANHANG, x1, py1+5,CellHeight,CellWidth,col);
                GfxLabel(" CHUNG KHOAN",_x0, py1+row1*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CHUNGKHOAN, x1, py2+5,CellHeight,CellWidth,col);
                GfxLabel(" BAT DONG SAN",_x0, py2+row2*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BATDONGSAN, _x0,py3+5,CellHeight,CellWidth,col);
                GfxLabel(" KHU CONG NGHIEP",_x0, py3+row3*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BDSKCN, _x0, py4+5,CellHeight,CellWidth,col);
                GfxLabel(" XAY DUNG",_x0, py4+row4*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( XD_VLXD, _x0, py5+5,CellHeight,CellWidth,col);
                GfxLabel(" VLXD-HANG HOA",_x0, py5+row5*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( HANGHOA, _x0, py6+5,CellHeight,CellWidth,col);
                GfxLabel(" BAN LE-CONG NGHE",_x0, py6+row6*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BLECONGNGHE, _x0, py7+5,CellHeight,CellWidth,col);
                GfxLabel(" THUC PHAM",_x0, py7+row7*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( THUCPHAMXK, _x0, py8+5,CellHeight,CellWidth,col);
                GfxLabel(" DET MAY THUY SAN",_x0, py8+row8*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( DMTS, _x0, py9+5,CellHeight,CellWidth,col);
                GfxLabel(" NANG LUONG-DAU KHI",_x0, py9+row9*CellHeight+7,  CellWidth*col,CellHeight,4);
                SymPicker( DIEN_DK, _x0, py10+5,CellHeight,CellWidth,col);
                GfxLabel(" CANG-VAN TAI",_x0, py10+row10*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CANGVANTAI, _x0, py11+5,CellHeight,CellWidth,col);
               
            break;
            //////////
            case 1:   
            GfxSelectSolidBrush(colorDarkGreen);
           
            switch (chooselist)
            {
            case "listnum":
            TickerList = CategoryGetSymbols( categoryWatchlist, listnum );//chon watchlist number
            break;
           
            case "list default":
            TickerList    = NGANHANG + CHUNGKHOAN + BATDONGSAN + BDSKCN + XD_VLXD + HANGHOA + BLECONGNGHE + THUCPHAMXK + DMTS + DIEN_DK + CANGVANTAI; //chon watchlist
            break;
            }
            topn = Param("Top X",15,5,20,1); //Lay Top 15
            toplist(TickerList,topn,10," TOP 15 CP TOT NHAT TRONG 10 NGAY",_x0,_y0,CellWidth,CellHeight);
            GfxSelectSolidBrush(colorDarkGreen);
            toplist(TickerList,topn,20," TOP 15 CP TOT NHAT TRONG 20 NGAY",_x0,_y0+CellHeight*17,CellWidth,CellHeight);
           
        }
    }
    if( id == IDset AND event == 1 )  // If ToggleButton is clicked
    {
        if( ToggleButton ) StaticVarSet( "ToggleButton" + MyChartID, ToggleButton = 0, 0 );
        else  StaticVarSet( "ToggleButton" + MyChartID, ToggleButton = 1, 0 );
    }
    if( ToggleButton ) 
    { 
        GuiSetText( "On", IDset ); 
        GfxHT(x1,y1+CellHeight*3);   
    }
    else 
    {
    GuiSetText( "Off", IDset );
    GuiSetColors(IDset,IDset,1,colorWhite, colorRed, colorYellow, colorWhite, colorGreen, colorYellow, colorGold, colorDarkTeal, colorYellow );
    }
    
    
     
    Chỉnh sửa cuối: 4/5/23
  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ẻ] Code Volume theo phong cách Dan Zanger và Pivot Pocket Volume Bàn luận về Amibroker, Metastock, Metatrader 4 29/3/23
    [Chia sẻ] Code tự động đánh dấu pivot đỉnh đáy như MarketSmith của IBD Bàn luận về Amibroker, Metastock, Metatrader 4 25/3/23

  3. 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ột số anh em báo lỗi do phiên bản 6.2 không hỗ trợ Guibutton. Mình sẽ đưa 1 phiên bản khác cho anh em nào không muốn upgrade lên sau.
     
    Lavender09q and sang duong like this.
  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
    Update một chút là mình đã sửa lại để anh em có thể chọn list default là Top Cổ phiếu có sẵn theo bảng giá mini hoặc lấy theo listnum. Nếu chọn listnum thì mặc định là list số 0 trong watchlist, có thể đổi lấy list từ 0 - 63. Mình ko chọn listname vì mỗi người đặt tên khác nhau nếu anh em không biết sửa code sẽ không dùng được.

    upload_2023-5-2_17-40-34.png
     
  5. 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
    Phiên bản 6.2 cho bác nào cần nếu không muốn upgrade lên Ami 6.3

    Mã:
    bi = BarIndex();
    fbr = Status("firstbarinrange");
    explore = Status("action") == actionExplore;
    fvb = IIf(explore, LastValue(ValueWhen(fbr,bi)), Status("firstvisiblebar"));
    
    
    Version( 5.04 ); //requires 5.04 or higher
    
    GfxSetOverlayMode( 0 );
    // formatted text output sample via low-level gfxfunctions 
    
    CellHeight = Param("Cell Height",30,0,100,1);
    CellWidth = Param("Cell Width",135,0,200,1);
    start_x = Param("Vi tri Table X",0,0,2000,1);
    start_y = Param("Vi tri Table Y",30,0,500,1);
    BtnOffsetXY = 1;
    x1= start_x;
    y1= start_y;
    y2=y1 + CellHeight;
    x2 = x1 + CellWidth;
    col = Param("col",4,1,10,1);
    
    function PointInside(x0, y0, x, y, width, height) {
        global _x0, _y0;
        x = x+_x0; y = y+_y0;
        x0 = x0+_x0; y0 = y0+_y0;
        return ((x0 >= x) && (y0 >= y) && (x0 <= (x+width)) && (y0 <= (y+height)));
    }
    _cursorMouseButtons = GetCursorMouseButtons();
    DT_CENTER = 1; DT_VCENTER = 4 | 32;
    
    function LeftClickInside(x, y, width, height) {
        global _cursorMouseButtons, _x0, _y0;
        local px, py, res;
        
        // x = x+_x0; y = y+_y0;
        res = False;
        if (_cursorMouseButtons & 8) { // click
            px = GetCursorXPosition(1);
            py = GetCursorYPosition(1);
            res = PointInside(px, py, x, y, width, height);
        }
        return res;
    }
    
    
    
    click = GetCursorMouseButtons() == 9;
    Px = GetCursorXPosition( 1 );
    Py = GetCursorYPosition( 1 );
    
    GfxSetBkMode( 1 );
    
    
    
    procedure SetOrigin(x0, y0) {
        global _x0, _y0;
        _x0 = x0; _y0 = y0;
    }
    procedure GfxSetColors(fgColor, bgColor) {
        GfxSetTextColor(fgColor); GfxSetBkColor(bgColor);
        GfxSelectPen(fgColor); GfxSelectSolidBrush(bgColor);
    }
    
    function GfxGetState(id) {
        return Nz(StaticVarGet("GfxState"+id+GetChartID()), 0);
    }
    procedure GfxSetState(id, val) {
        StaticVarSet("GfxState"+id+GetChartID(), val);
    }
    procedure GfxLabel(text, x, y, width, height, format) {
        GfxSelectFont( "Arial", CellHeight/3.2, 600 );
        GfxSetTextColor(colorYellow);
        GfxDrawText( text, x, y, x+width, y+height, format | DT_VCENTER );
    }
    
    function GfxHTabs(id, headers, headheight, x, y, width, height, colorfg, colorbg) {
        local px,choice,na,i,G,header,w, wi, prevwi;
        
        choice = GfxGetState(id);
        GfxSetColors(colorfg, colorbg);
        
        for(G = 0; (header = StrExtract(headers,G)) != ""; ++G) {};
        w = width/G; wi = x; prevwi = x;
        if (LeftClickInside(x,y,width,headheight)) {
            px = GetCursorXPosition( 1 );
            // choice = floor((px - x)/w);
            // wi = x; prevwi = x;
            for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
                wi = wi + (width+5)/2;
                if ((px > prevwi) && (px < wi))  { choice = i; break; }
            }
            GfxSetState(id, choice); // StaticVarSet(na, choice);
        }
    
        GfxSetBkMode(1);
        // Draw Zone & Tabs
        wi = x; prevwi = x;
        for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
            wi = wi + (width+5)/2;
            //GfxSelectPen(colorLightYellow,2);
            // GfxSelectSolidBrush(colorbg);
            GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5);
            if (i != choice) {
                
                GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5);
                GfxSelectSolidBrush( colorbg );
            } else {
                wic = wi; prevwic = prevwi;
            }
            GfxSelectFont( "Arial", CellHeight/3, 600 );
            GfxDrawText(header, prevwi, y, wi, y+headheight+5, 1|4|32);
            prevwi = wi;
        }
    
        return choice;
    }
    
    
    ////////////////////////////////////////////////////
    // HEADER
    //////////////////////////////////////////////////
    
    GfxSelectFont( "Arial",CellHeight/3 );
    GfxSelectSolidBrush(  colorDarkGreen);
    GfxRoundRect(x1, y1, x1 + CellWidth*col+3, y1 + CellHeight*2+5,15,15);
    GfxSetTextColor(colorYellow);
    GfxSetBkMode(1);//set transparent mode
    
    GfxDrawText( " Created by Nguyen Joe \n   Contact: 0979019012",x1+BtnOffsetXY, y1, x1 + CellWidth*col,y1 + CellHeight*2, 0 );
    
    index_fc = Foreign("Vnindex","close");
    index_rfc = WriteVal(ROC(index_fc,1),8.2);
    index_chg = index_fc - Ref(index_fc,-1);
    colorindex = IIf(index_fc>Ref(index_fc,-1),colorbrightGreen,IIf(index_fc == Ref(index_fc,-1),colorGold,colorRed));
        
    GfxSetTextColor(colorindex[BarCount-1]);
    GfxSelectFont("arial",CellHeight/3.2,500);
    GfxDrawText( " VNINDEX  " +index_fc+"\n               "+index_rfc+"%"  ,x1+CellWidth*2+10, y1+5, x1 + CellWidth*col,y1 + CellHeight*2, 0 );
    
        if ( px > x1+CellWidth*2+10 AND px<x1 + CellWidth*3 AND py> y1+5 AND py <y1 + CellHeight*2 AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = "Vnindex" ;
        }
    //Datetime
        
    GfxSetTextColor(colorYellow);
    GfxSelectFont("arial",CellHeight/3.2,500);
    dt = SelectedValue(DateTime());
    GfxDrawText(  DateTimeToStr( dt[BarCount-1],1 ) ,x1+CellWidth*2+15, y1+CellHeight+4,x1 + CellWidth*3,y1 + CellHeight*2, 0 );
        
    // ON OFF BUTTON
    
    GfxSelectSolidBrush(colorWhite);
    GfxCircle(x1+CellWidth*col-25, y1 + CellHeight,20);
    GfxSelectSolidBrush(colorRed);
    GfxCircle(x1+CellWidth*col-25, y1 + CellHeight,15);
    GfxSelectFont("arial",CellHeight/5,600);
    //GfxRoundRect(x1+CellWidth*col-45, y1 + CellHeight-20, x1+CellWidth*col-5, y1 + CellHeight +20,15,15);
    OnoffLogic = Nz( StaticVarGet( "ClickToggle", False ) );
    ClickArea     = px >= x1+CellWidth*col-45 AND px <= x1+CellWidth*col-5 AND py >= y1 + CellHeight-20 AND py <= y1 + CellHeight +20;
    FirstClick     = NOT OnoffLogic AND ClickArea AND click;
    NextClick     = OnoffLogic AND ClickArea AND click;
    ////////////////////////////////////////////////////
    //DRAWING TABLE OF BUTTONS
    //////////////////////////////////////////////////
    GfxSelectFont( "Arial",CellHeight/3.2 );
    
    
    VN30=ParamStr("VN30","ACB,BID,BVH,CTG,FPT,GAS,GVR,HDB,HPG,KDH,MBB,MSN,MWG,NVL,PDR,PLX,PNJ,POW,SAB,SSI,STB,TCB,TPB,VCB,VHM,VIC,VJC,VNM,VPB,VRE");
    
    NGANHANG=ParamStr("NGAN HANG","SHB,HDB,MBB,TPB,ACB,MSB,VIB,CTG,LPB,BID,EIB,SSB,STB,TCB,VCB,VPB");
    SymCount1 = StrCount( NGANHANG, "," ) + 1;
    row1 = ceil(SymCount1/col);
    py1 = y1+CellHeight*4+5;
    
    CHUNGKHOAN=ParamStr("CHUNG KHOAN","SHS,ORS,BSI,FTS,HCM,CTS,MBS,APS,APG,SBS,SSI,VCI,VIX,VND");
    SymCount2 = StrCount( CHUNGKHOAN, "," ) + 1;
    row2 = ceil(SymCount2/col);
    py2 = py1 + CellHeight+ CellHeight*row1;
    
    BATDONGSAN=ParamStr("BAT DONG SAN","NLG,DIG,PDR,NVL,KDH,FIR,VHM,CEO,HDC,HPX,HQC,HPX,IDJ,IJC,KHG,SCR,DXG,KOS,DRH,TCH,LDG,VIC,VPI");
    SymCount3 = StrCount( BATDONGSAN, "," ) + 1;
    row3 = ceil(SymCount3/col);
    py3 = py2 + CellHeight+ CellHeight*row2;
    
    BDSKCN=ParamStr("BDS-KCN","KBC,PHR,SZC,GVR,IDC,VGC");
    SymCount4 = StrCount( BDSKCN, "," ) + 1;
    row4 = ceil(SymCount4/col);
    py4 = py3 + CellHeight+ CellHeight*row3;
    
    XD_VLXD=ParamStr("XD_VLXD","CTD,C4G,CII,BCG,HBC,VPG,HUT,L14,LCG,HHV,FCN,BCC,DPG,VCG");
    SymCount5 = StrCount( XD_VLXD, "," ) + 1;
    row5 = ceil(SymCount5/col);
    py5 = py4 + CellHeight+ CellHeight*row4;
    
    HANGHOA=ParamStr("HANG HOA","HT1,PLC,KSB,NKG,HPG,HSG,PTB,DPM,DCM,DGC,AAA");
    SymCount6 = StrCount( HANGHOA, "," ) + 1;
    row6 = ceil(SymCount6/col);
    py6 = py5 + CellHeight+ CellHeight*row5;
    
    BLECONGNGHE=ParamStr("CONG NGHE - BAN LE","PET,MWG,FRT,DGW,VRE,PNJ");
    SymCount7 = StrCount( BLECONGNGHE, "," ) + 1;
    row7 = ceil(SymCount7/col);
    py7 = py6 + CellHeight+ CellHeight*row6;
    
    THUCPHAMXK=ParamStr("THUC PHAM-XK","PAN,DBC,KDC,TAR,HAG,HNG,MSN,BAF,SBT,VNM,SAB");
    SymCount8 = StrCount( THUCPHAMXK, "," ) + 1;
    row8 = ceil(SymCount8/col);
    py8= py7 + CellHeight+ CellHeight*row7;
    
    DMTS=ParamStr("DET MAY THUY SAN","TNG,GIL,TCM,ANV,VHC,IDI,ASM");
    SymCount9 = StrCount( DMTS, "," ) + 1;
    row9 = ceil(SymCount9/col);
    py9 = py8 + CellHeight+ CellHeight*row8;
    
    DIEN_DK=ParamStr("DIEN_DAU KHI","BSR,PLX,PVS,PVD,PVC,GAS,GEX,REE,POW,NT2,GEG,PC1");
    SymCount10 = StrCount( DIEN_DK, "," ) + 1;
    row10 = ceil(SymCount10/col);
    py10 = py9 + CellHeight+ CellHeight*row9;
    
    CANGVANTAI=ParamStr("CANG-VAN TAI","HAH,VTP,GMD,PVT");
    SymCount11 = StrCount( CANGVANTAI, "," ) + 1;
    row11 = ceil(SymCount11/col);
    py11 = py10 + CellHeight+ CellHeight*row10;
    
    row_num = row1 + row2+ row3+ row4+ row5 + row6+ row7+ row8 + row9 + row10+ row11 ;
    //Stockprice Dashboard
    
    //GfxFillSolidRect( x1, y1, x1+CellWidth*col, y1+CellHeight*row, colorGrey40 );
    function SymPicker(tickerlist,x1, y1,CellHeight,CellWidth,col)
    {
    GfxSelectPen( colorGrey40 );
    color = Null;
    sym_num = StrCount(tickerlist, ",")+1;
    mat = Matrix(sym_num, 2);
    rownum = MxGetSize(mat, 0);
    last_bar = BarCount-1;
    
        for ( i = 0; i < sym_num; i++ )
        {
            
        Ticker = StrExtract( tickerlist, i, ',' );
        fC = Foreign( Ticker, "C" );
        idx = Max(Min(NullCount(fc),last_bar), fvb);
            
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,1);
                mat[i][0] = LastValue( relP );
                mat[i][1] = i;         
                }
        }
        mat = MxSortRows(mat, False, 0);
        for ( i = 0; i < rownum; i++ )
        {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val))
        {   
            Ticker = StrExtract(tickerlist, n);
            if (val[i] >= 6.7)
            color = ColorRGB(255,128,255);
            else if (val[i] >= 3 AND val[i]< 6.7)
            color = ColorRGB(0,255,0);
            else if (val[i] >= 1 AND val[i]< 3)
            color = ColorRGB(102,225,102);
                else if (val[i] > 0 AND val[i]< 1)
                color = ColorRGB(178,256,102);
                    else if (val[i] == 0 )
                    color = ColorRGB(255,255,128);
                        else if (val[i] < 0 AND val[i] >= -1)
                        color = ColorRGB(255,204,153);
                            else if (val[i] < -1 AND val[i] >= -3)
                            color = ColorRGB(255,128,0);
                                else if (val[i] < -3 AND val[i] >= -6.7)
                                color = ColorRGB(255,51,51);
                                    else ColorRGB(0,255,255);
            
            GfxSelectSolidBrush(  color);
            GfxSelectFont( "Arial",CellHeight/3.2 );
            GfxRoundRect( x1, y1, x1+CellWidth, y1+CellHeight , 15, 15 ) ;   
            GfxSetTextColor(colorBlack);
            GfxTextOut( Ticker + WriteVal(val,5.1)+"%", x1+10, y1+3 );
            
            if ( px > x1 AND px<x1+CellWidth AND py> y1 AND py < y1+CellHeight AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = Ticker;
            }
            
            if( x1 + CellWidth >= CellWidth*col )
            {
                y1 += CellHeight ;
                x1 = start_x ;
            }
                else x1 += CellWidth ;
            }       
        }
    
    }
    
    function toplist(TickerList,topn,period,text,_x0,_y0,CellWidth,CellHeight)
    {
            GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(topn+2)+10,15,15);
            GfxLabel(text,_x0, _y0+10, CellWidth*col,CellHeight,1);
                
            sym_num = StrCount(tickerlist, ",")+1;
            
            mat = Matrix(sym_num, 2);
            rownum = MxGetSize(mat, 0);
            last_bar = BarCount-1;
            for ( i = 0; i< sym_num; i++ )
            {
            symbol = StrExtract( tickerlist, i, ',' );
            fc = Foreign( symbol, "C" );
            idx = Max(Min(NullCount(fc),last_bar), fvb);
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,period);
                mat[i][0] = LastValue( relP );
                mat[i][1] = i;         
                }
            }
            mat = MxSortRows(mat, False, 0);
            for ( i = 0; i < topn; i++ ) {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val))
                {
                    if (val[i] >= 35)
                    color = ColorRGB(255,128,255);
                        else if (val[i] >= 20 AND val[i]< 35)
                        color = ColorRGB(0,255,0);
                            else if (val[i] >= 5 AND val[i]< 20)
                            color = ColorRGB(102,225,102);
                                else if (val[i] > 0 AND val[i]< 5)
                                color = ColorRGB(178,256,102);
                                    else if (val[i] == 0 )
                                    color = ColorRGB(255,255,128);
                                        else if (val[i] < 0 AND val[i] >= -5)
                                        color = ColorRGB(255,204,153);
                                            else if (val[i] < -5 AND val[i] >= -20)
                                            color = ColorRGB(255,128,0);
                                                else if (val[i] < -20 AND val[i] >= -35)
                                                color = ColorRGB(255,51,51);
                                                    else ColorRGB(0,255,255);
                    
                symbol = StrExtract(tickerlist, n);
                SetForeign(symbol);
                fc1 = LastValue(close);
                GTGD=LastValue(Volume)*fc1/1000000;
                nganh = IndustryID(1);
                RestorePriceArrays();
                ////////////
                textname=symbol;
                textgia=WriteIf(fc1<10,"0"+WriteVal(fc1,1.2),WriteVal(fc1,1.2));   
                //mauneno=ColorBlend( colorLavender, colorLavender, 0 );
                GfxSelectFont( "Arial", CellHeight/3.2, 500 );
                GfxSetTextColor( colorGold);
                GfxDrawText("Ticker     %                       Industry",_x0 +8 , _y0 + cellHeight+5, _x0+cellWidth*4, _y0+2*cellHeight+5, 0);
                GfxSelectSolidBrush(color);
                GfxRoundRect(_x0,_y0 + (i+2) * cellHeight+3,_x0+cellWidth*col, (i+3) * cellHeight+_y0 +3,15,15);
                if ( px > _x0 AND px<_x0+cellWidth*col AND py> _y0 + (i+2) * cellHeight+3 AND py < (i+3) * cellHeight+_y0 +3 AND Click )    {
                AB = CreateObject( "Broker.Application" );
                doc = AB.ActiveDocument;
                doc.Name = symbol;
                }
                GfxSetTextColor( colorBlack);
                GfxDrawText(textname,_x0  , _y0 + (i+2) * cellHeight +  5, _x0+cellWidth/1.8, (i+3) * cellHeight+_y0 +5, 1);
                
                //GfxDrawText(textgia,_x0 + cellWidth/1.8,_y0 + (i+2) * cellHeight +  5, cellWidth, (i+3) * cellHeight+_y0 +5 , 1);
                
                GfxDrawText(StrFormat( "%s  %.1f%%", "    ",val),_x0 + cellWidth/3.5,_y0 + (i+2) * cellHeight +  5, _x0 +  150, (i+3) * cellHeight+_y0 +5 , 1);
            
                GfxDrawText(nganh,_x0 + cellWidth*1.2  ,_y0 + (i+2) * cellHeight +  5, _x0 + cellWidth*col, (i+3) * cellHeight+_y0 +5 , 0);
                
                }
            }
            
            
    }
    
    procedure GfxHT(x,y) {
        SetOrigin(x1,y1+CellHeight*3);
        G = GfxHTabs("HTab1", "BANG GIA MINI, TOP CO PHIEU", 30, _x0, _y0-CellHeight+5, CellWidth*col, CellHeight, colorWhite, colorGrey40);
        switch(G)
        {
    
            case 0:
                
                GfxSelectSolidBrush(colorDarkGreen);
                GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(row_num+11)+10,15,15);
                GfxSetTextColor(colorYellow);
                GfxLabel(" NGAN HANG",_x0, _y0+12, CellWidth*col,CellHeight,4);
                SymPicker( NGANHANG, x1, py1+5,CellHeight,CellWidth,col);
                GfxLabel(" CHUNG KHOAN",_x0, py1+row1*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CHUNGKHOAN, x1, py2+5,CellHeight,CellWidth,col);
                GfxLabel(" BAT DONG SAN",_x0, py2+row2*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BATDONGSAN, _x0,py3+5,CellHeight,CellWidth,col);
                GfxLabel(" KHU CONG NGHIEP",_x0, py3+row3*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BDSKCN, _x0, py4+5,CellHeight,CellWidth,col);
                GfxLabel(" XAY DUNG",_x0, py4+row4*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( XD_VLXD, _x0, py5+5,CellHeight,CellWidth,col);
                GfxLabel(" VLXD-HANG HOA",_x0, py5+row5*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( HANGHOA, _x0, py6+5,CellHeight,CellWidth,col);
                GfxLabel(" BAN LE-CONG NGHE",_x0, py6+row6*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BLECONGNGHE, _x0, py7+5,CellHeight,CellWidth,col);
                GfxLabel(" THUC PHAM",_x0, py7+row7*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( THUCPHAMXK, _x0, py8+5,CellHeight,CellWidth,col);
                GfxLabel(" DET MAY THUY SAN",_x0, py8+row8*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( DMTS, _x0, py9+5,CellHeight,CellWidth,col);
                GfxLabel(" NANG LUONG-DAU KHI",_x0, py9+row9*CellHeight+7,  CellWidth*col,CellHeight,4);
                SymPicker( DIEN_DK, _x0, py10+5,CellHeight,CellWidth,col);
                GfxLabel(" CANG-VAN TAI",_x0, py10+row10*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CANGVANTAI, _x0, py11+5,CellHeight,CellWidth,col);
                
            break;
            //////////
            case 1:   
            GfxSelectSolidBrush(colorDarkGreen);
            listnum = Param("listnum Top",0,0,63,1);
            chooselist = ParamList("list","listnum,list default",1);
            switch (chooselist)
            {
            case "listnum":
            TickerList = CategoryGetSymbols( categoryWatchlist, listnum );//chon watchlist
            break;
            
            case "list default":
            TickerList    = NGANHANG + CHUNGKHOAN + BATDONGSAN + BDSKCN + XD_VLXD + HANGHOA + BLECONGNGHE + THUCPHAMXK + DMTS + DIEN_DK + CANGVANTAI; //chon watchlist
            break;
            }
            topn = 15; //Lay Top 15
            toplist(TickerList,topn,10," TOP 15 CP TOT NHAT TRONG 10 NGAY",_x0,_y0,CellWidth,CellHeight);
            GfxSelectSolidBrush(colorDarkGreen);
            toplist(TickerList,topn,20," TOP 15 CP TOT NHAT TRONG 20 NGAY",_x0,_y0+CellHeight*17,CellWidth,CellHeight);
            
        }
    }
     
    if (FirstClick)
        {
        StaticVarSet( "ClickToggle",  True);
        }
        
    if (NextClick)
        {
        StaticVarSet( "ClickToggle", False);
        }
        
    if(StaticVarGet("ClickToggle")==True)
        {
        GfxSelectSolidBrush(colorGreen);
        GfxCircle(x1+CellWidth*col-25, y1 + CellHeight,15);
        GfxHT(x1,y1+CellHeight*3);
        }
        
    
     
  6. 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
    Cảm ơn bác nhiều, bác nhiệt tình quá ạ
     
  7. minhnhan3

    minhnhan3 Member

    Tham gia ngày:
    5/9/21
    Bài viết:
    9
    Đã được thích:
    1
    Giới tính:
    Nam
    cám ơn bác
     
  8. vinhnguyen

    vinhnguyen Member

    Tham gia ngày:
    25/8/21
    Bài viết:
    16
    Đã được thích:
    1
    Code này hay quá. Cảm ơn bác rất nhiều. Trước đây em cũng có ý tưởng này mà ko tìm được ai viết. Nếu có thể lựa chọn các mã cp trong watchlist để hiển thị ra bảng thế này thì tốt quá. Không biết bác có sửa thêm được như thế không ạ?

     
  9. 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 bác nhưng phải sửa trực tiếp trong code 1 chút. Mình hướng dẫn sơ sơ bác làm theo nhé

    Tìm đoạn code chỗ này:

    upload_2023-5-4_13-32-19.png

    Thay bằng đoạn code sau, trong đó 0 là số thứ tự watchlist:
    ví dụ NGANHANG = CategoryGetSymbols( categoryWatchlist, 0 );

    Có thể thay bằng số thứ tự watchlist bất kỳ 0 1 2 3... và sửa lại tên title label cho phù hợp chỗ này

    upload_2023-5-4_13-34-53.png
     
    vinhnguyen thích bài này.
  10. vinhnguyen

    vinhnguyen Member

    Tham gia ngày:
    25/8/21
    Bài viết:
    16
    Đã được thích:
    1
    Cảm ơn bác, em sửa được rồi. Bộ code này đúng cái em cần :D
    Em hỏi thêm chút, trong parameters của ami không chọn hiện/ẩn ngành nào đó (Ngan hang, Chung khoan, Bat dong san...) đi được bác nhỉ.
     
  11. 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
    muốn ẩn hiện thì cũng được hết thôi bác chủ yếu mình muốn code thế nào thôi mà.
     
  12. 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ập nhập fix 1 số lỗi nhỏ:
    • Di chuyển vị trí bảng Table X bị mất cột
    • Không hiện lựa chọn list num nếu không click vào Top cổ phiếu
    • Top cổ phiếu bị lỗi nếu số lượng mã nhỏ hơn 15
    • Cho phép chọn số lượng Top X cổ phiếu (mặc định 15)
    • Chỉnh lại header bị lệch dòng ngày tháng đối với một số màn hình kích thước khác
    Mã:
    bi = BarIndex();
    fbr = Status("firstbarinrange");
    explore = Status("action") == actionExplore;
    fvb = IIf(explore, LastValue(ValueWhen(fbr,bi)), Status("firstvisiblebar"));
    
    GfxSetOverlayMode( 0 );
    // formatted text output sample via low-level gfxfunctions 
    
    CellHeight = Param("Cell Height",28,0,100,1);
    CellWidth = Param("Cell Width",128,0,200,1);
    start_x = Param("Vi tri Table X",0,0,2000,1);
    start_y = Param("Vi tri Table Y",30,0,500,1);
    BtnOffsetXY = 1;
    x1= start_x;
    y1= start_y;
    y2=y1 + CellHeight;
    x2 = x1 + CellWidth;
    col = Param("col",4,1,10,1);
    
    function PointInside(x0, y0, x, y, width, height) {
        global _x0, _y0;
        x = x+_x0; y = y+_y0;
        x0 = x0+_x0; y0 = y0+_y0;
        return ((x0 >= x) && (y0 >= y) && (x0 <= (x+width)) && (y0 <= (y+height)));
    }
    _cursorMouseButtons = GetCursorMouseButtons();
    DT_CENTER = 1; DT_VCENTER = 4 | 32;
    
    function LeftClickInside(x, y, width, height) {
        global _cursorMouseButtons, _x0, _y0;
        local px, py, res;
        
        // x = x+_x0; y = y+_y0;
        res = False;
        if (_cursorMouseButtons & 8) { // click
            px = GetCursorXPosition(1);
            py = GetCursorYPosition(1);
            res = PointInside(px, py, x, y, width, height);
        }
        return res;
    }
    
    global IDset;
    if( typeof( IDset ) == "undefined" ) IDset = 0;
    
    function GuiButtonTrigger( ButtonName, x, y, width, Height ) {
        /// @link http://forum.amibroker.com/t/guibuttons-for-everyone/1716/4
        /// by beaver & fxshrat
        /// version 1.1
        
        //_TRACEF( "IDset before: %g", IDset );   
        GuiButton( ButtonName, ++IDset, x, y, width, height, 1 );
        //_TRACEF( "IDset after: %g", IDset );
        
        id = GuiGetEvent( 0, 0 );// receiving button id
        event = GuiGetEvent( 0, 1 );// receiving notifyflag
        clickevent = event == 1;
        ButtonClicked = id == IDset && clickevent;
        
        return ButtonClicked;
    }
    
    
    click = GetCursorMouseButtons() == 9;
    Px = GetCursorXPosition( 1 );
    Py = GetCursorYPosition( 1 );
    
    GfxSetBkMode( 1 );
    
    
    
    procedure SetOrigin(x0, y0) {
        global _x0, _y0;
        _x0 = x0; _y0 = y0;
    }
    procedure GfxSetColors(fgColor, bgColor) {
        GfxSetTextColor(fgColor); GfxSetBkColor(bgColor);
        GfxSelectPen(fgColor); GfxSelectSolidBrush(bgColor);
    }
    
    function GfxGetState(id) {
        return Nz(StaticVarGet("GfxState"+id+GetChartID()), 0);
    }
    procedure GfxSetState(id, val) {
        StaticVarSet("GfxState"+id+GetChartID(), val);
    }
    procedure GfxLabel(text, x, y, width, height, format) {
        GfxSelectFont( "Arial", CellHeight/3.2, 600 );
        GfxSetTextColor(colorYellow);
        GfxDrawText( text, x, y, x+width, y+height, format | DT_VCENTER );
    }
    
    function GfxHTabs(id, headers, headheight, x, y, width, height, colorfg, colorbg) {
        local px,choice,na,i,G,header,w, wi, prevwi;
        
        choice = GfxGetState(id);
        GfxSetColors(colorfg, colorbg);
        
        for(G = 0; (header = StrExtract(headers,G)) != ""; ++G) {};
        w = width/G; wi = x; prevwi = x;
        if (LeftClickInside(x,y,width,headheight)) {
            px = GetCursorXPosition( 1 );
            // choice = floor((px - x)/w);
            // wi = x; prevwi = x;
            for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
                wi = wi + (width+5)/2;
                if ((px > prevwi) && (px < wi))  { choice = i; break; }
            }
            GfxSetState(id, choice); // StaticVarSet(na, choice);
        }
    
        GfxSetBkMode(1);
        // Draw Zone & Tabs
        wi = x; prevwi = x;
        for(i = 0; (header = StrExtract(headers,i)) != ""; ++i) {
            wi = wi + (width+5)/2;
            //GfxSelectPen(colorLightYellow,2);
            // GfxSelectSolidBrush(colorbg);
            GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5);
            if (i != choice) {
                
                GfxRoundRect(prevwi,y,wi,y+headheight+5,5,5);
                GfxSelectSolidBrush( colorbg );
            } else {
                wic = wi; prevwic = prevwi;
            }
            GfxSelectFont( "Arial", CellHeight/3, 600 );
            GfxDrawText(header, prevwi, y, wi, y+headheight+5, 1|4|32);
            prevwi = wi;
        }
    
        return choice;
    }
    
    
    ////////////////////////////////////////////////////
    // HEADER
    //////////////////////////////////////////////////
    //Datetime
        
    
    
    GfxSelectFont( "Arial",CellHeight/3 );
    GfxSelectSolidBrush(  colorDarkGreen);
    GfxRoundRect(x1, y1-3, x1 + CellWidth*col+3, y1 + CellHeight*2+3,15,15);
    GfxSetTextColor(colorYellow);
    GfxSetBkMode(1);//set transparent mode
    dt = SelectedValue(DateTime());
    
    GfxDrawText( "Created by Nguyen Joe\nContact: 0979019012" ,x1+BtnOffsetXY, y1, x1 + CellWidth*2+10,y1 + CellHeight*2, 1 );
    
    index_fc = Foreign("Vnindex","close");
    index_rfc = WriteVal(ROC(index_fc,1),5.2);
    index_chg = index_fc - Ref(index_fc,-1);
    colorindex = IIf(index_fc>Ref(index_fc,-1),colorbrightGreen,IIf(index_fc == Ref(index_fc,-1),colorGold,colorRed));
        
    GfxSetTextColor(colorindex[BarCount-1]);
    GfxSelectFont("arial",CellHeight/3,500);
    GfxDrawText( " VNINDEX " +index_fc+"\n"+ DateTimeToStr( dt[BarCount-1],1 )+" "+index_rfc+"%"  ,x1+CellWidth*2+10, y1, x1 + CellWidth*col-50,y1 + CellHeight*2, 1 );
    
        if ( px > x1+CellWidth*2+10 AND px<x1 + CellWidth*3 AND py> y1+5 AND py <y1 + CellHeight*2 AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = "Vnindex" ;
        }
    
    // ON OFF BUTTON
    
    id = GuiGetEvent( 0, 0 ); event = GuiGetEvent( 0, 1 );
    MyChartID = GetChartID();
    ToggleButton = Nz( StaticVarGet( "ToggleButton" + MyChartID ));
    
    GuiButtonTrigger( "Off", x1+CellWidth*col-45, y1+CellHeight/2, 40, 30 );
    GuiSetColors(IDset,IDset,2,colorWhite, colorGreen, colorYellow, colorWhite, colorGreen, colorYellow, colorGold, colorDarkTeal, colorYellow );
    
    ////////////////////////////////////////////////////
    //DRAWING TABLE OF BUTTONS
    //////////////////////////////////////////////////
    GfxSelectFont( "Arial",CellHeight/3.2 );
    
    
    VN30=ParamStr("VN30","ACB,BID,BVH,CTG,FPT,GAS,GVR,HDB,HPG,KDH,MBB,MSN,MWG,NVL,PDR,PLX,PNJ,POW,SAB,SSI,STB,TCB,TPB,VCB,VHM,VIC,VJC,VNM,VPB,VRE");
    
    NGANHANG=ParamStr("NGAN HANG","SHB,HDB,MBB,TPB,ACB,MSB,VIB,CTG,LPB,BID,EIB,SSB,STB,TCB,VCB,VPB");
    SymCount1 = StrCount( NGANHANG, "," ) + 1;
    row1 = ceil(SymCount1/col);
    py1 = y1+CellHeight*4+5;
    
    CHUNGKHOAN=ParamStr("CHUNG KHOAN","SHS,ORS,BSI,FTS,HCM,CTS,MBS,APS,APG,SBS,SSI,VCI,VIX,VND");
    SymCount2 = StrCount( CHUNGKHOAN, "," ) + 1;
    row2 = ceil(SymCount2/col);
    py2 = py1 + CellHeight+ CellHeight*row1;
    
    BATDONGSAN=ParamStr("BAT DONG SAN","NLG,DIG,PDR,NVL,KDH,FIR,VHM,CEO,HDC,HPX,HQC,HPX,IDJ,IJC,KHG,SCR,DXG,KOS,DRH,TCH,LDG,VIC,VPI");
    SymCount3 = StrCount( BATDONGSAN, "," ) + 1;
    row3 = ceil(SymCount3/col);
    py3 = py2 + CellHeight+ CellHeight*row2;
    
    BDSKCN=ParamStr("BDS-KCN","KBC,PHR,SZC,GVR,IDC,VGC");
    SymCount4 = StrCount( BDSKCN, "," ) + 1;
    row4 = ceil(SymCount4/col);
    py4 = py3 + CellHeight+ CellHeight*row3;
    
    XD_VLXD=ParamStr("XD_VLXD","CTD,C4G,CII,BCG,HBC,VPG,HUT,L14,LCG,HHV,FCN,BCC,DPG,VCG");
    SymCount5 = StrCount( XD_VLXD, "," ) + 1;
    row5 = ceil(SymCount5/col);
    py5 = py4 + CellHeight+ CellHeight*row4;
    
    HANGHOA=ParamStr("HANG HOA","HT1,PLC,KSB,NKG,HPG,HSG,PTB,DPM,DCM,DGC,AAA");
    SymCount6 = StrCount( HANGHOA, "," ) + 1;
    row6 = ceil(SymCount6/col);
    py6 = py5 + CellHeight+ CellHeight*row5;
    
    BLECONGNGHE=ParamStr("CONG NGHE - BAN LE","PET,MWG,FRT,DGW,VRE,PNJ");
    SymCount7 = StrCount( BLECONGNGHE, "," ) + 1;
    row7 = ceil(SymCount7/col);
    py7 = py6 + CellHeight+ CellHeight*row6;
    
    THUCPHAMXK=ParamStr("THUC PHAM-XK","PAN,DBC,KDC,TAR,HAG,HNG,MSN,BAF,SBT,VNM,SAB");
    SymCount8 = StrCount( THUCPHAMXK, "," ) + 1;
    row8 = ceil(SymCount8/col);
    py8= py7 + CellHeight+ CellHeight*row7;
    
    DMTS=ParamStr("DET MAY THUY SAN","TNG,GIL,TCM,ANV,VHC,IDI,ASM");
    SymCount9 = StrCount( DMTS, "," ) + 1;
    row9 = ceil(SymCount9/col);
    py9 = py8 + CellHeight+ CellHeight*row8;
    
    DIEN_DK=ParamStr("DIEN_DAU KHI","BSR,PLX,PVS,PVD,PVC,GAS,GEX,REE,POW,NT2,GEG,PC1");
    SymCount10 = StrCount( DIEN_DK, "," ) + 1;
    row10 = ceil(SymCount10/col);
    py10 = py9 + CellHeight+ CellHeight*row9;
    
    CANGVANTAI=ParamStr("CANG-VAN TAI","HAH,VTP,GMD,PVT");
    SymCount11 = StrCount( CANGVANTAI, "," ) + 1;
    row11 = ceil(SymCount11/col);
    py11 = py10 + CellHeight+ CellHeight*row10;
    
    row_num = row1 + row2+ row3+ row4+ row5 + row6+ row7+ row8 + row9 + row10+ row11 ;
    //Stockprice Dashboard
    
    //GfxFillSolidRect( x1, y1, x1+CellWidth*col, y1+CellHeight*row, colorGrey40 );
    function SymPicker(tickerlist,x1, y1,CellHeight,CellWidth,col)
    {
    GfxSelectPen( colorGrey40 );
    color = Null;
    sym_num = StrCount(tickerlist, ",")+1;
    mat = Matrix(sym_num, 2);
    rownum = MxGetSize(mat, 0);
    last_bar = BarCount-1;
    
        for ( i = 0; i < sym_num; i++ )
        {
            
        Ticker = StrExtract( tickerlist, i, ',' );
        fC = Foreign( Ticker, "C" );
        idx = Max(Min(NullCount(fc),last_bar), fvb);
            
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,1);
                mat[i][0] = LastValue( relP );
                mat[i][1] = i;         
                }
        }
        mat = MxSortRows(mat, False, 0);
        for ( i = 0; i < rownum; i++ )
        {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val))
        {   
            Ticker = StrExtract(tickerlist, n);
            if (val[i] >= 6.7)
            color = ColorRGB(255,128,255);
            else if (val[i] >= 3 AND val[i]< 6.7)
            color = ColorRGB(0,255,0);
            else if (val[i] >= 1 AND val[i]< 3)
            color = ColorRGB(102,225,102);
                else if (val[i] > 0 AND val[i]< 1)
                color = ColorRGB(178,256,102);
                    else if (val[i] == 0 )
                    color = ColorRGB(255,255,128);
                        else if (val[i] < 0 AND val[i] >= -1)
                        color = ColorRGB(255,204,153);
                            else if (val[i] < -1 AND val[i] >= -3)
                            color = ColorRGB(255,128,0);
                                else if (val[i] < -3 AND val[i] >= -6.7)
                                color = ColorRGB(255,51,51);
                                    else ColorRGB(0,255,255);
            
            GfxSelectSolidBrush(  color);
            GfxSelectFont( "Arial",CellHeight/3.2 );
            GfxSelectPen(colorWhite);
            GfxRoundRect( x1, y1, x1+CellWidth, y1+CellHeight , 20, 20 ) ;   
            GfxSetTextColor(colorBlack);
            GfxTextOut( Ticker + WriteVal(val,5.1)+"%", x1+10, y1+3 );
            
            if ( px > x1 AND px<x1+CellWidth AND py> y1 AND py < y1+CellHeight AND Click )    {
            AB = CreateObject( "Broker.Application" );
            doc = AB.ActiveDocument;
            doc.Name = Ticker;
            }
            
            if( x1 + CellWidth >= start_x + CellWidth*col )
            {
                y1 += CellHeight ;
                x1 = start_x ;
            }
                else x1 += CellWidth ;
            }       
        }
    
    }
    
    function toplist(TickerList,topn,period,text,_x0,_y0,CellWidth,CellHeight)
    {
            GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(topn+2)+10,15,15);
            GfxLabel(text,_x0, _y0+10, CellWidth*col,CellHeight,1);
                
            sym_num = StrCount(tickerlist, ",")+1;
            
            mat = Matrix(sym_num, 2);
            rownum = MxGetSize(mat, 0);
            last_bar = BarCount-1;
            for ( i = 0; i< sym_num; i++ )
            {
            symbol = StrExtract( tickerlist, i, ',' );
            fc = Foreign( symbol, "C" );
            idx = Max(Min(NullCount(fc),last_bar), fvb);
            if (! IsNull(fc[ idx ])) {
                relP = ROC(fc,period);
                mat[i][0] = LastValue( relP );
                mat[i][1] = i;         
                }
            }
            mat = MxSortRows(mat, False, 0);
            for ( i = 0; i < topn AND i < sym_num; i++ ) {
            val = mat[i][0];    n = mat[i][1];
            if (! IsNull(val))
                {
                    if (val[i] >= 35)
                    color = ColorRGB(255,128,255);
                        else if (val[i] >= 20 AND val[i]< 35)
                        color = ColorRGB(0,255,0);
                            else if (val[i] >= 5 AND val[i]< 20)
                            color = ColorRGB(102,225,102);
                                else if (val[i] > 0 AND val[i]< 5)
                                color = ColorRGB(178,256,102);
                                    else if (val[i] == 0 )
                                    color = ColorRGB(255,255,128);
                                        else if (val[i] < 0 AND val[i] >= -5)
                                        color = ColorRGB(255,204,153);
                                            else if (val[i] < -5 AND val[i] >= -20)
                                            color = ColorRGB(255,128,0);
                                                else if (val[i] < -20 AND val[i] >= -35)
                                                color = ColorRGB(255,51,51);
                                                    else ColorRGB(0,255,255);
                    
                symbol = StrExtract(tickerlist, n);
                SetForeign(symbol);
                fc1 = LastValue(close);
                GTGD=LastValue(Volume)*fc1/1000000;
                nganh = IndustryID(1);
                RestorePriceArrays();
                ////////////
                textname=symbol;
                textgia=WriteIf(fc1<10,"0"+WriteVal(fc1,1.2),WriteVal(fc1,1.2));   
                //mauneno=ColorBlend( colorLavender, colorLavender, 0 );
                GfxSelectFont( "Arial", CellHeight/3.2, 500 );
                GfxSetTextColor( colorGold);
                GfxDrawText("Ticker     %                       Industry",_x0 +8 , _y0 + cellHeight+5, _x0+cellWidth*4, _y0+2*cellHeight+5, 0);
                GfxSelectSolidBrush(color);
                GfxRoundRect(_x0,_y0 + (i+2) * cellHeight+3,_x0+cellWidth*col, (i+3) * cellHeight+_y0 +3,15,15);
                if ( px > _x0 AND px<_x0+cellWidth*col AND py> _y0 + (i+2) * cellHeight+3 AND py < (i+3) * cellHeight+_y0 +3 AND Click )    {
                AB = CreateObject( "Broker.Application" );
                doc = AB.ActiveDocument;
                doc.Name = symbol;
                }
                GfxSetTextColor( colorBlack);
                GfxDrawText(textname,_x0  , _y0 + (i+2) * cellHeight +  5, _x0+cellWidth/1.8, (i+3) * cellHeight+_y0 +5, 1);
                
                //GfxDrawText(textgia,_x0 + cellWidth/1.8,_y0 + (i+2) * cellHeight +  5, cellWidth, (i+3) * cellHeight+_y0 +5 , 1);
                
                GfxDrawText(StrFormat( "%s  %.1f%%", "    ",val),_x0 + cellWidth/3.5,_y0 + (i+2) * cellHeight +  5, _x0 +  150, (i+3) * cellHeight+_y0 +5 , 1);
            
                GfxDrawText(nganh,_x0 + cellWidth*1.2  ,_y0 + (i+2) * cellHeight +  5, _x0 + cellWidth*col, (i+3) * cellHeight+_y0 +5 , 0);
                
                }
            }
            
            
    }
    
    procedure GfxHT(x,y) {
        SetOrigin(x1,y1+CellHeight*3);
        G = GfxHTabs("HTab1", "BANG GIA MINI, TOP CO PHIEU", 30, _x0, _y0-CellHeight+4, CellWidth*col, CellHeight, colorWhite, colorGrey40);
        chooselist = ParamList("Pick list","listnum,list default",1);
        listnum = Param("list Num",0,0,63,1);
    
        switch(G)
        {
    
            case 0:
                
                GfxSelectSolidBrush(colorDarkGreen);
                GfxRoundRect(_x0, _y0+10, _x0 + CellWidth*col+5, _y0+CellHeight*(row_num+11)+10,15,15);
                GfxSetTextColor(colorYellow);
                GfxLabel(" NGAN HANG",_x0, _y0+12, CellWidth*col,CellHeight,4);
                SymPicker( NGANHANG, x1, py1+5,CellHeight,CellWidth,col);
                GfxLabel(" CHUNG KHOAN",_x0, py1+row1*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CHUNGKHOAN, x1, py2+5,CellHeight,CellWidth,col);
                GfxLabel(" BAT DONG SAN",_x0, py2+row2*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BATDONGSAN, _x0,py3+5,CellHeight,CellWidth,col);
                GfxLabel(" KHU CONG NGHIEP",_x0, py3+row3*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BDSKCN, _x0, py4+5,CellHeight,CellWidth,col);
                GfxLabel(" XAY DUNG",_x0, py4+row4*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( XD_VLXD, _x0, py5+5,CellHeight,CellWidth,col);
                GfxLabel(" VLXD-HANG HOA",_x0, py5+row5*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( HANGHOA, _x0, py6+5,CellHeight,CellWidth,col);
                GfxLabel(" BAN LE-CONG NGHE",_x0, py6+row6*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( BLECONGNGHE, _x0, py7+5,CellHeight,CellWidth,col);
                GfxLabel(" THUC PHAM",_x0, py7+row7*CellHeight+7,CellWidth*col,CellHeight,4);
                SymPicker( THUCPHAMXK, _x0, py8+5,CellHeight,CellWidth,col);
                GfxLabel(" DET MAY THUY SAN",_x0, py8+row8*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( DMTS, _x0, py9+5,CellHeight,CellWidth,col);
                GfxLabel(" NANG LUONG-DAU KHI",_x0, py9+row9*CellHeight+7,  CellWidth*col,CellHeight,4);
                SymPicker( DIEN_DK, _x0, py10+5,CellHeight,CellWidth,col);
                GfxLabel(" CANG-VAN TAI",_x0, py10+row10*CellHeight+7, CellWidth*col,CellHeight,4);
                SymPicker( CANGVANTAI, _x0, py11+5,CellHeight,CellWidth,col);
                
            break;
            //////////
            case 1:   
            GfxSelectSolidBrush(colorDarkGreen);
            
            switch (chooselist)
            {
            case "listnum":
            TickerList = CategoryGetSymbols( categoryWatchlist, listnum );//chon watchlist number
            break;
            
            case "list default":
            TickerList    = NGANHANG + CHUNGKHOAN + BATDONGSAN + BDSKCN + XD_VLXD + HANGHOA + BLECONGNGHE + THUCPHAMXK + DMTS + DIEN_DK + CANGVANTAI; //chon watchlist
            break;
            }
            topn = Param("Top X",15,5,20,1); //Lay Top 15
            toplist(TickerList,topn,10," TOP 15 CP TOT NHAT TRONG 10 NGAY",_x0,_y0,CellWidth,CellHeight);
            GfxSelectSolidBrush(colorDarkGreen);
            toplist(TickerList,topn,20," TOP 15 CP TOT NHAT TRONG 20 NGAY",_x0,_y0+CellHeight*17,CellWidth,CellHeight);
            
        }
    }
    
    if( id == IDset AND event == 1 )  // If ToggleButton is clicked
    {
        if( ToggleButton ) StaticVarSet( "ToggleButton" + MyChartID, ToggleButton = 0, 0 );
        else  StaticVarSet( "ToggleButton" + MyChartID, ToggleButton = 1, 0 );
    }
    
    if( ToggleButton )
    {
        GuiSetText( "On", IDset );
        GfxHT(x1,y1+CellHeight*3);   
    }
    
    else
    {
    GuiSetText( "Off", IDset );
    GuiSetColors(IDset,IDset,1,colorWhite, colorRed, colorYellow, colorWhite, colorGreen, colorYellow, colorGold, colorDarkTeal, colorYellow );
    }
    
     
    Xuka, gia bao TY PHU and vinhnguyen like this.
  13. vinhnguyen

    vinhnguyen Member

    Tham gia ngày:
    25/8/21
    Bài viết:
    16
    Đã được thích:
    1
    Hay quá, cảm ơn bác.
    Nếu thêm chức năng click vào mã hiển thị trên bảng thì chart sẽ chuyển sang mã đó thì hay quá ạ :D
     
  14. 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ó chức năng đó mà bác
     
    vinhnguyen thích bài này.
  15. vinhnguyen

    vinhnguyen Member

    Tham gia ngày:
    25/8/21
    Bài viết:
    16
    Đã được thích:
    1
    Em dùng Ami 6.2 không chạy được bác ạ. Click vào nó báo lỗi rồi quay trở lại chart cũ chứ ko hiển thị đc chart CP mình click vào. :((
     
  16. A Hướng

    A Hướng Member

    Tham gia ngày:
    30/6/22
    Bài viết:
    18
    Đã được thích:
    9
    Giới tính:
    Nam
    Không phải lỗi đâu . trong chart của bạn có button sẵn . mình cũng bị nhưng bỏ button cũ đi là được
     

    Các file đính kèm:

  17. vinhnguyen

    vinhnguyen Member

    Tham gia ngày:
    25/8/21
    Bài viết:
    16
    Đã được thích:
    1
    Bác chỉnh background transparent nhìn hay quá nhỉ. Sửa code color chỗ nào thế ạ?
    Của em không lỗi bảng, bảng hiển thị bình thường nhưng ý em là khi click vào 1 mã CP trên bảng thì lỗi ko hiển thị đc chart của CP đó ạ.
     
  18. A Hướng

    A Hướng Member

    Tham gia ngày:
    30/6/22
    Bài viết:
    18
    Đã được thích:
    9
    Giới tính:
    Nam
    bạn chọn thêm cái lock interval và lock symbol link chỗ này . mình vẫn bấm bình thường . chạy cả 4 khung thời gian luôn
    upload_2023-5-9_15-14-10.png
     

    Các file đính kèm:

    vinhnguyen thích bài này.
  19. itc

    itc New Member

    Tham gia ngày:
    22/12/21
    Bài viết:
    1
    Đã được thích:
    0
    Giới tính:
    Nam
    Hay và hữu ích đó bác!

    Bổ sung thêm giá cp và Vol / Vol trung bình 20 phiên thì mình thêm đoạn code thế nào bác nhỉ.
     
  20. 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
    code này hơi phức tạp nên bác biết sửa code thì thêm vào mới được. Nhưng thêm vào thì bảng nó chiếm diện tích quá trong khi chart giá đã có phần giá cổ phiếu rồi nên mình ko đưa vào.
     
  21. gia bao TY PHU

    gia bao TY PHU New Member

    Tham gia ngày:
    2/3/23
    Bài viết:
    1
    Đã được thích:
    0
    Giới tính:
    Nam
    Mình bị báo lỗi GUIBOTTON giờ làm sao sửa bạn?
     

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

Chia sẻ trang này