Thư viện AFL
Thư viện AFL
Dừng lỗ theo dải Bollinger - Amibroker

Dừng lỗ theo dải Bollinger - Amibroker

Bband TSL

hoặc Giao dịch dừng lỗ theo dải bollinger dựa trên Dải bollinger một lần nữa là hệ thống giao dịch theo xu hướng cơ học dành cho các khung thời gian thấp hơn lấy cảm hứng từ mql4 (Metatrader). Phương pháp dừng lỗ theo sau được xây dựng hoàn toàn bằng cách sử dụng dải bollinger và hoàn toàn phù hợp với chiến lược dừng và đảo chiều.

chỉ định

  1. Đường màu xanh biểu thị điểm dừng kéo dài

  2. Đường màu đỏ biểu thị điểm dừng cho lệnh bán

  3. Mũi tên xanh biểu thị chiều dài

  4. Mũi tên đỏ biểu thị quần short

[

Biểu đồ tương lai DLF 10 phút

]

Tính năng

  1. Đường dừng lỗ kéo dài

  2. Đã thêm tín hiệu Mua/Bán

  3. Giá thị trường phóng to ở góc trên bên phải

  4. Bộ đếm thời gian còn lại để xác định phần cuối của nến

  5. Không sơn lại – Mũi tên sẽ chỉ hình thành sau khi nến kết thúc. Không có mũi tên nào biến mất sau khi tín hiệu được hình thành.

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

5 phút/10 phút, 15 phút. Đừng thử với các khung thời gian cao hơn vì việc tăng khung thời gian sẽ làm tăng rủi ro trong chiến lược giao dịch cụ thể này. Và hơn nữa, đây là một chiến lược chuyển tiếp chứ không phải là một chiến lược hoàn hảo trong ngày. Nhưng hoạt động khá tốt trong môi trường có nhiều biến động.

Dải Bollinger TSL – Mã AFL của Amibroker

Các bước cài đặt

1)Tải xuống Hệ thống giao dịch BBand TSL cho Amibroker

  1. Sao chép

Bollinger-Band-Trailing-Stop-Loss-Trading-System.afl

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

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

  1. Xem lại

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

và áp dụng/kéo và thả mã Hệ thống giao dịch BBand TSL 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 Hệ thống giao dịch BBand TSL với các tín hiệu Mua và Bán.

Khả năng tương thích

Amibroker 5.5 trở lên

Liên quan

Mã nguồn (.afl)
/* Done      by    Rajandran R */
/* Founder of www.marketcalls.in  */
/* CoFounder www.algomojo.com */
/* Code Completion Date : 15th Apr 2013 */


_SECTION_BEGIN("BBand TSL");

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);



SetTradeDelays(1,1,1,1);


_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

per=Optimize("Period",30, 5,50,1);

se = StdErr(C,per);

Bbup = BBandTop(C,per)+se;
Bbdown =BBandbot(C,per)-se;

MoneyRisk = 1.0;
iSignal = 1;
Line = 1;
Trend=0;
TrendUp=Null;
TrendDown=Null;
sig=Null;

g_ibuf_108 = 0;
g_ibuf_112 = 0;
g_ibuf_116 = 0;
g_ibuf_120 = 0;
iUp = Null;
iDown = Null;



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

      if (Close[i] > Bbup[i - 1]) Trend = 1;
      if (Close[i] < Bbdown[i - 1]) Trend = -1;
      if (Trend > 0 && Bbdown[i] < Bbdown[i - 1]) Bbdown[i] = Bbdown[i - 1];
      if (Trend < 0 && Bbup[i] > Bbup[i - 1]) Bbup[i] = Bbup[i - 1];
      TrendUp[i] = Bbup[i] + (MoneyRisk - 1.0) / 2.0 * (Bbup[i] - Bbdown[i]);
      TrendDown[i] = Bbdown[i] - (MoneyRisk - 1.0) / 2.0 * (Bbup[i] - Bbdown[i]);
      if (Trend > 0 && TrendDown[i] < TrendDown[i - 1]) TrendDown[i] = TrendDown[i - 1];
      if (Trend < 0 && TrendUp[i] > TrendUp[i - 1]) TrendUp[i] = TrendUp[i - 1];
      if (Trend > 0) {
         if (sig > 0 && g_ibuf_108[i - 1] == -1.0) {
            g_ibuf_116[i] = TrendDown[i];
            g_ibuf_108[i] = TrendDown[i];
            if (Line > 0) iUp[i] = TrendDown[i];
         } else {
            g_ibuf_108[i] = TrendDown[i];
            if (Line > 0) iUp[i] = TrendDown[i];
            g_ibuf_116[i] = -1;
         }
         if (sig == 2) g_ibuf_108[i] = 0;
         g_ibuf_120[i] = -1;
         g_ibuf_112[i] = -1.0;
         iDown[i] = Null;
      }
      if (Trend < 0) {
         if (sig > 0 && g_ibuf_112[i - 1] == -1.0) {
            g_ibuf_120[i] = TrendUp[i];
            g_ibuf_112[i] = TrendUp[i];
            if (Line > 0) iDown[i] = TrendUp[i];
         } else {
            g_ibuf_112[i] = TrendUp[i];
            if (Line > 0) iDown[i] = TrendUp[i];
            g_ibuf_120[i] = -1;
         }
         if (sig == 2) g_ibuf_112[i] = 0;
         g_ibuf_116[i] = -1;
         g_ibuf_108[i] = -1.0;
         iUp[i] = Null;
      }
   }




Plot(iUp,"iUP",colorGreen,ParamStyle("Style", styleDots | styleNoLine, maskDefault | styleDots | styleNoLine ));

Plot(iDown,"iDown",colorRed,ParamStyle("Style", styleDots | styleNoLine, maskDefault | styleDots | styleNoLine ));


Buy = iUp>0;
Sell= iDown>0;

Buy=ExRem(Buy,Sell);

Sell=ExRem(Sell,Buy);

Short=Sell;

Cover=Buy;

//Non Repainting  - Signals happens only after the close of the current
Buy = Ref(Buy,-1);
Sell = Ref(Sell,-1);
Short = Ref(Short,-1);
Cover = Ref(Cover,-1);


SetTradeDelays(0,0,0,0);


BuyPrice=ValueWhen(Buy,open);

SellPrice=ValueWhen(Sell,open);

ShortPrice=ValueWhen(Short,open);

CoverPrice=ValueWhen(Cover,open);




BuyPrice=ValueWhen(Buy,C);

SellPrice=ValueWhen(Sell,C);

ShortPrice=ValueWhen(Short,C);

CoverPrice=ValueWhen(Cover,C);





Title = EncodeColor(colorWhite)+ "BBand TSL AFL code from www.marketcalls.in" + " - " +  Name() + " - " + EncodeColor(colorRed)+ Interval(2) + EncodeColor(colorWhite) +

 "  - " + Date() +" - "+"\n" +EncodeColor(colorRed) +"Op-"+O+"  "+"Hi-"+H+"  "+"Lo-"+L+"  "+

"Cl-"+C+"  "+ "Vol= "+ WriteVal(V)+"\n"+ 

EncodeColor(colorLime)+

WriteIf (Buy , " GO LONG / Reverse sig at "+C+"  ","")+

WriteIf (Sell , " EXIT LONG / Reverse sig at "+C+"  ","")+"\n"+EncodeColor(colorYellow)+

WriteIf(Sell , "Total Profit/Loss for the Last Trade Rs."+(C-BuyPrice)+"","")+

WriteIf(Buy  , "Total Profit/Loss for the Last trade Rs."+(SellPrice-C)+"","");



PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);

PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);                      

PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45); 

PlotShapes(IIf(Short, shapeSquare, shapeNone),colorRed, 0, H, Offset=40);

PlotShapes(IIf(Short, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);                      

PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);



TrendSL=IIf(C>iUp,iUp,iDown);


for(i=BarCount-1;i>1;i--)

{

if(Buy[i] == 1)

{

entry = C[i];

sig = "BUY";

sl = TrendSL[i];

STP = C[i]-0.004*BuyPrice[i];

tar1 = entry + (entry * .0050);

tar2 = entry + (entry * .0078);

tar3 = entry + (entry * .01);

 

bars = i;

i = 0;

}

if(Sell[i] == 1)

{

sig = "SELL";

entry = C[i];

sl = TrendSL[i];

STP = C[i]+0.004*SellPrice[i];

tar1 = entry - (entry * .0050);

tar2 = entry - (entry * .0078);

tar3 = entry - (entry * .01);

 

 

bars = i;

i = 0;

}

}

Offset = 20;

Clr = IIf(sig == "BUY", colorLime, colorRed);

ssl = IIf(bars == BarCount-1, TrendSL[BarCount-1], Ref(TrendSL, -1));

sl = ssl[BarCount-1];

 



//Plot(LineArray(bars-Offset, tar1, BarCount, tar1,1), "", Clr, styleLine|styleDots, Null, Null, Offset);

//Plot(LineArray(bars-Offset, tar2, BarCount, tar2,1), "", Clr, styleLine|styleDots, Null, Null, Offset);

//Plot(LineArray(bars-Offset, tar3, BarCount, tar3,1), "", Clr, styleLine|styleDots, Null, Null, Offset);

//Plot(LineArray(bars-Offset, STP, BarCount, STP,1), "", colorYellow, styleLine|styleDots, Null, Null, Offset);




//Plot(LineArray(bars-Offset, sl, BarCount, sl,1), "", colorDarkRed, styleLine|styleLine, Null, Null, Offset);

//Plot(LineArray(bars-Offset, entry, BarCount, entry,1), "", colorGreen, styleLine|styleLine, Null, Null, Offset);



/* 

for (i=bars; i <BarCount;i++)

{

PlotText(""+sig+"@"+entry, BarCount-5,entry,Null,colorBlue);

PlotText("T1@"+tar1,BarCount-5,tar1,Null,Clr);PlotText("T2@"+tar2,BarCount-5,tar2,Null,Clr);PlotText ("T3@"+tar3,BarCount-5,tar3,Null,Clr);

 

}*/

 

messageboard = ParamToggle("Message Board","Show|Hide",1);

if (messageboard == 1 )

{

GfxSelectFont( "Tahoma", 13, 100 );

GfxSetBkMode( 1 );

GfxSetTextColor( colorWhite );

 

if ( sig =="BUY")

{

GfxSelectSolidBrush( colorBlue ); // this is the box background color

}

else

{

GfxSelectSolidBrush( colorRed ); // this is the box background color

}

pxHeight = Status( "pxchartheight" ) ;

xx = Status( "pxchartwidth");

Left = 1100;

width = 310;

x = 5;

x2 = 290;

 

y = pxHeight;

 

GfxSelectPen( colorGreen, 1); // broader color

GfxRoundRect( x, y - 98, x2, y , 7, 7 ) ;

GfxTextOut( ( "Marketcalls - BBand TSL"),13,y-100);

GfxTextOut( (" "),27,y-100);

GfxTextOut( ("Last " + sig + " Signal came " + (BarCount-bars-1) * Interval()/60 + " mins ago"), 13, y-80) ; // The text format location

GfxTextOut( ("" + WriteIf(sig =="BUY",sig + " @ ",sig + " @") + " : " + entry), 13, y-60);

GfxTextOut( ("Trailing SL : " + Ref(TrendSL,-1) + " (" + WriteVal(IIf(sig == "SELL",entry-sl,sl-entry), 2.2) + ")"), 13, y-40);

/*GfxTextOut( ("TGT:1 : " + tar1), 13, y -80);

GfxTextOut( ("TGT:2 : " + tar2), 13,y-60);

GfxTextOut( ("TGT:3 : " + tar3), 13,y-40);*/

GfxTextOut( ("Current P/L : " + WriteVal(IIf(sig == "BUY",(C-entry),(entry-C)),2.2)), 13, y-22);;









//Magfied Market Price

FS=Param("Font Size",30,11,100,1);

GfxSelectFont("Times New Roman", FS, 700, True ); 

GfxSetBkMode( colorWhite );  

GfxSetTextColor( ParamColor("Color",colorGreen) ); 

Hor=Param("Horizontal Position",940,1,1200,1);

Ver=Param("Vertical Position",12,1,830,1); 

GfxTextOut(""+C, Hor , Ver );

YC=TimeFrameGetPrice("C",inDaily,-1);

DD=Prec(C-YC,2);

xx=Prec((DD/YC)*100,2);

GfxSelectFont("Times New Roman", 11, 700, True ); 

GfxSetBkMode( colorBlack );  

GfxSetTextColor(ParamColor("Color",colorYellow) ); 

GfxTextOut(""+DD+"  ("+xx+"%)", Hor , Ver+45 );

 

}



_SECTION_END();



_SECTION_BEGIN("Time Left");

function GetSecondNum()

{

Time = Now( 4 );

Seconds = int( Time % 100 );

Minutes = int( Time / 100 % 100 );

Hours = int( Time / 10000 % 100 );

SecondNum = int( Hours * 60 * 60 + Minutes * 60 + Seconds );

return SecondNum;

}

RequestTimedRefresh( 1 );

TimeFrame = Interval();

SecNumber = GetSecondNum();

Newperiod = SecNumber % TimeFrame == 0;

SecsLeft = SecNumber - int( SecNumber / TimeFrame ) * TimeFrame;

SecsToGo = TimeFrame - SecsLeft;



x=Param("xposn",50,0,1000,1);

y=Param("yposn",380,0,1000,1);



GfxSelectSolidBrush( ColorRGB( 230, 230, 230 ) );

GfxSelectPen( ColorRGB( 230, 230, 230 ), 2 );

if ( NewPeriod )

{

GfxSelectSolidBrush( colorYellow );

GfxSelectPen( colorYellow, 2 );

Say( "New period" );

}

//GfxRoundRect( x+45, y+40, x-3, y-2, 0, 0 );

//GfxSetBkMode(1);

GfxSelectFont( "Arial", 14, 700, False );

GfxSetTextColor( colorRed );

GfxTextOut( "Time Left :"+SecsToGo+"", x, y );

_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.