Thư viện AFL
Thư viện AFL
Máy dò thanh PIN - Mã AFL của Amibroker

Máy dò thanh PIN - Mã AFL của Amibroker

Máy dò thanh pin – (Chỉ báo Amibroker)

hệ thống phát hiện mẫu thanh pin được lấy cảm hứng từ

EarnForx – Mã pin Bar Detecor mql4

. Pin Bar là một thanh có “đuôi”, “bấc” hoặc “bóng” dài trên hoặc dưới và “thân” hoặc “thân thật” nhỏ hơn nhiều, bạn có thể tìm thấy thanh pin trên bất kỳ biểu đồ nến đơn giản nào. Mẫu Pinbar (còn được gọi là “Pin-bar” hoặc “Pin bar”) được Martin Pring giới thiệu lần đầu tiên trong Mô hình Pring on Price của ông.

Đây là một chỉ báo dựa trên hành động giá thuần túy và trong chỉ báo này đánh dấu thanh pin tăng và thanh pin giảm trên biểu đồ và cũng có một lần quét sử dụng tính năng khám phá để tìm ra các mẫu thanh pin từ danh sách cổ phiếu.

Khung thời gian được đề xuất

Các khung thời gian cao hơn như khung thời gian Hàng giờ, 4 giờ, Hàng ngày, Hàng tuần

Sự hình thành thanh pin đảo chiều tăng giá

Trong thiết lập đảo chiều thanh pin bar tăng giá, đuôi của thanh pin hướng xuống dưới vì nó thể hiện sự từ chối các mức giá thấp hơn hoặc mức hỗ trợ. Thiết lập này rất thường xuyên dẫn đến tăng giá.

Sự hình thành thanh pin đảo chiều giảm giá

Trong thiết lập đảo chiều thanh pin bar giảm giá, đuôi của thanh pin hướng lên trên vì nó thể hiện sự từ chối các mức giá cao hơn hoặc mức kháng cự. Thiết lập này rất thường dẫn đến giảm giá.

Mô hình Pin Bar trong Biểu đồ Vàng Hàng ngày

Thông số đầu vào cho Pin Bar

MaxMũiCơ ThểKích Thước

(mặc định = 0,33) — tỷ lệ thân/chiều dài tối đa được phép của thanh Mũi.

MũiCơ ThểVị Trí

(mặc định = 0,4) — Thân mũi phải ở vị trí ở phần trên cùng (phía dưới đối với mô hình giảm giá) của thanh Mũi.

Mắt TráiNgược LạiHướng

(mặc định = true) — cho chỉ báo biết rằng thanh Mắt trái sẽ giảm đối với Pinbar tăng giá và tăng giá đối với Pinbar giảm giá.

MũiCùngHướng

(mặc định = true) - cho chỉ báo biết rằng thanh Mũi phải cùng hướng với chính mẫu đó.

MũiCơ thểBên trongTráiMắtCơ thể

(mặc định = false) — cho biết chỉ báo rằng phần Thân Mũi phải nằm trong phần Thân Mắt Trái.

Mắt tráiMinCơ thểKích thước

(mặc định = 0,1) — kích thước tối thiểu của thân Mắt trái so với chiều dài thanh.

MũiNhô ra

(mặc định = 0,5) — độ nhô tối thiểu của thanh Mũi so với chiều dài thanh.

MũiCơ ThểTráiMắtCơ Thể

(mặc định = 1) — kích thước tối đa của thân Mũi so với thân Mắt trái.

Chiều dài mũiSang tráiMắtChiều dài

(mặc định = 0) — chiều dài Mũi tối thiểu so với chiều dài Mắt Trái.

Mắt TráiSâu

(mặc định = 0,2) — độ sâu tối thiểu của Mắt trái so với chiều dài của nó. Độ sâu là chiều dài của phần thanh phía sau Mũi.

Lưu ý: Chiến lược này không phát hiện ra một thanh pin hoàn hảo tuy nhiên cần có một số can thiệp thủ công để phát hiện chính xác các mẫu thanh pin

Các bước để cài đặt mã Afl của máy dò thanh pin

  1. Sao chép

Trình phát hiện thanh PIN.afl

tập tin vào thư mục \program files\amibroker\formula\basic

2)Mở Amibroker và mở biểu đồ trống mới

  1. Xem

Biểu đồ->Biểu đồ cơ bản

và áp dụng/kéo và thả mã phát hiện Pin Bar vào biểu đồ trống

  1. Bingo bạn đã hoàn tất. Bây giờ bạn sẽ có thể thấy chỉ báo Pin Bar Detector với các tín hiệu Mua và Bán.

Tài liệu tham khảo

Hệ thống giao dịch Pin Bar

– Kiếm tiền

Đặc điểm hình thành Pin Bar

– Học cách giao dịch trên thị trường

Liên quan

Mã nguồn (.afl)
/* Done      by    Rajandran R */
/* Author of www.marketcalls.in  */
/* Code Completion Date : 14th July 2014 */


_SECTION_BEGIN("Pin Bar AFL");

SetBarsRequired(100000,0);

GraphXSpace = 15;

SetChartOptions(0,chartShowArrows|chartShowDates);

SetChartBkColor(ParamColor("bkcolor",ColorRGB(0,0, 0)));

GfxSetBkMode(0); 

GfxSetOverlayMode(1);

SetBarFillColor(IIf(C>O,ParamColor("Candle UP Color", colorGreen),IIf(C<=O,ParamColor("Candle Down Color", colorRed),colorLightGrey)));

Plot(C,"\nPrice",IIf(C>O,ParamColor("Wick UP Color", colorDarkGreen),IIf(C<=O,ParamColor("Wick Down Color", colorDarkRed),colorLightGrey)),64,0,0,0,0);

dec = (Param("Decimals",2,0,7,1)/10)+1;
Title = EncodeColor(55)+  Title = Name() + "     " + EncodeColor(32) + Date() +
"      " + EncodeColor(5) + "{{INTERVAL}}  " +
	EncodeColor(55)+ "     Open = "+ EncodeColor(52)+ WriteVal(O,dec) + 
	EncodeColor(55)+ "     High = "+ EncodeColor(5) + WriteVal(H,dec) +
	EncodeColor(55)+ "      Low = "+ EncodeColor(32)+ WriteVal(L,dec) + 
	EncodeColor(55)+ "    Close = "+ EncodeColor(52)+ WriteVal(C,dec)+
	EncodeColor(55)+ "    Volume = "+ EncodeColor(52)+ WriteVal(V,1);


MaxNoseBodySize = 0.33; // Max. Body / Candle length ratio of the Nose Bar
NoseBodyPosition = 0.4; // Body position in Nose Bar (e.g. top/bottom 40%)
LeftEyeOppositeDirection = True; // true = Direction of Left Eye Bar should be opposite to pattern (bearish bar for bullish Pinbar pattern and vice versa)
NoseSameDirection = False; // true = Direction of Nose Bar should be the same as of pattern (bullish bar for bullish Pinbar pattern and vice versa)
NoseBodyInsideLeftEyeBody = False; // true = Nose Body should be contained inside Left Eye Body
LeftEyeMinBodySize = 0.1; // Min. Body / Candle length ratio of the Left Eye Bar
NoseProtruding = 0.5; // Minmum protrusion of Nose Bar compared to Nose Bar length
NoseBodyToLeftEyeBody = 1; // Maximum relative size of the Nose Bar Body to Left Eye Bar Body
NoseLengthToLeftEyeLength = 0; // Minimum relative size of the Nose Bar Length to Left Eye Bar Length
LeftEyeDepth = 0.2; // Minimum relative depth of the Left Eye to its length; depth is difference with Nose's back

up=down =0;
point = 0.1;
blpin=brpin=False;

for(i=1;i<BarCount;i++)
{

      NoseLength = High[i] - Low[i];
      if (NoseLength == 0) NoseLength = Point;
      LeftEyeLength = High[i - 1] - Low[i - 1];
      if (LeftEyeLength == 0) LeftEyeLength = Point;
      NoseBody = abs(Open[i] - Close[i]);
      if (NoseBody == 0) NoseBody = point;
      LeftEyeBody = abs(Open[i - 1] - Close[i - 1]);
      if (LeftEyeBody == 0) LeftEyeBody = point;

      // Bearish Pinbar
      if (High[i] - High[i - 1] >= NoseLength * NoseProtruding) // Nose protrusion
      {
         if (NoseBody / NoseLength <= MaxNoseBodySize) // Nose body to candle length ratio
         {
            if (1 - (High[i] - Max(Open[i], Close[i])) / NoseLength < NoseBodyPosition) // Nose body position in bottom part of the bar
            {
               if ((!LeftEyeOppositeDirection) || (Close[i - 1] > Open[i - 1])) // Left Eye bullish if required
               {
                  if ((!NoseSameDirection) || (Close[i] < Open[i])) // Nose bearish if required
                  {
                     if (LeftEyeBody / LeftEyeLength  >= LeftEyeMinBodySize) // Left eye body to candle length ratio
                     {
                        if ((Max(Open[i], Close[i]) <= High[i - 1]) && (Min(Open[i], Close[i]) >= Low[i - 1])) // Nose body inside Left Eye bar
                        {
                           if (NoseBody / LeftEyeBody <= NoseBodyToLeftEyeBody) // Nose body to Left Eye body ratio
                           {
                              if (NoseLength / LeftEyeLength >= NoseLengthToLeftEyeLength) // Nose length to Left Eye length ratio
                              {
                                 if (Low[i] - Low[i - 1] >= LeftEyeLength * LeftEyeDepth)  // Left Eye low is low enough
                                 {
                                    if ((!NoseBodyInsideLeftEyeBody) || ((Max(Open[i], Close[i]) <= Max(Open[i - 1], Close[i - 1])) && (Min(Open[i], Close[i]) >= Min(Open[i - 1], Close[i - 1])))) // Nose body inside Left Eye body if required
                                    {
                                       Down[i] = High[i] + 5 * Point + NoseLength / 5;
                                       brpin[i]=True;
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
      // Bullish Pinbar
      if (Low[i - 1] - Low[i] >= NoseLength * NoseProtruding) // Nose protrusion
      {
         if (NoseBody / NoseLength <= MaxNoseBodySize) // Nose body to candle length ratio
         {
            if (1 - (Min(Open[i], Close[i]) - Low[i]) / NoseLength < NoseBodyPosition) // Nose body position in top part of the bar
            {
               if ((!LeftEyeOppositeDirection) || (Close[i - 1] < Open[i - 1])) // Left Eye bearish if required
               {
                  if ((!NoseSameDirection) || (Close[i] > Open[i])) // Nose bullish if required
                  {
                     if (LeftEyeBody / LeftEyeLength >= LeftEyeMinBodySize) // Left eye body to candle length ratio
                     {
                        if ((Max(Open[i], Close[i]) <= High[i - 1]) && (Min(Open[i], Close[i]) >= Low[i - 1])) // Nose body inside Left Eye bar
                        {
                           if (NoseBody / LeftEyeBody <= NoseBodyToLeftEyeBody) // Nose body to Left Eye body ratio
                           {
                              if (NoseLength / LeftEyeLength >= NoseLengthToLeftEyeLength) // Nose length to Left Eye length ratio
                              {
                                 if (High[i - 1] - High[i] >= LeftEyeLength * LeftEyeDepth) // Left Eye high is high enough
                                 {
                                    if ((!NoseBodyInsideLeftEyeBody) || ((Max(Open[i], Close[i]) <= Max(Open[i - 1], Close[i - 1])) && (Min(Open[i], Close[i]) >= Min(Open[i - 1], Close[i - 1])))) // Nose body inside Left Eye body if required
                                    {
                                       Up[i] = Low[i] - 5 * Point - NoseLength / 5;
                                       blpin[i]=True;
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

for( i = 1; i < BarCount; i++ )
{
if(blpin[i] ) PlotText( "bull.pin " , i, L[ i ]-2.5, colorLime );
if(brpin[i] ) PlotText( " bear pin" , i, H[ i ]+2.5, colorOrange );
}
PlotShapes(shapeHollowSmallSquare*brpin,4,0,H ,5);
PlotShapes(shapeHollowSmallSquare*blpin,5,0,L ,-5);

Filter=brpin OR blpin;
AddColumn(brpin,"Bearish Pin",1.2);
AddColumn(blpin,"Bullish Pin",1.2);

_SECTION_END();

Hướng dẫn: Copy đoạn mã trên, mở AmiBroker Formula Editor, dán vào và lưu lại với tên tương ứng.