AmiBroker là một trong những phần mềm phân tích kỹ thuật mạnh mẽ và được nhiều trader chuyên nghiệp sử dụng.
Các bước cài đặt
Tải AmiBroker từ website chính thức
Chạy file cài đặt và làm theo hướng dẫn
Nhập license key và kích hoạt phần mềm
Sau đây là code:
Namechart = "SignalBF Plot";
organName = NCTGetInfoTicker(Name(),"company");
_N(Title = "\n"+EncodeColor(colorSeaGreen)+ " - " + Namechart
+("\n")+
EncodeColor(colorGold)+ " - " + organName + " ("+Name()+") - " + "(" + Interval(2) +")" + EncodeColor(colorOrange) + " - " + Date() + "\n"+
//+("\n")+ EncodeColor(colorLime)+" -------------------------------------------------------------------" +("\n")+ // Xuong dong
EncodeColor(colorWhite) + " - Giá: "+ C +
EncodeColor(colorWhite) + " Mở cửa: " +EncodeColor(colorYellow) +O+
EncodeColor(colorGreen) + " Cao nhất: " +EncodeColor(colorYellow) +H+
EncodeColor(colorDarkRed) + " Thấp nhất: " +EncodeColor(colorYellow) +L+
EncodeColor(colorSeaGreen) + " - Đóng cửa: " +
WriteIf(Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)>=6,EncodeColor(colorViolet) +C+ " = "+Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)+" ("+Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)+"%)",
WriteIf(Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)<=-6,EncodeColor(colorTurquoise) +C+ " = "+Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)+" ("+Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)+"%)",
WriteIf(Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)>0 AND Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)<=6,EncodeColor(colorCustom9) +C+ " = "+Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)+" ("+Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)+"%)",
WriteIf(Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)<0 AND Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)>=-6,EncodeColor(colorRed) +C+ " = "+Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)+" ("+Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)+"%)",EncodeColor(colorYellow) +C+ " = "+Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)+" ("+Prec((Prec(C-TimeFrameGetPrice("C",inDaily,-1),2)/TimeFrameGetPrice("C",inDaily,-1))*100,2)+"%)"))))
+EncodeColor(colorWhite)+("\n - Khối lượng: ")+
WriteIf(V>MA(V,30)*1.5,EncodeColor(colorViolet)+ WriteVal(V,1.0)+ " = " + WriteVal(V/MA(V,30)*100,1.0) + "% (MA30 = "+ WriteVal(MA(V,30),1.0) + ")" ,
WriteIf(V<MA(V,30)*1.5 AND V>=MA(V,30)*1.1 ,EncodeColor(colorGreen)+ WriteVal(V,1.0)+ " = " + WriteVal(V/MA(V,30)*100,1.0) +"% (MA30 = "+ WriteVal(MA(V,30),1.0) + ")",
WriteIf(V<MA(V,30)*1.1 AND V>MA(V,30)*0.9 ,EncodeColor(colorYellow)+ WriteVal(V,1.0)+ " = " + WriteVal(V/MA(V,30)*100,1.0) + "% (MA30 = "+ WriteVal(MA(V,30),1.0) + ")",
WriteIf(V<=MA(V,30)*0.9 AND V>=MA(V,30)*0.5,EncodeColor(colorRed)+ WriteVal(V,1.0)+ " = " + WriteVal(V/MA(V,30)*100,1.0) + "% (MA30 = "+ WriteVal(MA(V,30),1.0) + ")" ,
WriteIf(V<MA(V,30)*0.5,EncodeColor(colorTurquoise)+ WriteVal(V,1.0)+ " = " + WriteVal(V/MA(V,30)*100,1.0) +"% (MA30 = "+ WriteVal(MA(V,30),1.0) + ")","")))))
+" "+
WriteIf(V>MA(V,30)*2,EncodeColor(colorViolet)+"- Siêu cao",WriteIf(V>MA(V,30)*1.3,EncodeColor(colorGreen)+"- Cao",
WriteIf(V>MA(V,30),EncodeColor(colorGreen)+"- Cao hơn trung bình",
WriteIf(V<MA(V,30)*0.7 AND V>MA(V,30)*0.3,EncodeColor(colorRed)+"- Thấp",WriteIf(V<MA(V,30)*0.3,EncodeColor(colorTurquoise)+"- Rất thấp",""))))))
;
url = "https://chart_api.finbox.vn/marks?symbol="+Name()+"&resolution=D";
function
tableID = "signalBF"+Name();
if(RE(60)){
json = NCTFetchDataFromURL(url);
NCTArrayToTable(tableID,json);
}
NCTTableToString(tableID);
dateNumvalPlot = DateNum();
//GfxTextOut(""+dateNumvalPlot,50,50);
//val = 20250117 - dateNumvalPlot;
//GfxTextOut(""+NumToStr(val,1.0),50,70);
function ConvertToFullDateStr(strDatenum)
{
// Đảm bảo strDatenum là chuỗi 7 chữ số
strDate = StrFormat("%07.0f", StrToNum(strDatenum));
// Tách năm (bỏ số 1 đầu tiên) và phần tháng + ngày
yearstr = StrLeft(strDate, 3); // Lấy 3 chữ số đầu: "125"
monthDay = StrRight(strDate, 4); // Lấy 4 chữ số cuối: "0204"
// Loại bỏ số 1 đầu tiên của năm và thêm "20" để thành năm đầy đủ
shortYear = StrRight(yearstr, 2); // Lấy "25" từ "125"
fullYear = "20" + shortYear; // Ghép thành "2025"
// Ghép lại thành yyyymmdd
result = fullYear + monthDay;
return result;
}
// Định nghĩa mảng để lưu dữ liệu
function DrawLabels()
{
// Khai báo các mảng để lưu thông tin từ bảng của bạn
//idArray = "20250401,20250314"; // Danh sách ID (ngày)
//labelArray = "△,B"; // Danh sách label
dateNumval = DateNum(); // Lấy ngày hiện tại của nến trong định dạng yyyymmdd - 19000000
dateNumStr = ConvertToFullDateStr(""+dateNumval);
// Duyệt qua từng nến
//for(i = 0; i < BarCount; i++)
//{
fvb = Status("firstvisiblebar");
lvb = Status("lastvisiblebar");
// Khóa theo biên an toàn
fvb = Max(0, fvb);
lvb = Min(BarCount - 1, lvb);
if (Status("action") == actionIndicator) // chỉ chạy khi là indicator (trên chart)
{
for (i = fvb; i <= lvb; i++)
{
currentDate[i] = dateNumval[i]; // Chuyển về định dạng yyyymmdd
//currentDateStr = NumToStr(
// Kiểm tra xem ngày của nến có khớp với id trong bảng không
sizetable = NCTTableSizeRows(tableID);
for(j = 1; j < sizetable; j++)
{
dateval = StrToNum(NCTTableGetText(tableID,j,0));
col_id = NCTTableGetIndexByColName(tableID,"id");
col_lable = NCTTableGetIndexByColName(tableID,"text");
datevalStr = NCTTableGetText(tableID,j,col_id);
labelArray = NCTTableGetText(tableID,j,col_lable);
if(datevalStr == ConvertToFullDateStr(""+dateNumval[i]))
{
// Vẽ label tại nến tương ứng
posY = IIf(labelArray == "SMALL SELL" OR labelArray == "BIG SELL", H[i]*1.01,L[i] * 0.99);
shape = IIf(labelArray == "SMALL SELL" OR labelArray == "BIG SELL",shapeDownArrow,shapeUpArrow);
colorPlot = IIf(labelArray == "SMALL SELL" OR labelArray == "BIG SELL", colorRed, IIf(labelArray == "SMALL BUY" OR labelArray == "BIG BUY",colorGreen,colorOrange));
//PlotShapes(shape,colorPlot,0,posY);
//PlotText(""+datevalStr,i,H[i],colorWhite,colorBlack);
textPLot = WriteIf(labelArray == "BIG SELL", "B.SELL",
WriteIf(labelArray == "SMALL SELL", "S.SELL",
WriteIf(labelArray == "SMALL BUY", "S.BUY",
WriteIf(labelArray == "BIG BUY", "B.BUY",
WriteIf(labelArray == "PULLBACK 10", "P.10",
WriteIf(labelArray == "PULLBACK", "P.20",""))))));
PlotTextSetFont(""+textPLot, "SVN-Gilroy Medium", 10, i, // Vị trí x (index của nến)
posY, // Vị trí y (dưới giá thấp của nến 1%)
colorWhite, // Màu chữ
colorPlot); // Màu nền
//PlotText(""+labelArray,
// i, // Vị trí x (index của nến)
// posY, // Vị trí y (dưới giá thấp của nến 1%)
// colorWhite, // Màu chữ
// colorPlot); // Màu nền
}
}
}
}
}
tableIDPlot = tableID + "Plot";
//NCTTableClone(tableIDPlot,tableID);
NCTTableSelectByColName(tableIDPlot,tableID,"id,text");
NCTTableSetHeader(tableIDPlot,"Date,Signal");
NCTTablePlot(tableIDPlot,"",20,100);
// Gọi hàm và vẽ biểu đồ
Plot(C, "Price", colorDefault, styleCandle);
DrawLabels();



