[Chia sẻ] Tính năng Chart in Chart: Xem chart Tuần, Tháng nổi ngay trong Chart Daily

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

Lượt xem : 3,588

  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
    Chào các bạn

    Tính năng này tương tự Picture in picture ở iOS tức là sẽ hiển thị 1 chart nhỏ khung thời gian khác nổi trong chart khung thời gian chính.

    - Có thể chỉnh khung thời gian mong muốn trong parameter, tuy nhiên khung thời gian này phải lớn hơn khung thời gian chính đang sử dụng.

    - Có thể di chuyển và chỉnh kích thước trong parameter

    upload_2023-8-8_22-37-13.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

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

    [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


    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ã:
    Plot(C," ", colorDefault,styleCandle);
    _SECTION_BEGIN("Chart in chart");
    pxwidth = Status( "pxwidth" );
    pxheight = Status( "pxheight" );
    pxb = Status( "pxchartbottom" );
    maunenboad=ParamColor("colorkhung", colorWhite);
    GfxSelectSolidBrush( maunenboad );
    function GetMonth( MonthNumber )
    {
             switch (MonthNumber) {
                case 2 :
                  result = "Feb";
                   break ;
                case 3 :
                  result = "Mar";
                  break ;
                case 4 :
                  result = "Apr";
                break ;
              case 5 :
                result = "May";
                break ;
              case 6 :
                result = "Jun";
                break ;
              case 7 :
                result = "Jul";
                break ;
              case 8 :
                result = "Aug";
                break ;
              case 9 :
                result = "Sep";
                break ;
              case 10 :
                result = "Oct";
                break ;
              case 11 :
                result = "Nov";
                break ;
              case 12 :
                result = "Dec";
          break ;
       }
       return result;
    }
    GfxSetBkMode(0); // transparent
    lDays =Param ( "MA200", 200 , 50 , 250 , 1 ) ;
    sDays =Param ( "MA50", 50 , 5 , 100 , 1 ) ;
    tDays= Param ( "MA20", 20 , 5 , 100 , 1 ) ;
    vDays =Param ( "Volume MA", 20 , 5 , 100 , 1 ) ;
    ChartMargin = 5 ;
    DateMargin = 20 ;
    DataMargin = 20 ;
    ScreenHeight = Status ( "pxheight" );
    SceernWidth = Status ( "pxwidth" );
    Bars =Param ( "Number Of Bars", 52 , 50 , 500 , 1 ) ;
    LastBar =  BarCount ;
    FirstBar =  LastBar - Bars;
    SymbolNum = 1;
    cellheight = 29/870*pxheight;
    GfxSelectSolidBrush( maunenboad );
    letrai1=Param ( "Le Trai", 700 , 0 , 2000 , 1 ) ;
    letren1=Param ( "le Tren", 25 , 0 , 2000 , 1 ) ;
    lephai1=Param ( "le phai", 650 , 0 , 2000 , 1 ) ;
    leduoi1=Param ( "le duoi", 650 , 0 , 2000 , 1 ) ;
    Letrai=letrai1/1880*pxwidth;
    letren=letren1/870*pxheight;
    lephai=lephai1/1880*pxwidth;
    leduoi=leduoi1/870*pxheight;
    letrenw=letren+430/870*pxheight;
    leduoiw=leduoi-410/870*pxheight;
    ChartHeight = (ScreenHeight-letren) -leduoi   ;
    Width = (SceernWidth-letrai)-lephai ;
    BarChartHeight=  (0.75 ) * ChartHeight - DataMargin;
    VolChartHeight = ChartHeight - BarChartHeight - DataMargin*2 ;
    NumberPriceLevels = BarChartHeight / 25 ;
    BarChartWidth=  Width - 60 ;
    BarWidth = (BarChartWidth - ChartMargin * 3 ) / Bars  ;
    for ( x = 0 ; x < 1 ; x++ )
    {
             for ( i = 0 ; i < 1 ; i++ )
            {
                     notDone = True;
                     sym = Name();
                      if (sym != "" )
                     {
                     x1 = Width * i +5+letrai ;
                     y1 = ChartHeight * x + 5+letren ;
                     x2 = Width * (i + 1 )+letrai;
                     y2 = ChartHeight * (x + 1 )-DateMargin+letren;
                      GfxSelectPen ( colorBlack );
                      GfxRectangle ( x1, y1, x2, y2 );
                     SymbolNum++;
                      SetForeign (sym);
    /////////////////////
    Timeframe  = ParamList("Time frame","5m,15m,Hourly,Weekly,Monthly",3);
    switch(Timeframe)
    {
        case "5m":
        TimeFrameSet(in5Minute);
        break;
        case "15m":
        TimeFrameSet(in15Minute);
        break;
        case "Hourly":
        TimeFrameSet(inHourly);
        break;
        case "Weekly":
        TimeFrameSet(inWeekly);
        break;
        case "Monthly":
        TimeFrameSet(inMonthly);
        break;
    }  
    op =O;
    hi =H;
    lo = L;
    clo = C;
    vold = V;
    //////////////////////////////////
                     EMAShort= EMA (clo,sDays);
                     EMAT= EMA (clo,tDays);
                     EMALong= EMA (clo,lDays);
                     EMAVol= MA (vold,vDays);
                    vol20=Foreign(sym,"Volume");              
                    mavol20=LastValue( MA(vold,20));
                     D = Day ();
                     M = Month ();
                     Y = Year ();
                    priceHigh = 0 ;
                     VolHigh = 0 ;
                     priceMin = 1000000 ;
                      for ( z = FirstBar; z < LastBar ; z++ )
                     {
                              Vol = vold[z];
                              BarH = hi[z];
                              BarL = lo[z];                        
                               if ( Vol > VolHigh )
                              {
                                       VolHigh = Vol;
                              }
                               if ( BarH > priceHigh )
                              {
                                       priceHigh = BarH;
                              }
                               if ( BarL < priceMin )
                              {
                                       priceMin = BarL;
                              }
                     }
                     LOpen = op[LastBar- 1];
                     LHigh = hi[LastBar- 1];
                     LLow = lo[LastBar- 1];
                     LClose = clo[LastBar- 1];
                     LClose2 = clo[LastBar- 2];
                     LVol = vold[LastBar- 1];
                     chg=(LClose-LClose2)*100/LClose2;
                        GfxSelectFont ( "Tahoma" , 11,600 );
                        GfxTextOut (Timeframe, x1+50/1880*pxwidth , y1+30);
                      GfxSelectFont ( "Tahoma" , 8 );
                      GfxSetTextColor (colorBlack);
                      GfxTextOut ("   O: " +LOpen + "   H: " +LHigh + "   L: " +LLow + "   C: " +LClose + "   Vol: " +LVol/ 1000000 + " M", x1+30/1880*pxwidth , y1+2 );           
                     VolRatio = VolChartHeight /  VolHigh ;
                     Range = priceHigh - priceMin;
                     Ratio = BarChartHeight / Range ;
                     PriceLineLevel = Range / NumberPriceLevels;
                     yHi=(((priceHigh - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                      GfxTextOut ( WriteVal (priceHigh, 1.2 ),   x1 + BarChartWidth, yHi -8 );
                      GfxSelectPen ( colorLightGrey );
                      GfxMoveTo ( x1 , yHi );
                      GfxLineTo ( x1 + BarChartWidth -5 , yHi );
                      for ( z = 0 ; z < NumberPriceLevels- 1   ; z++ )
                     {
                              PriceLevel = PriceLineLevel*z + priceMin;
                              yHi=(((PriceLevel - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                               GfxTextOut ( WriteVal (PriceLevel, 1.2 ),   x1 + BarChartWidth, yHi -8 );
                               GfxSelectPen ( colorLightGrey );
                               GfxMoveTo ( x1 , yHi );
                               GfxLineTo ( x1 + BarChartWidth -5 , yHi );
                     }
                     HighestLast = 0 ;
                     w = 0 ;
                     sEMAlast = EMAShort[FirstBar];
                     tEMAlast = EMAT[FirstBar];
                     lEMAlast = EMALong[FirstBar];
                     vEMAlast = EMAVol[FirstBar];
                     clast      = clo[FirstBar];////////////////////////////////////////////////////////////////////////////////xxxxxxx
                      for ( z = FirstBar; z < LastBar ; z++ )
                     {
                              BarH = hi[z];
                              BarL = lo[z];
                              BarO = op[z];
                              BarC = clo[z];
                              Vol = vold[z];
                              sEMA = EMAShort[z];
                              ttEMA = EMAT[z];
                              lEMA = EMALong[z];
                              vEMA = EMAVol[z];
                              BarDay = D[z];
                              BarMonth = M[z];
                              BarYear = Y[z];
                              yO = (((BarO - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
                              yC = (((BarC - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
                              yHi = (((BarH - priceMin )* Ratio)- BarChartHeight ) * -1 + y1 + DataMargin;
                              yLo = (((BarL - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin ;
                              ysEMAlast = (((sEMAlast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                              ysEMA = (((sEMA - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                               ytEMAlast = (((tEMAlast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                              ytEMA = (((ttEMA - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;                      
                              ylEMAlast = (((lEMAlast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                              ylEMA = (((lEMA - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                              vHi = y2 - (Vol * VolRatio)  ;
                              yvEMAlast = y2 - (vEMAlast  * VolRatio) ;
                              yvEMA = y2 - (vEMA * VolRatio)  ;
                              ///////////
                              yClast = (((clast - priceMin )* Ratio) - BarChartHeight) * -1 + y1 + DataMargin;
                              ////////////////
                              
                            
                               if ( BarO > BarC)
                              {
                                        GfxSelectSolidBrush ( colorRed );
                                        GfxSelectPen ( colorRed ,2);
                              }
                               else
                              {
                                        GfxSelectSolidBrush ( colorGreen );
                                        GfxSelectPen ( colorGreen ,2);
                              }                        
                                            
                                    // Plot bar
                                  
                              
                               GfxMoveTo ( BarWidth * w + x1 + ChartMargin , yHi );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, yLo );
                               GfxMoveTo ( BarWidth * w + x1 + ChartMargin -4   , yo );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin +4, yo );
                               GfxMoveTo ( BarWidth * w + x1 + ChartMargin +4   , yC );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin -4, yC );
                               GfxRectangle( BarWidth * w + x1 + ChartMargin -5   , yo,BarWidth * w + x1 + ChartMargin +5 , yC);  
                              
                              // Plot Volume
                               if ( BarO > BarC)
                              {
                                        GfxSelectPen ( colorRed ,2);
                              }
                               else
                              {
                                        GfxSelectPen ( colorGreen ,2);
                              }
                                  
                               GfxMoveTo ( BarWidth * w + x1 + ChartMargin , vHi-20 );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, y2-20 );
                                    // Plot Price and Volume EMAs
                               GfxSelectPen ( colorRed );
                               GfxMoveTo ( BarWidth * (w -1 ) + x1  + ChartMargin , ysEMAlast );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, ysEMA );
                               GfxSelectPen ( colorBlue );
                               GfxMoveTo ( BarWidth * (w -1 ) + x1  + ChartMargin , ytEMAlast );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, ytEMA );
                               GfxSelectPen ( colorViolet );
                               GfxMoveTo ( BarWidth * (w -1 ) + x1  + ChartMargin , ylEMAlast );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, ylEMA );
                               GfxSelectPen ( colorBlack );
                               GfxMoveTo ( BarWidth * (w -1 ) + x1  + ChartMargin , yvEMAlast-20 );
                               GfxLineTo ( BarWidth * w + x1 + ChartMargin, yvEMA-20 );                          
                              w++;                        
                              sEMAlast = sEMA ;
                              tEMAlast = ttEMA ;
                              lEMAlast = lEMA ;
                              vEMAlast = vEMA ;
                              clast=BarC;                          
                                      /////////////////////
                               GfxSetTextColor (colorBlack);
                               GfxSelectFont ( "Tahoma" , 7 );
                               GfxSelectPen ( colorLightGrey );
                                    // Draw vertical month separator and X-axis labels
                               if (BarDay== 1 & notDone )
                              {
                                        if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );                                
                                        else myLabel =GetMonth(BarMonth);
                                        GfxTextOut (myLabel,   BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3-25 );
                                        GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2  );
                                        GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin  );
                                       notDone = False;
                              }
                               if (BarDay== 2 & notDone )
                              {
                                        if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
                                        else myLabel =GetMonth(BarMonth);
                                        GfxTextOut (myLabel,   BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3-25 );
                                        GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2  );
                                        GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin  );
                                       notDone = False;
                              }
                               if (BarDay== 3 & notDone )
                              {
                                        if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
                                        else myLabel =GetMonth(BarMonth);
                                        GfxTextOut (myLabel,   BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3-25 );
                                        GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2  );
                                        GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin  );
                                       notDone = False;
                              }
                               if (BarDay== 4 & notDone )
                              {
                                        if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
                                        else myLabel =GetMonth(BarMonth);
                                        GfxTextOut (myLabel,   BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3-25 );
                                        GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2  );
                                        GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin  );
                                       notDone = False;
                              }
                               if (BarDay== 5 & notDone )
                              {
                                        if (BarMonth == 1 ) myLabel =WriteVal (BarYear, 1.0 );
                                        else myLabel =GetMonth(BarMonth);
                                        GfxTextOut (myLabel,   BarWidth * w + x1 + ChartMargin - 5 , y2 +DateMargin/3-25 );
                                        GfxMoveTo ( BarWidth * w + x1 + ChartMargin , y2 - VolChartHeight );
                                        GfxLineTo ( BarWidth * w + x1 + ChartMargin, y1 + DataMargin );
                                       notDone = False;
                              }
                               if (BarDay== 6 |BarDay== 7 |BarDay== 8 |BarDay== 9 |BarDay== 10 )
                              {
                                       notDone = True;
                              }                                                    
                     }
                      RestorePriceArrays ();
                     }
                     TimeFrameRestore();
            }
    }
    _SECTION_END();
    
     
    Chỉnh sửa cuối: 9/8/23
    dungcv, Hungtqhp, cuongctd and 3 others like this.
  2. Đang tải...

    Bài viết tương tự Diễn đàn Date
    [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
    [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. luisnguyen09

    luisnguyen09 Well-Known Member

    Tham gia ngày:
    13/8/22
    Bài viết:
    48
    Đã được thích:
    13
    Giới tính:
    Nam
    Thanks bác đã share, code này có di chuyển dc vị trí hiển thị lên chart ko bác?
     
    Chỉnh sửa cuối: 9/8/23
    luisnguyen09, via a mobile device, 9/8/23
    #2
  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
    được vào parameter chỉnh nhé bác
     
    luisnguyen09 thích bài này.
  5. minhputincic

    minhputincic Active Member

    Tham gia ngày:
    19/10/21
    Bài viết:
    29
    Đã được thích:
    11
    Giới tính:
    Nam
    rất tiện nhưng hình chart 1w hơi nhỏ
     
  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ó thể chỉnh kích thước trong parameter nhé bạn
     
    minhputincic thích bài này.
  7. minhputincic

    minhputincic Active Member

    Tham gia ngày:
    19/10/21
    Bài viết:
    29
    Đã được thích:
    11
    Giới tính:
    Nam
    tk bạn.
     
  8. anhtu187

    anhtu187 Member

    Tham gia ngày:
    28/8/23
    Bài viết:
    20
    Đã được thích:
    0
    Giới tính:
    Nam
    Cop rồi dán vào chỗ nào trên ami hả bác ơi
     
    anhtu187, via a mobile device, 7/9/23
    #7
  9. keepwalking707

    keepwalking707 New Member

    Tham gia ngày:
    3/5/23
    Bài viết:
    1
    Đã được thích:
    0
    cảm ơn bác đã chia sẻ, cho mình hỏi là khi di chuyển chart ngày thì sao chart tuần vẩn đứng yên ah?. Làm sao để khi di chuyển thì chart ngày và chart tuần cùng di chuyển được không ah?
     
  10. 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
    không được bạn code này khá phức tạp vẽ lên vậy là tốt rồi
     
  11. Phúc

    Phúc Member

    Tham gia ngày:
    17/7/21
    Bài viết:
    8
    Đã được thích:
    2
    Giới tính:
    Nam
    Bác share cho đoạn code đếm số phiên phối trên chart
    của index đi bác
     
    Phúc, via a mobile device, 29/10/23
    #10
  12. lehuy

    lehuy Member

    Tham gia ngày:
    18/7/21
    Bài viết:
    5
    Đã được thích:
    4
    Giới tính:
    Nam
    làm sao để sửa các chart nhỏ , thành bar như cái hình chart mẫu bác nhỉ
    Hiện tại thì nó đang để là candle khá to bác à
     

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

Chia sẻ trang này